Repository navigation
pm-dispatch(contract-review): triage takes no contract reviews — a hand-off names a review seat or a sibling lane seat - #29686
Conversation
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head cf3a139 · 2026-11-03T01:31Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed, commented or labelled), fed the card body and comments, the PR body, the net diff against the merge-base, the head's check-runs, contract-review.md (base and head) and review-checklist.md. The PR body's measurements were read as input, not as conclusions; every count below is this review's own measurement. No environment variable value and no model identifier is printed anywhere in this record. ① Derived judgments
② Semver levelNone. No published package, no ③ Boundary flags
④ Design judgmentPer hits file, against the card's scenario (the maintainer removed triage from contract review; who reviews must be stated once and read the same by the rule text, the hand-off line and the owed-review list) and the card's constraint (no new gate, label or patrol row):
Must-fix: M1 — make the rule text and the claim reader agree on who holds a tied head, on the code side and with no new gate: in Check-runs at record time (2026-11-03T01:51Z): 46 check-runs on cf3a139, 26 success, 20 skipped, 0 failure, 0 in progress; three reads over twelve minutes went 14 → 24 → 26 success (43 → 45 → 46 runs as the aggregate jobs appeared) with no non-success completion at any read. Success: Lint & Repo Gates, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests (the job running Implemented-by: VERDICT: FAIL Generated by Claude Code |
…aim, and the hand-off template is pinned The rule text now says what the claim reader does: when two claims are live on one head the earliest holds and the later withdraws. The comments that said the lane wins a tie follow it; the claim reader is unchanged. The hand-off template is exported as CONTRACT_REVIEW_HANDOFF_TEMPLATE and pinned verbatim against the rule text, with a case proving the template sent unedited is unreadable. Claude-Session: https://claude.ai/code/session_01J8VVAka2VdDFVA5VvZmmgK Co-authored-by: Claude <noreply@anthropic.com>
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 7df996e · 2026-11-03T02:15Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed, commented or labelled). This is a DELTA record: it judges cf3a139 → 7df996e against the full review of cf3a139 (comment 6593356996, VERDICT FAIL on M1, S1, S2) and the seat's amended ruling 2 (6593367094: the text follows the code — the earliest live claim holds, the later claimant withdraws by reply, ① Derived judgments
② Semver levelNone, unchanged from the full record. Governed rules text and two report-only ③ Boundary flags
④ Design judgmentAgainst the amended ruling (the text follows the code; nothing moves in
Must-fix: none. Should-fix: S3 — record-recognisers.mjs L2656–2660, the claim battery's preamble comment, still says 「triage takes only a review nobody is doing」 and 「pin the lapse arithmetic and the lane-wins tie」; rewrite the two clauses to the head's rule (the lane or a review seat reviews; the earliest live claim holds, a legacy Check-runs at record time (2026-11-03T02:28Z): 45 check-runs on 7df996e, all completed, 26 success, 19 skipped, 0 failure, 0 cancelled, 0 in progress; a second read a few minutes after the first gave the same counts. Success: Lint & Repo Gates, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests (the job running Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J
Requested by Irene · project thread
Fixes #29667
Clause-②: no
Metadata-protocol: none
维护者速读
review#N,未设复审席时点名本车道兄弟席domain:<lane>#N,⛔ 永不点分诊。check-owed-reviews的 TAKE 行给出接手者(交接行所点席,或车道席/复审席),不再指向分诊。信箱Request: contract-review与回程Notify: contract-review改为车道 ↔ 复审席或兄弟席。分诊轮次只按车道计欠审 head 数。contract-review.mdL21–28、L53;check-owed-reviews.mjs的takerOf;record-recognisers.mjs的HANDOFF_TARGET。pnpm check:pm-record-recognisers,预期四个自测全过。What changes
references/contract-review.md〈复核归属与资格〉. Triage's fallback (a)(b)(c) is gone, and so is its use in the landing-head re-review line (L53). The dispatching seat reviews in its own seat atCONTRACT_REVIEW_TIER. On a 429 it keeps the pending-review marker and posts the hand-off line naming a review seatreview#N, or a sibling seat of the lanedomain:<lane>#Nwhile none is seated, never triage. An owed head is taken by the lane seat or a review seat. An off-duty lane's owed heads go into its hand-over brief and wait for its next seat or a review seat. The claim lines (L26, L28) name the lane seat or a review seat. When two claims are live on one head, the earliest holds and the later claimant withdraws by reply (L28). This is whatcontractReviewClaimsalready does, and the seat amended its ruling so the text follows the code (6593367094).scripts/pm/check-owed-reviews.mjs. A TAKE row now names its taker (takerOf): the seat a hand-off on this head names; otherwisethe domain:<lane> seat or a review seat; when the lane seat is gone (c),a review seat, or the domain:<lane> seat next on duty. The hand-off column prints the named seat. Still report-only, exit 0.scripts/pm/record-recognisers.mjs. The hand-off target set changes from {triage} toreview#Nordomain:<lane>#N, with the number required. A line namingtriage(ordirector, or a seat with no number) is unreadable, so it hands the review to nobody.contractReviewHandoffnow readshandedwithtowhere it readtriage. InMAILBOX_KEYS,request:contract-reviewruns lane → a review seat (or a sibling lane seat while none is seated), andnotify:contract-reviewruns from the seat that rendered the record → lane.contractReviewClaimscode is untouched (seat's ruling); its doc comments now say the earliest live claim holds, and that a legacytriage#Nclaim yields to a later one. The hand-off template is exported asCONTRACT_REVIEW_HANDOFF_TEMPLATEand pinned verbatim against contract-review.md L22, the way the claim and hold templates are pinned.references/project-forms.md. L40 carries both contract-review doorbell legs, lane → review seat or sibling seat and back. L43 carries both triage legs,Request: triageandNotify: release-blocker. "Unsubscribed only" is dropped from L40 because L47 already says a recipient subscribed to the PR is never rung.references/triage-duties.md(added to the surface by the seat, comment 6592498626). The owed-review step L10 and the triage self-review rows L11–14 are replaced by two lines. The round record counts owed heads older than one round per lane and names the lane; that is a report, not a review. Delta re-reviews of triage's old records go to the lane seat or a review seat. L3 now says 定级复审 so it does not read as contract review.lanes/triage.mdis unchanged: its only review mention (L15) already says PASS/FAIL is the lane's.Line budget (no ceiling row moved, no re-wrap)
contract-review.mdproject-forms.mdtriage-duties.mdEvery edited line is at most 120 bytes. The exception is the hand-off template L22, a single code span (142 bytes; the template it replaces was 122), which the ratchet treats as unbreakable.
check:pm-skill-ratchetexits 0.Tests
node scripts/pm/record-recognisers.mjs --self-test: 355 cases pass (351 before). The hand-off battery's pin went from 13 to 17. New cases:domain:ui#2target reads, lower-cased, and hands the head to it;triageis unreadable on the thread, neverhanded;The closed-set case now covers
triage,director,reviewanddomain:uiwith no number.node scripts/pm/check-owed-reviews.mjs --self-test: 68 cases pass in 9 batteries (65 before). The triggers battery's pin went from 8 to 10, and the claims battery's from 5 to 6. Every TAKE case asserts its taker. New cases:triagehand-off line gives no (a) and never a triage taker;The report case asserts that no printed
take:names triage.pnpm check:pm-record-recognisers(record-recognisers, check-owed-reviews, mailbox-open, fleet-roster): exit 0.Live board
node scripts/pm/check-owed-reviews.mjson objectstack-ai/objectstack at 2026-11-03T01:04Z found 43 open PRs (28 drafts). 18 owe a review: 3 TAKE, 3 WAIT, 0 HELD, 12 DONE.take: the domain:server seat or a review seat(feat(notifications): push device registry — sys_user_device, the two device routes and the client methods #29628, fix(plugin-security): explain reports a Modify All-superseded row-conditioned field lock as binding on no row #29637) andtake: the domain:ui seat or a review seat(feat(fields, spec): show a referenceNameVisible lookup's served name as plain text, and offer its field-form row #29639).triage#1claim on a head that already has its record.Acceptance notes
review#Nseat on other accounts takes contract reviews from the lanes' doorbells; triage becomes the fallback #29242, on the seat's word.review#Nis not yet aseatKeyspelling, so a doorbell cannot be addressedTo: review#1until pm-dispatch(review seats): areview#Nseat on other accounts takes contract reviews from the lanes' doorbells; triage becomes the fallback #29242 lands the review seat. Until then the sibling lane seat is the fallback, as the rule text says.TRIAGE_ROUND_MINUTESkeeps its exported name; only its doc changed.Claude-Session:trailer pair. The branch isclaude/project-thread-*, so AGENTS.md §3 does not allow a force-push to reword them.Verification
Local gates on 7df996e: 40 derived, 40 run, all exit 0 (`dispatch-gates --ran`)
node scripts/pm/dispatch-gates.mjs --commandsderived 40 commands. All 40 ran with a 900 s timeout each, in a tree withpnpm install --frozen-lockfiledone and@objectstack/formulaand@objectstack/lintbuilt. Exit codes were recorded before any pipe, and all 40 exited 0.--ranprinted:40 derived famil(ies) accounted for — 40 run, 0 NOT-MEASURED.node_modules: nine exited 3 andcheck-self-test-workflow-commandsexited 1 because@changesets/cliwas missing. After the install and build, all ten were re-run and exited 0.successor skipped by path filter or opt-in. The required contexts that ran aresuccess: Lint & Repo Gates, TypeScript Type Check, Test Core, Test UI and Governed Surface Queue Guard. The UI build, lint and E2E contexts were skipped by path filter.🤖 Generated with Claude Code
https://claude.ai/code/session_01J8VVAka2VdDFVA5VvZmmgK
Generated by Claude Code