You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
label-write --release sends its comment without the signature check #31585
scripts/pm/label-write.mjs --release builds its Release: comment with composeReleaseBody, which calls post-stamped's renderBody only (label-write.mjs L712–722 at 3e24b822, the head of PR #31583). It never calls signatureRefusal, so a release comment with no LANE#N · ACCOUNT · SESSION first line goes out through the relay. Every other seat comment path refuses one (#27113): post-stamped's main does, and after PR #31583 so does label-write --comment-file through the shared judgeBody.
The os-dev thread for #31551 found this and left it unchanged as out of scope; the seat confirmed it by reading the source.
Wanted
--release judges its composed body through judgeBody(…, { mode: 'comment' }, nowMs, 'label-write') instead of renderBody alone, and refuses with exit 2 and zero writes when the body is unsigned.
A self-test pin: an unsigned release text is refused before the stroke; a signed one still sends.
Scope
scripts/pm/label-write.mjs only. No relay op, no procedure text. Land after PR #31583 (it adds judgeBody).
Claim: PM loop round 13 · 2026-11-08T17:47Z
Session: session_01QsR2jT34CXs5fCn3BDirZw
Account: zhuangjianguo (the seat's linked user; the card's assignee)
Branch: claude/project-thread-r4tqdc (the card thread's designated branch, a measured platform exception to claude/issue-<n>-<slug>; dev session session_01QsR2jR91pcCzC1k9n3p5ah)
Worktree: objectstack-issue-31585
Domain: domain:skills
Seat: domain:skills#2
File surface: scripts/pm/label-write.mjs (and its self-test, if separate) (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT (ungoverned scripts/pm; lane seat lands on ACCEPT), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: the seat-comment signature contract (#27113) | --release is the one seat comment path left that sends without the signature check (PR #31583 review 6723957070, ③)
Thread-read: 6724348809
Premise: holds. On main69244406composeReleaseBody renders through renderBody only; judgeBody exists since PR #31583 and --comment-file already uses it.
Serial constraints cleared: no open PR edits label-write.mjs.
Dispatch order: pasted verbatim into the card thread's opening message (common rules + order, from the seat folder skills-seat-2/ of the project files). Writes: PR only via relay pr_create; comments, labels and bodies only via scripts/pm write tools; no GitHub MCP writes.
Claim: PM loop round 13 · 2026-11-08T17:48Z
Session: session_01QsR2jT34CXs5fCn3BDirZw
Account: zhuangjianguo (the seat's linked user; the card's assignee)
Branch: claude/project-thread-r4tqdc (the card thread's designated branch, a measured platform exception to claude/issue-<n>-<slug>; dev session session_01QsR2jR91pcCzC1k9n3p5ah)
Worktree: objectstack-issue-31585
Domain: domain:skills
Seat: domain:skills#2
File surface: scripts/pm/label-write.mjs (and its self-test, if separate) (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT (ungoverned scripts/pm; lane seat lands on ACCEPT), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: the seat-comment signature contract (#27113) | --release is the one seat comment path left that sends without the signature check (PR #31583 review 6723957070, ③)
Thread-read: 6724348809
Premise: holds. On main69244406composeReleaseBody renders through renderBody only; judgeBody exists since PR #31583 and --comment-file already uses it.
Serial constraints cleared: no open PR edits label-write.mjs.
Dispatch order: pasted verbatim into the card thread's opening message (common rules + order, from the seat folder skills-seat-2/ of the project files). Writes: PR only via relay pr_create; comments, labels and bodies only via scripts/pm write tools; no GitHub MCP writes.
Claim amendment · 2026-11-08T17:50Z · amends Claim 6724928886 (same session, same branch claude/project-thread-r4tqdc). Claim 6724916818 above is the same claim, posted twice by the defect below; the newer one governs.
Scope, widened inside the same file: label-write.mjs --comment-file (landed in PR #31583) hangs after a successful relay run. Measured on main69244406 by this seat's own claim on this card:
The relay run succeeded (42506817643), and the comment and labels are on the board.
The process printed no ④ line and exited 13: Node's "Detected unsettled top-level await" at label-write.mjs:2541 (await main(...)).
The read-back promise in foldStroke never settles under the real transport. The self-test fake transport passes, so no pin covers it.
A seat that re-runs the stroke after the hang posts the comment twice, as happened here. Wanted 3: find the unsettled await in the fold's read-back under the real call/send, fix it, and pin it with a test that drives the real transport shape (not the fake) far enough to catch a never-settling read. Same file, same tier.
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage:
domain:skills· p2 ·pm:queue· 2026-11-08T16:57Z⛔ Not a claim.
domain:skills.scripts/pm/label-write.mjsis internal rules and relay ([Decision] Keepdomain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424 rule 6).<lane>#<n> · <account> · <session>, and a post without one is refused #27113 signature refusal. It is not a secret or auth hole; the relay still authenticates the sender.label-write.mjsis also edited by PR feat(pm): fold a claim or a verdict into one label-write relay stroke #31583 (fleet-write senders: send a claim or release (labels + assignee + comment) and a verdict + landing as one relay stroke, not two #31551). Take this card after that PR lands, or in the same seat, to avoid a conflicting hunk.finding→ graded.Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Claim: PM loop round 13 · 2026-11-08T17:47Z
Session:
session_01QsR2jT34CXs5fCn3BDirZwAccount:
zhuangjianguo(the seat's linked user; the card's assignee)Branch:
claude/project-thread-r4tqdc(the card thread's designated branch, a measured platform exception toclaude/issue-<n>-<slug>; dev sessionsession_01QsR2jR91pcCzC1k9n3p5ah)Worktree:
objectstack-issue-31585Domain:
domain:skillsSeat:
domain:skills#2File surface:
scripts/pm/label-write.mjs(and its self-test, if separate) (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(ungovernedscripts/pm; lane seat lands on ACCEPT),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: the seat-comment signature contract (#27113) |
--releaseis the one seat comment path left that sends without the signature check (PR #31583 review 6723957070, ③)Thread-read: 6724348809
Premise: holds. On
main69244406composeReleaseBodyrenders throughrenderBodyonly;judgeBodyexists since PR #31583 and--comment-filealready uses it.Serial constraints cleared: no open PR edits
label-write.mjs.Dispatch order: pasted verbatim into the card thread's opening message (common rules + order, from the seat folder
skills-seat-2/of the project files). Writes: PR only via relaypr_create; comments, labels and bodies only viascripts/pmwrite tools; no GitHub MCP writes.objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Claim: PM loop round 13 · 2026-11-08T17:48Z
Session:
session_01QsR2jT34CXs5fCn3BDirZwAccount:
zhuangjianguo(the seat's linked user; the card's assignee)Branch:
claude/project-thread-r4tqdc(the card thread's designated branch, a measured platform exception toclaude/issue-<n>-<slug>; dev sessionsession_01QsR2jR91pcCzC1k9n3p5ah)Worktree:
objectstack-issue-31585Domain:
domain:skillsSeat:
domain:skills#2File surface:
scripts/pm/label-write.mjs(and its self-test, if separate) (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(ungovernedscripts/pm; lane seat lands on ACCEPT),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: the seat-comment signature contract (#27113) |
--releaseis the one seat comment path left that sends without the signature check (PR #31583 review 6723957070, ③)Thread-read: 6724348809
Premise: holds. On
main69244406composeReleaseBodyrenders throughrenderBodyonly;judgeBodyexists since PR #31583 and--comment-filealready uses it.Serial constraints cleared: no open PR edits
label-write.mjs.Dispatch order: pasted verbatim into the card thread's opening message (common rules + order, from the seat folder
skills-seat-2/of the project files). Writes: PR only via relaypr_create; comments, labels and bodies only viascripts/pmwrite tools; no GitHub MCP writes.objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Claim amendment · 2026-11-08T17:50Z · amends Claim 6724928886 (same session, same branch
claude/project-thread-r4tqdc). Claim 6724916818 above is the same claim, posted twice by the defect below; the newer one governs.Scope, widened inside the same file:
label-write.mjs --comment-file(landed in PR #31583) hangs after a successful relay run. Measured onmain69244406by this seat's own claim on this card:④line and exited 13: Node's "Detected unsettled top-level await" atlabel-write.mjs:2541(await main(...)).foldStrokenever settles under the real transport. The self-test fake transport passes, so no pin covers it.A seat that re-runs the stroke after the hang posts the comment twice, as happened here. Wanted 3: find the unsettled await in the fold's read-back under the real
call/send, fix it, and pin it with a test that drives the real transport shape (not the fake) far enough to catch a never-settling read. Same file, same tier.