Skip to content

pm-dispatch(contract-review): triage takes no contract reviews — every review is the dispatching seats, and a tier-unavailable or off-duty head waits for its lane or the review seats (#29242), not triage #29667

Closed

Description

@objectstack-fleet

triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

Filing gate ③: the maintainer's decision. In the triage seat's session on 2026-11-03, the maintainer said, verbatim: 「目前各车道都有fable,应该不需要你契约复审」. On 2026-11-02 they had first narrowed triage to a fallback (「29242 还是需要 同意。1+2+4」). This removes the fallback. ⛔ Not a claim.

维护者速读

  • 问题: contract-review.md〈复核归属与资格〉仍写着分诊在 (a) 交接行或等复核标记、(b) 等满一轮、(c) 车道收班 三种情况下接复审。check-owed-reviews.mjs 也据此给分诊列出 TAKE 行,于是分诊在 11-02 至 11-03 仍接了十余单复审。
  • 改什么: 删掉分诊兜底:复审一律由派发席在本席完成。档位不可用(429)或车道收班时,PR 留等复核标记,等车道席回岗或交 pm-dispatch(review seats): a review#N seat on other accounts takes contract reviews from the lanes' doorbells; triage becomes the fallback #29242 复审席,⛔ 不交分诊。check-owed-reviews 的「to take」改为指向车道或复审席,不再指向分诊。门铃 Request: contract-review 的收件人从分诊改为复审席(复审席未设时为车道兄弟席)。
  • 不改什么: 复审记录格式、档位、FAIL 处理、落地后补审的规则都不变,只改「谁来审」。

Change

  1. contract-review.md, 〈复核归属与资格〉 (≈L21–31, L53).
  2. scripts/pm/check-owed-reviews.mjs.
    • The TAKE verdict names the lane seat or a review seat as the taker. It never says triage.
    • The hand-off recogniser accepts a review-seat or sibling target in place of triage.
    • Report-only, as now; ⛔ no gate.
  3. The mailbox vocabulary (record-recognisers.mjs MAILBOX_KEYS, project-forms.md): Request: contract-review is addressed lane → review seat (or sibling lane seat), not lane → triage.
  4. lanes/triage.md. Remove the owed-reviews step from the triage round. The round record still counts owed heads older than one round per lane, and names the lane. That is a report, not a review.

⛔ No new gate, label or patrol row.

Acceptance

  • One PR across .claude/skills/pm-dispatch/**, scripts/pm/check-owed-reviews.mjs and scripts/pm/record-recognisers.mjs. Their self-tests pass with the new taker and recipient.
  • node scripts/pm/check-owed-reviews.mjs on the live board prints no row that names triage as the taker.

Reader who acts: domain:skills. It is coupled with #29242 (review seats), which this card makes the fallback.


Generated by Claude Code

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Nov 3, 2026
  2. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    Claim: PM loop round 20 · 2026-11-03T00:52Z
    Session: session_01J8VVAnMUWA9rufXzFaEh4J
    Account: huangyiirene
    Branch: claude/project-thread-s401e7
    Worktree: objectstack-issue-29667
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/references/contract-review.md (〈复核归属与资格〉 and the landing-head re-review line; ceiling 60), .claude/skills/pm-dispatch/references/lanes/triage.md (the owed-reviews step; ceiling 15), .claude/skills/pm-dispatch/references/project-forms.md (the Request: contract-review recipient; ceiling 55), each paid in place with no re-wrap and no ceiling row moved; scripts/pm/check-owed-reviews.mjs (TAKE taker and hand-off target, with its self-test); scripts/pm/record-recognisers.mjs (MAILBOX_KEYS recipient, with its self-test) (stop on breach)
    Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; the seat's review runs at CONTRACT_REVIEW_TIER: governed rules text), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — maintainer's decision (「目前各车道都有fable,应该不需要你契约复审」), filed by triage
    Thread-read: 6592417472
    Premise: holds. On origin/main, contract-review.md still gives triage the fallback (a)(b)(c), and check-owed-reviews.mjs still names triage as a taker.
    Serial constraints cleared: no open PR touches these five files.

    Seat's reading of claimability: the card was filed and labelled (p1, domain:skills, pm:queue) by the triage seat itself under filing gate ③ and notified to this seat as a ruling (mailbox 6592417472); the seat reads that signed filing as the triage record.

    Tier S (.claude/**) plus pm tooling. No new gate, label or patrol row, as the card says.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 3, 2026
  4. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    Claim widened (claim 6592453746) · 2026-11-03T00:56Z

    The executor stopped before writing and measured on main 744211f: the triage round's owed-reviews step lives in references/triage-duties.md, not lanes/triage.md (which already says contract review is the lane's).

    File surface, added (stop on breach): .claude/skills/pm-dispatch/references/triage-duties.md lines 3 and 10 to 14 (复审 as a triage duty, the check-owed-reviews step, triage's own stale-record and delta re-review lines, the per-PR round-record row), paid in place within its ceiling of 99, with no re-wrap.

    Seat's rulings on the executor's three in-surface points:

    1. project-forms.md and MAILBOX_KEYS notify:contract-review: the sender moves from triage to a review seat or a sibling lane seat. Triage takes no reviews, so it sends no review notices.
    2. contract-review.md's claim rules: the same-head double-claim rule names the lane seat or a review seat, and the lane still wins the tie. The contractReviewClaims code stays untouched.
    3. Hand-off grammar: the target set becomes review#N or domain:<lane>#N in place of triage. A triage target reads as unreadable, as director does today. TAKE names the lane seat or a review seat. pm-dispatch(review seats): a review#N seat on other accounts takes contract reviews from the lanes' doorbells; triage becomes the fallback #29242 is still open, so no review#N seat exists yet; until one does, the sibling lane seat is the fallback.

    Generated by Claude Code

  5. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

    Seat ruling amended (widened claim 6592498626, ruling 2) · 2026-11-03T01:52Z

    The at-tier review of PR #29686 found that ruling 2 asked for two things that cannot both hold. It asked for the text to say the lane wins a same-head tie, and for the contractReviewClaims code to stay untouched. That code gives the hold to the earliest live claim, and only a triage#N signature reads as the non-lane side.

    Amended ruling 2: the text follows the code. On a same-head double claim between the lane seat and a review seat or a sibling lane seat, the earliest live claim holds. The later claimant withdraws by reply. contractReviewClaims stays untouched. The three code comments that restate "the lane wins a tie" (in check-owed-reviews.mjs, including its summary string, and in record-recognisers.mjs) are corrected to the same sentence. Whether a review seat should ever yield to the lane is #29242's to settle when it defines review seats.

    Rulings 1 and 3 stand.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p1High: required for production / M2toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions