Skip to content

Commit cb18498

Browse files
committed
chore(pm): delete the one-time stale-finding sweep tool; H63 stays the report
The sweep closed its backlog and has no further run planned. H63 and `staleFindingScreen` stay in check-half-states.mjs and keep reporting graded cards that still carry `finding`; the two live ones (#28107, #28722) go to the triage round by hand. Removed with the tool: its package.json alias, its lint.yml self-test step and the comment naming it, its write-pace roster entry, the dispatch-gates population note naming it, and H63's source-text pin that read the tool's file. check-half-states self-test 5166 -> 5161. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAmM3BRQQcQSA67VE3L
1 parent a2f77f7 commit cb18498

6 files changed

Lines changed: 12 additions & 1331 deletions

File tree

‎.github/workflows/lint.yml‎

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,7 @@ jobs:
13061306
# reader with `check-half-states.mjs`, so the write side and the read-side
13071307
# patrol cannot come to disagree about what a stamp is.
13081308
# Write-pace throttle self-test (#19572) — the shared throttle the four
1309-
# steps below and `sweep-stale-finding` all issue their writes through,
1309+
# steps below all issue their writes through,
13101310
# under the maintainer's 「截流应该要加」. Two seat accounts were suspended
13111311
# during bulk issue operations; this file is what makes pacing a property
13121312
# of the write path rather than of who remembered it.
@@ -1458,43 +1458,6 @@ jobs:
14581458
continue-on-error: true
14591459
run: pnpm check:pm-board-snapshot
14601460

1461-
# Stale-`finding` sweep self-test (#16904) — same family and the same
1462-
# split as every step around it, and the split matters more here than for
1463-
# most: this tool WRITES. Its live path removes a label from real cards on
1464-
# a shared board, so a production run from CI would relabel the board
1465-
# because a pull request happened to run — the offline half is the only
1466-
# half CI can hold, and the sweep itself is run once per board, by hand,
1467-
# by the seat that owns that board.
1468-
#
1469-
# Until this step existed the instrument was UNFIRED: the tool shipped a
1470-
# 91-case `--self-test` that nothing in CI ran, which is the second half
1471-
# of the pair `check:self-test-wired` exists for. A script was then IN
1472-
# that gate's population only once a workflow named it, so the unwired
1473-
# self-test was a hole only this step could close. Since #21351 the gate
1474-
# also reads every root `package.json` alias whose expansion carries
1475-
# `--self-test`, so it holds this step through `check:pm-stale-finding`:
1476-
# deleting the step reds `[alias-self-test-not-run]`.
1477-
#
1478-
# What the self-test instruments is the set of rules a clean tree cannot
1479-
# exercise: the screen's ungraded verdict, which is the ONE thing the
1480-
# sweep must never strip (「`finding` ALONE is NOT stale」), the `pm:seat`
1481-
# refusal, the four-step write's read-back and its refusal on a raced
1482-
# label set, the batch caps and the resume cursor a 403 leaves, and the
1483-
# exit register that keeps "could not read the board" apart from "the
1484-
# board is clean". Weakening any of them leaves an ordinary run just as
1485-
# green — it would simply strip fewer cards, or more — and a wrong strip
1486-
# here is a write against a shared board, not a report.
1487-
#
1488-
# Since #16904's D2 the screen itself lives in `check-half-states.mjs` and
1489-
# this tool imports it, so the patrol row that REPORTS the population and
1490-
# the sweep that STRIPS it read one rule; the patrol's own self-test pins
1491-
# that this file still aliases that definition rather than re-growing a
1492-
# copy of it.
1493-
- name: Stale-`finding` sweep self-test
1494-
id: stale-finding-sweep-self-test
1495-
continue-on-error: true
1496-
run: pnpm check:pm-stale-finding
1497-
14981461
# Governed-merges audit self-test (#9495) — same family, same split as
14991462
# the half-state sweeper above: the live sweep enumerates the governed
15001463
# merges since a date/ref for the PM round report — report-only by

‎package.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
"check:issue-citations": "node scripts/check-issue-citations.mjs --self-test",
8484
"check:pm-record-recognisers": "node scripts/pm/record-recognisers.mjs --self-test && node scripts/pm/check-owed-reviews.mjs --self-test && node scripts/pm/mailbox-open.mjs --self-test && node scripts/pm/fleet-roster.mjs --self-test",
8585
"check:pm-prior-rulings": "node scripts/pm/check-prior-rulings.mjs --self-test",
86-
"check:pm-stale-finding": "node scripts/pm/sweep-stale-finding.mjs --self-test",
8786
"check:pm-write-pace": "node scripts/pm/write-pace.mjs --self-test",
8887
"check:pm-fleet-token": "node scripts/pm/fleet-token.mjs --self-test",
8988
"check:pm-issue-create": "node scripts/pm/issue-create.mjs --self-test",

‎scripts/pm/check-half-states.mjs‎

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14966,29 +14966,6 @@ export function h73RuledCardStillInBox(issue, nowMs = Date.now()) {
1496614966
// the READ half: the row that makes the refill visible on the patrol instead of
1496714967
// being re-measured by whoever next happens to look.
1496814968
//
14969-
// ## Why the rule LIVES HERE and the sweep imports it, rather than the reverse
14970-
//
14971-
// `scripts/pm/sweep-stale-finding.mjs` owns the one-time strip and exports this
14972-
// screen. Reusing it BY IMPORT is the ruling, and 「⛔ never a second copy of the
14973-
// rule」 is the reason — but the import can only point one way, and that was
14974-
// measured on this tree rather than assumed:
14975-
//
14976-
// this file importing the sweep a MODULE CYCLE that crashes. The sweep
14977-
// derives module-level constants from
14978-
// `PM_STATE_LABELS`, which lives here, so
14979-
// with THIS file as the entry point — every
14980-
// patrol run, every `--self-test` — the
14981-
// sweep's body evaluates first and throws
14982-
// `ReferenceError: Cannot access
14983-
// 'PM_STATE_LABELS' before initialization`.
14984-
// the sweep importing this file already how it works, for four symbols.
14985-
//
14986-
// So the rule moves DOWN to the module that already owns the vocabulary it is
14987-
// derived from, and the sweep re-exports it under the names its own callers and
14988-
// self-test already use. One source, one arrow, no copy — and the row's
14989-
// population is not an approximation of the sweep's target set, it IS that set,
14990-
// which is what lets the row say "this is what the sweep would strip today".
14991-
//
1499214969
// ## The three `pm:*` label sets in this file are NOT this one, and must not be
1499314970
//
1499414971
// A fourth question, with a fourth answer, stated so nobody unifies it with the
@@ -28123,10 +28100,8 @@ async function selfTest() {
2812328100

2812428101
// -- H63 (#16904): a graded card still wearing the ungraded marker ---------
2812528102
//
28126-
// The row over the SHARED screen. Both directions, a lit control under every
28127-
// silence, and — because the point of sharing the screen is that the row and
28128-
// the one-time sweep can never disagree — a source-text pin that the sweep
28129-
// still ALIASES this definition instead of re-growing a copy of it.
28103+
// The row over the shared screen. Both directions, and a lit control under
28104+
// every silence.
2813028105
const gradedCarrier = (labels, over = {}) => ({
2813128106
number: 16904,
2813228107
state: 'open',
@@ -28174,19 +28149,6 @@ async function selfTest() {
2817428149
t('H63 screen: a priority is a grade in every spelling the board uses', priorityLabelsIn(['priority:p0', 'priority:p3']).length, 2);
2817528150
t('H63 screen: ⛔ and priority-ish prose is not a priority label', priorityLabelsIn(['priorities', 'priority', 'prioritypX']).length, 0);
2817628151

28177-
// ── ONE rule, two readers: the sweep must still ALIAS this definition ─────
28178-
let sweepSource63 = '';
28179-
try {
28180-
sweepSource63 = readFileSync(new URL('./sweep-stale-finding.mjs', import.meta.url), 'utf8');
28181-
} catch {
28182-
sweepSource63 = '';
28183-
}
28184-
t('H63 ↔ sweep: the sweep\'s source is readable at all (an unreadable one must not pass as clean)', sweepSource63.length > 0, true);
28185-
t('H63 ↔ sweep: it ALIASES this screen rather than defining one', sweepSource63.includes('export const screenCard = staleFindingScreen;'), true);
28186-
t('H63 ↔ sweep: …and ⛔ has not re-grown a copy of the screen', /export function screenCard\s*\(/.test(sweepSource63), false);
28187-
t('H63 ↔ sweep: …nor a second copy of the grading vocabulary', /export const GRADING_STATE_LABELS\s*=/.test(sweepSource63), false);
28188-
t('H63 ↔ sweep: its target label is this constant, not a second literal', sweepSource63.includes('export const TARGET_LABEL = STALE_FINDING_LABEL;'), true);
28189-
2819028152
// ── ⛔ The three `pm:*` sets stay four different questions ────────────────
2819128153
t('H63: H13\'s visibility set carries the marker — which is why H13 is silent on a graded carrier', PM_STATE_LABELS.includes(STALE_FINDING_LABEL), true);
2819228154
t('H63 control: …and H13 really is silent on one, because a pm-state is present', h13DomainWithoutPmState({ ...gradedCarrier(['finding', 'pm:queue', 'domain:skills']), updated_at: daysAgo(9) }, NOW), null);

‎scripts/pm/dispatch-gates.data.mjs‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,13 @@ export const ROOT_WALK_RESIDUE_LEDGER = [
297297
// ⚖️ `check:pm-half-states` LEFT this population under #16904's D2 and its row
298298
// is gone with it — a listed family that stops being a member reds here, and
299299
// a stale exclusion is an exclusion nobody measures. It is now placeable BY
300-
// PATH, and truthfully: `check-half-states.mjs`'s self-test reads two sibling
301-
// sources as program text — `scripts/pm/sweep-stale-finding.mjs` and
302-
// `scripts/pm/check-prior-rulings.mjs` — to pin that the sweep still ALIASES
303-
// the one stale-`finding` screen rather than re-growing a copy, and that the
304-
// prior-ruling line's writer still prints the key the patrol greps. So a card
305-
// touching either sibling really does owe this gate, which is the opposite of
306-
// the #15753 placement this row was written about: that one came from a
307-
// noise-floor constant and said the opposite of what the constant declares,
308-
// while these two literals are exactly what the self-test reads.
300+
// PATH, and truthfully: `check-half-states.mjs`'s self-test reads a sibling
301+
// source as program text — `scripts/pm/check-prior-rulings.mjs` — to pin
302+
// that the prior-ruling line's writer still prints the key the patrol greps.
303+
// So a card touching that sibling really does owe this gate, which is the
304+
// opposite of the #15753 placement this row was written about: that one came
305+
// from a noise-floor constant and said the opposite of what the constant
306+
// declares, while this literal is exactly what the self-test reads.
309307
// ⚖️ `scripts/symbol-anchors.mjs --self-test` LEFT this population under
310308
// #18661 and its row is gone with it — a listed family that stops being a
311309
// member reds here, and a stale exclusion is an exclusion nobody measures.

0 commit comments

Comments
 (0)