Skip to content

Commit af35cd5

Browse files
committed
docs(adr-0043,skill-automation): open-time notification is approval.requested; one-tap links stay remind()-only
ADR-0043's Issue bullet said open-time notification remained the flow author's notify node. Since openNodeRequest publishes approval.requested to each concrete approver on the slate the request opens on, that sentence is false. The Status line carries the dated amendment marker and the parenthesis carries the correction; the token table and every decision are unchanged. The automation skill's best practice 5 keeps the decision half (notify the submitter of the outcome from the approve/reject edges), drops "the node does not send", and names the double-notify trap: the opening already tells each resolved approver, so no notify node for the opening. The reference file sits at its token ceiling; the duplicated approval_revise comment (it restated the "no config, no signal" sentence above it) pays for the new text. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RdnZdPZH9ByduzPRWuH9tN
1 parent 3d0eeef commit af35cd5

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

‎docs/adr/0043-actionable-approval-links.md‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0043: Actionable approval links — single-use tokens with a session-less confirm page
22

3-
**Status**: Accepted — implemented (proposed 2026-06-12 · calibrated 2026-06-12)
3+
**Status**: Accepted — implemented (proposed 2026-06-12 · calibrated 2026-06-12) · **Amended** (2026-10-10, #22631 — open-time notification is the approvals service's own `approval.requested` topic, not a flow-authored `notify` node; see the Issue bullet under Mechanics. One-tap links stay `remind()`-only; the token table and every decision below are unchanged)
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0042](./0042-approval-sla-escalation.md) (reserved system actors, audit-first discipline), thread interactions (#1740), [ADR-0012/0030](./0030-notification-platform-convergence.md) (messaging + outbox)
66
**Closes**: [#1743](https://github.com/objectstack-ai/objectstack/issues/1743)
@@ -37,9 +37,11 @@ GET-executes design gets requests approved by robots.
3737
- **Issue** (`issueActionTokens`): 256-bit random raw tokens, returned
3838
once, hashes stored. Wired into `remind()` — each pending approver with
3939
a concrete identity (not `role:*` literals) gets their **own**
40-
notification carrying their own approve/reject links. (Open-time
41-
notification remains the flow author's `notify` node; templates there
42-
can adopt the same links later.)
40+
notification carrying their own approve/reject links. (Amended
41+
2026-10-10, #22631: open-time notification is the approvals service's
42+
`approval.requested` topic, published by `openNodeRequest` to each
43+
concrete approver on the slate the request opens on — PR #22625; it
44+
carries no links, and one-tap links remain `remind()`-only.)
4345
- **Confirm page** (`GET /api/v1/approvals/act?token=…`): session-less
4446
minimal HTML rendered by the plugin on the host Hono app — request
4547
summary (flow label, record title, action) + a POST form. Invalid /

‎skills/objectstack-automation/references/state-machines-and-approvals.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,6 @@ Three pieces author it:
180180
id: 'manager_review', type: 'approval', label: 'Manager Review',
181181
config: { approvers: [{ type: 'position', value: 'manager' }], lockRecord: true, maxRevisions: 2 },
182182
},
183-
// No config and no `waitEventConfig`: the window ends on the submitter's
184-
// explicit resubmit, not on a signal or a timer.
185183
{ id: 'wait_revision', type: 'approval_revise', label: 'Awaiting Revision' },
186184
// …among the approval's edges…
187185
{ id: 'rev', source: 'manager_review', target: 'wait_revision', label: 'revise' },
@@ -379,5 +377,7 @@ These are wired on the **graph**, not in node config:
379377
edits while pending — otherwise approvers chase a moving target.
380378
4. **Model rejection as a visible branch** — a back-edge to revise, or an `end`
381379
node to terminate. The path is on the diagram, not hidden in config.
382-
5. **Notify from downstream nodes** wired to the `approve` / `reject` edges
383-
rather than expecting the node to send mail itself.
380+
5. **Notify the submitter from downstream nodes** wired to the `approve` /
381+
`reject` edges. Opening already tells each resolved approver
382+
(`approval.requested`); ⛔ no `notify` node for the opening: it tells
383+
them twice.

0 commit comments

Comments
 (0)