Repository navigation
fleet-write: relay pr_create asks the governed approvers to review a Tier H draft before any contract review exists, so an approver can approve and merge it unreviewed (#26566, #26570) #26617
Description
Filed by the domain:skills#2 seat (session_01LqKsGyMNFwwnbF5FTAqyPn, seat post #19287) on the maintainer's word in the seat thread, 2026-10-27 10:28Z: 「关键是还没有契约复审,你就推送给我审核了,这个是skills 的问题」, then 「只开卡,不要派发」. ⛔ Not a claim, ⛔ not a dispatch — the maintainer asked for the card only. Dedupe: the 400 most recently updated issues and PRs (open + closed), title and body grepped for requested_reviewers, governedReview, GOVERNED_REVIEW, review request, 请审, before the contract review → no card asks for this.
Business reason: a Tier H PR is put in front of an approver the moment it opens as a draft, before the independent contract review and the seat's ## 席位核对 exist. The approver reads a request to review as "ready for my approval", approves, readies and enqueues it, and it lands with no contract-review record. That happened twice on 2026-10-27 10:05Z: PR #26566 (card #26502, skills/**) and PR #26570 (card #26071 step iii, .github/workflows/**) were approved by os-zhuang at 2026-10-27 09:49Z–2026-10-27 09:51Z and merged with no ## Contract review on either (landing records 6439075580 on #26502, 6439087515 on #26071). The maintainer called it a pm-dispatch (skills lane) defect.
Where (origin/main at f9867020)
scripts/pm/fleet-write/ops.mjs: thepr_createrow carriesgovernedReview: true(L867, comment 「The draft open is the moment the platform's CODEOWNERS is silent」);pr_readycarries it too (L904).GOVERNED_REVIEW_OPS(L969) derives['pr_create', 'pr_ready']from those flags. The header section 「The governed-review follow-up」 (L95–L130) states the design: on a Tier H hit, request everyGOVERNED_APPROVERSaccount not already requested, assigned or reviewed — at the draft create, so 「a seat-driven Tier H pull」 does not wait 「on an approver nobody told」.scripts/pm/fleet-write/execute.mjs:requestGovernedReview(header L189–L210, body around L820–L858) reads the file list, plans against the register and sends therequested_reviewersPOST plus the author-assignee fallback..claude/skills/pm-dispatch/SKILL.mdL198: 「③ 中继pr_create/pr_ready命中 Tier H 即向GOVERNED_APPROVERS中未请/派/审者请审」 — the skill teaches the same timing.- Measured on the two PRs: the dev reports for skills(automation): the runAs 'system' guidance in objectstack-automation never says a system flow, hook or action body is refused identity-assignment writes #26502 (6437384338) and [Decision] Scheduled and bot workflows: the 4-hourly lint run repeats the push run, four daily patrols are four workflows, four PR-body guards are four runners — consolidate, and to what cadence #26071 (6437417906) both read 「reviewers hotlong and os-zhuang requested by the relay」 at
pr_create, hours before any review was due.
Wanted
The approver request for a Tier H PR moves from the draft open to the hand-off: it is sent only after the contract review PASS on the current head and the seat's ACCEPT are on the PR. Shapes for the implementer to choose between (say which in the PR body):
pr_createlosesgovernedReview; the follow-up runs atpr_readyonly, and the seat, at Tier H hand-off, sendspr_request_reviewers(the existing op) as the step that puts the PR in front of the approver. SKILL.md L198 and its neighbours say so, ⛔ inside the line ratchet (check:pm-skill-ratchet, SKILL.md at its ceiling — reword inside lines).- Or the follow-up stays on
pr_createbut sends nothing for a Tier H draft, and a new seat-side step (orpr_request_reviewers) requests the approvers once the records exist.
Either way: the H43 half-state row in check-half-states.mjs (the 「approver nobody told」 gap) must read the new timing — a Tier H draft with no contract review yet is NOT a half state; a Tier H PR with PASS + ACCEPT and no approver request IS. The execute.mjs / validate.mjs self-tests pin the new rows. ⛔ No change to GOVERNED_APPROVERS, to the queue guard, or to the draft-forcing of pr_create.
Acceptance: a relay pr_create of a Tier H draft sends no requested_reviewers POST (self-test and one live run quoted); the seat's hand-off step requests the approvers and the H43 row agrees; pnpm check:pm-dispatch-gates, execute.mjs --self-test, validate.mjs --self-test, check-half-states self-test and check:pm-skill-ratchet green.
Tier: .claude/skills/pm-dispatch/SKILL.md is a MANDATORY_TIER_GLOB row (CONTRACT_REVIEW_TIER); scripts/pm/fleet-write/** lands Tier S.
Related open reading, not this card: the approver can still enqueue a Tier H PR with no review record at all — the queue guard admits an authorised enqueue (#26230). This card only stops the relay from inviting that early.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
tooling·priority:p2·domain:skills·area:devpath·pm:on-hold· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T11:02Z⛔ Not a claim, ⛔ not a dispatch.
pr_createasks the governed approvers to review a Tier H draft before any contract review exists (maintainer: 「关键是还没有契约复审,你就推送给我审核了,这个是skills 的问题」). The likely shape: the review request waits until a same-head contract review PASS is recorded.pm:on-hold, notpm:queue: the maintainer said 「只开卡,不要派发」.Restart-when: the maintainer says to dispatch it.
Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Recurrence readings — three more Tier H PRs approved before the seat's record, 2026-10-28T09:03Z
Seat
domain:skills#2(session_01QSeKYmhU5KEj1nukYhp1Tg), timelines read in this act; the mechanism is the one this card names (the relay'spr_creategoverned follow-up requests the approvers at the draft open). ⛔ Not a claim; the hold stands until the maintainer's word.review_requestedbyobjectstack-fleet[bot])os-zhuangAPPROVED 2026-10-28T07:31Z, readied the same minute, enqueued 2026-10-28T07:43ZEach approval came within two minutes of the request, i.e. off the notification, with the dev's draft 速读 as the only reading; the seat's 前提实测 / check-run reading / accepted deviations landed 10–40 minutes later. The maintainer today, in the seat's session: 「审批人动作快于席位复核窗口,是因为skills的问题,还没有复核就提醒审批人审核了吧?」「我是看到有待审核pr就会进去点啊」 — the same finding as this card's 2026-10-27 words. The seat recommends shape 1 of 「Wanted」 (the request moves to the seat's hand-off, sent by
pr_request_reviewersafter PASS + ACCEPT on the current head;pr_createstops requesting) and asks the maintainer whetherRestart-when:is met. Hot-file note: SKILL.md L198 sits behind PR #27082 (L161/L162/L183) on the seat's serial queue;fleet-write/ops.mjsandexecute.mjsare free.Generated by Claude Code