Repository navigation
Description
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Filing gate: ③ a task the maintainer assigned directly (a pm rule change, filed because the maintainer named it). The maintainer asked in the triage session, verbatim, 「契约复审我想分拆到其他账户,怎么处理。」. Triage offered three shapes:
- A: lanes review their own PRs;
- B: dedicated review seats;
- C: lanes cross-review each other.
The maintainer ruled 「选 B,立卡」.
Reader: domain:skills. Files:
.claude/skills/pm-dispatch/references/lanes/(a newreview.md);references/contract-review.md〈复核归属与资格〉;references/project-forms.md(the seat word, and the mailbox key routing);references/lanes/triage.md;scripts/pm/check-owed-reviews.mjsandscripts/pm/fleet-roster.mjs(the roster row).
Dedupe (open AND closed): review seat in:title and contract-review seat in:title find no card on a review seat.
⛔ Not a claim.
Why
Since the maintainer's 2026-11-01 ruling 「你有fable 了,后续定时契约复审还是归你」, lanes hand every review to the triage seat by doorbell (Request: contract-review). On 2026-11-02 the triage seat ran about twenty CONTRACT_REVIEW_TIER reviews alone, beside its hourly rounds and gradings. All of them ran on one account and one session, so they competed for one write budget and one model quota. The rule already lets any seat that reaches the tier review. What is missing is a seat whose only job is reviewing, on other accounts.
The rule
- A review seat. Seat word
复核(lane filelanes/review.md), seatsreview#1,review#2and so on, one seat post each, held on any account that hasCONTRACT_REVIEW_TIER(fable) access.- Each seat runs its session at effort
high, as pm-dispatch(seats): the triage seat and every lane PM seat run at efforthigh; a dispatched os-dev keeps its per-card effort (floorxhighfor protocol-semantics ordocs/adr/**cards) #28901 requires, and its review subagents atCONTRACT_REVIEW_TIER. A declaration-face-only review runs atTIER_DEFAULT, as today. - Each seat opens a
pm:mailboxPR.
- Each seat runs its session at effort
- Routing.
- Lanes ring
Request: contract-reviewto a review seat's mailbox instead of triage's. Any free review seat may take it. - Mutual exclusion uses the existing claim line. The first
Contract-review-claim:on a head wins, and the "same head, lane wins" rule extends to "the earlier claim wins" between review seats. - With no review seat seated, the bell goes to triage, as today.
- Lanes ring
- Owed-review scan.
check-owed-reviews.mjs(a)(b)(c) offers a PR to review seats first. Triage takes it only when no review seat is seated, or when the PR has waited one further triage round past (b) with no claim. Triage remains the fallback reviewer, and its records keep the same shape. - The same reviewer owns the delta re-review, as today. If a review seat goes off duty with a stale record, the next review seat takes the delta, and the hand-off line names it.
- Independence: a review seat never reviews a PR its own account dispatched or implemented. Records keep the
Implemented-by:/Reviewed-by:pair. - What review seats do not do: merge, ready or dispatch PRs; grade cards; or take any human-floor action. The security-finding rule (pm-dispatch(security): one fleet-wide rule for security findings — never a card, never a public mechanism; tracked as a GitHub draft security advisory, fixed by a no-card pm-dispatch order #29111) applies: mechanisms stay rule-level in records, and detail goes in the reviewer's local note.
- Roster:
fleet-roster.mjsshows review seats as rows like the lanes, with in-flight = claimed heads. - ⛔ No new gate and no new label (「新增门禁默认否」).
Acceptance
lanes/review.mdexists with points 1–6.contract-review.md,project-forms.mdandlanes/triage.mdpoint at it.check-owed-reviews.mjsprints the review-seat-first routing. Its self-test covers the case with no review seat seated, which falls back to triage.fleet-roster.mjslists review seats.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:skills#3 · os-support-ai · session_01WGufzhd2Ad9ANGTyAMW7pH
Claim: PM loop round 6 · 2026-11-03T17:23Z
Session:
session_01WGufzhXV3ABCbTkU1iRRn7(os-dev card thread "Add review seats for contract reviews"; dispatched bysession_01WGufzhd2Ad9ANGTyAMW7pH)Account:
os-support-aiBranch:
claude/project-thread-ypvuqeWorktree:
objectstack-issue-29242Domain:
domain:skillsSeat:
domain:skills#3File surface: NEW
.claude/skills/pm-dispatch/references/lanes/review.md;references/contract-review.md〈复核归属与资格〉;references/project-forms.md(seat word,Request: contract-reviewrouting);references/lanes/triage.md(fallback reviewer, only after PR #29940 merges);scripts/pm/check-owed-reviews.mjs;scripts/pm/fleet-roster.mjs;scripts/pm/check-skill-line-ratchet.mjs(the new file's row, ruled raises only); no changeset (skip-changeset)Container & model:
L,mode:thread,model: CONTRACT_REVIEW_TIER — reason: governed pm rules text plus review routing scripts (per-card call; --tier: no path mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds — maintainer ruled 「选 B,立卡」 (card body); no
lanes/review.mdand no review-seat routing incheck-owed-reviews.mjson origin/main 1f6bc5aSerial constraints cleared: PR #29940 (this seat, #29682) holds
lanes/triage.mdin the merge queue; this card edits that file only after #29940 merges. No other open PR touches the surface (measured 2026-11-03T17:18Z)objectstack-fleet commentedon Nov 3, 2026
domain:skills#3 · os-support-ai · session_01WGufzhXV3ABCbTkU1iRRn7
os-dev-report
Stamp: 2026-11-03T18:25Z
PR #29967 (draft,
skip-changeset, no assignees) · head9da0cd8c3b78a1eb2e0454fffe0fa688add628c8· basemainat82f60ebb(merged into the branch after #29940 landed).{ "pr": 29967, "head": "9da0cd8c3b78a1eb2e0454fffe0fa688add628c8", "gates": { "derived": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (final head, 11 paths, 55 commands)", "ran": "55 derived families accounted for: 54 run exit 0, 1 NOT-MEASURED (pnpm --filter @objectstack/lint run check:doc-formula-expressions, recorded exit 3, prerequisite not met in a fresh worktree)", "extra": { "pnpm check:pm-skill-ratchet": 0, "pnpm check:pm-skill-id-lint": 0, "pnpm check:pm-half-states": "0 (5222 cases)", "pnpm check:pm-record-recognisers": "0 (366 cases)", "node scripts/pm/check-owed-reviews.mjs --self-test": "0 (78 cases, 10 batteries)", "node scripts/pm/fleet-roster.mjs --self-test": "0 (110 cases, 9 batteries)", "node scripts/pm/mailbox-open.mjs --self-test": "0 (83 cases, 10 batteries)", "node scripts/pm/check-skill-line-ratchet.mjs --self-test": 0, "npx eslint (6 edited scripts)": 0 } }, "line_budget": { "references/contract-review.md": "60/60", "references/project-forms.md": "59/59", "references/lanes/triage.md": "20/20 (edited after #29940 merged; line 15 = 117 bytes)", "references/lanes/review.md": "21/21 (new CEILINGS row at 21, MAX_TABLE_ROW_BYTES pin 0)", "raises": "none", "widest_line_bytes": 120 }, "deviations": [ "The card's rule 2/3 and acceptance say the fallback reviewer is triage (also the order's 'triage becomes the fallback reviewer' and the acceptance's 'falls back to triage'). Built as: fallback = the lane's own seat (a sibling lane seat), never triage. Reason: origin/main already says 车道或复审席接,⛔ 非分诊 (contract-review.md) and ⛔ 分诊不再审 (triage-duties.md), and the maintainer's later word on 2026-11-03: 「目前各车道都有fable,应该不需要你契约复审」. Agreed with skills seat 3 before building; declared in the PR body." ], "files_changed": [ ".claude/skills/pm-dispatch/references/lanes/review.md (new, 21 lines)", ".claude/skills/pm-dispatch/references/contract-review.md", ".claude/skills/pm-dispatch/references/project-forms.md", ".claude/skills/pm-dispatch/references/lanes/triage.md", "scripts/pm/check-skill-line-ratchet.mjs", "scripts/pm/mailbox-open.mjs", "scripts/pm/check-half-states.mjs", "scripts/pm/record-recognisers.mjs", "scripts/pm/check-owed-reviews.mjs", "scripts/pm/fleet-roster.mjs", "scripts/pm/fleet-roster.fixture.json" ], "declarations": { "Clause-②": "no", "Metadata-protocol": "none", "changeset": "none (skip-changeset)" }, "writes": { "git push": 2, "relay pr_create": 1, "post-stamped comment": 1, "github_mcp_writes": 0 }, "mcp_calls": "GitHub MCP reads only: issue_read ×1, pull_request_read ×3", "security_findings": "none" }objectstack-fleet commentedon Nov 3, 2026
domain:skills#3 · os-support-ai · session_01WGufzhd2Ad9ANGTyAMW7pH
Seat status · PR #29967 landing · 2026-11-03T18:56Z
Fixes #29242closes this card on merge.