docs(spec): correct the published 17.4.0 entry that restated the retired M9.2 promise - #18569
Merged
Merged
Conversation
…romise The `ef3a138` entry under `## 17.4.0` restates the M9.1 / M9.2 phase promise that #17323's ruling retired: a two-phase roadmap chartered by no ADR. Three passages are corrected in place in the #17026 shape — the published words are kept as marked quotations, the correction follows each, and one dated erratum line closes the entry. The blockquote quoting `EVALUATED_EXPRESSION_SOURCE_REQUIRED` is left exactly as 17.4.0 shipped it; a paragraph under it says what the constant reads now. Nothing this release published is changed. Claude-Session: https://claude.ai/code/session_01JbZnqu8bt6YqfJsr9vaFb3 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 136 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-bill
marked this pull request as ready for review
September 17, 2026 02:08
os-bill
enabled auto-merge
September 17, 2026 02:09
This was referenced Sep 17, 2026
This was referenced Sep 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #17849
Clause-②: no
The second half of #17849, split out of PR #18557 because AGENTS.md's Documentation Guardrails row for
packages/*/CHANGELOG.mdrequires it: an already-published entry is amended in a dedicated docs-only PR, ⛔ never as a rider on code changes. This diff is exactly one file and adds no source, no schema and no export.#17323's ruling item 2 orders it: 「
packages/spec/CHANGELOG.md: an erratum line under the entry that promised M9.2 (the #17026 shape — correct the published text, note the date), ⛔ not a rewrite of history.」What was corrected, and where
One entry:
ef3a138(feat(spec)!: an evaluated expression slot requires a non-blank source) under the already-published## 17.4.0. Line numbers re-derived on this tree at79a046f8c, ⛔ not carried over from the card or from the earlier round:EVALUATED_EXPRESSION_SOURCE_REQUIRED, parenthetical(the canonical persisted form of phase M9.1)astbecomes required in build output at phase M9.2」One adjacent clause falsified by the same ruling is corrected in the same stroke and named here rather than smuggled: the bullet also read 「when AST-only evaluation lands」, which presupposes the retired promise. It now reads 「if AST-only evaluation is ever chartered」 — the wording the two pending changesets already carry. Leaving it would have left a 「when it lands」 sitting beside 「no promise of becoming required」 in one bullet.
One dated erratum line closes the entry, carrying the in-repo tail this repository already uses in five places (
packages/spec/CHANGELOG.md×3 at:2457,:2882,:5277,packages/lint/CHANGELOG.md:1214,packages/metadata-protocol/CHANGELOG.md:134):⛔ No new entry at the top, ⛔ no version heading added (
git diff -U0 | grep -c '^+## '→ 0), ⛔ nothing this release published is changed.The card sets
git grep -l 'M9\.[12]' origin/main -- packages→ 0. After this PR that file still carries four hits, and every one of them is required by the ruling's own 「⛔ not a rewrite of history」:Not one of them is a live assertion of the promise — they are the quotation marks the #17026 shape puts around it, plus the erratum that retires it. A zero would require deleting the published words, which is precisely the rewrite the ruling forbids. ⇒ the criterion and the ruling are not jointly satisfiable, and the ruling governs. Reported rather than forced.
skip-changeset— checked against #18375 before relying on itThe label is applied. Before applying it I re-read the refusal #18375 is about,
scripts/check-empty-changeset.mjs, and it does not reach this PR:.changeset/diff and nothing else — rule 1 fires on a newly ADDED empty-frontmatter changeset, rule 2 (scanForeign()) on a MODIFIED or DELETED changeset that exists on the merge base;.changeset/*.md;.changeset/path at all (git diff --name-only origin/main...HEAD→ one line,packages/spec/CHANGELOG.md). So the label suppresses no refusal that could have fired here, and the finding's hazard is absent rather than accepted.What the label IS doing is the documented job:
Check Changesetrequires an added changeset from every PR, with no path filter, soskip-changesetis the only instrument for a diff that releases nothing of its own — the same instrument the #17026 ruling named (item 3) and PR #17896 spent for the same shape.Verification
Exit codes landed to disk before reading, ⛔ never through a pipe.
--ranreconciliation with per-family exit codes55 derived famil(ies) accounted for — 51 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)check-release-section-coverage(plain ·--self-test·--strict)pnpm check:release-notes,pnpm check:release-page-statuspnpm lint(eslint . --no-inline-config, whole repo)pnpm check:nul-bytes+ a direct control-character sweep of the fileThe 4 NOT MEASURED are
check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closureandcheck:sourcemap-no-sources-content— all exit 3 = PREREQUISITE NOT MET (they read thedist/of packages this tree never built). ⛔ Neither a pass nor a failure; CI'sBuild Coreruns them.No test is owed and that is measured, not assumed. Four test files name a
CHANGELOG.mdpath and every one of them excludes it:compliance-families-retirement.test.tsskipsCHANGELOG.md, bothaction-owner-key-single-source.test.tsfiles list it undercoversas 「a published CHANGELOG is the record of the removal itself」, andtemplate-consistency.test.tspasses:(exclude)**/CHANGELOG.md. No test reads the bytes this PR moves.The
changeset versionsurvival question is already answered and is not re-run here. #17026's round measured it with a lit control: a manual edit inside an already-compiled section SURVIVESchangeset version(marker present before and after, while the tool provably re-wrote both files — a new version section prepended, the package version advanced, 250 pending changesets consumed). That reading stands; re-running it would buy nothing.Acceptance notes
Confirming reading for the finding recorded on #17849:
pnpm check:cross-package-test-inputsis green (exit 0) on this tree, which has nopackages/spec/distbecause a markdown-only diff needs no build. Same gate, same commit base, opposite verdict from the built tree — a third independent leg for the same cause. ⛔ Not filed again; it is already #18353 and #18440.Noted, not filed: nothing else. Successor for the
M9.9b/M9.5/M9.7ROADMAP citations elsewhere in the tree: none — no PR or person is routed to those files by this work, and the ruling names only the M9.1 / M9.2 phase promise.Generated by Claude Code