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
Commit b1eb93c
Browse filesBrowse the repository at this point in the historyBrowse files
pm(labels): stop creating needs:contract-review and drop its last code legs
ensure-pm-labels.sh no longer creates the label (the GitHub object is the
seat's to remove); check-changeset-no-major reads the Clause-② line alone —
the label carrier axis, the check-half-states import and the #17229 battery
(floor 20 → 19) go; check-clause2-carriers.mjs keeps a LOCAL retired constant
because its retired --pair sweep still compares it and the file cannot be
deleted yet (the queue guard lazily imports its record recognisers); the
label-desc-cap specimen, the workflow comments, the CONTRACT_REVIEW_TIER
docblock and post-stamped's near-miss row stop naming the label or --pair.
Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: scripts/pm/ensure-pm-labels.sh
+1-31Lines changed: 1 addition & 31 deletions
Original file line number
Diff line number
Diff line change
@@ -297,35 +297,6 @@ for R in objectstack-ai/objectstack objectstack-ai/objectui objectstack-ai/cloud
297
297
gh label create pm:epic -R "$R" -c 5319e7 -d "Reserved by a dedicated epic PM, parent or sub-issue; other PMs never take it; never with pm:queue"2>/dev/null ||true
298
298
done
299
299
300
-
# needs:contract-review — the clause-② enqueue gate's re-review chain (SKILL.md
301
-
# 入队与落地): a PR whose ACTUAL diff touches the contract surface — or whose
302
-
# card's claim comment declares `Clause-②: yes` (the content limb, judged from
303
-
# the card, path-independent) — but was dispatched below the contract-review
304
-
# tier waits outside the queue under this label until the review sub-round
305
-
# clears it. Named consumers: the enqueue gate and the triage sub-round's label
306
-
# query. Main repo only — the contract surface (packages/spec) lives here. The
307
-
# label names WHAT is reviewed, never a model; the tier's single source is
308
-
# CONTRACT_REVIEW_TIER in scripts/pm/dispatch-gates.mjs. The -d below is kept
309
-
# ≤100 chars (the hard cap — see the header). It did NOT match the live label
310
-
# object: measured 2026-08-20, that object was grey with an EMPTY description,
311
-
# so the claim this comment used to make had never been true — nothing had ever
312
-
# checked it. `--reconcile` is what makes it true.
313
-
#
314
-
# ⚠️ WHAT THIS FILE DOES AND DOES NOT DO, because a card read it the other way
315
-
# (#13922): everything here reconciles the label OBJECT — its colour and its
316
-
# description. It says nothing about whether the label is HUNG correctly on any
317
-
# pair, and it never did. Two other files answer that, and neither is this one:
318
-
# * `scripts/pm/check-half-states.mjs` H31 — the two carriers of one gate
319
-
# compared across the whole board, on the half-state patrol's schedule.
320
-
# * `scripts/pm/check-clause2-carriers.mjs` — the same comparison anchored on
321
-
# ONE pair (`--pair <pr>`, a pre-arm predicate), plus the two readings H31
322
-
# cannot make: the DECLARATION limb quoted three paragraphs up has no other
323
-
# reader in this repo, and a gate missing from BOTH carriers is a carrier
324
-
# comparison's silent case.
325
-
# ⛔ None of the three writes the label. Hanging or clearing a review gate from
326
-
# a script would be issuing the review verdict, which is 自查放行.
Copy file name to clipboardExpand all lines: scripts/pm/post-stamped.mjs
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1923,7 +1923,7 @@ export function claimKeyedLineRefusals(body) {
1923
1923
rows.push({key: 'Thread-read',line: keyLine(text,'Thread-read'),why: `the value reads \`${offendingSpan(thread.value)}\`, which is neither one comment id nor \`none\` — H50 compares it for EQUALITY against one id, so no thread makes this match.`});
1924
1924
constclause=readClause2Line(text);
1925
1925
if(clause!==null&&clause.kind!=='declared')
1926
-
rows.push({key: 'Clause-②',line: clause.line,why: clause.kind==='malformed' ? 'the value slot holds something `readClause2Line` cannot grade — the two spellings are the closed set.' : `\`readClause2Line\` reads this as a NEAR MISS (${clause.reason}), ⛔ not a declaration — \`check-clause2-carriers.mjs --pair\` answers exit 4 on it.`});
1926
+
rows.push({key: 'Clause-②',line: clause.line,why: clause.kind==='malformed' ? 'the value slot holds something `readClause2Line` cannot grade — the two spellings are the closed set.' : `\`readClause2Line\` reads this as a NEAR MISS (${clause.reason}), ⛔ not a declaration — the changeset and ADR-0087 gates read it as absent.`});
0 commit comments