Skip to content

chore(pm): delete report-only check-widening-tells.mjs and its wiring (ruling 208) - #22002

Draft
objectstack-fleet[bot] wants to merge 2 commits into
mainfrom
claude/issue-21959-delete-check-widening-tells
Draft

objectstack-fleet[bot] wants to merge 2 commits into
mainfrom
claude/issue-21959-delete-check-widening-tells

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

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" 6befe19c 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

…ring

Removes scripts/pm/check-widening-tells.mjs, its check:pm-widening-tells
package script and its lint.yml self-test step, and re-points every live
mention: the measurement-claim triage EXCLUDED row and scope docblock, two
source comments that cited the file as an importer, the stale step reference
in a neighbouring lint.yml comment, the two pm-dispatch instrument-discipline
lines that named it, and the census rows (kept, marked deleted).

Nothing replaces it; no gate is added.

Claude-Session: https://claude.ai/code/session_0181E4ZeZmWyknawnauxD2CE
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 95c510eb8abb1808ec2fb10d52f7b89d2f429b4c
Local-runs: none

Face reviewed: governed rule text — .claude/skills/pm-dispatch/references/instrument-discipline.md lines 6–7 (a Tier S path; the PR as a whole is Tier H by size: 6580 changed lines, over the 5000-line human-merge threshold per check-governed-merges --pr 22002). Inputs: card #21959, ruling 208 (#19491, comment 5755284987), PR #22002's body and file list, the net diff of 95c510eb against merge-base 6befe19c (+17 / −6563 across 8 files), and the report comment 6019127602. Check-runs on the head at 2026-10-06T15:16Z: 31 completed, 7 in progress, 1 failure (Validate Package Dependencies — OSV advisories on main's lockfile, not this PR's; anchor card #22013, see the landing-status comment). Nothing built, run or re-run here.

