Repository navigation
Description
domain:devx#2 · zhuangjianguo · session_01QsR2jTo666XXx9e1Gm21C6
Filing gate: ③ a task the maintainer directed. This is the relay half of #31521 (Wanted 1). The maintainer's words on that card, verbatim: 「同意,立卡」 · 「高优先」 (2026-11-08T12:30Z). #31521 routes this half here: "Changing how relay senders fold writes is fleet-write relay work, domain:skills' and governed; the devx seat files that half there with the readings." ⛔ Not a claim. No grade: triage sets it.
Business reason. The Actions run list is what a seat or the maintainer reads when CI looks wrong. Fleet Write ran 3,383 times a day on average over 2026-11-01..07 and spent 18.8 runner-hours on 2026-11-07 alone, burying the CI and Lint runs. Every stroke also costs the sender one relay round trip (median run 32 s), so a seat that sends a claim as two strokes waits twice. #31521's PR narrows the two workflow_run workflows. Fleet Write's own count only falls if senders fold.
Reader who acts. The domain:skills seat, on the senders: scripts/pm/label-write.mjs and scripts/pm/post-stamped.mjs (today each sends its own stroke), and the procedure lines in .claude/skills/pm-dispatch/** that tell a seat to send them one after the other. Governed (Tier S / relay). ⛔ No write loses its pacing, read-back or signature (#31521 Wanted 3).
Measured (#31521 step 1, comment 6722165466: every Fleet Write run of the UTC day 2026-11-07, parsed from the relay's own fleet-write/validate line)
-
2,283 strokes carried 3,042 actions, 1.33 per stroke. 1,870 strokes (81.9 %) carried exactly one action. Strokes already take up to 20 writes (fleet-write: a relay stroke of up to 20 content-creating writes runs at the 3 s gap — write-pace rule ⑤ (batch gap 30 s) never applies on the relay path, so one stroke is a burst #24755).
-
A sender's next stroke lands a median ~45–55 s after its previous one: the senders wait for each stroke and then send the next.
-
Most common same-target chains (gap ≤ 180 s):
comment→labels_add+labels_remove+assign54 ·comment→labels_remove44 ·labels_add+labels_remove+assign→comment43 ·comment→comment25. These are claims and releases (labels + assignee, then theClaim:/Release:comment) sent as two strokes, becausepost-stampedandlabel-writeeach send their own. Any-target pairs at ≤ 60 s:comment→pr_ready+automerge_enable91 (verdict comment, then the landing). -
Strokes saved per day, by fold rule:
fold rule runs saved day after same issue or PR, gap ≤ 180 s (no read-back dependency possible) 471 1,812 (−21 %) any target, gap ≤ 60 s, never after an op that creates the number 1,017 1,266 (−45 %) The second row is an upper bound: a later stroke may depend on reading the earlier one back. The first row is the floor that needs no new information.
Wanted
- A claim and a release go out as one stroke (labels, assignee and the stamped comment), with each part still read back.
label-write --releasealready does this for a silent-claim release, so this extends that shape. - A verdict comment and its landing ops (
pr_ready,automerge_enable) can go out as one stroke. - ⛔ No write loses its pacing, read-back or signature; the
post-stampedtime stamp keeps its one-clock rule.
Acceptance
- One day of Fleet Write after landing, read the same way as 6722165466: strokes per day and the share of single-action strokes, against 2,283 and 81.9 %.
- The relay self-tests and conformance stay green.
Dedupe
Searched 2026-11-08T14:2xZ, open issues and closed ones: "fleet write fold strokes" 307 hits, "relay batch one stroke" 857, "fold claim comment one stroke" 1134 (seat posts and unrelated cards). Nearest: #24755 (closed; let one stroke carry up to 20 writes at the 3 s gap, which is the capacity this card uses) and #31403 (open; a new relay op). Neither folds a seat's paired writes. New.
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage:
domain:skills· p1 ·pm:queue· 2026-11-08T14:54Z⛔ Not a claim.
domain:skillsis right. The senders (scripts/pm/label-write.mjs,post-stamped.mjs) and the procedure lines are internal rules and relay ([Decision] Keepdomain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424 rule 6), governed Tier S.domain:devxfor theworkflow_runnarrowing. This card is the sender-side half.Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Claim: PM loop round 12 · 2026-11-08T15:32Z
Session:
session_01QsR2jT34CXs5fCn3BDirZwAccount:
zhuangjianguo(the seat's linked user; the card's assignee)Branch:
claude/project-thread-sxds3e(the card thread's designated branch, a measured platform exception toclaude/issue-<n>-<slug>; dev sessionsession_01QsR2jQze2kJDxaxMsAW2kY)Worktree:
objectstack-issue-31551Domain:
domain:skillsSeat:
domain:skills#2File surface:
scripts/pm/label-write.mjs,scripts/pm/post-stamped.mjs(and their self-test files if separate), plus the.claude/skills/pm-dispatch/**lines that tell a seat to send the two writes one after the other. Stop on breach; explain in the report.scripts/pm/fleet-write/ops.mjsis out unless the fold cannot be expressed with existing ops; if so, stop and report needs_decision.Container & model:
S,mode:thread,model: TIER_DEFAULT(one.claude/**hit makes the PR Tier S; contract review routed to the director seat),effort: highClause-②: no
Metadata-protocol: none
Responsibility: the relay senders | the measured Fleet Write load: 2,283 strokes/day, 81.9 % single-action, and claim/release pairs sent as two strokes (#31521 reading 6722165466)
Thread-read: 6722994869
Premise: holds. On
main2c6b9364,label-write.mjsfolds labels, assignee and comment into one stroke only under--release(silent-claim reclaim).post-stamped.mjssends the comment alone. No sender folds a verdict comment withpr_ready+automerge_enable.Serial constraints cleared: open PRs touching the two senders: none. Card #31403 (a new relay op) is held on a maintainer decision and has no open PR.
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_01QsR2jQze2kJDxaxMsAW2kY
os-dev-report
label-write.mjs --comment-file(+--land), extending the--releaseshape (releaseActions); the comment is judged bypost-stamped.mjsjudgeBody(new export, the ONE judging pathmainalso calls). No new relay op;fleet-write/ops.mjsunchanged; needs_decision: none.④ labels ✓|✗,④ assignees ✓|✗,④ comment ✓|✗+stamp: … drift N+read-back: …(post-stamped's verdict), then④ MATCHES(exit 0) or exit 4 "Not repaired"--land: pr_ready + automerge_enable): the claim-fold lines +④ pull ✓|✗ — draft X · auto_merge Y(draft judged; REST auto_merge printed, not judged: the executor's landed check judges the arming)--landon an issue → refused; direct route → exit 3; no-run → exit 6rest-channel.md" pointer to stay ≤ 120 bytes; the spelling is nowlabel-write --land. (2) found, not changed: the--releasecomment (composeReleaseBody → renderBody) is not judged for the signature line; out of scope.objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Claim amendment · 2026-11-08T16:23Z · amends Claim 6723407287 (same session, same branch
claude/project-thread-sxds3e)File surface, widened by one file:
.claude/skills/pm-dispatch/references/dispatch-runbook.mdL36–37. They still teach the claim as two strokes (「标签翻转只在认领评论写成功之后,两笔不原子」 plus the label rollback duty), which contradicts the new one-stroke line inexecution-duties.md. The contract review on PR #31583 (record 6723957070, PASS, should-fix F1) names it. The edit stays line-neutral within the 120-byte cap.objectstack-fleet commentedon Nov 8, 2026
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw
Landed · 2026-11-08T17:17Z — PR #31583 merged through the merge queue (merge commit 58ab03d). It landed on the lane's
CONTRACT_REVIEW_TIERreview: round 1 PASS 6723957070 and delta PASS 6724244229 on head 137e74a.A seat can now send a claim or release (comment + labels + assignee) as one relay stroke:
label-write --comment-file. A verdict and its landing (pr_ready+automerge_enable) go as one stroke withlabel-write --comment-file --land. The comment is judged by post-stamped's sharedjudgeBody, and every part is read back on its own line. The rule text inexecution-duties.md,landing-operations.mdanddispatch-runbook.mdnames the fold. No relay op was added.Follow-up filed: #31585 (
--releasecomment throughjudgeBody).pm:dispatchedremoved. Nothing left on this card.