Repository navigation
pm-dispatch: card threads write to GitHub only through the relay (pr_create and the other ops), never GitHub MCP; the dispatch order carries that line verbatim; review flags a PR not authored by the fleet bot (maintainer's word 2026-10-23) #25457
Description
Filing gate ③: a maintainer-direct task, the maintainer's words quoted verbatim. Filed by domain:skills seat 2 (seat post #19287, session session_01REMuzhz6MWRjg8uohedMnM, account os-elon-musk) on the project coordinator's relay of the maintainer's word. ⛔ Not a claim. Lane self-applied under exception 二; grade suggested S, p2; triage may regrade.
Reader (who acts): the domain:skills seat, one PR on .claude/skills/pm-dispatch/** (Tier S) plus ratchet ceiling rows if needed. Contract review at CONTRACT_REVIEW_TIER.
The maintainer's words (2026-10-23 14:43Z, Claude Code project "Objectstack", verbatim)
如何更新 skills :在环境级(项目根会加载的那层)设置里禁掉 MCP 写,并放行中继命令。这一步要你来改配置。
- 在每张卡的派发令里写明「PR 只经中继
pr_create开,禁用 MCP」。
What was measured (2026-10-23)
- PR docs(pm-dispatch): the project layer — one project form, 「pm-dispatch <席位…>」 as the summon, seats read from the seat posts' 🟢 line, takeover that never waits for a walled account, mailbox PRs, a generated roster board #25427 (card pm-dispatch: project forms — lane project and director project, lanes read from the seat post's 🟢 line, the maintainer's one-sentence assignment, takeover of a walled account, mailbox PRs, generated roster board (maintainer's word 2026-10-23) #25412) was opened by its card thread through the GitHub MCP
create_pull_requesttool, so the PR's author is the personal loginos-elon-musk, notobjectstack-fleet[bot]. Every other PR this project opened went throughscripts/pm/fleet-write/dispatch.mjspr_createand is authored by the bot (e.g. docs(pm-dispatch): Tier S landed from a project needs a review of record by another account; the 分诊席 shrinks to bare cards; decision cards stay in their repo and the 总监席 scans every repo #25422, docs(adr-0126): list the six sys_metadata_activation.metadata_type values written on main #25432). - Cause: a Claude Code project rooted at the parent of several checkouts does not load
objectstack/.claude/settings.json(CLAUDE_PROJECT_DIRunset in three readings), so the repo's deny on MCP writes and its PreToolUse guards are inert there. Each repo'sCLAUDE.mddoes load. In that layout the skill text is the only line of defence. references/execution-duties.mdL130 today: 「派发令恒带Writes:行:只走 REST 代理、写预算(端点清单)、mcp_calls计数,dev 两数都报。」 — it says REST relay but does not namepr_createor forbid the MCP write tools by name.
Wanted
references/execution-duties.mdWrites:line: PR only through the relay'spr_create; comments, labels, body edits only through the relay tools (post-stamped.mjs,label-write.mjs,fleet-write/dispatch.mjs); ⛔ GitHub MCP writes by name (create_pull_request,update_pull_request,issue_write,add_issue_comment, …); one clause that in a multi-repo project the reposettings.jsondeny does not load, so this line is the guard.references/dispatch-runbook.md〈卡线程〉: the card thread's opening message (the dispatch order, per pm-dispatch: a project-run seat form — seat post as a stub, posture and ledger in the Claude Code project, dispatch order in the card thread, branch named before the thread opens; 项目总监 → 总监席 (maintainer's word 2026-10-23) #25379) carries thatWrites:line verbatim.references/contract-review.mdorreview-checklist.md: a PR whose author is notobjectstack-fleet[bot]is flagged in the review record (③ note, with the author login), so the seat sees an off-relay write before landing.
Out of scope: the environment-level settings the maintainer will change himself (first sentence of his message); any scripts/** check (a devx card if wanted).
Acceptance
- The three files carry the text; line-neutral or paid in the same file;
pnpm check:pm-skill-ratchet,check:pm-skill-id-lint,check:skill-frame-sync,check:skill-frame-freshnessgreen. git grep -n 'create_pull_request' -- .claude/skills/pm-dispatchnames it only as forbidden.- Serial: lands after docs(pm-dispatch): the project layer — one project form, 「pm-dispatch <席位…>」 as the summon, seats read from the seat posts' 🟢 line, takeover that never waits for a walled account, mailbox PRs, a generated roster board #25427 (card pm-dispatch: project forms — lane project and director project, lanes read from the seat post's 🟢 line, the maintainer's one-sentence assignment, takeover of a walled account, mailbox PRs, generated roster board (maintainer's word 2026-10-23) #25412) and docs(pm-dispatch): Tier S landed from a project needs a review of record by another account; the 分诊席 shrinks to bare cards; decision cards stay in their repo and the 总监席 scans every repo #25422 (card pm-dispatch: Tier S PR landed from a project needs a contract-review record by another account; triage shrinks to bare cards in the director project; decision cards stay in their repo, the director scans every repo (maintainer's word 2026-10-23) #25414), which edit
dispatch-runbook.md,contract-review.mdandexecution-duties.md's neighbours; start frommainafter they land, or mergemainbefore review. - Tier S landing per the current rule (review PASS + green checks; the maintainer's standing word in the seat thread of 2026-10-23 14:14Z).
Dedupe
MCP search_issues, objectstack, "card thread opened PR through GitHub MCP write, PR author not fleet bot, dispatch order Writes line relay only pr_create" → 59 hits; top: #25412, #23423 (closed), #25417, #21892 (closed: label-write fell back to a personal-login write — the same identity hazard on a different path), #25415, #25416, #25379 (closed), #24145, #20791, #20063 (closed: PR assignee rule). None names the MCP write tools or the dispatch-order line. New.
Dedupe words: GitHub MCP write ban · Writes: line pr_create · PR author not objectstack-fleet[bot].
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 1 (card thread) · 2026-10-23T15:21Z · p2,
tooling,domain:skills. Writes the maintainer's 2026-10-23 14:43Z word quoted on the card into pm-dispatch: theWrites:line names the relay as the only write path and bans GitHub MCP writes by name, the card thread's opening message carries it verbatim, and contract review flags a PR not authored byobjectstack-fleet[bot]. Also, in the same PR:references/coordinator.mdL12–L13 aligned with the unconditional takeover PR #25427 landed (review record 6368204690 ③-1).Session:
session_01REirBR5H4pfZ96C61mK6Uj(card thread ofdomain:skillsseat 2, seat sessionsession_01REMuzhz6MWRjg8uohedMnM)Account:
os-elon-musk(the seat's linked user; always the card's assignee)Branch:
claude/project-thread-4obil9(the card thread's designated push branch, platform-assigned at thread creation and read by the seat from the thread's session record per ruling 1A of #25379; the thread checks that this newest claim names its branch before it starts)Worktree: the card thread's own checkout
Domain:
domain:skillsSeat:
domain:skills#2(seat post #19287)File surface:
.claude/skills/pm-dispatch/references/execution-duties.md(theWrites:line),references/dispatch-runbook.md〈卡线程〉,references/contract-review.mdorreferences/review-checklist.md(one line),references/coordinator.mdL12–L13;scripts/pm/check-skill-line-ratchet.mjsceiling rows only if a file shrinks. Line-neutral or paid in the same file. (stop on breach; explain in the report)⛔ Not in scope: any Tier H file (
AGENTS.md,CLAUDE.md,docs/**,skills/**,.github/workflows/**, CODEOWNERS);.claude/settings.jsonand the environment-level settings (the maintainer changes those himself); any otherscripts/**(a check is a devx card); SKILL.md.Writes: PR only through the relay's
pr_create(node scripts/pm/fleet-write/dispatch.mjs); comments, labels and body edits only throughpost-stamped.mjs,label-write.mjsand the relay; ⛔ every GitHub MCP write tool (create_pull_request,update_pull_request,issue_write,add_issue_comment, …). In this project the repo'ssettings.jsondeny does not load, so this line is the guard.Container & model:
S,mode:thread(the seat's push branch is held by Tier H PR #25432; the coordinator granted a card-thread slot),model: CONTRACT_REVIEW_TIER(dispatch-gates.mjs --tieron.claude/skills/pm-dispatch/**: "MANDATORY"),effort: medium(S). Governed surface.claude/**is Tier S: aCONTRACT_REVIEW_TIERPASS record on the PR's head plus all-green checks; the seat lands it under the maintainer's standing word of 2026-10-23 14:14Z in the seat thread.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (a maintainer word not yet written into the skill)
Thread-read: none
Serial constraints cleared: start from
main0b8dbea00d. Open PR #25422 (card #25414) editsreferences/dispatch-runbook.mdandreferences/contract-review.mdand lands first; mergemainafter it lands and before asking for review, keeping out of its hunks. PR #25427 (card #25412) is in the merge queue; mergemainonce it lands too (itsseat-lifecycle.mdL30 is the takeover textcoordinator.mdmust agree with).Generated by Claude Code