Uh oh!
There was an error while loading. Please reload this page.
docs(guide): retire the hand-written version table from the release notes page - #6080
Conversation
…otes page The page's newest and only versioned section was v3.3.0 (2026-04-17), roughly fourteen majors behind the packages it described, while claiming to summarise every released version. Its compatibility matrix had drifted with it, stating `@objectstack/spec` ^4.0.4 against a repo pinning ^17.0.0-rc.5 and Node >= 18 against a root `engines` of >=22. Refreshing the numbers was rejected: this is the third instance of the same shape (objectui#3689, objectui#3645) and a hand-written version block that nothing pins simply drifts again. It is also unanswerable today — the releases API and QUICK_REFERENCE.md disagree on the current version, which is what objectui#5442 exists to settle. The page therefore collapses to a pointer at the two sources that are written as part of each release: each package's own CHANGELOG.md, which Changesets writes on every release commit, and GitHub Releases. objectui#5785's correction of the granular/summary relationship is kept and now carries the whole page. doc-version-claims.test.ts pinned this page by name: its version sections were the corpus's ONLY version-heading sections, so retiring them took exemptClaims from 8 to 0 and turned that gate red. The exemption is still live code every corpus claim passes through, so it is now exercised against a fixture through claimsIn -- the same function the corpus goes through -- pinning both the exempt and the scanned direction on one document, which the corpus arrangement never did. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019b5UBNMtTzKbVtZZGvFuxe
yinlianghui-tw
commented
Aug 24, 2026
PM: ACCEPT — ruling D executed, and the gate you broke came back strongerThe maintainer's ruling is carried out exactly: the hand-written v3.3.0 section, its Upgrade Notes and its compatibility matrix are gone, and the page is a short pointer. No version numbers refreshed, no generator built, no pin test added — the three rejected options, all avoided. And PR #5785's correction of the granular/summary relationship was re-derived from The coupling was found by measuring, not assuming — and that is the whole reason the order asked
The order said "grep for tests pinning this page's content before you cut it — verify that rather than assuming it." This is precisely the case it was written for, and the naive read (only The fix is the part worth namingWhen removing content leaves an assertion with nothing to assert on, there are two easy wrong moves: delete the branch, or leave it silently matching nothing. You took neither. The version-heading exemption is now exercised against a fixture through That is stronger than what existed before: the corpus arrangement only ever exercised the exempt direction, and only by accident of one page happening to contain a version heading. A gate whose coverage depends on a doc nobody is required to keep is a gate one edit from going vacuous — which is exactly what just happened. Routing it through a fixture makes the coverage deliberate. And you ablated the replacement rather than trusting it: The pointer actually answers the questionThe order warned that a pointer failing to say which CHANGELOG or where Releases live is a worse page than a stale one. Yours names both concretely — each package's own And you verified it renders as a real page rather than an orphaned heading by reading the prerendered HTML at Inbound links checked, correctly not edited
Sidestepping #5442 entirely is also the right outcome, and it is part of why D was chosen: with the releases API saying Honest limit, correctly statedRetiring a doc surface has no runtime consequence, so there is no behavioural test — the evidence is that nothing still points at content that no longer exists. Backed by three readings rather than an assertion: Changeset correctly not written, with the reason cited from Landing⏳ CI converging on Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#5786
Executes the maintainer's ruling of 2026-08-23 (option D): the hand-written version
table on
content/docs/guide/release-notes.mdis retired and the page collapses to ashort pointer at the two sources that are written as part of each release. No refresh of
the version numbers, no generation pipeline, no pin test — those were the rejected
options.
Why not simply refresh it
Refreshing is the intuitive fix and it was ruled out twice over. It is the third instance
of the same shape (#3689 on the CLI page, #3645 across 35 package READMEs): a hand-written
version block that nothing pins drifts again as soon as it is corrected. And it is
currently unanswerable — the releases API and
QUICK_REFERENCE.mddisagree about thecurrent version, which is the repo-vs-npm divergence #5442 exists to settle. Retiring the
table sidesteps that question rather than enshrining one side of it.
What the page says now
It names both sources concretely, because three entry points send readers here to learn
what shipped and a pointer that does not say which changelog or where Releases live
would be worse than a stale page:
CHANGELOG.md— where to read it in the installed package, onnpm, and in this repository — stated as the source of truth for granular history,
including breaking changes and migration notes;
#5785's correction of the granular/summary relationship (the monorepo
CHANGELOG.mdis ahand-curated summary that can lag, and each package's own file wins where they disagree)
is preserved in substance and now carries the whole page. This change composes with that
PR; it does not undo any of it.
The coupling this uncovered, and why the test is in the diff
scripts/__tests__/doc-version-claims.test.tspinned this page by name:That gate exempts version literals sitting under a version heading (release notes are
frozen history) and ratchets every other literal. Measured across this change, the page's
## v3.3.0section was the corpus's only version-heading section:exemptClaimswentfrom 8 to 0, and the assertion above was the one thing in the repository that noticed.
A floor over
exemptClaims.lengthwould now be a pin demanding that some published pagekeep carrying release sections — a shape this repository deliberately no longer has. The
exemption is still live code that every corpus claim passes through, so it is now exercised
against a fixture through
claimsIn, the same function the corpus goes through. Thefixture keeps the retired compatibility row verbatim, and the new assertion is strictly
stronger than the one it replaces: it pins both directions on one document (the claim
above the release heading stays scanned, the one under it is exempt, and the exemption is
reached through an ancestor heading), where the corpus arrangement ruled out
"green by not matching" on the exempt side only.
Proven to be load-bearing rather than decorative: with
VERSION_HEADINGablated to aregex that never matches, the file goes to 2 failed | 16 passed; restored, 18
passed. The mutation was confirmed on disk before the run (injected marker present ×1,
original pattern absent), and the ablation script carried a
trap ... EXIT INT TERMrestore —
git statuswas clean afterwards.Verification — all at
58e18f484, the final commitnode scripts/check-doc-links.mjsLinks are valid across 15 scan roots.node scripts/check-doc-component-types.mjs✅ Every documented component type is registered.node scripts/check-control-bytes.mjs✅ check-control-bytes: OK (scanned 5026 tracked text file(s); skipped 85 binary).node scripts/check-changeset-presence.mjs✅ No source of a released package changed in this range, so no changeset is owed.vitest run scripts/__tests__/doc-version-claims.test.tsTests 18 passed (18)tsc -p tsconfig.scripts.jsoneslinton the changed.tsturbo run build --filter=@object-ui/siteTasks: 30 successful, 30 totalThe page was then read out of the prerendered HTML
(
apps/site/.next/server/app/docs/guide/release-notes.html) rather than assumed torender: it comes out as a coherent short page — title, description, two bullets and a
closing paragraph — not an orphaned heading, and all three outbound links
(
/tree/main/packages,/releases,/blob/main/CHANGELOG.md) are present in the article.Narrowing declared: eslint was run on the one changed
.tsfile rather than repo-wide.The other changed file is
.md, and this repo's eslint config names no markdown files, sothe narrowing excludes nothing that eslint would have judged. CI runs the full farm either
way.
Honest limit: retiring a documentation surface has no runtime consequence, so there is
no behavioural test to point at. The evidence is negative by nature — nothing still points
at content that no longer exists:
check-doc-linksis green over the page's new links, theone gate that referenced the removed content is updated in this diff, and a repo-wide grep
for
release-notesfinds only the sidebar entry (content/docs/guide/meta.json) and thattest.
Inbound links: checked, none became misleading
content/docs/guide/meta.json— the sidebar entry, the only thing in the repository thatlinks to this page. A reader clicking "Release Notes" now gets an answer to the question
they arrived with, so it stays.
README.md's "Changelog (summary)" and the changelog section ofcontent/docs/guide/ci-cd-pipeline.mdpoint at the rootCHANGELOG.md, not at this page,and both already describe it as a hand-curated summary. Unaffected, and not edited.
No changeset:
content/docs/**andscripts/__tests__/**touch no released package'ssrc/, whichCONTRIBUTING.mdlists explicitly under "No changeset is needed at all", andcheck-changeset-presence.mjsagrees.Out of scope and untouched, per the dispatch: the root
CHANGELOG.md,QUICK_REFERENCE.mdand its pin tests,
check-doc-links.mjs, and #5442's version-divergence question.Generated by Claude Code