Skip to content

chore(pm): delete changeset-deadline-census, a report-only tool nothing calls - #29577

Merged
os-zhuang merged 1 commit into
mainfrom
claude/project-thread-mw93fe
Nov 2, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/project-thread-mw93fe

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Irene · project thread

Part of #29471 (family T1 of the census in comment 6586191438). The card stays open: it closes only when the 30-day net change of scripts/pm is below zero.

What changes

Deletes the changeset-deadline census, a report-only tool that nothing calls:

  • scripts/pm/changeset-deadline-census.mjs (798 lines, the tool and its self-test)
  • the check:pm-changeset-deadline-census script line in package.json
  • its Changeset-deadline census self-test step in .github/workflows/lint.yml (the step and its comment block, 24 lines)

The diff is −823 / +0, with no other file touched. docs/audits/gate-census-2026-09.md keeps its two rows as history; that audit already rowed this script retire.

Why

The card's census found no reader for this tool on origin/main:

  • no skill, agent or AGENTS.md text names it
  • no workflow runs it live; its only run was its own --self-test step in lint.yml
  • no other script imports it

Of the seat-signed comments in the 30-day window, the ones that name it are dev reports listing it as a derived gate family ("--self-test exit 0"). No seat ran it for its output. Its self-test was therefore a cost on every dispatch touching scripts/** and was read by no one. instrument-discipline.md gives a report-only instrument no in-flight work except deletion.

Verification

  • node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD → exit 0
  • git grep changeset-deadline-census leaves only the two history rows in docs/audits/gate-census-2026-09.md
  • package.json still parses as JSON, and lint.yml still parses as YAML
  • dispatch-gates --commands derived 63 gate commands for this diff, and each was run with its exit code recorded before any pipe. 59 exited 0. 4 exited 3 with PREREQUISITE NOT MET because they read build output and this container has no dist/: check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure and check:sourcemap-no-sources-content. They are NOT MEASURED locally, and CI's Build Core job runs them. check:self-test-wired and check:step-collectors are among the 59, so the script line and the step leave together.

Clause-②: no
Metadata-protocol: none

No changeset: the diff publishes nothing from any released package, so the PR carries skip-changeset.

Landing: .github/workflows/lint.yml is a governed Tier H surface. This PR stays a draft until an account in GOVERNED_APPROVERS approves it.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind. (nothing added)
  • 3. No formatter ran. No linted source changed: the diff deletes one file and edits JSON and YAML.
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset. (publishes nothing: skip-changeset)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (not touched)
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01J8VVAo9KHvhcw37HZexRT4


Generated by Claude Code

…ng calls

The census had no caller: no skill, agent or AGENTS.md text names it, no
workflow runs it live, and no other script imports it. Its only run was its
own --self-test step in lint.yml, so every dispatch touching scripts/** paid
for a self-test of an instrument nobody read. The gate census of 2026-09
already rowed it `retire`.

Removed: scripts/pm/changeset-deadline-census.mjs (798 lines), the
check:pm-changeset-deadline-census script in package.json, and its step in
lint.yml. docs/audits keeps its rows as history.

Claude-Session: https://claude.ai/code/session_01J8VVAo9KHvhcw37HZexRT4
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 2, 2026
@github-actions github-actions Bot added size/l ci/cd dependencies Pull requests that update a dependency file labels Nov 2, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 21ffe74 · 2026-11-02T19:44Z

The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier).

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 21ffe74e07883cca5ae14f70a29113e62795319d
Local-runs: probe — on a detached worktree of the head (merge-base with origin/main ff827bc; origin/main at dbca3ef when fetched; none of the three paths moved on main since the merge-base): node scripts/pm/dispatch-gates.mjs --commands over the three paths (63 commands derived, matching the PR body's 63), every command run in its node form from the worktree (pnpm check:* resolved through the head's package.json): 105 node subcommands, 65 exit 0, 39 PREREQUISITE NOT MET or ERR_MODULE_NOT_FOUND for a missing dependency or dist/, 1 (check-dispatch-gates.mjs live) stopped at the sweep's 180 s per-command limit (listed in ①.7); node scripts/pm/check-governed-merges.mjs --pr 29577 (exit 3, GOVERNED, Tier H, one hit .github/workflows/lint.yml); bash scripts/ci/select-gate-families.selftest.sh (60 cases, 310 checks, exit 0); python3 -I YAML parse of lint.yml on the head and on origin/main (15 jobs both; 298 → 297 steps); node -e require('./package.json') (203 scripts, the census alias absent); git grep over the whole head tree and over origin/main; a second detached worktree at the merge-base as the container control for the two gates that did not exit 0. Both worktrees were removed after the runs and the main checkout was not touched.
Scope: .github/workflows/lint.yml (the governed hit: one step and its comment block removed), package.json (one script line removed), scripts/pm/changeset-deadline-census.mjs (deleted whole) + read, not reviewed: docs/audits/gate-census-2026-09.md lines 255 and 355 (the two history rows the PR keeps), .claude/skills/pm-dispatch/references/instrument-discipline.md lines 8 and 10 (the clause the PR cites), scripts/check-self-test-wired.mjs and scripts/check-self-test-workflow-commands.mjs (the two gates that enumerate package.json aliases and lint.yml self-test steps), card #29471 body, comments 6586191438 (census), 6586287965 (claim) and 6586754220 (dev report, read as input), PR #29577 body and its one comment 6586786021 (the seat's review claim on this head)

Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented), fed the card body and comments, the PR body, the net diff against the merge-base, the head's check-runs, contract-review.md and review-checklist.md. The dev report was read as input, not as conclusions; every count below is this review's own measurement. No environment variable value is printed anywhere in this record.

① Derived judgments

  1. File surface. One commit (21ffe74, author Claude, PR author objectstack-fleet[bot], head repo = base repo, draft, base main, trailers Claude-Session: + Co-authored-by: Claude, no model identifier). git diff --numstat ff827bcf 21ffe74e, the REST file listing and the PR body agree on exactly three paths: .github/workflows/lint.yml 0/−24 (blob 9afd0398 → 12cf5c03), package.json 0/−1 (4e9d2ee3 → 7d6457aa), scripts/pm/changeset-deadline-census.mjs removed (798 lines at the merge-base, measured). Total −823/+0. The claim's file surface (6586287965) was these three paths with stop-on-breach; nothing else is touched. Correct, and on surface.
  2. lint.yml. The hunk at merge-base lines 1498–1521 removes one comment block (19 lines) and one step (name: Changeset-deadline census self-test, id: changeset-deadline-census-self-test, continue-on-error: true, run: pnpm check:pm-changeset-deadline-census) plus its separating blank line, 24 lines, inside job lint-repo-tooling. The two neighbours (Stale-\finding` sweep self-testabove,Governed-merges audit self-testbelow) are byte-identical to the merge-base and still adjacent. The head file parses as YAML (15 jobs, 297 steps; main 15 jobs, 298 steps); nosteps.changeset-deadline-census-self-testreference exists anywhere under.github/` on the head, so no collector or output read the removed id. Correct, and nothing else in the file moved.
  3. package.json. One line removed, "check:pm-changeset-deadline-census": "node scripts/pm/changeset-deadline-census.mjs --self-test"; the file parses, 203 scripts remain, the alias is absent, the neighbours (check:pm-board-snapshot, check:pm-governed-merges) are unchanged. Correct.
  4. No reader remains on the head. git grep -I -i for changeset-deadline-census, pm-changeset-deadline, changesetDeadline, changeset_deadline, Changeset-deadline census, deadline census and 16850 over the whole head tree returns exactly the two rows of docs/audits/gate-census-2026-09.md (lines 255 and 355), both history, one of them already rowing the alias retire with the note "only if no other user; check before deleting". Nothing under .claude/**, skills/**, AGENTS.md, docs/agents/**, .github/**, scripts/** (dispatch-gates data, select-gate-families.sh, self-test-wired, self-test-workflow-commands, symbol-anchor and file-registry gates) names the file, the alias or the step id. Correct.
  5. The census's claim holds on origin/main today (dbca3ef). The same grep over origin/main, excluding the file itself and docs/audits/**, returns exactly the lint.yml step (lines 1498, 1517, 1518, 1520) and the package.json alias (line 99): the file's only caller was its own --self-test step, nothing imports it, no skill, agent or workflow text names it. The claim in 6586191438 ("nothing runs them but their own --self-test in lint.yml") is correct for this tool; the premise line in 6586287965 is correct.
  6. Enumerating gates stay green with the alias and the step leaving together. check-self-test-wired (248 scripts, 173 aliases, exit 0, and its --self-test 12 batteries / 96 cases), check-scripts-symbol-anchors (4157 anchors across 288 scripts resolve, exit 0, --self-test exit 0), check-self-test-workflow-commands --self-test (exit 0), select-gate-families.selftest.sh (60 cases, exit 0): the deletion leaves no orphan alias, no orphan step and no dangling anchor. Correct.
  7. The derived gate sweep. 63 distinct commands resolve to 105 node subcommands; 65 exit 0: declaration-mirrors, dts-emitted self-test, self-test-wired (both), self-test-workflow-commands self-test, whole-set-label-write (both), assert-turbo-remote-cache, plan-test-core-shards, prune-turbo-cache, scheduled-full-run self-tests, docs-audit drift-comment, ci-failure self-test, agent-test-spelling (both), bash32-floor (both), cross-package-test-inputs (both), declared-population-live (both), dts-closure / dual-build-cjs-loads / lean-entry-closure / sourcemap-no-sources-content self-tests, entry-guard (both), gitlink-declared (both), manifest-repository-directory (both), git-env, git-merge-regen, regen-pending, node-version (both), nul-bytes (both), parse-guard (both), check-dispatch-gates self-test, post-stamped, record-recognisers, check-owed-reviews, mailbox-open, fleet-roster self-tests, pnpm-filter-targets (all three), pnpm-flag-spellings (both), ratchet-remedy-authority (both), refd-timer-probe (both), scripts-symbol-anchors (both), ci-shard-matrix, turbo-task-graph (both), watch-hint-literal (both), workflow-step-name-quoting (both). Of the 40 non-zero exits, every one is this container (no node_modules, no dist/), not the diff: 33 print PREREQUISITE NOT MET naming the missing yaml, typescript or @typescript-eslint/parser dependency or the missing build output (closing-keyword-parity, comment-mask-corpus, merged-branch-reaper-outcome, step-collectors, aggregator-roster, ci-filter-parity, cli-command-ids, driver-memory-census, dts-closure, dual-build-cjs-loads, lean-entry-closure, sourcemap-no-sources-content, governed-merges self-test, pnpm-acquisition, required-contexts, shard-attestation, stall-guard-budget, stall-guard-headroom, workflow-status-functions, workflow-context-availability); check-expected-skips --self-test and the four check-type-check-coverage forms exit 1 on Cannot find package 'yaml' / 'typescript'; check-self-test-workflow-commands (exit 1) fails on release-pending-publish missing @changesets/cli; the live check-dispatch-gates.mjs was stopped by the sweep's 180 s limit (SIGTERM, its self-test exited 0). step-collectors, self-test-workflow-commands, expected-skips and type-check-coverage reproduce with the same first error line on a merge-base worktree in this container. Those are NOT MEASURED locally and read from CI: Lint · repo & tooling gates (the job that held the step), Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests, Lint & Repo Gates, Build Core, TypeScript Type Check are all success on the head.
  8. Governance. check-governed-merges.mjs --pr 29577: 3 paths, 1 register hit (.github/workflows/** via lint.yml), Tier H, 823 changed lines under the 3000 threshold, exit 3 as designed. The PR body says so and the PR is a draft with no reviews, no assignee, no requested reviewer, labels ci/cd, size/l, dependencies, skip-changeset. Correct: landing waits for a GOVERNED_APPROVERS review or the maintainer's hand; this record is the Tier S style review of record that review-checklist asks for on a deletion, not a clearance.
  9. PR body against the head. First content line Part of #29471 with the card number beside zero verbs, and the body's only other issue number (29471) is the same card, so no closing keyword sits next to another open card; the PR-body guards check is success. 798 lines, 24 lines, −823/+0, 3 files, 63 derived commands, 4 exit-3 for missing dist/: all reproduce here (my sweep adds the yaml/typescript PREREQUISITE class on top because this container has no node_modules at all, which the dev's did). Clause-②: no and Metadata-protocol: none are right (no published package, no spec). "Part of" is right: the card closes only on the 30-day net-negative reading, not on T1. Correct.
  10. Nothing new on any surface: no gate, no label, no workflow, no register row, no package. The card asked for deletion "in PRs of one family each, with their self-test cases; no behaviour change in the rows that stay": this PR is one family (T1), the self-test goes with the file, and no staying row or tool is touched.

② Semver level

None. No published package, no packages/spec/src/**, no TypeScript; a scripts/pm tool, its root alias and a CI self-test step. skip-changeset is the right declaration and Check Changeset is success on the head.

③ Boundary flags

  • Dev open_questions: none on 6586754220. The census's two questions (6586191438) were answered by the seat in 6586287965 and do not bear on T1.
  • Dev deviation (a): no assignee or reviewer on the PR, per the contract. No flag.
  • Dev deviation (b): the branch was fast-forwarded to origin/main ff827bc before the edit, nothing rebased: the merge-base is ff827bc and the one commit sits on it. Confirmed.
  • Independence: PR author objectstack-fleet[bot], commit author Claude; no off-relay author note is owed. The PR thread carries the seat's Contract-review-claim: for this head (6586786021) and no other record.
  • Tier H: this record does not lift the landing; the maintainer's hand or an authorized approval does.

④ Design judgment

Per hits file, against the card's scenario (a report-only tool with no reader costs a self-test on every dispatch touching scripts/**; the discipline text gives such an instrument no in-flight work but deletion):

  • .github/workflows/lint.yml: removing the step whole, with its comment block, is the right cut. The comment block existed only to explain that step (why the live census is report-only and why only its self-test runs here), so leaving it would be prose about a step that no longer exists; the neighbours' blocks are self-contained and untouched. The step was continue-on-error: true with no collector reading its outcome, so no job-level logic changes. Holds.
  • package.json: the alias goes with the step, which is exactly the pairing check-self-test-wired enforces in both directions (an alias with no CI step would red; a step with no alias would red). Holds.
  • scripts/pm/changeset-deadline-census.mjs: deleted whole rather than trimmed. The 2026-09 gate census already rowed it retire conditioned on "no other user"; that condition is now measured true on main. Nothing imports it, so no shared helper has to stay. Holds.

Must-fix: none.

Should-fix: none.

Check-runs at record time (2026-11-02T19:57Z): 60 check-runs on 21ffe74, 37 success, 12 skipped, 0 failure, 11 still in progress on the fourth read (Test Core 1/8 and ten Test UI shards: 1, 2, 4, 5, 8, 9, 10, 12, 13, 16 of 16); four reads over twelve minutes went 21 → 31 → 37 → 37 success with no non-success completion at any read. Success: Lint & Repo Gates, Lint · repo & tooling gates (the job that held the removed step), Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests, Lint · scoped · slot lookup & corpus, Lint · scoped · query-options erasure, TypeScript Type Check, Type Check · workspace / source gates / debt ledger / consumer gates, Build Core, Build Docs, Build UI Deps, Governed Surface Queue Guard, Lint UI, Type Check UI, Build & E2E UI, Live E2E UI, Test Core (2/8), PR-body guards, Check Changeset, Check PR Size, Dogfood Regression Gate, Plan Test Core shards, Auto Label, Validate Package Dependencies, filter. Skipped by path filter or opt-in: Dogfood Verify CLI, UI Published Artifacts, Temporal Conformance, Schedule gate, 18.x upgrade harness, Packed-tarball smoke. Combined status pending (statuses API, 0 statuses). The eleven in-progress shards are the full-battery test lanes on a diff that touches no package source; the landing pre-check still owes a read of them green before any Tier H act. mergeable_state blocked, draft, auto_merge null, labels ci/cd, size/l, dependencies, skip-changeset; Tier H (.github/workflows/**), landing by the maintainer's hand or an authorized approval, not by this record.

Implemented-by: claude/project-thread-mw93fe
Reviewed-by: session_01J8VVAnMUWA9rufXzFaEh4J

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J

维护者速读

  • 改了什么: 删除 scripts/pm/changeset-deadline-census.mjs(798 行,只出报告的工具及其自测)、package.json 里它的脚本别名,以及 lint.yml 里只跑它自测的一步(连注释 24 行)。共 −823/+0,3 个文件。
  • 为什么改: scripts/pm grew by about 7,900 lines in a week while the skill text is ratcheted: census the half-state rows and fleet tools by reader, delete what nobody reads, and make the next 30 days net-negative #29471 的普查在 main 上找不到它的读者:没有技能、agent 或 AGENTS.md 提到它,没有工作流实跑它,没有脚本 import 它;它唯一的运行就是 CI 里自己的 --self-test。每次改 scripts/** 的派发都为它付自测成本,却没人读输出。
  • 风险与回滚: 纯删除,不改任何门禁的判定;check-self-test-wired 与 check-step-collectors 确认脚本、别名与 CI 步骤一起离开。可整 PR revert。
  • 先看: .github/workflows/lint.yml 删掉的那一步(lint-repo-tooling 作业里,前后两步原样相邻)。
  • 两分钟验证: git grep changeset-deadline-census 在本 head 上只剩 docs/audits/gate-census-2026-09.md 的两行历史(该审计已把它标为 retire)。
  • 需要你做的: lint.yml 是受治理 Tier H 面,需 os-zhuang 或 hotlong 批准。达档复核 PASS 见评论 6587063029,Head-sha 21ffe74e07883cca5ae14f70a29113e62795319d。批准后本席落地。
  • 席位意见: ACCEPT。

席位核对 — ACCEPT · domain:skills#1 · head 21ffe74e07883cca5ae14f70a29113e62795319d

  1. 形态: draft → main,Part of #29471(T1 家族;卡在 scripts/pm 30 天净变化转负前不关);作者 objectstack-fleet[bot],同仓分支;一个提交;skip-changeset。
  2. 前提实测: 复核方在本 head 与 origin/main 上全树 grep 文件名、别名、步骤 id 及其变体:main 上只有被删的那一步和别名,本 head 只剩两行审计历史;.github 下无 steps.changeset-deadline-census-self-test 引用。lint.yml 仍可解析(15 个作业,步骤 298 → 297),package.json 仍可解析(别名已去)。
  3. 门禁 check-runs(钉 head 21ffe74e): 62 条全部完成,success 50 / skipped 12 / failure 0。含 Lint & Repo Gates、Lint · repo & tooling gates(原步骤所在作业)、TypeScript Type Check、Build Core(容器里缺 dist/ 的 4 条 exit 3 由它实跑)、Test Core 与 Test UI 全部分片、Governed Surface Queue Guard。check-governed-merges --pr 29577:命中 .github/workflows/lint.yml,Tier H,823 行低于 3000。
  4. 接受的偏差: 无。
  5. 范围外去向: scripts/pm grew by about 7,900 lines in a week while the skill text is ratcheted: census the half-state rows and fleet tools by reader, delete what nobody reads, and make the next 30 days net-negative #29471 其余家族(T2 第二波、T4 等待、R 家族待 feat(pm): count outside demand in the daily summary and put human-opened cards first within a priority #29572 落地后开始)留在卡上。Skills-docs: none(不改技能文本)。
  6. 落地条款: Tier H。保持 draft,挂 needs-user-decision,请 os-zhuang、hotlong 审批;获 GOVERNED_APPROVERS 批准后本席过落地前检、清标、ready、auto-merge;维护者直合亦可。

Generated by Claude Code

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 size/l skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants