diff --git a/AGENTS.md b/AGENTS.md index da934f618bf..973eb892651 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -400,7 +400,7 @@ a PM dispatch sets the assignee (step 1) and posts the `Claim:` naming the dev's both on the dev's behalf. A dispatched executor inherits both records: it verifies that the newest `Claim:` names its branch (on a mismatch it stops and reports), posts no second claim — the dispatch's `Claim:` is its identity and its own record is the report comment — and it ⛔ never -writes the card's assignee (nor the PR's: `pr_create` carries none; the seat sets it at hand-over, +writes the card's assignee (the PR's is the claim's `Account:`, carried by `pr_create`; hand-over is the seat's, `.claude/agents/os-dev.md` rule 2) and ⛔ never yields a card it was dispatched to. Before writing code, re-read the comments — the comments decide, not the field: a `Claim:` from another session or branch (other than the dispatch that sent you) means taken whatever the field says — pick another or diff --git a/scripts/pm/fleet-write/ops.mjs b/scripts/pm/fleet-write/ops.mjs index e646a70149b..f9fc9905ab4 100644 --- a/scripts/pm/fleet-write/ops.mjs +++ b/scripts/pm/fleet-write/ops.mjs @@ -122,9 +122,10 @@ * author (pm-dispatch SKILL.md, ACCEPT 之后的路径分叉 ③). The maintainer, * verbatim: 「应该是开发完了你审核通过才会推送给我审核」. So the draft open * summons nobody: a `pr_create` is the create plus the legs the caller spelled, - * nothing reads the pull's files there, and a dev's `pr_create` carries no - * `assignees` at all — the seat's own account is never assigned to or - * requested on a pull. The one follow-up left is `pr_ready`. The platform + * nothing reads the pull's files there, and a dev's `pr_create` carries the + * claim's `Account:` as its `assignees` (ruling A on #29828, os-dev.md rule 2; + * hand-over is the seat's) — the seat's own account is never requested on a + * pull as a reviewer. The one follow-up left is `pr_ready`. The platform * summons a code owner only when a pull is opened READY or marked ready for * review — measured on this repository's own Tier H pulls, the CODEOWNERS * request arrived at `ready_for_review` and never at the draft create — and a @@ -2122,7 +2123,7 @@ export const OPS = Object.freeze({ optional: Object.freeze(['body', 'assignees', 'labels']), // ⛔ No `governedReview` here (header: "The governed-review follow-up"): the draft open summons nobody. A human // sees the pull at the seat's hand-off — `pr_request_reviewers` after ACCEPT + a same-head PASS — and a dev's - // create carries no `assignees`; the leg stays for the author-is-approver fallback, never for a seat's account. + // create carries the claim's `Account:` as `assignees` (ruling A on #29828); never a reviewer request on the seat. // `draft: true` is FORCED — a seat cannot open a ready PR through the relay. requests: (a, repo) => [ { verb: 'POST', path: `/repos/${repo}/pulls`, body: { title: a.title, head: a.head, base: a.base, ...('body' in a ? { body: a.body } : {}), draft: true } },