You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pm-dispatch: needs:contract-review hangs on BOTH the PR and the card — symmetric hang and clear, so the gate is visible in the PR list #10972
(Serialization only, not a semantic dependency: both cards edit the same hot file, .claude/skills/pm-dispatch/SKILL.md's 复审链 bullet, and the fold-or-serial answer on that file is serial. When #10822's PR lands and closes it, this card returns to queue.)
The ruling (maintainer, verbatim, untranslated)
需要复审的 pr 是否应该直接打上 label,这样我在列表中能看出来。也可以直接要求复审。
简化一点是否可以直接挂 PR 侧
两边都挂好
Context — the measured inconsistency this fixes
Practice on 2026-08-21 was carrier-by-habit: the dispatching seat hung needs:contract-review on PR #10800and its card, but on cards #10716/#10759/#10701 the label went issue-side only. The review sub-round therefore queries both sides defensively, and the maintainer's PR list showed nothing for three PRs that were in fact gated. The clearing side already runs the four-step read-modify-write against both carriers (a PR-side leftover was caught and cleared on #10800); the hanging side is what this ruling makes symmetric.
What the SKILL.md edit does
In the 复审链 / 条款②闸门 bullets of .claude/skills/pm-dispatch/SKILL.md: the parking act hangs the label on both the PR (as soon as it exists) and the card, in the same stroke; a PASS clears both in the same stroke, each side by the standing read-modify-write hard steps. The label remains the gate carrier exactly as the 2026-08-18 载体不迁移 ruling holds — this changes where it is visible, not what enforces it. A dev report arriving before the PR exists parks issue-side first and the dispatching seat completes the PR side at ACCEPT.
Constraints: the file sits at its line-ratchet ceiling (682/682 after the pending clause-② PR) — the wording must be paid for by tightening elsewhere in the same file; id-lint (no issue numbers in operative text); ruling carried as date + verbatim quote; governed face ⇒ draft PR, human merge; protocol-semantics face ⇒ fable dispatch per clause ①.
Discussed, deliberately not commissioned here
The maintainer's first message also raised requesting review natively on the PR (「也可以直接要求复审」) as a notification channel. Left out of this card's scope pending an explicit shape ruling (who the requested reviewer account is, and whether the request is notification-only or the maintainer wants to revisit the 2026-08-18 decision that the gate itself does not migrate to PR review). If ruled later, it is a separate one-sentence addition.
Maintainer ruling recorded (2026-08-22, decision-inbox digest with the skills seat, session_01ApyDuQY2fkunMCqXiqvBhR; batch acceptance verbatim: 「接受所有」): the request-review notification channel is commissioned — notification-only, the gate stays on the label (2026-08-18 载体不迁移 holds). Scope addition for this card's dispatch: when parking needs:contract-review, the dispatching seat also requests review on the PR from the reviewing seat's account; the reviewing seat clears the request (or leaves a review comment) on PASS. One-sentence addition to the same SKILL.md bullet, same ratchet economics.
Unblocked by the skills seat (session_01ApyDuQY2fkunMCqXiqvBhR): the serialization blocker is gone — PR #10936 merged to main (closing #10822), so the 复审链 bullet of .claude/skills/pm-dispatch/SKILL.md is free for this card's edit. Note for the implementer: the clause-② relaxation is now in the file and the ratchet ceiling reads 682/682, so this card's wording must be paid for by tightening elsewhere in the same file, as the card states. The request-review notification channel commissioned by the 2026-08-22 ruling (see the prior comment) is in scope.
Claim: PM loop round 1 (family chain head)
Session: session_01MsbKEG4LtERSLaDrbehM3e
Branch: claude/issue-10972-skillmd-protocol-family
Worktree: objectstack-issue-10972
Domain: domain:skills
File surface: .claude/skills/pm-dispatch/SKILL.md (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: claude-fable-5 — this round's node scripts/pm/dispatch-gates.mjs --tier .claude/skills/pm-dispatch/SKILL.md: "Model tier — MANDATORY: claude-fable-5 … clause ① of the model-tiering ruling"
Clause-②: no
Serial constraints cleared: SKILL.md hot-file queue was empty at takeover (seat post #7623); prior chain occupants #10822 (PR #10936, clause-② relaxation) and #10837 (UNRECOGNISED rows) are MERGED on origin/main (fb0dd00, 35ad326) — this family starts from latest main. No in-flight claim in any lane names this file (skills-lane scan + spec-lane scan, both zero assignees, 2026-08-22T15:4xZ). #10190 shares this file and is explicitly serialized BEHIND this PR (see exclusion list).
Family dispatch — fold-or-serial answered: FOLD. Members #10972 + #10719 + #10313; one dev, one worktree, one PR. Maintainer provenance: live PM chat 2026-08-22, the maintainer asked for combined dispatch of the skills changes and accepted this seat's fold plan.
Gate ① same defect shape & fix: all three are "SKILL.md protocol text lags a standing ruling/reality — amend the named bullet, paying the ratchet"; not keyword grouping.
Gate ② same file/area: this file sits at its 682/682 ratchet ceiling — folding lets one dev balance the whole file's add/cut ledger once, instead of three sequential devs each re-fighting it.
{
"issue": [10972, 10719, 10313],
"status": "done",
"branch": "claude/issue-10972-skillmd-protocol-family",
"pr": "https://github.com/objectstack-ai/objectstack/pull/11077",
"premise_still_valid": true,
"summary": "Family PR, one commit per member on .claude/skills/pm-dispatch/SKILL.md. Member 10972 (commit 6e48cfb): needs:contract-review parks on both PR (as soon as it exists) and card in the same stroke, PASS clears both in the same stroke per the standing read-modify-write hard steps, label stays the gate carrier (2026-08-18 ruling untouched); commissioned request-review sentence included (notification only, reviewing seat clears on PASS); report-before-PR case covered. Member 10719 (commit 1cce20d): sweep disjunction 2 now sweeps the queue-without-lane-label shape on every repo that has stream labels (main + objectui, referencing the existing three-streams paragraph); exemption kept only for cloud/objectos, not widened. Member 10313 (commit 6c31501): clause-2 paragraph gains the scope sentence (a card-level restatement is still clause 2, the quota-exhaustion exemption and its needs:contract-review compensation reach it, only a maintainer ruling can set an exemption-proof floor). All three premises verified live against origin/main before editing.",
"files_changed": [".claude/skills/pm-dispatch/SKILL.md"],
"line_budget": "682/682 before -> 682/682 after (ceiling unchanged, headroom 0; net-zero at every commit; additions paid in-file: triage confidence-gate item 5 no longer restates the downgrade-fuse mechanism the review-chain bullet carries in full, and the contract-review eligibility parenthetical tightened in place)",
"tests": "All on final commit 6c31501, clean tree. Gates derived by 'node scripts/pm/dispatch-gates.mjs' with no paths (script took the changed set from merge-base); 7 matched families green, verdict lines from each gate's own output: check:pm-skill-ratchet 'SKILL.md is 682 lines (ceiling 682; headroom 0)'; check:pm-skill-id-lint '17 file(s) clean (pattern /#[0-9]{3,}/g)'; check:skill-frame-sync '4 copies of the decision frame are structurally isomorphic across 3 files'; check:pm-governed-prose '2 instruction surface(s) name all 5 registered governed surfaces and claim no others'; check:pm-governed-merges self-test '90 assertions'; check:doc-authoring '389 files clean'; lint check:doc-formula-expressions '22 record-scoped formula example(s) across 416 files / 1447 TS blocks judged clean' (needed the lint dependency-closure build first in the fresh worktree); plus check-nul-bytes 'OK (scanned 6402 text file(s))'. Exit codes captured before any pipe (redirect-then-capture).",
"gates": "7/7 matched families green + nul-bytes green; CI runs the full farm on the PR; skip-changeset applied and read back present on the PR (labels after read-back: documentation, size/s, skip-changeset)",
"deviations": ["Local verification narrowed to the derived gate families per standing contract; repo-wide scans belong to CI (declared narrowing).", "Draft PR only; governed surface (.claude/**) - never ready, never queued, human merge."],
"open_questions": [],
"out_of_scope_findings": []
}
ACCEPT — family PR #11077 (covers this card + the two family members; reviewed against GitHub, not the report).
Checklist conclusion: draft ✓ · three Fixes lines, one per member ✓ · diff is exactly one file (.claude/skills/pm-dispatch/SKILL.md, +7/−7) ✓ · one commit per member, each independently verifiable ✓ · all check suites green on head 6c31501 ✓ · skip-changeset per the gate's documented exemption, read back present ✓.
Spot readings (my own, from the actual diff): the three edits carry their rulings verbatim (「两边都挂好」/「也可以直接要求复审」; sweep exemption narrowed to cloud/objectos and NOT widened to them; the clause-② restatement-scope sentence with the maintainer-only floor). Ratchet verdict from the gate's own line: 682 lines, ceiling 682, headroom 0 — additions paid in-file (fuse restatement collapsed to single source; eligibility parenthetical tightened), semantics preserved on both payment sites. Skill-face review tier: this seat's get_session machine reading this session = claude-fable-5 = CONTRACT_REVIEW_TIER.
Governed surface ⇒ terminal posture: PR stays draft, never readied/queued/auto-merged; review requested from the maintainer's account; listed under "awaiting a human merge" in the round report. Post-merge follow-ups already parked: the blocked sibling card returns via the unlock scan when the member card closes, and the wave-2 SKILL.md family dispatches once this lands.
Activity
huangyiirene commentedon Aug 22, 2026
Maintainer ruling recorded (2026-08-22, decision-inbox digest with the skills seat,
session_01ApyDuQY2fkunMCqXiqvBhR; batch acceptance verbatim: 「接受所有」): the request-review notification channel is commissioned — notification-only, the gate stays on the label (2026-08-18 载体不迁移 holds). Scope addition for this card's dispatch: when parkingneeds:contract-review, the dispatching seat also requests review on the PR from the reviewing seat's account; the reviewing seat clears the request (or leaves a review comment) on PASS. One-sentence addition to the same SKILL.md bullet, same ratchet economics.Generated by Claude Code
huangyiirene commentedon Aug 22, 2026
Unblocked by the skills seat (
session_01ApyDuQY2fkunMCqXiqvBhR): the serialization blocker is gone — PR #10936 merged tomain(closing #10822), so the 复审链 bullet of.claude/skills/pm-dispatch/SKILL.mdis free for this card's edit. Note for the implementer: the clause-② relaxation is now in the file and the ratchet ceiling reads 682/682, so this card's wording must be paid for by tightening elsewhere in the same file, as the card states. The request-review notification channel commissioned by the 2026-08-22 ruling (see the prior comment) is in scope.State:
pm:blockedremoved →pm:queue.Generated by Claude Code
os-zhuang commentedon Aug 22, 2026
Claim: PM loop round 1 (family chain head)
Session:
session_01MsbKEG4LtERSLaDrbehM3eBranch:
claude/issue-10972-skillmd-protocol-familyWorktree:
objectstack-issue-10972Domain:
domain:skillsFile surface:
.claude/skills/pm-dispatch/SKILL.md(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: claude-fable-5— this round'snode scripts/pm/dispatch-gates.mjs --tier .claude/skills/pm-dispatch/SKILL.md: "Model tier — MANDATORY: claude-fable-5 … clause ① of the model-tiering ruling"Clause-②: no
Serial constraints cleared: SKILL.md hot-file queue was empty at takeover (seat post #7623); prior chain occupants #10822 (PR #10936, clause-② relaxation) and #10837 (UNRECOGNISED rows) are MERGED on
origin/main(fb0dd00,35ad326) — this family starts from latest main. No in-flight claim in any lane names this file (skills-lane scan + spec-lane scan, both zero assignees, 2026-08-22T15:4xZ). #10190 shares this file and is explicitly serialized BEHIND this PR (see exclusion list).Family dispatch — fold-or-serial answered: FOLD. Members #10972 + #10719 + #10313; one dev, one worktree, one PR. Maintainer provenance: live PM chat 2026-08-22, the maintainer asked for combined dispatch of the skills changes and accepted this seat's fold plan.
Fixes #<n>line per member:needs:contract-reviewhangs on BOTH the PR and the card — symmetric hang and clear, so the gate is visible in the PR list #10972 — the 复审链/条款②闸门 bullets hang AND clearneeds:contract-reviewon both the PR (as soon as it exists) and the card in the same stroke, plus the ruled one-sentence request-review notification addition.needs:contract-reviewcompensation reach it), and only a maintainer ruling can set an exemption-proof floor.sincewindows for ~10% of the tokens #10190 — same file, different shape (a triage-cadence mechanism redesign, not a text-lag correction); serialized behind this PR. finding: SKILL.md's governed-PR fork says "never flip ready", while the devx seat post's standing practice flips governed ADR PRs ready-for-review so the maintainer's merge button works #9900 — seat-post/lane-file surface, not this file (closed separately by verification). Working agreement: a pin-breaking removal must land together with its pin bump #10986 — a new working-agreement addition, different shape, dispatched separately.Member claims on #10719 / #10313 point here; they carry no branch of their own by design.
Generated by Claude Code
os-zhuang commentedon Aug 22, 2026
{ "issue": [10972, 10719, 10313], "status": "done", "branch": "claude/issue-10972-skillmd-protocol-family", "pr": "https://github.com/objectstack-ai/objectstack/pull/11077", "premise_still_valid": true, "summary": "Family PR, one commit per member on .claude/skills/pm-dispatch/SKILL.md. Member 10972 (commit 6e48cfb): needs:contract-review parks on both PR (as soon as it exists) and card in the same stroke, PASS clears both in the same stroke per the standing read-modify-write hard steps, label stays the gate carrier (2026-08-18 ruling untouched); commissioned request-review sentence included (notification only, reviewing seat clears on PASS); report-before-PR case covered. Member 10719 (commit 1cce20d): sweep disjunction 2 now sweeps the queue-without-lane-label shape on every repo that has stream labels (main + objectui, referencing the existing three-streams paragraph); exemption kept only for cloud/objectos, not widened. Member 10313 (commit 6c31501): clause-2 paragraph gains the scope sentence (a card-level restatement is still clause 2, the quota-exhaustion exemption and its needs:contract-review compensation reach it, only a maintainer ruling can set an exemption-proof floor). All three premises verified live against origin/main before editing.", "files_changed": [".claude/skills/pm-dispatch/SKILL.md"], "line_budget": "682/682 before -> 682/682 after (ceiling unchanged, headroom 0; net-zero at every commit; additions paid in-file: triage confidence-gate item 5 no longer restates the downgrade-fuse mechanism the review-chain bullet carries in full, and the contract-review eligibility parenthetical tightened in place)", "tests": "All on final commit 6c31501, clean tree. Gates derived by 'node scripts/pm/dispatch-gates.mjs' with no paths (script took the changed set from merge-base); 7 matched families green, verdict lines from each gate's own output: check:pm-skill-ratchet 'SKILL.md is 682 lines (ceiling 682; headroom 0)'; check:pm-skill-id-lint '17 file(s) clean (pattern /#[0-9]{3,}/g)'; check:skill-frame-sync '4 copies of the decision frame are structurally isomorphic across 3 files'; check:pm-governed-prose '2 instruction surface(s) name all 5 registered governed surfaces and claim no others'; check:pm-governed-merges self-test '90 assertions'; check:doc-authoring '389 files clean'; lint check:doc-formula-expressions '22 record-scoped formula example(s) across 416 files / 1447 TS blocks judged clean' (needed the lint dependency-closure build first in the fresh worktree); plus check-nul-bytes 'OK (scanned 6402 text file(s))'. Exit codes captured before any pipe (redirect-then-capture).", "gates": "7/7 matched families green + nul-bytes green; CI runs the full farm on the PR; skip-changeset applied and read back present on the PR (labels after read-back: documentation, size/s, skip-changeset)", "deviations": ["Local verification narrowed to the derived gate families per standing contract; repo-wide scans belong to CI (declared narrowing).", "Draft PR only; governed surface (.claude/**) - never ready, never queued, human merge."], "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
os-zhuang commentedon Aug 22, 2026
ACCEPT — family PR #11077 (covers this card + the two family members; reviewed against GitHub, not the report).
Checklist conclusion: draft ✓ · three
Fixeslines, one per member ✓ · diff is exactly one file (.claude/skills/pm-dispatch/SKILL.md, +7/−7) ✓ · one commit per member, each independently verifiable ✓ · all check suites green on head6c31501✓ ·skip-changesetper the gate's documented exemption, read back present ✓.Spot readings (my own, from the actual diff): the three edits carry their rulings verbatim (「两边都挂好」/「也可以直接要求复审」; sweep exemption narrowed to cloud/objectos and NOT widened to them; the clause-② restatement-scope sentence with the maintainer-only floor). Ratchet verdict from the gate's own line: 682 lines, ceiling 682, headroom 0 — additions paid in-file (fuse restatement collapsed to single source; eligibility parenthetical tightened), semantics preserved on both payment sites. Skill-face review tier: this seat's
get_sessionmachine reading this session =claude-fable-5=CONTRACT_REVIEW_TIER.Governed surface ⇒ terminal posture: PR stays draft, never readied/queued/auto-merged; review requested from the maintainer's account; listed under "awaiting a human merge" in the round report. Post-merge follow-ups already parked: the blocked sibling card returns via the unlock scan when the member card closes, and the wave-2 SKILL.md family dispatches once this lands.
Generated by Claude Code