Repository navigation
Description
Filing-gate category: ③ direct dispatch from the session operator (os-litant), instruction quoted verbatim below. It also meets ①: the defect has named locations.
Reader: an os-dev subagent, dispatched right after filing from session https://claude.ai/code/session_01X7HwfPLpQtCixDMrRGkSbe. The diff touches .claude/** (governed, Tier H), so the PR waits on an approval from os-zhuang or hotlong.
Dedup (open + closed, MCP search_issues): the query "pm-dispatch skill says writes go as claude[bot] but AGENTS.md says objectstack-fleet[bot]" returned 71 hits and none of them is this defect; the query "objectstack-fleet write identity" returned 4 hits, all closed (#19641, #19663, #19701, #19739). Control: "board snapshot archive" returned 5 hits including the known #17434, so the channel is live.
Instruction (verbatim)
另外注意 pm-dispatch 技能文档里有一处过时:SKILL.md:94 和 references/filing-gate.md:31 还写着"写侧恒走 claude[bot]" 这个是错的,立卡修改
你可以直接派发修改
What is wrong
AGENTS.md:416 on origin/main (1f89ba0) is the authority:
Every GitHub write leaves through
scripts/pm/, asobjectstack-fleet[bot], behind the shared write gate.
Two lines of the pm-dispatch skill still prescribe the superseded identity:
.claude/skills/pm-dispatch/SKILL.md:94: 写侧恒走claude[bot]⛔ 不走用户令牌;节奏 ≥3 秒/笔、每账号每小时 ≤40 笔,429 即停写。.claude/skills/pm-dispatch/references/filing-gate.md:31: 立卡、开 PR 与评论恒走 App 安装身份(claude[bot]),⛔ 不走席位用户令牌。
references/rest-channel.md:11 already names the fleet-write relay (#19739), so the skill now contradicts itself as well as AGENTS.md. A seat that reads SKILL.md alone is told to write as claude[bot], which is the REST-proxy installation identity, and not through the scripts/pm/ write doors.
Fix
SKILL.md:94: state that the write identity isobjectstack-fleet[bot]through thescripts/pm/write doors (issue-create,label-write,post-stamped,close-cards, andwith-fleet.shfor everything else), with AGENTS.md as the authority. Keep the pacing half of the line unchanged, and keep the line count unchanged because of the line ratchet.references/filing-gate.md:31: make the same identity statement for filing cards, opening PRs and commenting.references/filing-gate.md:9is a verbatim maintainer quote from 2026-09-21 that namesclaude(bot). Rulings are quoted verbatim and are not rewritten. At most, add a one-line note under the quote saying the identity has since moved toobjectstack-fleet[bot](AGENTS.md).- Re-read
references/filing-gate.md:32-33andreferences/platform-readings.md:130-136against the new identity. Those lines record measurements of the container's REST-proxy token classes; they are not a write rule. Change a line only if it reads as an instruction to write asclaude[bot], and name any such line in the PR.
Out of scope: the scripts/pm/check-half-states.mjs H64 fixtures that name claude[bot]. They are measured history, not a rule.
Acceptance
git grep -n 'claude\[bot\]' .claude/skills/pm-dispatchreturns no line that prescribesclaude[bot]as the write identity.- The skill-face gates stay green:
check-skill-line-ratchet,check-governed-prose,check-skill-id-lint.
Generated by Claude Code
Activity
objectstack-fleet commentedon Sep 23, 2026
Claim: direct dispatch (session operator instruction, quoted in the card body)
Session:
session_01X7HwfPLpQtCixDMrRGkSbeBranch:
claude/lucid-turing-izrwobWorktree:
objectstack-issue-19881Domain:
domain:skillsSeat:
domain:skills#1File surface:
.claude/skills/pm-dispatch/SKILL.md,.claude/skills/pm-dispatch/references/filing-gate.md(read-only check ofreferences/platform-readings.md; stop on breach)Container & model:
S (one-line-class mechanical governed edit),mode:subagent,model: opus—dispatch-gates --tierderivedclaude-fable-5-1fromSKILL.md(clause ①); taking its one-line-class mechanical exit, compensated by a skill-face review at the mandated tier before the maintainer readClause-②: no
Thread-read: none
Serial constraints cleared: none on these two files; in-flight
domain:skills#19824 (scripts/pm/close-cards) does not touch themThe branch is this session's designated branch, not
claude/issue-19881-…— the duplicate-fix guard reads that convention as advisory only.Generated by Claude Code
objectstack-fleet commentedon Sep 23, 2026
os-dev-report
{
"issue": 19881,
"status": "done",
"branch": "claude/lucid-turing-izrwob",
"pr": "#19890",
"head_sha": "1be1a7d9bce6f7c952803c085a7240cf4337eb36",
"session": "session_01X7HwfPLpQtCixDMrRGkSbe",
"premise_still_valid": true,
"summary": "SKILL.md:94 and references/filing-gate.md:31 now name objectstack-fleet[bot] as the write identity, citing AGENTS.md; each is a same-line replacement, so both files keep their line counts. filing-gate.md:9 (a verbatim maintainer quote), platform-readings.md:130/132/136 and filing-gate.md:32-33 were re-read and left unchanged, because none of them prescribes writing as claude[bot]. Draft PR 19890 is open as objectstack-fleet[bot], with os-zhuang and hotlong requested as reviewers. CI was in_progress at report time.",
"files_changed": [
{
"path": ".claude/skills/pm-dispatch/SKILL.md",
"additions": 1,
"deletions": 1,
"line": 94
},
{
"path": ".claude/skills/pm-dispatch/references/filing-gate.md",
"additions": 1,
"deletions": 1,
"line": 31
}
],
"line_budget": {
".claude/skills/pm-dispatch/SKILL.md": {
"lines_before": 319,
"lines_after": 319,
"ceiling": 319,
"edited_line_bytes_before": 119,
"edited_line_bytes_after": 118,
"line_byte_cap": 120
},
".claude/skills/pm-dispatch/references/filing-gate.md": {
"lines_before": 58,
"lines_after": 58,
"ceiling": 58,
"edited_line_bytes_before": 97,
"edited_line_bytes_after": 119,
"line_byte_cap": 120
}
},
"gates": {
"measured_at": "1be1a7d",
"results": {
"node scripts/check-closing-keyword-parity.mjs": 0,
"node scripts/check-closing-keyword-parity.mjs --self-test": 0,
"node scripts/check-comment-mask-corpus.mjs": 0,
"node scripts/pm/check-governed-queue-guard.mjs --self-test": 0,
"node scripts/pm/check-harness-current.mjs --self-test": 0,
"pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0,
"pnpm check:agent-test-spelling": 0,
"pnpm check:cross-package-test-inputs": 0,
"pnpm check:doc-authoring": 0,
"pnpm check:driver-memory-census": 0,
"pnpm check:gitlink-declared": 0,
"pnpm check:nul-bytes": 0,
"pnpm check:pm-expected-skips": 0,
"pnpm check:pm-governed-merges": 0,
"pnpm check:pm-governed-prose": 0,
"pnpm check:pm-skill-id-lint": 0,
"pnpm check:pm-skill-ratchet": 0,
"pnpm check:refd-timer-probe": 0,
"pnpm check:skill-frame-sync": 0,
"pnpm check:watch-hint-literal": 0,
"pnpm check:pm-settings-deny-roster": 0
},
"doc_formula_first_attempt": "exit 3 PREREQUISITE NOT MET (formula/lint dist absent), so it did not count as a measurement; built under os-verify-lock (VERDICT command-exit 0), then re-ran and got exit 0",
"dispatch_gates_ran_reconcile": "20 derived, 20 run, 0 NOT-MEASURED (a DERIVED zero); pm-settings-deny-roster was run beyond the derived union",
"pre_push": "check:commit-card-trailers passed (1 commit message, no card relation, no model identifier)",
"ci_at_report": "25 check runs on 1be1a7d: 12 success, 8 skipped, 5 in_progress (Lint & Repo Gates, Check Changeset among them); Governed Surface Queue Guard success"
},
"tests": "Docs-only diff, so no package test or typecheck is owed. The skill-face gates exited 0: check:pm-skill-ratchet, check:pm-governed-prose ('2 instruction surface(s) name all 6 registered governed surfaces'), check:pm-skill-id-lint ('34 file(s) clean') and check:nul-bytes ('no raw ASCII control bytes'). All 20 derived commands exited 0 at 1be1a7d. Acceptance grep: git grep -n 'claude\[bot\]' -- .claude/skills/pm-dispatch hits only platform-readings.md:130, :132 and :136.",
"mcp_calls": "0 (no MCP tool was called)",
"writes": {
"git_push": [
"empty-branch probe at 1f89ba0 (new branch)",
"1be1a7d (1f89ba0..1be1a7d)"
],
"relay_dispatches": [
"pr_create, fleet-write run 35878120573, conclusion success: draft PR 19890, author objectstack-fleet[bot], stored body byte-identical to the sent body (6718 bytes)",
"pr_request_reviewers [os-zhuang, hotlong], run 35878209428, conclusion success; read back as requested_reviewers [hotlong, os-zhuang]"
],
"comments": [
"this os-dev-report on issue 19881 via scripts/pm/post-stamped.mjs"
],
"labels": 0,
"pr_body_edits": 0,
"ready_or_automerge": 0
},
"api_writes": "3 relay strokes, each a POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]: POST /pulls; POST /pulls/19890/requested_reviewers; POST /issues/19881/comments (this report). No other REST writes.",
"deviations": [
"Commit trailers: used AGENTS.md's model-free pair (session-URL trailer + 'Co-authored-by: Claude' at noreply@anthropic.com), not the dispatch's model-named Co-Authored-By. The pre-push check:commit-card-trailers refuses a model identifier in that pair.",
"PR body footer: used the AGENTS.md session-URL form under a rule line, not the dispatch's emoji line plus bare URL. It carries the same session URL.",
"SKILL.md:94 drops the user-token clause: with the pacing half byte-identical (67 B), fleet identity + that clause + an AGENTS.md pointer needs 127 B against the 120 B ratchet cap. SKILL.md:92 and filing-gate.md:31 still cover it. The scripts/pm doors are not enumerated on :94 either; the AGENTS.md pointer names them.",
"Optional note under filing-gate.md:9 not added: file headroom is 0 and line 31 is now 119 B.",
"Tier: the dispatch said Tier H, but the register (GOVERNED_SURFACES in scripts/pm/check-governed-merges.mjs) rows .claude/** as Tier S. The PR stays draft, and reviews were requested as dispatched.",
"skip-changeset not applied: the write budget has no label write. Check Changeset is expected red until the seat applies it; the diff is .claude/** only and publishes nothing.",
"The empty-branch probe push ran before pnpm install registered core.hooksPath. It carried zero commits beyond origin/main. The commit push ran with hooks.",
"Report shape: the union of the os-dev role template and the dispatch's nine machine-checkable fields; the role file says it wins on conflict."
],
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
docs(pm-dispatch): name objectstack-fleet[bot] as the write identity (o…