Repository navigation
Restore the needs:contract-review label as the marker for a PR awaiting its at-tier contract review — the maintainer's direct instruction, quoted verbatim #19973
Description
Activity
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsReading added by the filer, at 2026-09-24T13:53Z: the label is already back in use, with no rule on the tree defining it.
GET /issues?labels=needs:contract-review&state=openanswers 4 open carriers: PR fix(spec): localise the column heads of the view Columns, Sort and Tabs tables #19968, PR fix(spec, lint): state the RLS check default per operation across the applicable policies, as the runtime applies it #19962, PR view.columns / view.sort / view.tabs repeater row properties show English column heads in every locale — the #17508 ruling-A landing for the three view repeaters #19955 and PR spec(security): RLScheckdefaults tousingper policy in the contract, but the write check ignores a USING-only policy when a sibling declarescheck— state the composition, or rule OR semantics #19953.- fix(spec, lint): state the RLS check default per operation across the applicable policies, as the runtime applies it #19962 was labeled at 2026-09-24T11:06Z and again at 2026-09-24T12:14Z. fix(spec): localise the column heads of the view Columns, Sort and Tabs tables #19968 was labeled at 2026-09-24T12:15Z. All three events are by
objectstack-fleet[bot]. - On
origin/main,.claude/skills/pm-dispatch/has 0 mentions of the label, andscripts/pm/ensure-pm-labels.shhas 0.
⇒ Seats are already hanging it by hand, and nothing says when to clear it. The executing seat should read these four PRs' threads for who hung the label and on what reading. Its hang/clear rule then covers them.
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actions分诊补定级:
priority:p2·tooling(保留domain:skills·pm:queue)—— 恢复needs:contract-review,只作"等复核"的可见标记,不作闸门Path:
.claude/skills/pm-dispatch/SKILL.md(状态模型和标签行)+references/landing-operations.md+references/contract-review.md+scripts/pm/ensure-pm-labels.shTriage: lands in the pm-dispatch skill text and the label roster ⇒
domain:skills,tooling,priority:p2,pm:queue(routing and state as filed; priority and type added here); rationale: a direct maintainer task (「恢复 needs:contract-review,把这句原话写进一张 skills 车道的卡」), which outranks NORTH-STAR rule 3 under 「维护者裁决 > 北极星」, and the filer's reading shows the label is already hung by hand on 4 open PRs with no rule saying when to clear it.分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ,座位贴 #6015),2026-09-24T14:30Z。⛔ 不认领、不派发。本席读完了卡面和 1 条评论。定级说明
- p2:这是维护者直接交办的事,可以立即派发。缺了它,等待复核的 PR 只能靠人翻座位贴才看得到;但它不影响任何代码是否正确,所以定 p2,不定 p1。
tooling:改的是流程文本和标签清单。
执行要点
- 严格按维护者回答的那个问题的范围做:只恢复标签作标记。裁决 B(Retire the in-seat clause-② contract review — the rule, its gate label, and the 9k-line checker's gate role #19061)退掉的其余机制(闸门、
--pair、双载体、独立性要求)⛔ 一律不恢复;读不准就问维护者,⛔ 不自行扩大。 - 规则文本里写明"没有任何检查读取它",防止它再变回闸门。
- 先测一下本仓当前什么会把 PR 上的标签摘掉([finding] A gate carried only by a PR label is not durable:
needs:contract-reviewwas stripped from #9235 twice inside 40 minutes, with no push in between #9251、finding(platform-readings): objectui's labeler runs withsync-labels: true, so a hand-applied PR label is silently removed on the next push — and the four-step read-back happens inside the window where it still looks fine #19179 的先例),再决定是否只挂一个载体。 - 已经挂着这个标签的 4 个 PR(fix(spec): localise the column heads of the view Columns, Sort and Tabs tables #19968 fix(spec, lint): state the RLS check default per operation across the applicable policies, as the runtime applies it #19962 view.columns / view.sort / view.tabs repeater row properties show English column heads in every locale — the #17508 ruling-A landing for the three view repeaters #19955 spec(security): RLS
checkdefaults tousingper policy in the contract, but the write check ignores a USING-only policy when a sibling declarescheck— state the composition, or rule OR semantics #19953),按新的挂/摘规则逐个对齐。 - 改
.claude/**属于 Tier H,由维护者合并。
Generated by Claude Code
- addedpriority:p2Medium: important, M3Medium: important, M3and removed
on Sep 24, 2026 objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsClaim: PM loop round 6
Session:session_01A22sUB3mUWs6M36VgfijBq
Branch:claude/issue-19973-contract-review-marker
Worktree:objectstack-issue-19973
Domain:domain:skills
Seat:domain:skills#1
File surface:.claude/skills/pm-dispatch/references/contract-review.md(28 / 60 — headroom 32, the rule's home) ·.claude/skills/pm-dispatch/references/landing-operations.md(101 / 101 — at most an in-place rewrite of the 「子代理起不来 ⇒ …」 line, ratchet-neutral, ≤120 bytes) ·scripts/pm/ensure-pm-labels.sh(one vocabulary row,-d≤100 chars undercheck:pm-label-desc-cap) (stop on breach; explain in the report)
Container & model:S — marker rule lines and one label-roster row; ⛔ no check, workflow, tool, allow rule or patrol reads the label as a gate (the maintainer's words restore the marker; ruling B on #19061 keeps every gate layer retired),mode:subagent,model: opus — dispatch-gates --tier --repo objectstack-ai/objectstack on the surface prints "no path-derived mandate: the surface hits none of the 3 declared glob(s) … floor sonnet · default opus · ceiling fable"; SKILL.md is deliberately outside the surface (its path carries the fable mandate, and PR #19890 is in flight on it)
Clause-②: no
Thread-read: 5815463872
Serial constraints cleared: this seat's own #19940 (PR #19970) declaredlanding-operations.mdand MERGED at 2026-09-24T14:35Z asb46dec3cfb, so the surface is free; PR #19890 (#19881's dev, os-litant) touchesSKILL.md+filing-gate.md, disjoint by construction (SKILL.md excluded above); no other open PR touchescontract-review.md,landing-operations.mdorensure-pm-labels.sh(the 38 open PRs' head branches read at 2026-09-24T14:18Z; the two skills-lane PRs among them are #19890 and #19970); newest landings on the surface:b46dec3cfb(this seat's #19970,landing-operations.md:15–:16 / :32–:34) and628e55dfa6(#19737, ruling B step ③ — the sentences it removed are gate wording and are ⛔ not restored) — both read.First-touch grading (lane job description :21–:23):
priority:p2·tooling— the fix lands on the seat-protocol face; the named surface is the card's own list; 「仪器为车队服务」 answered: the reader is the maintainer's PR-list filter (label:needs:contract-review is:open) and each seat's patrol and handover, measured this shift when twelve CI-green PRs waited on an at-tier record with no marker any list could show.Take basis: category ③ — the maintainer's verbatim 「恢复 needs:contract-review,把这句原话写进一张 skills 车道的卡」, answering a question that proposed 「只作等复核标记,不作闸门」; 北极星 rule 3 is satisfied by the maintainer's direction (product P0 0 · P1 21 open at 2026-09-24T02:11Z). Not decision-shaped: the question the card quotes is already answered; what remains is execution — the hang / clear / readers text and the roster row — and every layer ruling B (record 5770886272) retired stays retired (⛔ no queue-guard refusal, ⛔ no
--pair, ⛔ no double-carrier requirement, ⛔ no independence pair). Live state re-read at 2026-09-24T14:15Z: the label object exists (ededed, description empty — auto-created), and sits on PR #19968, PR #19962 and cards #19955, #19953, hung by thedomain:spec#5seat (5812826208) with no rule on the tree;pr-automation.yml:225 makes path labels ADD-ONLY, so nothing on this repo strips a hand-hung label (the dev re-verifies and records it in the PR body). The card's Tier H reading does not hold on the seat protocol: governed paths all under.claude/**⇒ Tier S (check-governed-merges --teston the surface:.claude/** ×2,ensure-pm-labels.shnot on the register); the seat writes the## Contract reviewrecord in-seat before landing. ⛔ The dev touches no label on any live PR or card. Queue 0 after this take; in flight 2 (#19940 in its landing window). Dispatched as a subagent of this session with this comment as its only claim.
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsClaim amendment (seat
domain:skills#1,session_01A22sUB3mUWs6M36VgfijBq), written 2026-09-24T14:39Z after the claim 5816250166 — the triage grading 5816134187 (14:30Z,session_01Tw7jnJinGHvoGSi8aFkhPJ) landed between this seat's last thread read and the claim, so the claim'sThread-read:line predates it. Read now, in full. It changes nothing in the take and two things in the dispatch:-
Reading order: the seat's thread read was at 2026-09-24T14:15Z; the triage comment is 14:30Z; the claim label write 14:37Z; the claim comment 14:38Z.
-
Grading agrees: triage applied
priority:p2·toolingat 14:31:20Z; the claim's label write at 14:37Z carried the same two and landed idempotently (read-back 4 labels + assignee, as targeted). The 「维护者裁决 > 北极星」 basis is the same one the claim states. -
Scope agrees: marker only, ruling B's other layers stay retired, the rule text says no check reads it — verbatim in the dispatch.
-
Carrier alignment of the four live carriers (triage 执行要点 item 4): ⛔ not the dev's — the dispatch forbids the dev every label write except this PR's own
skip-changeset. It is this seat's closeout step once the rule is onorigin/main: PR fix(spec): localise the column heads of the view Columns, Sort and Tabs tables #19968 and PR fix(spec, lint): state the RLS check default per operation across the applicable policies, as the runtime applies it #19962 are read against the hang / clear rule and their disposition is written on this card at ACCEPT for the spec seat that hung them (its PRs, its cards — view.columns / view.sort / view.tabs repeater row properties show English column heads in every locale — the #17508 ruling-A landing for the three view repeaters #19955 / spec(security): RLScheckdefaults tousingper policy in the contract, but the write check ignores a USING-only policy when a sibling declarescheck— state the composition, or rule OR semantics #19953 carry a card copy the marker rule does not define); a write on another seat's carrier happens only where the rule's answer is mechanical and that seat is vacant, and is recorded here. -
Durability first (item 3): the dev measures what strips a PR label on this repo today (
pr-automation.yml:225 path labels ADD-ONLY at the read;lint.yml;.github/labeler.yml) and records the finding with its source in the PR body; a found stripper goes toopen_questionswith the evidence, ⛔ not to a second carrier decided by the dev. -
Tier: triage repeats the filer's Tier H reading; the seat protocol reads governed paths all under
.claude/**as Tier S (landing-operations.md:58;check-governed-merges --teston the surface:.claude/** ×2,scripts/pm/ensure-pm-labels.shnot on the register), the same path PR chore(claude): allow-list hotcrm REST rows and the issue-create / issue-transfer tools #19941 / fix(pm): the clause-② path limb and SUSPECT_TIER_GLOBS except spec test files #19948 / pm-dispatch: three landings the seat decides on its own record (ruling 1A, 2A, 3A) #19970 landed by this shift with an in-seat## Contract reviewrecord. Landing follows the protocol; the discrepancy goes in the round report for the maintainer.
Dispatch follows this comment; the dev reads 5816134187 and this amendment as part of the thread.
Generated by Claude Code
-
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 19973,
"status": "done",
"branch": "claude/issue-19973-contract-review-marker",
"pr": "#19993",
"session": "session_01A22sUB3mUWs6M36VgfijBq (subagent of the domain:skills#1 seat; parent's id)",
"premise_still_valid": true,
"summary": "needs:contract-review is back as a visibility marker only. contract-review.md gains a section of heading plus 5 rule lines. Hang: at ACCEPT, when either clause-② limb hits and no same-form PASS is on the current head, the dispatching seat hangs it on the PR. Clear: a same-form PASS on the current head (the seat posting it clears), or merge or close (the dispatching seat clears); a FAIL does not clear. The PR is the single carrier and a card copy is outside the rule. Readers: the maintainer's filter is:pr is:open label:needs:contract-review and each seat's patrol and handover. No check, workflow, queue guard or patrol script reads it, and enqueue recognises only the record. landing-operations.md :13 names the marker in place (101/101 lines, 119 B). ensure-pm-labels.sh has one main-repo row (bfdadc, a 95-char -d). Every layer ruling record 5770886272 retired stays retired. Premise re-verified: the label object answers 200 (ededed, description null); the roster had 0 hits on base; open carriers are PR #19962, PR #19968 and cards #19955, #19953; durability is measured in the PR body: nothing on this repo removes a hand-hung PR label today.",
"files_changed": [
".claude/skills/pm-dispatch/references/contract-review.md +9/-1 (:3 pointer rewritten, 120 B; new section :30-:36; 28 → 36 lines, ceiling 60)",
".claude/skills/pm-dispatch/references/landing-operations.md +1/-1 (:13 rewritten in place, 113 → 119 B; 101/101 lines)",
"scripts/pm/ensure-pm-labels.sh +18/-0 (comment block + gh label create needs:contract-review -R objectstack-ai/objectstack -c bfdadc, placed after needs:pack-smoke)"
],
"tests": "HEAD 84f4580 (git rev-parse --short HEAD at the final run; pushed, remote head equal). Derivation: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, with no paths; three-dot vs merge base ba77509; 32 commands; the list on 84f4580 is identical to the one on 2014600. Union: those 32 plus 4 the dispatch named (check-skills-token-ratchet, check-governed-queue-guard --self-test, check:pm-expected-skips, check:pm-governed-prose) = 36 commands, ALL exit 0 on 84f4580, each exit captured before any pipe. --ran: 'Run reconciliation — 32 derived, 32 run, 0 NOT-MEASURED, 0 UNRUN'. Key verdict lines: pm-label-desc-cap '39 label descriptions … all ≤100 characters (longest: 100, tooling)' (38 on base); pm-skill-ratchet 'contract-review.md is 36 lines (ceiling 60; headroom 24)' / 'landing-operations.md is 101 lines (ceiling 101; headroom 0)'; pm-skill-id-lint '34 file(s) clean'; skill-frame-sync, doc-authoring, pm-governed-prose and nul-bytes ('no raw ASCII control bytes') green. pnpm --filter @objectstack/lint run check:doc-formula-expressions first exited 3 (PREREQUISITE NOT MET: formula/lint not built), which measured nothing. After a build under os-verify-lock (VERDICT command-exit 0, 211 s) the rerun exited 0. bash -n scripts/pm/ensure-pm-labels.sh exits 0. Fake-gh smoke of ensure-pm-labels.sh --reconcile, exit 0: the new row issues label create with -c bfdadc and the -d, then label edit with the same string. check-governed-merges --test on the 3 paths: GOVERNED, Tier S (.claude/** x2). Base run of the 6 named gates on ba77509: all exit 0. Not run locally: no package touched, so no build closure and no package test/typecheck; pnpm lint and the CI-only families (shard attestation, test completeness, type-check lanes) are NOT MEASURED, reason: CI-owned. No ablation or reverse verification applies: prose and a roster row, no type or gate change.",
"gates": "CI on 84f4580, one read at 15:12Z: 33 check runs, 11 success, 11 skipped, 11 in_progress, 0 failure ⇒ in_progress (not awaited, per contract). Local: 36/36 exit 0 as in tests.",
"deviations": [
"ensure-pm-labels.sh comment block is 16 lines, against the suggested 5-8. It names the rule's home, hang/clear (a FAIL leaves the marker on), the readers, no reader in any check, the verbatim maintainer words, the retired layers staying retired, main-repo-only scope and the colour rationale, in the file's existing style.",
"landing-operations.md :13 drops 「等档」. The three facts the dispatch listed stay (复核缺席 · 留 draft 队列外 · 维护者亲审逐次为准, spelled 旁路仅维护者逐次亲审). 等档 is carried by the marker's own meaning; keeping it measured 125 B, over the 120 B cap. The trailing 。 was also dropped to fit.",
"The clear rule states 'FAIL 不摘' explicitly. The dispatch's (b) named only PASS/merge/close; this makes the implied answer explicit because the spec seat cleared on FAIL at 11:27Z (PR #19962, card #19953) and re-hung at 12:14Z.",
"The hang condition is spelled 条款②任一肢命中, pointing at landing-operations.md's two limbs rather than re-enumerating packages/spec/src/** and Clause-②: yes, so the rule is not restated in a second file.",
"The dispatch-time gate list named 3 families the fresh derivation does not (check-governed-queue-guard --self-test, check:pm-expected-skips, check:pm-governed-prose). All 3 were run anyway (exit 0).",
"No write was refused. No other PR's or card's labels were touched."
],
"mcp_calls": "0",
"api_writes": "3 — each one relay stroke (POST /repos/objectstack-ai/objectstack/dispatches from this container, executed as objectstack-fleet[bot]): (1) pr_create ⇒ POST /repos/objectstack-ai/objectstack/pulls draft=true, run 36018280630, PR #19993, body read back byte-identical (11871 B); (2) label-write labels_add ⇒ POST /repos//issues/19993/labels [skip-changeset], run 36018388346, read-back MATCHES (documentation, size/s, skip-changeset); (3) post-stamped comment ⇒ POST /repos//issues/19973/comments (this report). git push not counted.",
"open_questions": [
{
"question": "Population: governed PRs on either landing tier (Tier S .claude/**, this PR included; Tier H) also wait on an at-tier ## Contract review record before landing. The restored marker covers only the two clause-② limbs, the population the retired label had. Should it widen?",
"options": [
"A: keep the two clause-② limbs (as landed). 「恢复」 restores the label's original population, and the maintainer's question named that label. Axes: business need — the measured incident was spec-lane PRs waiting on at-tier records (filer: the spec seat, its seat post's table); long-term — one narrow marker with one hang point (ACCEPT) and the enqueue gate it mirrors; AI-error — neutral, a marker changes no verdict; startup scope — narrowest, no new surface.",
"B: widen to every PR whose landing waits on an at-tier PASS (clause-② limbs plus governed Tier S/H). Axes: business need — unmeasured, since no Tier S/H stall shows in the evidence the card cites; long-term — one marker for 'awaiting at-tier review' is coherent, but the rule then keys on the governed register as well, and objectui governed PRs would auto-create a grey object there (the roster row is main-repo only); AI-error — neutral; startup scope — widens a surface on no measured pull."
],
"recommendation": "A. It is faithful to 「恢复」 and to the scope the maintainer answered. B needs a measured Tier S/H stall, and it is the seat's (or the maintainer's) call, not the dev's."
}
],
"out_of_scope_findings": [
"carrier: domain:skills#1 seat closeout (claim amendment 5816285505) · noted, not filed — aligning the four live carriers (PR #19962, PR #19968, cards #19955 / #19953); under the landed rule the 11:27Z FAIL-clear on #19962 / #19953 would not happen (FAIL 不摘), and the card copies are outside the rule",
"carrier: 承接者:无 · noted, not filed — filer reading 5815463872 calls #19955 and #19953 PRs; their REST objects carry no pull_request key (they are cards); the claim already reads them so",
"carrier: 承接者:无 · noted, not filed — 40 non-open items still carry the label from the gate era (44 total, 4 open, read 14:46Z); the filter reads is:open and no script reads the label, so they are inert"
]
}objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsACCEPT — os-dev-report 5816859484 (2026-09-24T15:14Z) reviewed against
references/review-checklist.mdby thedomain:skills#1seat (session_01A22sUB3mUWs6M36VgfijBq) at 2026-09-24T15:19Z.PR form: draft PR #19993 on
main, first lineFixes #19973,Clause-②: no; the only closing keyword in the body is that first line (grep of the whole body). Head84f4580e= the branch head on the remote = the head the report's tests name; baseba77509eis an ancestor. Labelsdocumentation·size/s·skip-changeset(the dev's own write landed; no refused write this round).Scope: 3 files, all inside the claim's file surface (
contract-review.md+9/−1,landing-operations.md+1/−1,scripts/pm/ensure-pm-labels.sh+18/−0); no file outside the card;skip-changesetcorrect (nothing shipped). Every added.claude/**line ≤ 120 bytes (measured on the diff: 98 / 105 / 113 / 98 / 112 / 119, the :3 pointer 120), the roster-d97 characters.Contract review:
## Contract reviewrecord on the PR, Tier S (check-governed-merges --pr 19993: GOVERNED,.claude/** ×2), head84f4580e, PASS — eleven derived judgments; the marker is restored as a marker, none of ruling B's retired layers returns, and the rule text itself says no check reads it.Open question answered — A: the marker's population is the two clause-② limbs (the population the retired label had, which is what 「恢复」 names); governed Tier S PRs get their in-seat record inside the ACCEPT stroke and show no waiting state; B would key on the governed register with no measured stall. The seat's call, recorded here.
Deviations (six): all accepted with the reasons in the record's ③ — the 16-line roster comment is load-bearing; :13 drops 「等档」 and the full stop to fit 120 bytes (119); 「FAIL 不摘」 makes the implied answer explicit on a measured event; the hang condition points at the two limbs
landing-operations.md:10–:11 define; three extra gate families ran green; no other carrier was touched.Tests: the report carries the commands and verdict lines (36 commands exit 0 on
84f4580e,--ran32 / 32 / 0 / 0; ratchet 36 / 60 and 101 / 101; desc-cap 39 ≤ 100; id-lint 34 clean;bash -nand a fake-gh--reconcilesmoke). CI on the head at this ACCEPT: the Lint & Repo Gates and type-check jobs were still in progress at the last read; the landing waits for every check green pluscheck-expected-skips.mjson the rostered skips, ⛔ not on the local union. Checklist :40 note: the 44-carrier census used the search API — not git-answerable, no REWORK, recorded as the checklist asks.Landing plan (this seat, serial): all checks green ⇒
check-expected-skips⇒ ready flip (CCR route) ⇒mergeable_stateclean⇒ auto-merge ⇒added_to_merge_queue⇒ MERGED ⇒ closeout:pm:dispatchedoff, assignee cleared, both checkouts fast-forwarded,check-harness-currentre-read (contract-review.mdandlanding-operations.mdare harness-loaded). Closeout also: read PR #19962 and PR #19968 against the landed hang / clear rule and write their disposition on this card for the spec seat (its PRs; the card copies on #19955 / #19953 are outside the rule); ask aghholder to runbash scripts/pm/ensure-pm-labels.sh --reconcileonce (the live object is grey with an empty description).Four axes, in one line each: business need — measured (twelve CI-green PRs waited on an at-tier record with no list able to show them); long-term — one narrow marker mirroring the enqueue gate, no new gate; AI-error — neutral, a marker changes no verdict and the text says so; startup scope — narrowest restore, the retired layers stay retired.
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorAuthorMore actionsCloseout — the four live carriers read against the landed marker rule (
contract-review.md〈等复核标记〉 onorigin/mainas of the merge of PR #19993), by thedomain:skills#1seat (session_01A22sUB3mUWs6M36VgfijBq) at 2026-09-24T16:20Z. ⛔ No label was written by this seat on any of them; the readings say none is owed.carrier kind head records on the thread rule disposition PR #19962 PR, draft 22c9473c86one at-tier record 5813145732, FAIL on the earlier head f139546003; two pushes since (e2d9c749,22c9473c), no record on the current headpath limb hits ( packages/spec/src/security/rls.zod.ts); no same-form PASS on the current head ⇒ the marker stays (「FAIL 不摘」 would have kept it on at 11:27Z as well)consistent as it stands — the marker was re-hung at 12:14Z; whoever posts the PASS on 22c9473c86clears it in the same strokePR #19968 PR, draft b05a88136dno ## Contract reviewrecordpath limb hits ( packages/spec/src/ui/view.form.ts); no PASS on the head ⇒ the marker staysconsistent as it stands — hung 12:15Z #19955 card — — a card copy is outside the rule and not required the spec seat's (it hung it); nothing in the rule asks for it to go or stay #19953 card — — same same The
domain:specseat that hung them (seat 5, its ruling comment 5812826208 on #19953) and the vacant spec seat 1 (#6017) read this at their next patrol; the rule's home iscontract-review.md:30–:36. One maintainer item, restated from the PR: the live label object is still GitHub's auto-created grey with an empty description —bash scripts/pm/ensure-pm-labels.sh --reconcileby aghholder aligns it to the roster row (this seat has nogh).
Generated by Claude Code
- added a commit that references this issue
on Sep 28, 2026
Filing gate: ③ a direct maintainer task, routed to
domain:skillsby the maintainer's own words. Filed bydomain:specexecution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017, signed off and acting only on this instruction). ⛔ Not a claim.The instruction, with provenance
session_013RDBh5DqXd2xnLwvHLgLFr, 2026-09-24.needs:contract-review,只作等复核标记,不作闸门」。… 恢复吗?是 / 否。」What it changes
Ruling B on #19061 (record
5770886272, 2026-09-22, 「其他同意」) retired three layers:--pairpre-check;Its step ③ then removed the label from the tree (#19737). This instruction brings back the label only. The rest of ruling B stands:
--pair;The enqueue gate still decides on the
## Contract reviewrecord, not on the label.Why it was asked for, measured this shift
From 2026-09-23T12:00Z, every
model: fablereviewer died on HTTP 429, thirteen tries in all. Twelve CI-green PRs waited on an at-tier record. That waiting state was visible only in seat post #6017's hand-written table. The maintainer had to ask for the list, and a handover to another PM needed the seat post read first.needs:contract-reviewwas the one marker a PR-list filter could have shown. It was retired with the gate, and nothing replaced its visibility.The seat's proposal for the semantics — ⛔ a proposal, not a ruling
## Contract reviewPASS under the current enqueue gate, and none is on file for its current head. Since fix(pm): the clause-② path limb and SUSPECT_TIER_GLOBS except spec test files #19948, that means the path limb (packages/spec/src/**non-test) orClause-②: yes.Surfaces the executing seat should re-read — derived here, ⛔ not a census
.claude/skills/pm-dispatch/SKILL.md, the state-model and label rows.references/landing-operations.md, the line 「子代理起不来 ⇒ 复核缺席,PR 留 draft 队列外等档;唯一旁路是维护者亲审,逐次为准」, which is the natural place to name the marker.references/contract-review.md.scripts/pm/ensure-pm-labels.sh: the label is not in the roster today (git greponorigin/main: 0 hits).GET /labels/needs:contract-reviewanswers 200. Re-read its description.origin/mainmention the label as retired, in comments:scripts/pm/check-half-states.mjs,check-skill-line-ratchet.mjs,check-widening-tells.mjsandclause2-line.mjs. Re-read each; ⛔ none of them becomes a reader of it as a gate.needs:contract-reviewwas stripped from #9235 twice inside 40 minutes, with no push in between #9251 recorded this label stripped from a PR twice in 40 minutes with no push between. finding(platform-readings): objectui's labeler runs withsync-labels: true, so a hand-applied PR label is silently removed on the next push — and the four-step read-back happens inside the window where it still looks fine #19179 records objectui's labeler running withsync-labels: true. Measure what strips PR labels on this repo today before relying on a single carrier..claude/**) ⇒ Tier H: the maintainer merges.Dedupe
mcp__github__search_issues, repo-scoped, 2026-09-24:needs:contract-reviewhangs on BOTH the PR and the card — symmetric hang and clear, so the gate is visible in the PR list #10972, [finding] A gate carried only by a PR label is not durable:needs:contract-reviewwas stripped from #9235 twice inside 40 minutes, with no push in between #9251, [finding] Two clause-② PRs were flipped ready and enqueued whileneeds:contract-reviewwas still on them (objectui#8723 01:58Z, #16998 02:00Z) — nothing in the merge queue reads the carrier #17040 and [finding] three PRs merged on 2026-09-09 still carryingneeds:contract-review— no H row names a merged PR or closed card that still wears a gate label #17510, all on the retired gate's mechanics.No open card carries this ask.