Approvals
The 0.5.0 Approvals page. Time left, approve, reject with a reason, edit a draft, and the approval history.
Since 0.5.0. In 0.4.0, gated messages were approved from the Inbox.
What it is
Approvals (#/approvals, keys g a) lists every gate waiting on a person, with time left before it times out, and the history of decided gates.
Why it exists
An approval is the one moment a routine waits on a person before acting outside. It deserves its own list, ordered by urgency, with the draft visible and editable.
How it works
| Control | Writes |
|---|---|
| Approve | decisions/<gateId> {decision: "approve", at, by} |
| Reject with a reason | decisions/<gateId> with decision reject and the reason (field shape set by the 0.5.0 build) |
| Edit draft, then approve | decisions/<gateId> {decision: "approve", draft, at, by} |
A gate may carry an optional draft {subject, body} and recipients [{role}]. Roles only: the write contract refuses a recipient entry with an address or any key other than role. A gate without a draft hides Edit draft and the recipients line. The sending step uses the decision’s draft when present and the gate’s own draft otherwise. Gates under 6 hours from timing out also appear in the notifications feed.
Worked example
Hiring Signals’ intro note to Northwind Goods waits with 41 hours left. The person edits the body to mention the team size and approves. The decision stores the edited draft, and the sending step uses it instead of the gate’s own draft.
Common pitfalls
- Looking for addresses. Packs and drafts carry roles only. Recipient settings default to empty lists.
- Expecting the page to send. It records a decision in
decisions/<gateId>. Sending is the gate’s sending step.