Repository navigation
approvals: three texts still say opening a request notifies nobody, after approval.requested (#22607): ADR-0043's v1 note, the automation skill's approval advice, and the QA checklist's known gap #22631
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Oct 10, 2026 objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsOne more location in the same file, from #22616 (PR #22633) ·
domain:servicesseat 1 (#6021) ·session_013j5gkUCpqQiti4GgPqqmnt· 2026-10-10T07:30Zdocs/qa/platform-checklist/areas/approvals.json, the itemapprovals.email-action-token-door, reads token rows through the data API as the administrator, as an oracle. It also writesexpires_atthrough the data API for its expiry leg.- Once PR fix(plugin-approvals)!: sys_approval_token, the action-link tokens, is no longer exposed through the automatic API (#22616) #22633 lands, the automatic API serves
sys_approval_tokento no caller:404 OBJECT_API_DISABLED, as the approvals door already serves the rows to nobody. A later checklist run would then read the404as a defect. - Two of its steps already contradicted the door before that PR. The digest has been withheld since [security] The compliance ledger stores a JWT signing-key row's key material in its create snapshot, and an admin is served it through the ledger's by-id door while the key object itself declares no API door #21197, and
updatewas never in the object's whitelist. - Remedy, from plugin-approvals:
sys_approval_token(the action-link tokens) is served on the generic data door with no read narrowing, while the approvals door serves its rows to nobody #22616's dev (6095111901, open question 1): move the item's oracles to the act door's outcome pages, the request's action history on the approvals door, and the internal-hash integration test. - This rides this card's non-governed half, with the
knownGapsandsourcenotes above, after PR fix(plugin-approvals)!: sys_approval_token, the action-link tokens, is no longer exposed through the automatic API (#22616) #22633 merges.
Generated by Claude Code
- Once PR fix(plugin-approvals)!: sys_approval_token, the action-link tokens, is no longer exposed through the automatic API (#22616) #22633 lands, the automatic API serves
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsTriage: first grade,
documentation·priority:p2·domain:skills·area:workflow·pm:queue. Two PRs: the Tier H texts, then the checklistTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-10T07:57Z. ⛔ Not a claim, ⛔ not a dispatch.- Lane: items 1 and 2 are governed (
docs/adr/**,skills/**), sodomain:skills, one docs-only PR with the maintainer's approval. Item 3 and the token-door note (6095140961) aredocs/qa/**; the claimant carries them as a second PR, declared under the cross-domain exception path. - Why p2: the skill text now leads an agent to add the very
notifynode that the changeset tells authors to remove. That is the double-notify trap, in the text AI authors read. - Direction:
- ADR-0043 gets a one-line status amendment: open-time notification is
approval.requested, and one-tap links stayremind()-only. ⛔ The token decision is unchanged. - The skill keeps "notify the submitter on the outcome edges" and drops "the node does not send".
- The checklist removes the
knownGapsentry and namesapproval.requestedin thesourcenote. The token-door item follows PR fix(plugin-approvals)!: sys_approval_token, the action-link tokens, is no longer exposed through the automatic API (#22616) #22633's outcome. - ⛔ No code change.
- ADR-0043 gets a one-line status amendment: open-time notification is
- Lane: items 1 and 2 are governed (
- addedarea:workflowApprovals and automation — the work that runs without a person driving itApprovals and automation — the work that runs without a person driving itpriority:p2Medium: important, M3Medium: important, M3and removed
on Oct 10, 2026 objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01RdnZdPZH9ByduzPRWuH9tN
Account:marchtian(the seat's linked user asGET /useranswers it; always the card's assignee)
Branch:claude/issue-22631-approval-requested-texts
Worktree:objectstack-issue-22631
Domain:domain:skills
Seat:domain:skills#1
File surface: two PRs from one dev, under the cross-domain exception path triage named in6095381775. PR 1 (Tier H, the branch above):docs/adr/0043-actionable-approval-links.md(the open-time sentence at:40–:42) andskills/objectstack-automation/references/state-machines-and-approvals.md(item 5 at:382–:383). PR 2 (not governed; branchclaude/issue-22631-qa-checklist-approval-requested, worktreeobjectstack-issue-22631-qa):docs/qa/platform-checklist/areas/approvals.jsononly — theknownGapsentry (:341), thesourcenote (:394), and theapprovals.email-action-token-dooritem (:1115ff.) re-pointed after PR #22633 (merged as86da194919), per6095140961.docs/qa/**isdomain:devx's file surface, declared here under that path. No code, no other file (stop on breach; explain in the report)
Container & model:M, text,mode:subagent,model: CONTRACT_REVIEW_TIER—dispatch-gates --tier --repo objectstack-ai/objectstackat86da194919prints "Model tier — MANDATORY: … skills/objectstack-automation/references/state-machines-and-approvals.md ⇢ 'skills/**' — clause ① (2026-09-10 ruling, verbatim 「必须 fable的还包括对外发布的skills」)"
Clause-②: no
Responsibility:n/a — not a defect card(stale text after a landed change)
Thread-read: 6095381775
Serial constraints cleared:none— no open PR touchesdocs/adr/**,skills/**ordocs/qa/**(14 open PRs' file lists read at 2026-10-10T08:27Z); #22585 (the same skill'sSKILL.md,pm:blockedon #19939) is a different file; nopm:dispatchedcard in this lane
Landing: PR 1 is Tier H (docs/adr/**,skills/**) — draft with the four-piece set until an authorized APPROVED review; PR 2 lands through the queue after this seat's review. File surface read atorigin/main86da194919; claim written at 2026-10-10T08:45Z.objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 22631,
"status": "done",
"branch": "claude/issue-22631-approval-requested-texts",
"pr": "#22652",
"session": "session_01RdnZdPZH9ByduzPRWuH9tN — this run's harness-stamped id (subagent of the PM loop; the claim 6095805515 names it)",
"premise_still_valid": true,
"summary": "Both PRs are open as drafts off origin/main 3d0eeef (= 86da194 plus five later commits, none touching the three files; the three quoted fragments were present with positive controls). PR 1 (#22652, Tier H, this branch): ADR-0043's Status line carries the dated amendment marker in the corpus form (Amended 2026-10-10, #22631) and the Issue bullet's parenthesis becomes the dated correction: open-time notification is the approvals service's own approval.requested topic, published by openNodeRequest to each concrete approver on the slate the request opens on (PR #22625), carrying no links; one-tap links remain remind()-only; the token table and every decision are untouched, no new ADR number. The automation skill's best practice 5 keeps the decision half (notify the submitter from the approve/reject edges), drops 'rather than expecting the node to send mail itself', and names the double-notify trap (the opening already tells each resolved approver via approval.requested, so no notify node for the opening). The file sat exactly at its token ceiling (5569/5569), so the new text was paid for by deleting the duplicated approval_revise code comment at :183-:184, which restated :167; net lines 0, tokens -7. The evals assert nothing about the dropped half (0 hits, controls 4 and 13). PR 2 (#22656, not governed, branch claude/issue-22631-qa-checklist-approval-requested, #22656): approvals.json only, 17 anchored edits. approvals.notification-deep-link revision 4 -> 5: the knownGaps entry removed (the key dropped, as six of the file's 18 items do), the source note names approval.requested beside the nine sibling topics, step 2 and the fixture note no longer say opening emits nothing, revision-4 history row kept, revision-5 row added. approvals.email-action-token-door revision 1 -> 2: 6095111901's remedy held in full (sys-approval-token.object.ts :115-:116 declares apiEnabled: false + apiMethods: []; PR #22633's changeset says every data-API verb answers 404 OBJECT_API_DISABLED to every caller), so the token-row oracles move to the act door's outcome pages, GET /:id/actions and the two pinned integration tests (internal-hash, generic-door); the mint clause is scored by oracle test. The expiry leg has no surviving door: ttlMs is an option of issueActionTokens only (remind() passes none), the service clock is a constructor option approvals-plugin.ts never threads, the plugin reads no OS_TEST_* or process.env, and the data-API backdate is gone — recorded as a knownGaps entry with that exact reason, scored from approval-service.test.ts 'redeem: dead tokens' (ttlMs: 1 under the fake clock pins reason expired; RESULT_COPY.expired is the page). The token-capture seam survives (sys_notification still apiMethods get/list). One standing red outside my surface: pnpm check:platform-checklist is exit 1 on origin/main itself (7 problems in access-security.json and attachments-storage.json, 0 in approvals.json; the same 7 on a tree without my edit), traced to b389e43 (#22515) and ce3d0ad (#22513) — Lint & Repo Gates will stay red on PR 2 until those two area files are repaired; reported below, not touched.",
"tests": "PR 1 worktree (objectstack-issue-22631, final commit af35cd5, gates run on that committed tree): node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) derived 30 commands; all 30 ran in the foreground, each exit captured by redirect-then-$?; --ran: '30 derived, 30 run, 0 NOT-MEASURED, 0 UNRUN'. All 30 exit 0, among them check-adr-links (+self-test), check-adr-symbol-anchors (+self-test), check:adr-anchors, check-skills-token-ratchet (+self-test; prints 'state-machines-and-approvals.md is 5562 tokens (ceiling 5569; headroom 7)'), check:skill-refs, check:skill-compatibility, check:skill-frame-sync, check:skill-identifier-liveness, check:role-word, check:corpus-claim-drift, check:pm-prior-rulings, check:pm-governed-merges, check:doc-authoring, check:nul-bytes, check-doc-route-spelling --advisory (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, check-ci-filter-parity, check:agent-test-spelling, check:cross-package-test-inputs, check:driver-memory-census, check:gitlink-declared, check:refd-timer-probe, check:watch-hint-literal. check:doc-formula-expressions first answered exit 3 (PREREQUISITE NOT MET, no dist for @objectstack/formula and @objectstack/lint); after 'turbo run build --filter=@objectstack/formula --filter=@objectstack/lint' through os-verify-lock.sh (VERDICT command-exit 0, held 1s, 4/4 cached) it measured exit 0 ('22 record-scoped formula example(s) across 471 files / 1387 TS blocks judged clean'). PR 2 worktree (objectstack-issue-22631-qa, final commit 3f630d4): dispatch-gates derived 13 commands; all 13 ran; --ran: '13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN'. 12 exit 0 (check-ci-filter-parity, check-closing-keyword-parity +self-test, check-comment-mask-corpus, check:doc-formula-expressions after the same prerequisite build, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:refd-timer-probe, check:watch-hint-literal); 1 exit 1: pnpm check:platform-checklist — 'check-platform-checklist: 7 problem(s)', 5 x areas/access-security.json ABSENT SYMBOL (protocol.ts#anonymousFormIntakeOrgScopeRefusal, #anonymousFormIntakeReopenRefusal, #envWideRawViewRows) and 2 x areas/attachments-storage.json (ABSENT SYMBOL attachment-access-hooks.ts#canEdit; SYMBOL ANCHORS LOST 27 vs floor 28); approvals.json named 0 times; the identical 7 problems came back on the PR 1 worktree at af35cd5 whose approvals.json is byte-identical to 3d0eeef, so the red pre-exists this diff. PM-named extras on PR 2: node scripts/check-doc-route-spelling.mjs --advisory exit 0; pnpm check:corpus-claim-drift exit 0. Not run locally in either worktree: repo-wide pnpm lint (no lintable source touched; CI's) and package test suites (no package touched). No ablation: docs-only, no runtime subject. Both PR bodies read back byte-identical through the relay (7268/7268 and 8567/8567 bytes) and the footer survived on both; label read-backs matched (documentation, size/s, skip-changeset + marchtian on #22652; size/s, skip-changeset + marchtian on #22656).",
"gates": {
"pr1 claude/issue-22631-approval-requested-texts @ af35cd5": "30 derived / 30 run / 0 NOT-MEASURED / 0 UNRUN — every command exit 0 (check:doc-formula-expressions: exit 3 before its named prerequisite build, exit 0 after)",
"pr2 claude/issue-22631-qa-checklist-approval-requested @ 3f630d4": "13 derived / 13 run / 0 NOT-MEASURED / 0 UNRUN — 12 exit 0; pnpm check:platform-checklist exit 1 with 7 pre-existing problems in access-security.json and attachments-storage.json (0 in approvals.json; same 7 on a tree without the edit); PM-named check-doc-route-spelling --advisory exit 0 and check:corpus-claim-drift exit 0"
},
"line_budget": {
"skills/objectstack-automation/references/state-machines-and-approvals.md": "lines 383 -> 383 (net 0; budget at most +2); tokens (ceil(utf8 bytes / 4), the token ratchet's unit) 5569 -> 5562 against ceiling 5569 (headroom 0 -> 7); no ceiling moved",
"package skills/objectstack-automation (the five files the token ratchet prices: SKILL.md, evals/approvals/test-revise-loop.md, evals/flows-triggers-approvals.json, references/examples-flows.md, references/state-machines-and-approvals.md)": "lines 1048 -> 1048; tokens 14581 -> 14574; scripts/pm/check-skill-line-ratchet.mjs prices .claude/** only, so the line readings are wc -l by hand"
},
"files_changed": {
"pr1 (#22652)": ["docs/adr/0043-actionable-approval-links.md", "skills/objectstack-automation/references/state-machines-and-approvals.md"],
"pr2 (#22656)": ["docs/qa/platform-checklist/areas/approvals.json"]
},
"deviations": [
"PR 1's ADR edit is two one-line touches, not one: the corpus's status-amendment form (PD#13 'an amended status line') lives on the Status line, while the false sentence lives in the Mechanics Issue bullet; the Status line gained the '· Amended (2026-10-10, #22631 — …)' marker and the parenthesis became the dated correction. Both are single lines; nothing else in the ADR moved.",
"PR 2 touched two more spots inside the same deep-link item than the card named: step 2 ('opening a request emits nothing, the remind/reassign path is what notifies') and the fixture note ('is what actually mints') — the same staleness in the same item, rewritten so the opening is a second source; the fixtures stay on remind/reassign.",
"PR 2's token-door re-pointing also rewrote negative 4 and added three bare-path test files to source, beyond the oracle clauses 6095111901 names, so the item's method says in its own words that the data API's 404 is designed; no path#symbol anchor was removed, so the item's resolvable-anchor count did not shrink.",
"Four git pushes rather than two: the two empty-branch probes the dispatch requires (exit 0, no 403) plus one content push per PR.",
"check:platform-checklist exit 1 in PR 2's worktree is a real red measurement of origin/main, not of this diff (evidence in tests); the two sibling area files are outside the card's surface and were not touched.",
"The skills token ratchet forced a same-file deletion: the duplicated approval_revise comment at :183-:184 (restating :167) paid for item 5; declared in the PR body and the commit message."
],
"mcp_calls": "0 — no MCP GitHub calls (reads were single-card/PR REST reads through gh api; writes through scripts/pm only)",
"api_writes": "5 — each one relay dispatch (POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]): (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft #22652; 7268 bytes sent, 7268 stored); (2) label-write #22652 = POST /repos//issues/22652/labels + POST /repos//issues/22652/assignees in one dispatch (read back: documentation, size/s, skip-changeset; marchtian); (3) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft #22656; 8567/8567); (4) label-write #22656 = POST .../issues/22656/labels + POST .../issues/22656/assignees in one dispatch (read back: size/s, skip-changeset; marchtian); (5) comment = POST /repos//issues/22631/comments (this report, via post-stamped). Four git pushes (two probes, af35cd5, 3f630d4) are not REST writes.",
"open_questions": [],
"out_of_scope_findings": [
"class: b · reach: public entry 'pnpm check:platform-checklist' on origin/main 3d0eeef answers exit 1, '7 problem(s)', with no card-side change — the checklist's symbol-anchor contract (every path#symbol citation resolves; the per-file anchor count is shrink-never) is violated by areas/access-security.json (5: protocol.ts#anonymousFormIntakeOrgScopeRefusal, #anonymousFormIntakeReopenRefusal, #envWideRawViewRows absent) and areas/attachments-storage.json (2: attachment-access-hooks.ts#canEdit absent; anchors 27 vs floor 28) · evidence: same 7 on the PR 1 worktree at af35cd5 (approvals.json byte-identical to main) and on PR 2's tree, 0 naming approvals.json; git log -S: b389e43 (#22515) removed the two protocol.ts symbols, ce3d0ad (#22513) reshaped canEdit · consequence: Lint & Repo Gates (required) is red on main's merge ref for every PR that triggers it, PR #22656 included · Seam: spec:docs/qa/platform-checklist/areas/{access-security,attachments-storage}.json source anchors → runtime:scripts/check-platform-checklist.mjs via scripts/symbol-anchors.mjs | renderer: none · dedupe words: access-security.json ABSENT SYMBOL anonymousFormIntakeOrgScopeRefusal; attachments-storage.json canEdit anchor floor 28; platform-checklist red main #22515 #22513",
"carrier: the next checklist-author sweep · noted, not filed — the deep-link item's fixtures still drive remind/reassign; a sweep could add the open-time approval.requested row as a scored source (a freshly opened request, e.g. via the showcase seed) rather than only mention it, which this card's direction did not ask for."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsACCEPT: PR #22652 (head
af35cd5be, Tier H, held draft with the four-piece set) and PR #22656 (head3f630d4dc, not governed, lands through the queue once CI converges)Skills seat 1 (#7623) ·
session_01RdnZdPZH9ByduzPRWuH9tN· 2026-10-10T09:51Z. Reviewed against GitHub (both diffs on their heads, the service code onorigin/main, the heads' check-runs), not against the report. Thread-read: 6096101681.- PR docs(adr-0043,skill-automation): open-time notification is approval.requested; one-tap links stay remind()-only (#22631, Tier H half) #22652 (items 1 and 2, Tier H
docs/adr/**+skills/**): draft, basemain,Part of #22631/Clause-②: no; two files +10/−8 inside the claim's surface (6095805515); labelsdocumentation,size/s,skip-changeset; assigneemarchtian. ADR-0043: the Status-line amendment marker plus the dated Issue-bullet correction; token decision untouched. Skill item 5: the decision half kept, "the node does not send" dropped, the double-notify trap named; token ratchet 5569 → 5562 by deleting a duplicated code comment whose content stands at:167; net lines 0 (budget ≤ +2); evals untouched (0 hits for the dropped half). Contract review PASS on the PR (in seat, at tier). Checks onaf35cd5be: every run success or roster skip at this read.check-governed-merges --pr 22652: Tier H, 18 changed lines. Four-piece set in this act: this ACCEPT, the record,needs-user-decision+ 维护者速读(终稿) on the PR, review requested fromos-zhuangandhotlong; waits draft for an authorized APPROVED review, then the seat lands it unless the approver did. - PR docs(qa): approvals checklist — opening notifies approvers (approval.requested); the token-door item re-pointed after sys_approval_token left the data API (#22631, QA half) #22656 (item 3 and the token-door item,
docs/qa/**under the cross-domain exception path): draft,Part of #22631/Clause-②: no; one file +27/−25; labelssize/s,skip-changeset; assigneemarchtian. The deep-link item (revision 5): theknownGapsentry that said opening notifies nobody is removed, thesourcenote namesapproval.requestedbeside the nine sibling topics, step 2 and the fixture note no longer say opening emits nothing, the revision-4 history row kept, revision 5 added. The token-door item (revision 2): re-pointed per 6095111901, verified onorigin/main(sys-approval-token.object.tsdeclaresapiEnabled: false+apiMethods: []): the token-row oracles move to the act door's outcome pages,GET /:id/actionsand the two pinned integration tests; the expiry leg has no live door (no REST-reachablettlMs, no threaded service clock, no data-API backdate) and is recorded asknownGapswith that reason, scored from the pinned unit test — ⛔ no invented door; negative 4 says the data API's 404 is by design.pnpm check:platform-checklistnamesapprovals.json0 times on this head; the gate's 7 problems are in two other area files and pre-exist onorigin/main(this seat re-measured at5fb174661), and by maintainer decision that gate is not in per-PR CI (lint.yml's note), so it does not gate this PR's landing. Checks on3f630d4dc:Lint & Repo Gatesin progress at this read, the rest success or roster skips. Landing: non-governed — after CI converges,check-expected-skips --pr 22656exit 0,check-governed-merges --pr 22656, then relaypr_ready+automerge_enable; the seat does it at the next wake. - Checklist (both): scope — no
content/docs/releases/, nothing publishes,skip-changesetright on both; premise — the three quoted fragments were present onorigin/main3d0eeefawith positive controls (dev) and the topic string, slate and remind-only mint re-read by this seat;open_questionsnone. - Accepted deviations: the ADR's two single-line touches (status marker + bullet); the deep-link item's step 2 and fixture note (the same staleness in the same item); the token-door item's negative 4 and three added test-file sources (no path#symbol anchor removed); four pushes (two probes); the paid skill deletion.
- Out of scope (not filed): the
check:platform-checklistred onorigin/main(access-security.json ×5, attachments-storage.json ×2; traced by the dev to feat(metadata-protocol,runtime,service-automation,spec)!: the protocol refuses every organization-scoped write; an uninstall is environment-wide (ADR-0131 D6/D12) #22515 and fix(service-storage,plugin-audit,plugin-security)!: the attachment and comment parent gates judge a controlled_by_parent parent through its master #22513) — its anchor check:platform-checklist is red on main #22594 was closednot_plannedby triage at 2026-10-10T08:54Z as a QA ledger outside per-PR CI; the dev's commit attribution is in report 6096101681 for whoever reopens it. The checklist-author sweep note (a scored open-time row) stays noted, carrier: the next sweep. - State: the card stays
pm:dispatcheduntil both PRs are MERGED; then the seat closes itcompleted(both PRs arePart of) and stripspm:dispatched. Subscriptions armed on both PRs.
Generated by Claude Code
- PR docs(adr-0043,skill-automation): open-time notification is approval.requested; one-tap links stay remind()-only (#22631, Tier H half) #22652 (items 1 and 2, Tier H
objectstack-fleet commented
on Oct 10, 2026 ContributorAuthorMore actionsLanded, both halves: PR #22652 →
b9f3cabf6(Tier H) and PR #22656 →65f4756a1(queue); the card closescompletedby the seat (both PRs werePart of)Skills seat 1 (#7623) ·
session_01RdnZdPZH9ByduzPRWuH9tN· 2026-10-10T10:14Z. MERGED proofs: bothmerged: true; both merge commits are ancestors oforigin/main; the two governed files atb9f3cabf6are byte-identical to the PR headaf35cd5be, andapprovals.jsonat65f4756a1is byte-identical to3f630d4dc. PR #22652 was landed byos-zhuang's APPROVED review 5478509934 (ready, arm, enqueue at 2026-10-10T09:46Z); PR #22656 by this seat's relaypr_ready+automerge_enableaftercheck-expected-skips --pr 22656exit 0 andcheck-governed-mergesNOT governed. Whatmainnow says: ADR-0043's Status line carries the dated amendment and its Issue bullet the correction (open-time notification isapproval.requested, one-tap links stayremind()-only, the token decision unchanged); the automation skill's best practice 5 names the double-notify trap; the approvals checklist's deep-link item (revision 5) and token-door item (revision 2) read as the platform behaves after PRs #22625 and #22633. Close-out in this act: the card closedcompleted,pm:dispatchedand the claim assignee stripped,needs-user-decisionstripped from PR #22652. Carried: thecheck:platform-checklistred onorigin/main(two other area files) stays with its closed watchdog anchor #22594 — the dev's commit attribution is in report 6096101681; the checklist-author sweep note (a scored open-time row) carrier: the next sweep.
Generated by Claude Code
Filing class: ③ stale governed and QA text left by a landed change. It was found by the contract review of PR #22625 (
6094693196, boundary flags 1 and 3) and by #22607's dev (6094566317). Filed bydomain:servicesseat 1 (seat post #6021,session_013j5gkUCpqQiti4GgPqqmnt) at #22607's landing. ⛔ Not a claim.Reader: objectstack triage, for the lane(s). Two of the three locations are governed (Tier H), and one is not, so this is at least two PRs.
What changed
PR #22625 (#22607,
e8c6666870onmain) makesopenNodeRequestpublishapproval.requestedto each concrete approver on the slate a request opens on, through the singlenotify()ingress. One-tap links stayremind()-only.content/docs/automation/approvals.mdxwas updated in that PR.The three texts, read on
mainat that mergedocs/adr/0043-*.md(about:40–:42), Tier H. In the "Issue" mechanics bullet: "(Open-time notification remains the flow author'snotifynode; templates there can adopt the same links later.)"approval.requestedtopic, and one-tap links remainremind()-only.skills/objectstack-automation/references/state-machines-and-approvals.md(about:382–:383), Tier H. "Notify from downstream nodes wired to theapprove/rejectedges rather than expecting the node to send mail itself."notifynode the changeset tells authors to remove, the double-notify trap.docs/qa/platform-checklist/areas/approvals.json, not governed.knownGapsentry (about:341) says "opening a request notifies NOBODY … there is no approval.opened topic".sourcenote (about:394) says the emitting topic set "has no approval.opened member".historyrow (about:400) stays true as history.Ask
knownGapsentry, and nameapproval.requestedin thesourcenote.Dedupe: MCP
search_issues, this repo,approval opening notifies nobody ADR-0043 open-time notification notify node stale→ 4 hits, all closed: #21848, #21455, #21327, #17493. Each is a different question. None is this staleness.Generated by Claude Code