① Derived judgments

  • Accept set / public surface: none changed. The deletion is a PM-internal instrument (scripts/pm/**), its package.json script line and its CI self-test step; no package publishes anything from them; no schema, no error code. Right.
  • Governed line 7, 「放宽 tell(C5)不设仪器,Clause-② 的方向由达档复核裁。」: states what the card's Done-when asks (the direction of Clause-② is judged at the contract-review tier) and what ruling 208 implies once the instrument is gone. Right. Line 6, 「判意图的仪器(半状态巡查)只印读数…」: the example list no longer names an instrument that does not exist; without this edit lines 6 and 7 would contradict each other. Right — a bounded in-place fix, declared in the report and the body.
  • The deletion is pure (−6528, 0 added); package.json loses exactly the one script line; lint.yml loses the step and its comment block (13 lines) and one stale comment at :1693 is re-pointed; the two docblock / comment rewrites remove references to a file and a constant that no longer exist; the census rows are kept and marked deleted. Right.
  • The card's premise that two files import SCHEMA_PROPERTY_FORMS from the instrument was false on origin/main (zero import sites; both cited lines were comments) — the seat's pre-dispatch grep and the dev's probe (import / from / require shapes over the file name: 1 hit, a comment; control over check-half-states.mjs: 33 hits) agree; the comments were rewritten instead of a constant moved. Right; the Done-when is met in substance.
  • scripts/pm/dispatch-gates.mjs untouched (frozen under ruling 208); its docblock at :3895 still counts the instrument among "five" live mentions while four remain — a stale count in a frozen file; its --self-test is green with the file gone (1976 cases, per the report, to be confirmed by CI). Left. Right.
  • The two governed lines are 71 and 100 bytes; instrument-discipline.md has no CEILINGS row (the dev's reading, which corrects the seat's "12 / 12" claim-time reading — no ratchet gate reads this file); 12 lines before and after regardless. No issue number added. Right.

② Semver level

Clause-②: no on the claim (6018121757) and at PR body line 2 — right: no published contract moves. skip-changeset — right: scripts/pm/**, .github/**, .claude/**, docs/audits/** and a root package.json script line publish nothing. No existing changeset is edited.

③ Boundary flags

  • Two bounded in-place fixes beyond the dispatch list (lint.yml :1693 comment; instrument-discipline.md line 6): accepted; the claim's file surface is amended on the card in the same round.
  • The constant not moved (zero importers): accepted, evidence in the report and the PR body.
  • Base 6befe19c (one unrelated commit after dispatch): accepted.
  • The pin reading (after the deletion a repo-wide grep leaves the two census rows, the history paragraph and the frozen docblock): accepted as the card allows.
  • The model-free commit trailer pair: correct per the dev definition.
  • PR size over 5000 ⇒ Tier H: the dev read it right; the four-item terminal is the seat's and is on this thread.
  • Labeler-set labels left alone: right.
  • Acceptance notes (4, carrier: none): the frozen docblock's count; measurement-claim-triage --self-test red identically at base and head (UNTRIAGED scripts/check-dts-references.mjs:74) — a report-only tool outside CI, no card under ruling 208; no ratchet row for instrument-discipline.md; triage-duties.md :64 still names 放宽 tell among report-only instruments — a rider for the next PR on that file. Notes, no card.
  • open_questions: none. One red check on the head is not this PR's (OSV advisories on main's lockfile; anchor card [finding] main's lockfile matches two new OSV advisories (sharp 0.35.4 GHSA-wq5f-xc86-pv6w high, fixed in 0.35.5; shell-quote 1.10.0 GHSA-pqg4-j6r4-53mv critical, fixed in 1.11.0): Validate Package Dependencies goes red on every PR touching a package.json #22013); the landing waits for its fix and an update-branch.

Implemented-by: claude/issue-21959-delete-check-widening-tells
Reviewed-by: session_0181E4ZeZmWyknawnauxD2CE

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿)

改了什么:删掉 PM 内部那个只报告、不挡任何 PR 的「放宽 tell」仪器 scripts/pm/check-widening-tells.mjs(6528 行),连同 package.json 里它的脚本行和 CI 里跑它自测的一步;仓里还点名它的地方全部改成不再指向一个不存在的文件(两处脚本注释、一处 CI 注释、一份工具的排除表、PM 技能仪器纪律两行、门禁普查表两行标「已删」)。不新增任何替代仪器、门禁或 workflow 步。

为什么改:裁决 208 定了只报告的仪器不配 dev、在途工作只有删除;您在分诊席决策批 2 第 2 项答「同意」删它。它在普查窗口里零拦截,却每次 CI 都跑自测、隔三岔五要人修(最近一次 10-01)。

风险与代价(含回滚):Clause-② 方向的判断回到达档复核席手里(原本也是席位裁,脚本只印读数)。卡上一条前提是假的——仓里没有任何文件从它 import SCHEMA_PROPERTY_FORMS,所以不搬常量、只改两处注释;冻结的 dispatch-gates.mjs 一个字没动,其自测在文件删除后仍绿(1976 例)。回滚 = revert 本 PR 一次。CI 现有一项红 Validate Package Dependencies,不是本 PR 的:OSV 扫出 sharp 0.35.4 与 shell-quote 1.10.0 两条今天下午新发布的 advisory,本 PR 一条依赖没动(只删了一行脚本,触发了按路径过滤的 workflow);已立锚卡 #22013 止血,修复落 main 后席位给本 PR 合一次 main 让它重跑。

席位意见:席位达档复核 PASS(记录在本 PR 评论 ⬆);改动是一次机械删除加七处改引用,范围与卡面一致,无扩写。建议批准。

你要做的:一个动作——在本 PR 上点 Approve。改动 6580 行超过 5000 行人工合并线,规则要求授权账户 APPROVED;批准后由席位在 OSV 红清除、CI 全绿时入队落地,不需要您合并。

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Landing status — Tier H by size; the one red check is not this PR's · session_0181E4ZeZmWyknawnauxD2CE (domain:skills#2) · 2026-10-06T15:21Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

CI note — one re-run of the cancelled type-check lane · session_0181E4ZeZmWyknawnauxD2CE (domain:skills#2) · 2026-10-06T15:39Z

TypeScript Type Check went red on 95c510eb only because its lane Type Check · source gates (job 112338519086, run 37483796876) was cancelled at the Checkout repository step after a ten-minute hang — every later step was skipped, so no test body ran; the aggregate "Verify every type-check lane succeeded" then read cancelled where it expects success. The four sibling lanes (workspace, debt ledger, consumer gates, Lint & Repo Gates) all passed on the same head. That is the one case the landing rules allow a re-run for (died before any test body ran, on the current head); the failed jobs of run 37483796876 were re-queued once at this reading. A second failure would be real and is read as such. Validate Package Dependencies stays red for the reason in the landing-status comment above (#22013, not this PR's) and is not re-run.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: fab444b4b9935b3c8199f8480e6164ec2a4c49aa
Local-runs: none

Successor record to 6019414425 (head 95c510eb). Head fab444b4 is the GitHub update-branch merge of main 289ff6d4 (the squash of PR #22016, the OSV fix this PR was parked behind) into the reviewed head 95c510eb; parents 95c510eb and 289ff6d4, no file authored by anyone. Face reviewed: the same governed rule text, .claude/skills/pm-dispatch/references/instrument-discipline.md lines 6–7 (a Tier S path; the PR as a whole stays Tier H by size, 6580 changed lines). Inputs: card #21959, ruling 208, PR #22002's body and file list, the net diff of fab444b4 against main 289ff6d4 (8 files, +17 / −6563) compared line by line with the diff reviewed in 6019414425 (95c510eb against merge-base 6befe19c): every added and removed line is byte-identical (6580 lines, equal hash), hunk headers and context lines identical; the only bytes that moved are the index blob ids of files main changed elsewhere (.github/workflows/lint.yml by PR #22033, outside this PR's hunks). Check-runs on the head at 2026-10-06T21:18Z: 18 completed, 16 in progress or queued, 0 failure(s); Validate Package Dependencies is running against the lockfile that now carries #22016's fix, and the landing waits for every check to complete green. Nothing built, run or re-run here.

① Derived judgments

  • Accept set / public surface: none changed. The deletion is a PM-internal instrument (scripts/pm/**), its package.json script line and its CI self-test step; no package publishes anything from them; no schema, no error code. Right, unchanged from 6019414425.
  • Governed line 7 (放宽 tell has no instrument; the direction of Clause-② is judged at the contract-review tier) states the card's Done-when and what ruling 208 implies once the instrument is gone; line 6 no longer lists an instrument that does not exist, so lines 6 and 7 agree. Right; the bounded in-place fix on line 6 was declared in the report and the body.
  • The deletion is pure (−6528, 0 added); package.json loses exactly the one script line; lint.yml loses the step with its comment block and has one stale comment re-pointed; the two docblock / comment rewrites drop references to a file and a constant that no longer exist; the census rows are kept and marked deleted. Right.
  • The card's premise that two files import SCHEMA_PROPERTY_FORMS from the instrument was false on origin/main (zero import sites; both cited lines were comments); comments were rewritten instead of a constant moved. Right; the Done-when is met in substance.
  • scripts/pm/dispatch-gates.mjs untouched (frozen under ruling 208); its stale "five" count at :3895 is left; its self-test is green with the file gone (1976 cases in the report; confirmed by the previous head's CI). Right.
  • The merge brings in nothing that touches this PR's eight files beyond lint.yml's unrelated regions; no conflict marker in the tree. Right.

② Semver level

Clause-②: no on the claim (6018121757) and at PR body line 2 — right: no published contract moves. skip-changeset — right: scripts/pm/**, .github/**, .claude/**, docs/audits/** and a root package.json script line publish nothing. No existing changeset is edited; the merge adds none.

③ Boundary flags

  • Two bounded in-place fixes beyond the dispatch list (lint.yml comment; instrument-discipline.md line 6): accepted, as in 6019414425.
  • The constant not moved (zero importers): accepted, evidence in the report and the PR body.
  • Head moved by a base sync only (the one update-branch named in the body's parked section, after its release condition — PR fix(deps): take the fixes for sharp and shell-quote that turn main's OSV scan red #22016 merged — was read on main and on the queue refs): accepted; the diff content is unchanged, so every judgment above carries.
  • PR size over 5000 ⇒ Tier H: the four-item terminal stands (this record, needs-user-decision on the PR, 速读 6019466267, review requested from os-zhuang and hotlong); landing after an authorized APPROVED and all checks green, by the seat, through the queue.
  • Acceptance notes (4, carrier: none): unchanged — the frozen docblock's count; measurement-claim-triage --self-test red identically at base and head; no ratchet row for instrument-discipline.md; triage-duties.md :64 still names 放宽 tell. Notes, no card.
  • open_questions: none.

Implemented-by: claude/issue-21959-delete-check-widening-tells
Reviewed-by: session_0181E4ZeZmWyknawnauxD2CE

VERDICT: PASS


Generated by Claude Code

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation needs-user-decision size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants