Skip to content

pm-dispatch: SKILL.md:94 and filing-gate.md:31 still name claude[bot] as the write identity — AGENTS.md says every write leaves as objectstack-fleet[bot] #19881

Closed

Description

@objectstack-fleet

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/, as objectstack-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

  1. SKILL.md:94: state that the write identity is objectstack-fleet[bot] through the scripts/pm/ write doors (issue-create, label-write, post-stamped, close-cards, and with-fleet.sh for 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.
  2. references/filing-gate.md:31: make the same identity statement for filing cards, opening PRs and commenting.
  3. references/filing-gate.md:9 is a verbatim maintainer quote from 2026-09-21 that names claude(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 to objectstack-fleet[bot] (AGENTS.md).
  4. Re-read references/filing-gate.md:32-33 and references/platform-readings.md:130-136 against 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 as claude[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-dispatch returns no line that prescribes claude[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

  1. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: direct dispatch (session operator instruction, quoted in the card body)
    Session: session_01X7HwfPLpQtCixDMrRGkSbe
    Branch: claude/lucid-turing-izrwob
    Worktree: objectstack-issue-19881
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/filing-gate.md (read-only check of references/platform-readings.md; stop on breach)
    Container & model: S (one-line-class mechanical governed edit), mode:subagent, model: opus — dispatch-gates --tier derived claude-fable-5-1 from SKILL.md (clause ①); taking its one-line-class mechanical exit, compensated by a skill-face review at the mandated tier before the maintainer read
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: none on these two files; in-flight domain:skills #19824 (scripts/pm/close-cards) does not touch them

    The 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

  2. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  3. added a commit that references this issue on Sep 28, 2026
    ad6e234
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions