Skip to content

Commit 5bd8cb1

Browse files
objectstack-fleet[bot]claudeos-steve
authored
chore(pm): delete report-only check-widening-tells.mjs and its wiring (ruling 208) (#22002)
Fixes #21959 Clause-②: no Deletes the report-only widening-tell instrument `scripts/pm/check-widening-tells.mjs` (6,528 lines) with all of its wiring, under ruling 208 (report-only instruments get no dev; their only in-flight work is deletion) and the maintainer's answer to decision batch 2 item 2, verbatim 「同意」. ⛔ Nothing replaces it, no gate is added, no workflow step is added. ## What changed — the full list (12 hunks in 8 files; nothing outside them) Line numbers are at base `6befe19c` (`origin/main` when the worktree was cut). | # | where (base) | before | after | |--:|:--|:--|:--| | 1 | `scripts/pm/check-widening-tells.mjs` | the instrument, 6,528 lines | deleted | | 2 | `package.json:85` | the `check:pm-widening-tells` script | removed | | 3 | `.github/workflows/lint.yml:1324-1336` | the "Widening-tell gate self-test" step with its 10-line comment | removed | | 4 | `.github/workflows/lint.yml:1693` | "same split as the widening-tell and prior-ruling steps above" | "same split as the prior-ruling step above" (bounded in-place fix, see below) | | 5 | `scripts/pm/measurement-claim-triage.mjs:57-62` | scope docblock names two excluded files | names only `scripts/pm/dispatch-gates.mjs` | | 6 | `scripts/pm/measurement-claim-triage.mjs:122-125` | `EXCLUDED` row for the instrument | removed | | 7 | `scripts/pm/check-half-states.mjs:1336-1339` | docblock says the register is the instrument's `SCHEMA_PROPERTY_FORMS` | the register is described on its own terms; no file or constant named | | 8 | `scripts/pm/check-prior-rulings.mjs:215-217` | comment says the instrument takes the same import | clause dropped | | 9 | `.claude/skills/pm-dispatch/references/instrument-discipline.md:7` | 放宽 tell(C5)由 `scripts/pm/check-widening-tells.mjs` 印 file:line,归达档复核裁。 | 放宽 tell(C5)不设仪器,Clause-② 的方向由达档复核裁。 | | 10 | `.claude/skills/pm-dispatch/references/instrument-discipline.md:6` | 判意图的仪器(放宽 tell、半状态巡查)… | 判意图的仪器(半状态巡查)… (bounded in-place fix, see below) | | 11 | `docs/audits/gate-census-2026-09.md:246` | verdict `retire` | `retire` · **deleted 2026-10** (ruling 208; 「同意」) — row kept | | 12 | `docs/audits/gate-census-2026-09.md:353` | retirement-list row | same row, marked **deleted 2026-10** — row kept | `instrument-discipline.md` stays at 12 lines (both edits are in place). **Bounded in-place fixes beyond the dispatch's list (rows 4 and 10).** Both are the same defect class as the card (a live sentence naming the deleted instrument), mechanical, in a file this PR already edits, and in the same gate family. Row 4: after row 3 the comment pointed at a step that no longer exists. Row 10: line 6 listed 放宽 tell as an existing intent-judging instrument. Without this edit it would contradict the rewritten line 7 on the line below. ## Premise checks (the card body is a lead, not a spec) - **"`check-half-states.mjs` and `check-prior-rulings.mjs` import `SCHEMA_PROPERTY_FORMS` from it": false at base.** Probe `git grep -n -E "(import|from|require|import\()[^;]*check-widening-tells" 6befe19` returns exactly 1 hit, and that hit is a comment: `check-prior-rulings.mjs:215`. The control is the same shape on `check-half-states`. It returns 33 hits, real imports among them, `check-prior-rulings.mjs:218` and the instrument's own `:1484` included. Outside the instrument, `SCHEMA_PROPERTY_FORMS` appears only in the `check-half-states.mjs:1336` docblock. The import direction is the reverse of the card's reading. The instrument imported from `check-half-states.mjs`, `dispatch-gates.mjs` and `regen-artifacts.mjs`, and nothing imported from it. The "move the constant" item therefore became rows 7–8, which rewrite the two comments. No code moved. - **Pin, "a repo-wide grep returns only historical changelog lines":** `git grep -n -E "widening-tells|SCHEMA_PROPERTY_FORMS"` over the whole tree at HEAD returns 4 lines, and none is in a CHANGELOG. No CHANGELOG ever named it. The 4 lines are: census `:246` and `:353` (marked deleted, kept per dispatch), census `:398` (the historical drift paragraph, deliberately untouched) and `scripts/pm/dispatch-gates.mjs:3895`. That file is frozen by ruling 208: its own `--self-test` is green with the instrument gone (below), so the word stays. ## Verification (HEAD `95c510eb`, worktree `objectstack-issue-21959`) - `node scripts/pm/dispatch-gates.mjs --self-test` → `✓ dispatch-gates self-test: 1976 cases pass.` EXIT=0 (`nohup` + `tail --pid`) - `pnpm check:pm-dispatch-gates` → `✓ check:pm-dispatch-gates --self-test: the exit contract holds in all three directions.` · `✓ dispatch-gates self-test: 1976 cases pass.` · `the battery took 842.7s on this box.` EXIT=0. It ran under `nohup` + `tail --pid`. A first attempt inside my sequential runner hit that runner's own 540 s per-command timeout, so it was re-run on its own, and that run is the one recorded here. - `node scripts/pm/check-half-states.mjs --self-test` → `✓ check-half-states self-test: 4912 cases pass.` EXIT=0 - `node scripts/pm/check-prior-rulings.mjs --self-test` → `✓ check-prior-rulings self-test: 155 cases pass` EXIT=0 - `node scripts/check-self-test-wired.mjs` EXIT=0 and `node scripts/check-self-test-workflow-commands.mjs` EXIT=0. The three wiring pieces went out together. - `node scripts/check-scripts-symbol-anchors.mjs` → `3722 anchors across 281 scripts resolve` EXIT=0 - `pnpm check:pm-skill-ratchet`, `check:pm-skill-id-lint`, `check:pm-governed-prose`, `check:pm-governed-merges`, `check:pm-expected-skips`, `check:doc-authoring`, `check:nul-bytes`, `check:issue-citations` → all EXIT=0 - `node scripts/pm/measurement-claim-triage.mjs --self-test` → EXIT=1 **identically at base `6befe19c` and at HEAD**. The failure in both is `UNTRIAGED scripts/check-dts-references.mjs:74`, which predates this PR and is unrelated to it. The report run's only difference base→HEAD is the dropped `NOT SWEPT … check-widening-tells.mjs` line; the population is unchanged (`88 claim(s) over 49 file(s)`). The tool is not wired into CI. - `dispatch-gates --commands` (no paths; change set from the merge base) derived 82 commands. I ran all 82, plus the six the dispatch named on top: 80 EXIT=0. **NOT MEASURED** (exit 3, `PREREQUISITE NOT MET`, no `dist/` in a fresh worktree): `check:dts-closure`, `check:dual-build-cjs-loads`, `check:lean-entry-closure`, `check:sourcemap-no-sources-content`, `@objectstack/lint check:doc-formula-expressions`. Declared narrowing: these read built workspace packages, this diff touches no workspace package, and CI runs them. - `--ran` reconciliation: `✓ dispatch-gates --ran: 82 derived famil(ies) accounted for — 77 run, 5 NOT-MEASURED (5 DERIVED from a recorded exit 3).` 0 UNRUN. - Lint, run on the edited files only (a proved narrowing; the repo-wide `pnpm lint` belongs to CI). `eslint --no-inline-config --format json` on the 3 edited `.mjs` files: 3 files linted, 0 errors, 0 warnings, and none was reported ignored, so all 3 sit inside the config's population. Invariance: `eslint.config.mjs` never enables type-aware linting (no `parserOptions.project`, no typed rules). Nothing imported the deleted file. So this diff cannot move the verdict on any untouched file. ## Landing - Governed **Tier S** (`.claude/skills/pm-dispatch/references/instrument-discipline.md`). The PR stays draft until the seat's contract-tier review. - Changed lines are 6,580 (+17 / −6,563), over the 5,000 human-merge threshold (AGENTS.md §7 class c). Almost all of it is the one deleted file. - `skip-changeset`: nothing here ships in any package's `files[]` (`scripts/pm/**`, `.github/**`, `.claude/**`, `docs/audits/**`, root `package.json` scripts). ## Acceptance notes (observed, not filed) - `scripts/pm/dispatch-gates.mjs:3895` still lists `check-widening-tells` among "five" live prose mentions; four remain. The file is frozen and its self-test is green, so the mention was left. Carrier: none. - `measurement-claim-triage.mjs --self-test` has been red on `main` since before this PR (`scripts/check-dts-references.mjs:74` untriaged). The tool is report-only and unwired. Carrier: none. - `instrument-discipline.md` has no row in `check-skill-line-ratchet.mjs` `CEILINGS`, so no gate holds its line count. It is kept at 12 regardless. Carrier: none. - `.claude/skills/pm-dispatch/references/triage-duties.md:64` still names 放宽 tell among report-only instruments whose fix cards are closed on first touch. The rule stays true for any stray card about the deleted file, so it was left. Carrier: none. ## 维护者速读(草稿) **改了什么**:删掉一个只报告、不挡任何 PR 的 PM 内部检查脚本(放宽 tell 仪器,6528 行),连同它的 `package.json` 脚本行和 CI 里跑它自测的一步;再把仓里所有还点名它的地方改成不再指向一个不存在的文件(两处脚本注释、一处 CI 注释、一份工具的排除表、PM 技能的仪器纪律两行、门禁普查表两行标「已删」)。 **为什么改**:裁决 208 定了只报告的仪器在途工作只有删除;维护者在决策批 2 第 2 项答「同意」删它。它在普查窗口里零拦截,却每次 CI 都要跑自测、隔三岔五还要派人修。 **风险与代价(含回滚)**:不替换、不新增门禁;Clause-② 方向的判断回到达档复核席位手里(原本也是席位裁,脚本只是印读数)。相关自测与门禁本地均绿。回滚 = revert 本 PR 一次即恢复脚本与 CI 步。 **席位意见**: **你要做的**:本 PR 触受管面(Tier S)且改动行数超过 5000(几乎全是删一个文件),按规则需要一次授权 APPROVED 审阅后由席位落地;无需其它动作。 ## Synced: the parked red cleared (landing-operations §C, released) This PR was parked as a draft behind PR #22016 (the OSV fix for #22013) with an expected-red list for `Validate Package Dependencies`. The release condition was met: PR #22016 merged into `main` as `289ff6d4`. The seat then ran the one `update-branch` that list named: head `fab444b4` is the merge of `main` `289ff6d4` into the reviewed head `95c510eb`, with no file authored by anyone; the net diff against `main` is unchanged (8 files, +17 / −6563, every added and removed line byte-identical to the reviewed diff). - **Checks on `fab444b4`:** 37 check-runs completed, 0 failures, 0 cancelled; the 4 skips are all in the expected-skips roster (`check-expected-skips --pr 22002` exit 0). `Validate Package Dependencies` is green on the fixed lockfile. - **Contract review on this head:** PASS, comment 6025638745 (successor to 6019414425 on `95c510eb`). - **What remains is the Tier H terminal:** the diff is over the 5000-line human-merge threshold (`check-governed-merges --pr 22002` exit 3), so this PR stays a draft until an authorized APPROVED from `os-zhuang` or `hotlong`; the seat then clears `needs-user-decision`, flips ready and arms auto-merge, and the PR lands through the queue. _Section written by the `domain:skills` seat 2 PM (`session_0181E4ZeZmWyknawnauxD2CE`); everything above it is the dev's._ --- _Generated by [Claude Code](https://claude.ai/code/session_0181E4ZeZmWyknawnauxD2CE)_ Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Steve Jobs <steve@objectstack.ai>
1 parent 93125ae commit 5bd8cb1

8 files changed

Lines changed: 17 additions & 6563 deletions

File tree

‎.claude/skills/pm-dispatch/references/instrument-discipline.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
见 reading-discipline.md 的指针行;本文是仪器的分界、授权与工具位次序。
44

55
- 硬门禁只答有确定答案的问题:受管登记表、队列守卫、CI 测试、复核记录在不在。
6-
- 判意图的仪器(放宽 tell、半状态巡查)只印读数 ⛔ 不挡落地,误报由席位一句话推翻。
7-
- 放宽 tell(C5)由 `scripts/pm/check-widening-tells.mjs` 印 file:line,归达档复核裁。
6+
- 判意图的仪器(半状态巡查)只印读数 ⛔ 不挡落地,误报由席位一句话推翻。
7+
- 放宽 tell(C5)不设仪器,Clause-② 的方向由达档复核裁。
88
- 只报告的仪器不配 dev:⛔ 不立卡、不派 dev、不开 PR;它的在途工作只有删除。
99
- 新增门禁、巡查行或棘轮须在卡上引维护者原话,⛔ 无原话不新增;首行四件恒硬。
1010
- 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了时碰。

‎.github/workflows/lint.yml‎

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,19 +1321,6 @@ jobs:
13211321
- name: Contract-review record recogniser self-test
13221322
run: pnpm check:pm-record-recognisers
13231323

1324-
# Widening-tell gate self-test (#16448) — the mechanical half of the
1325-
# directional clause-② ruling (#16349), and the same split as every step
1326-
# around it: the LIVE predicate is `--pair`'s C5 row, a verdict about ONE
1327-
# pair's diff, so failing an unrelated PR's CI over it would punish the
1328-
# wrong actor. Only the offline self-test runs here.
1329-
#
1330-
# This gate has no whole-tree production run at all — its input is a DIFF
1331-
# supplied by its caller, never a file in the tree — so the `--self-test`
1332-
# invocation is the only instrument its matching rules have, which is
1333-
# exactly the family `check:self-test-wired` requires this step for.
1334-
- name: Widening-tell gate self-test
1335-
run: pnpm check:pm-widening-tells
1336-
13371324
# Prior-ruling reader self-test (#17009) — same family and the same split
13381325
# as every step around it. The LIVE read takes a card number over REST and
13391326
# searches this checkout's `origin/main`, so it is a tool a seat runs
@@ -1690,7 +1677,7 @@ jobs:
16901677
run: pnpm check:pm-settings-deny-roster
16911678

16921679
# Expected-skips roster self-test (#18308) — same family and the same
1693-
# split as the widening-tell and prior-ruling steps above: the LIVE read
1680+
# split as the prior-ruling step above: the LIVE read
16941681
# takes a PR head and judges its check-runs over REST, so it is a tool a
16951682
# seat runs against the PR in front of it, not a verdict about the PR
16961683
# that happens to run CI next. Only the offline self-test runs here — it

‎docs/audits/gate-census-2026-09.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ Zod validation inside `packages/spec` and the runtime is the **product**, not a
243243
| `scripts/pm/check-settings-deny-roster.mjs` | process | none (`.claude/settings.json` deny list pinned) · PM loop · origin #18218 · landed 2026-09-15 | required · whole-repo (Lint & Repo Gates) | unmeasured (landed 2026-09-15; <7 days of window coverage) | `keep (too new)` |
244244
| `scripts/pm/check-skill-id-lint.mjs` | process | none (operative agent-protocol text cites no issue numbers) · PM loop · origin no card in header · landed 2026-08-12 | required · whole-repo (Lint & Repo Gates) | 0 in window | `retire` |
245245
| `scripts/pm/check-skill-line-ratchet.mjs` | process | none (per-file line budget over the PM instruction surface) · PM loop · origin #5925 · landed 2026-08-10 | required · whole-repo (Lint & Repo Gates) | 0 in window (7 failure(s) only on PRs editing this file, excluded) | `retire` |
246-
| `scripts/pm/check-widening-tells.mjs` | process | none (mechanical half of the directional Clause-② read) — only its self-test runs in CI · PM loop · origin #16349 · landed 2026-09-07 | required · whole-repo (Lint & Repo Gates) | 0 in window — only its `--self-test` runs in CI; the gate proper never judges a PR here | `retire` |
246+
| `scripts/pm/check-widening-tells.mjs` | process | none (mechanical half of the directional Clause-② read) — only its self-test runs in CI · PM loop · origin #16349 · landed 2026-09-07 | required · whole-repo (Lint & Repo Gates) | 0 in window — only its `--self-test` runs in CI; the gate proper never judges a PR here | `retire` · **deleted 2026-10** (ruling 208; the maintainer: 「同意」) — row kept as the census record |
247247
| `check:adr-symbol-anchors` | process | none (symbol-anchors module self-test + check-adr-symbol-anchors) · composite · `node scripts/symbol-anchors.mjs --self-test && node scripts/check-adr-symbol-anchors.mjs -…` | not in PR CI | 1 PR / 2 days (check-adr-symbol-anchors leg) | `keep` |
248248
| `check:docs-audit-scope` | process | none (affected-docs self-test + check-audit-scope) · composite · `node scripts/docs-audit/affected-docs.mjs --self-test && node scripts/docs-audit/check-aud…` | required · whole-repo (Lint & Repo Gates) | 1 PR / 1 day (check-audit-scope leg) | `keep` |
249249
| `check:docs-image-tag-sync` | contract | release lane: self-test of the docs image-tag version-time rewriter (run by release.yml version-pr) · `node scripts/sync-docs-image-tags.mjs --self-test` | required · whole-repo (Lint & Repo Gates); advisory (Version PR maintenance) | 0 in window — self-test only; cannot judge a PR | `keep` |
@@ -350,7 +350,7 @@ These nine guard the CI farm's own wiring — the required-context names, aggreg
350350
| `scripts/pm/check-label-desc-cap.mjs` | process · 0 in window | `scripts/pm/check-label-desc-cap.mjs` | `check:pm-label-desc-cap` | lint.yml:838 | 2 |
351351
| `scripts/pm/check-skill-id-lint.mjs` | process · 0 in window | `scripts/pm/check-skill-id-lint.mjs` | `check:pm-skill-id-lint` | lint.yml:825 | 3 |
352352
| `scripts/pm/check-skill-line-ratchet.mjs` | process · 0 in window (7 failure(s) only on PRs editing this file, excluded) | `scripts/pm/check-skill-line-ratchet.mjs` | `check:pm-skill-ratchet` | lint.yml:817 | 3 |
353-
| `scripts/pm/check-widening-tells.mjs` | process · 0 in window — only its `--self-test` runs in CI; the gate proper never judges a PR here | `scripts/pm/check-widening-tells.mjs` | `check:pm-widening-tells` | lint.yml:1153 | 2 |
353+
| `scripts/pm/check-widening-tells.mjs` · **deleted 2026-10** | process · 0 in window — only its `--self-test` runs in CI; the gate proper never judges a PR here | `scripts/pm/check-widening-tells.mjs` | `check:pm-widening-tells` | lint.yml:1153 | 2 |
354354
| `check:pm-board-snapshot` | process · 0 in window — self-test only; cannot judge a PR | `scripts/pm/board-snapshot.mjs (only if no other user; check before deleting)` | `check:pm-board-snapshot` | lint.yml:1259 | 0 |
355355
| `check:pm-changeset-deadline-census` | process · 0 in window — self-test only; cannot judge a PR | `scripts/pm/changeset-deadline-census.mjs (only if no other user; check before deleting)` | `check:pm-changeset-deadline-census` | lint.yml:1313 | 0 |
356356
| `check:pm-closed-card-sweep` | process · 0 in window — self-test only; cannot judge a PR | `scripts/pm/sweep-closed-cards.mjs (only if no other user; check before deleting)` | `check:pm-closed-card-sweep` | — | 0 |

‎package.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
"check:pm-half-states": "node scripts/pm/check-half-states.mjs --self-test",
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",
85-
"check:pm-widening-tells": "node scripts/pm/check-widening-tells.mjs --self-test",
8685
"check:pm-prior-rulings": "node scripts/pm/check-prior-rulings.mjs --self-test",
8786
"check:pm-closed-card-sweep": "node scripts/pm/sweep-closed-cards.mjs --self-test",
8887
"check:pm-stale-finding": "node scripts/pm/sweep-stale-finding.mjs --self-test",

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,10 +1333,10 @@ export function markerMatches(marker, text) {
13331333
* decoration is ADDED here — where a fixture and a case come with it — ⛔ never
13341334
* discovered again from a silent row.
13351335
*
1336-
* The register is `SCHEMA_PROPERTY_FORMS`' (`scripts/pm/check-widening-tells.mjs`,
1337-
* #18560): a frozen roster the detector is BUILT from, each member carrying its
1338-
* own `example`, so a form added without a fixture and a form silently dropped
1339-
* both go red instead of quietly changing what the instrument sees.
1336+
* The register is a frozen roster the detector is BUILT from, each member
1337+
* carrying its own `example`, so a form added without a fixture and a form
1338+
* silently dropped both go red instead of quietly changing what the instrument
1339+
* sees.
13401340
*
13411341
* ## What a member is, and what it is NOT
13421342
*

‎scripts/pm/check-prior-rulings.mjs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,9 @@ import { performance } from 'node:perf_hooks';
212212
import { fileURLToPath } from 'node:url';
213213
import { isEntrypoint } from '../invoked-as.mjs';
214214
// ⛔ Not copied. The board resolver and the proxy-rearm plan are ONE source in
215-
// `check-half-states.mjs` — the same import `check-widening-tells.mjs` takes —
216-
// so this reader and the patrol cannot come to disagree about which board is
217-
// being read or whether this container's fetch reaches it.
215+
// `check-half-states.mjs`, so this reader and the patrol cannot come to
216+
// disagree about which board is being read or whether this container's fetch
217+
// reaches it.
218218
import { DEFAULT_SWEEP_REPO, resolveSweepRepo, proxyRearmPlan, PROXY_FLAG, PROXY_REARM_GUARD } from './check-half-states.mjs';
219219

220220
export const EXIT_OK = 0;

0 commit comments

Comments
 (0)