Skip to content

chore(ci): close out the ESLint rename grace in the required-context ledger - #9569

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-9505-retire-rename-grace
Aug 18, 2026
Merged

chore(ci): close out the ESLint rename grace in the required-context ledger#9569
os-steve merged 1 commit into
mainfrom
claude/issue-9505-retire-rename-grace

Conversation

@claude

@claudeclaudeBot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Fixes#9505

The #9325 rename is complete on every scanned instruction surface, so both graces on the
ESLint row of RETIRED_CONTEXT_NAMES come off. One file: scripts/check-required-contexts.mjs.

The conditional, re-measured at the branch point

The card's step 2 branches on what the landed checklist fix actually did. Measured on this
branch's base (e7daea169), not recalled:

.claude/skills/pm-dispatch/references/review-checklist.md
'ESLint' occurrences : 0 <- the mention was dropped outright
'Lint & Repo Gates' occurrences : 1

and the gate itself printed both notices before the change, verbatim:

ℹ .claude/skills/pm-dispatch/references/review-checklist.md no longer names retired context
'ESLint' — its budget of 1 in RETIRED_CONTEXT_NAMES can be trimmed.
ℹ every required-set surface now names 'Lint & Repo Gates' itself — flip 'ESLint'.renameInFlight
to false in RETIRED_CONTEXT_NAMES, ...

So the trim branch applies, and both steps land together:

  • renameInFlight: false — the retired literal stops satisfying a mustName requirement.
  • the staleSites budget for the review checklist is deleted (not kept at 1, and not set
    to 0 — the ledger's own hygiene rule says a zero budget is a dropped key). The row is now a
    standing ban on writing the dead name fresh anywhere in the scan set.

The row's comment and the design-doc bullet above it are rewritten to record what happened
rather than what was predicted: the budget of 1 existed because the fix was expected to keep
one deliberate historical mention, and it did not.

Both directions pinned, and each green traced to a specific assertion

Self-test: 81 → 83 assertions. Two fixtures pinned exactly the state this PR removes, so
they were triaged rather than re-spelled:

  • postFix (current names + one budgeted historical mention ⇒ green, plus the flip notice)
    is gone: with the budget trimmed that state is red by design now, and the flip notice
    cannot fire on a row that is no longer in flight.
  • reworded's trim-notice half moved onto a synthetic in-flight row — the notice logic
    outlives this rename and must keep coverage, but the real ledger no longer exercises it.

New pins:

  • a single fresh ESLint mention appended to the checklist ⇒ red, naming budgeted: 0 and
    the replacement (the standing ban), plus the ablation that isolates it: the identical
    text under a row that still budgets 1 is green.
  • the shipped ledger's grace is closed — a checklist reverted to naming only ESLint is red
    on 'Lint & Repo Gates'plus a single-variable ablation: flipping only
    renameInFlight back to true on the real row (budget left trimmed) clears the naming red,
    so that red is the flip and nothing else.
  • both notices are now silent on the real ledger. A completion notice that keeps firing after
    the work is done trains the seat reading it to ignore the next one.

Reverse verification, from the committed state

Each half of the change was reverted alone and the self-test re-run; both reds are the
intended assertions, no others:

ablation A renameInFlight: false -> true
✗ 2 failure(s)
• the shipped ledger's grace is closed: a surface naming only 'ESLint' is red ... (#9505)
• after the flip and the trim, the ESLint row is silent ... (#9505)
pin: the flip-completion notice returns
ablation B staleSites budget restored
✗ 2 failure(s)
• a retired name written fresh into a trimmed row's surface ⇒ red, naming the file, ...
• after the flip and the trim, the ESLint row is silent ... (#9505)
pin: the trim notice returns

The card's safety claim, tested rather than inherited

"Flipping early is safe — the flip PR is red while any required-set surface still leans on the
grace." It holds, and the reason is now written down next to the claim: the pin runs in
lint.yml's lint job (the Lint & Repo Gates context) with no if:, which the file's own
wiring block asserts, so a naming red there is the required context red. Within the scan set
there is no state where the flip lands while a surface still needs the grace; the merge queue
re-runs the gate on the combined commit, so a concurrent PR that re-introduces reliance is red
on that PR, not on main. The recorded residual is unchanged: a surface outside
INSTRUCTION_SURFACES carries no mustName requirement, so it cannot lean on the grace in the
first place.

Two-row ledger: checked for coupling, none found

The ADR maintainer approval row added alongside is untouched. It is inert with respect to
this change: replacedBy: null excludes it from both the mustName grace and the
flip-completion loop, it has no budgets, it collides with no registered context as a substring,
and no scanned surface contains the literal (all five measured). Rows are judged independently
per surface — the only cross-row rule is the duplicate-name check.

Gates

Run after the final commit, at 5c31e45bf, clean tree:

node scripts/check-required-contexts.mjs --self-test ✓ 83 assertions
node scripts/check-required-contexts.mjs ✓ 8 contexts pinned, 5 surfaces, 2 retired names; no notices
node scripts/check-nul-bytes.mjs ✓ 6157 files, no raw control bytes
pnpm exec eslint scripts/check-required-contexts.mjs ✓ clean

node scripts/pm/dispatch-gates.mjs scripts/check-required-contexts.mjs derives exactly one
local family for this surface — pnpm check:required-contexts — which is the pair above.

Releases nothing (a CI-internal script), so this PR takes the skip-changeset label rather
than a changeset.

Generated by Claude Code


Generated by Claude Code

…ledger
The #9325 rename is complete on every scanned instruction surface, so the
`ESLint` ledger row's two graces come off:
- `renameInFlight: false` — the retired literal no longer satisfies a
`mustName` requirement.
- the `staleSites` budget for the review checklist is deleted: the fix was
expected to keep one deliberate historical mention and dropped the name
entirely (measured on main: 0 occurrences), which is the trim branch the
gate's notice asked for. The row is now a standing ban on writing the dead
name fresh anywhere in the scan set.
Both notices that drove this are now silent, which the self-test pins.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 18, 2026
@os-steve
os-steve marked this pull request as ready for review August 18, 2026 11:39
@os-steve
os-steve added this pull request to the merge queueAug 18, 2026
@github-merge-queue
github-merge-queueBot removed this pull request from the merge queue due to failed status checks Aug 18, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 32132852163 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Test Core (3/3) — 失败步骤: Run this shard's tests(日志不可读,点进 job 看)

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 5 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@os-steve
os-steve added this pull request to the merge queueAug 18, 2026
Merged via the queue into main with commit 7e20288Aug 18, 2026
23 checks passed
@os-steve
os-steve deleted the claude/issue-9505-retire-rename-grace branch August 18, 2026 12:15
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flip the ESLint ledger row's renameInFlight off (and re-check its budget) once the review-checklist rename half lands

2 participants

@os-steve@claude