Skip to content

Commit a04e9d7

Browse files
objectstack-fleet[bot]os-support-aiclaude
authored
docs(agents): one home for who sets a PR's assignee — the seat at hand-over, never the dev's pr_create (#29832)
<!-- claude-projects-attribution: {"github_login":"os-support-ai"} --> _Requested by **Yibo Wang** · [project thread](https://claude.ai/code/project/chan_01BVUyyPie8gHwoPM18iABwB?thread=cmsg_01BVUyyPie8gHwoPM18iABwBC8KTqre1nCUc6EkLo7CcKT)_ Fixes #29367 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:两份代理说明书对「PR 的 assignee 谁来设」说法相反,现在只剩一处规则:dev 的 `pr_create` 不带 assignees(中继虽然收这个键),PR 上的人由席位在交棒时设;AGENTS.md 的括注改为指向 `.claude/agents/os-dev.md` 规则 2,不再反向复述。 - 为什么改:dev 照一份做就违反另一份,每张卡的报告都要再争一次;中继 `pr_create` 行的注释与 pm-dispatch 技能的路径分叉都站在 os-dev.md 一边,AGENTS.md 那句是过期的。 - 风险与回滚:仅两份说明文本各改一行到两行,无代码、无协议、无 changeset;回滚即还原本 PR。 - 先看:`AGENTS.md` 认领段落第 403–404 行的括注;`.claude/agents/os-dev.md` 第 38 行(规则 2 的 PR 子条)。 - 两分钟验证:`pnpm check:pm-skill-ratchet` 与 `pnpm check:pm-skill-id-lint` 都绿(两文件仍在各自上限:1050 行与 405 行,每行 ≤120 字节);`grep -n "mirrors the card" AGENTS.md` 无结果。 - 需要你做的:Tier H(`AGENTS.md`):席位 ACCEPT 与契约复审 PASS 后,需 GOVERNED_APPROVERS 账号批准一次。 ## What changes - **`AGENTS.md`, claim paragraph (lines 403–404).** The parenthetical "the PR's assignee mirrors the card's, set by the executor at `pr_create`" becomes "nor the PR's: `pr_create` carries none; the seat sets it at hand-over, `.claude/agents/os-dev.md` rule 2". The paragraph now references the one home instead of stating the rule the other way round. Net 0 lines; the two rewritten lines are 98 and 113 bytes. - **`.claude/agents/os-dev.md`, rule 2, line 38.** The PR clause gains the relay fact and names the actor: `PR ⛔ 不带 assignees(中继虽收),席位交棒才派。` — the relay's `pr_create` op accepts an `assignees` key, the rule is that a dev does not send it, and the seat assigns at hand-over. Net 0 lines; the line is 119 bytes. Nothing else moves: the write-budget line (os-dev.md line 62, `⛔ 无 assignees`) and the pm-dispatch SKILL.md path fork (`pr_create` 不请不派; ③ 请审 = 席位交棒) already agree with the home and are untouched. ## Why The card's "done when": one rule, stated in one place and referenced from the other, saying who sets the PR assignee and whether the relay's `pr_create` accepts it. The seat's reading of the governing text (not re-rulable in this card): `.claude/skills/pm-dispatch/SKILL.md` 〈路径分叉〉 and os-dev.md rule 2 agree that the dev's create carries no assignee and the seat hands the PR over, so the AGENTS.md parenthetical was the stale side and os-dev.md rule 2 is the home. Measured on the relay: `scripts/pm/fleet-write/ops.mjs` lists `assignees` among `pr_create`'s optional keys (the create plus an assignee leg on the pull's issue endpoint) and its header states in so many words that a dev's `pr_create` carries no `assignees` — so "accepts it" is true and the rule is about not sending it, which is what the home now says. ## Verification Head `507f74ae` = `origin/main` @ `b0ef25f5` + this one commit; the branch was fast-forwarded onto main before the commit, so there is no merge commit. `git merge-tree` against `origin/main` at open: clean. PR #29717 (#29709) edits the AGENTS.md roles table around line 730; this diff touches lines 403–404 only. <details><summary>Derived gates — `dispatch-gates --commands` on the diff, 23 commands, all run on the final base, `--ran` verdict: 23 run, 0 NOT-MEASURED</summary> ``` node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0 node scripts/pm/check-harness-current.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:agent-model-declared :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:commit-card-trailers :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:docs-audit-scope :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-governed-prose :: exit 0 pnpm check:pm-skill-id-lint :: exit 0 pnpm check:pm-skill-ratchet :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:required-contexts :: exit 0 pnpm check:skill-frame-sync :: exit 0 pnpm check:watch-hint-literal :: exit 0 ``` `check:doc-formula-expressions` first answered exit 3 (prerequisite: `@objectstack/formula` and `@objectstack/lint` not built — nothing measured); after `turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` it ran and answered 0. The ratchet reads `AGENTS.md is 1050 lines (ceiling 1050; headroom 0)` and `.claude/agents/os-dev.md is 405 lines (ceiling 405; headroom 0)`, every line within the 120-byte budget. </details> ## Acceptance notes - **Line budget, measured against the order.** The order allowed os-dev.md net ≤ +1; the ratchet's ceiling for that file is 405 at a count of 405 (headroom 0), and AGENTS.md's is 1050 at 1050 — the order's "1117" ceiling for AGENTS.md is not what `check-skill-line-ratchet.mjs` holds. So both files are edited at net 0 lines, with no re-wrap of untouched lines; the AGENTS.md change reflows only the two lines that carried the parenthetical. - **No restatement moved.** os-dev.md line 62 keeps `⛔ 无 assignees` inside the write budget; it is the budget's own spelling, in the same file as the home, and deleting it would buy nothing the ceiling needs. - **No issue numbers** were added to operative text (`check:pm-skill-id-lint` green). - Changeset: none (`skip-changeset`; two instruction files, no package moves). ## Human Minimum Tier H (`AGENTS.md`): after the seat's ACCEPT and a same-head contract-review PASS, one `GOVERNED_APPROVERS` approval. Nothing else needs a human. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01WGufzfNGqqzsW5spZyt9Xd Co-authored-by: os-support-ai <support@objectstack.ai> Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4e0c5d3 commit a04e9d7

2 files changed

Lines changed: 3 additions & 3 deletions

File tree

‎.claude/agents/os-dev.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ model: opus
3535
- 同批 agents 共用一个 scratchpad 目录,自然命名的文件会被彼此静默覆盖。
3636
2. **卡 assignee 归 PM。** 派发原子对已把它设好;共享身份下该字段答不了是谁。
3737
- 你的身份位是认领评论里的分支;仓 CLAUDE.md 的 claim-first 已由 PM 的认领满足。
38-
- 恒不写卡的 assignee(空也开工,报 `summary`);PR ⛔ 不带 `assignees`,人经席位交棒才见 PR。
38+
- 恒不写卡的 assignee(空也开工,报 `summary`);PR ⛔ 不带 `assignees`(中继虽收),席位交棒才派。
3939
- 发现与他人在途工作重复,停下报 `blocked`。
4040
- PR 上不是你设置的状态属于另一个 actor:⛔ 永不去纠正;疑问进报告,挡住报 blocked。
4141
- 回退他人的操作(尤其 ready 翻转)永不轮到你;把意外写进 `summary`。

‎AGENTS.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,8 @@ a PM dispatch sets the assignee (step 1) and posts the `Claim:` naming the dev's
400400
both on the dev's behalf. A dispatched executor inherits both records: it verifies that the
401401
newest `Claim:` names its branch (on a mismatch it stops and reports), posts no second claim —
402402
the dispatch's `Claim:` is its identity and its own record is the report comment — and it ⛔ never
403-
writes the card's assignee (the PR's assignee mirrors the card's, set by the executor at
404-
pr_create) and ⛔ never yields a card it was dispatched to. Before writing code, re-read
403+
writes the card's assignee (nor the PR's: `pr_create` carries none; the seat sets it at hand-over,
404+
`.claude/agents/os-dev.md` rule 2) and ⛔ never yields a card it was dispatched to. Before writing code, re-read
405405
the comments — the comments decide, not the field: a `Claim:` from another session or branch
406406
(other than the dispatch that sent you) means taken whatever the field says — pick another or
407407
ask, ⛔ never reassign; a bare assignee with no `Claim:` under it is a dispatch's step 1, not a

0 commit comments

Comments
 (0)