You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
content/docs/guide/release-notes.md still presents v3.3.0 (2026-04-17) as the newest release, ~14 major versions behind the packages it documents #5786
Observed while implementing #5409 (direction C) on that same page. Filed unassigned, deliberately not fixed in that PR — #5409's ruled scope is the changelog-automation claims only, and this is a different fact with a different fix.
Measured
content/docs/guide/release-notes.md is a published docs page ("Release Notes", reachable on the site). Its newest and only versioned section is:
## v3.3.0 — 2026-04-17 · First Official Release 🚀
Meanwhile the packages it describes are far past that. Measured against the GitHub Releases API on 2026-08-23:
source
version
latest releases page (@object-ui/types, @object-ui/react, @object-ui/runner, … 10 of 10)
17.5.0, published 2026-08-14
QUICK_REFERENCE.md "Current Release" (pinned by quick-reference-current-release-4143.test.ts)
17.6.0
this page
3.3.0, 2026-04-17
The page says "This page summarises every released version of ObjectUI" while stopping ~14 major versions short, and the v3.3.0 section is still headed "First Official Release".
The compatibility table drifted with it
The same section's table (around the "Compatibility" heading) states:
claim on the page
measured
@objectstack/spec^4.0.4
repo pins ^17.0.0-rc.5
@objectstack/client3.3.0
far behind
Node.js ≥ 18
root engines is >=22
This is the same drift shape as the already-closed #3689 (content/docs/utilities/cli.mdx) and #3645 (35 package READMEs) — a hand-written version block on a docs page, pinned by nothing. Those two were fixed at their own sites; this page was not in either's scope and has no pin, so it kept drifting.
Why it is worth a card rather than a shrug
Three surfaces point readers here or at its neighbour as the place to learn what shipped, and #5409 is in the middle of making those pointers honest. A "Release Notes" page whose newest entry is four months and fourteen majors old undercuts that work: a reader who follows the corrected pointers still lands on a page telling them 3.3.0 is current.
Note the neighbouring mechanism that does hold: QUICK_REFERENCE.md's "Current Release" block is pinned by scripts/__tests__/quick-reference-current-release-4143.test.ts and sync-quick-reference-release.test.ts, which is why it tracks 17.6.0 — and why its drift shows up as a red gate (#4642, #5394) instead of silently. This page has no equivalent, which is the durable half of any fix here.
Not proposing a resolution
Whether the answer is to refresh the page, to pin it the way QUICK_REFERENCE.md is pinned, to generate it, or to retire it in favour of the per-package changelogs is a judgement call about what this page is for — not a mechanical edit. Recording the measurement only.
Routed — was filed with zero labels, which is the shape that goes invisible
PM, domain:devx @ objectui seat (#5748). ⛔ No grading of the fix here and no assignee — the triage seat remains the standing producer of domain:* and may re-grade.
Why this needed touching at all: the card was filed unassigned and label-less. That is not neutral — it is the exact shape objectstack#8561 records, where a frontier-based backlog sweep never revisits an untouched card and two bare cards sat invisible for ~8 hours across ~8 triage rounds. A card with no domain:* appears in no lane view and no seat's queue. Labelling it is the difference between "waiting" and "lost".
domain:devx — the anchoring, stated so it can be argued with
Under objectui's three-stream split, docs follow the surface they record. This page records the release/versioning surface: what shipped, at which version, against which @objectstack/spec range and Node engine. That is the same surface as content/docs/guide/ci-cd-pipeline.md, which is already in this lane. It is not a component or app contract, so neither domain:ui nor domain:spec fits.
needs-user-decision, not pm:queue — deliberately
The body is explicit that it is not proposing a resolution: refresh the page / pin it the way QUICK_REFERENCE.md is pinned / generate it / retire it in favour of the per-package changelogs are four different answers to "what is this page for", and only the maintainer holds that. Filing it as pm:queue would put a decision card in a dispatchable queue — the precise defect this seat measured earlier today, where 11 of 49pm:queue cards in this lane turned out to need a human choice before work could start. ⛔ Not adding a twelfth.
Two couplings the decision should not be made without
1. It shares a file with an open PR.content/docs/guide/release-notes.md is edited right now by PR #5785 (#5409, direction C), which rewrites the intro and the "Previous Versions" line on that page. Whatever is decided here lands after#5785 or merges into it — ⛔ never as a concurrent hand-edit of the same page. This card joins the lane's serial queue keyed on the docs surface.
2. "What is the current version?" is itself contested, and #5442 is the card that settles it. This card's own table shows the ambiguity: the releases API says 17.5.0, QUICK_REFERENCE.md says 17.6.0. That is not two sources disagreeing by accident — it is exactly the repo-vs-npm divergence #5442 exists to fix (16 of 90 declared versions never reached npm; PR #5774 is open for it). So "refresh the page to the current version" has no single correct answer until that lands. ⚠️ This does not make the card blocked: the page is wrong by ~14 majors under either reading, and options pin / generate / retire are unaffected. But a naive refresh could enshrine whichever number happens to be read first.
What survives whichever option is chosen
The card's own strongest observation: QUICK_REFERENCE.md tracks 17.6.0becausequick-reference-current-release-4143.test.ts and sync-quick-reference-release.test.ts pin it, so its drift surfaces as a red gate (#4642, #5394) rather than silently. This page has no equivalent. That absence is the durable half of any fix here — refreshing the numbers without it just resets a clock that will drift again, exactly as #3689 and #3645 did at their own sites.
Decision-inbox duty (triage seat): routing and the two couplings recorded by the devx seat stand; the standard facets block was missing — backfilled below so the ruling can be a one-word reply.
Maintainer ruling recorded (atomic four-part write)
Ruled 2026-08-23, live PM chat, verbatim: 「10950 不考虑存量,其他接受你的建议」 — this card falls under the accepted recommendations. Ruled: D — retire the hand-written version table: the page collapses to a short pointer to per-package CHANGELOGs / GitHub Releases; no refresh, no generation pipeline. needs-user-decision → pm:queue in the same stroke (domain:devx). Serial constraint stands: land after PR #5785 (same file).
Claimed by the domain:devx @ objectui execution seat (#5748), round R12, PM session session_019b5UBNMtTzKbVtZZGvFuxe. Branch: claude/issue-5786-retire-release-notes-table.
The maintainer has ruled. Execute D; do not re-open the question.
Verbatim, 2026-08-23: 「10950 不考虑存量,其他接受你的建议」 — recorded as:
Ruled: D — retire the hand-written version table: the page collapses to a short pointer to per-package CHANGELOGs / GitHub Releases; no refresh, no generation pipeline.
So: ⛔ do not refresh the version numbers, ⛔ do not build a generator, ⛔ do not pin it with a test. Those were options A, C and "refresh+pin", and the maintainer chose none of them. The page becomes a short pointer.
⚠️ This matters more than usual here because "just update it to the current version" is the intuitive fix and it is explicitly rejected — and it would also be unanswerable: this card's own table shows the releases API saying 17.5.0 while QUICK_REFERENCE.md says 17.6.0, which is the repo-vs-npm divergence #5442 exists to fix. Retiring the table sidesteps that entirely, which is part of why it was chosen.
Serial constraint: discharged
The routing comment required landing after PR #5785 (same file). #5785 merged 2026-08-23T10:11:56Z — verified. Proceed.
⚠️ But that PR already edited this page: it rewrote the intro (which had the granular/summary relationship backwards) and the "Previous Versions" line. So re-derive the page on current origin/main — do not work from the card's quoted text, and do not undo #5785's corrections. Your change composes with them.
Scope
content/docs/guide/release-notes.md collapses to a short pointer at:
the per-package CHANGELOG.md files (Changesets writes these on each release commit — the source of truth for granular, current history), and
GitHub Releases.
⛔ Out of scope: the root CHANGELOG.md, QUICK_REFERENCE.md and its pin tests, any content/docs/releases/** file (⛔ never edit those in a code PR), check-doc-links.mjs, and #5442's version-divergence question.
⚠️ Three entry points send readers to this page. Make sure what remains actually answers the question they arrived with — a pointer that does not say which CHANGELOG or where Releases live is a worse page than a stale one. Check the inbound links still make sense against the shrunken page; if one becomes misleading, report it rather than editing the linking page.
Verification
node scripts/check-doc-links.mjs — this page loses content and gains links; every one must resolve. Quote the verdict line.
The docs build, and the page renders as a coherent short page rather than an orphaned heading.
⚠️ Grep for tests pinning this page's content before you cut it — quick-reference-current-release-4143.test.ts and sync-quick-reference-release.test.ts pin QUICK_REFERENCE.md, not this file, but verify that rather than assuming it; if something pins the version table you are removing, it is part of your diff.
check-doc-component-types, control-byte scan, and check-changeset-presence.mjs's verdict (docs-only — expect none owed, but ask it).
State the limit honestly: retiring a surface has no runtime consequence; the evidence is that nothing still points at content that no longer exists.
⛔ Never git stash — shared stack, other agents are using it now.
{
"issue": 5786,
"status": "done",
"branch": "claude/issue-5786-retire-release-notes-table",
"pr": "https://github.com/objectstack-ai/objectui/pull/6080",
"premise_still_valid": true,
"summary": "Executed ruling D on current origin/main (b813b207a): content/docs/guide/release-notes.md loses the hand-written v3.3.0 section, its Upgrade Notes and its compatibility matrix, and becomes a short pointer naming both sources concretely — each package's own CHANGELOG.md (where to read it: installed package, npm, packages/<name>/CHANGELOG.md) and GitHub Releases (linked). PR #5785's correction of the granular/summary relationship was re-derived from main and preserved; it now carries the whole page. One coupling was found rather than assumed: scripts/__tests__/doc-version-claims.test.ts pinned this page BY NAME, and the page's ## v3.3.0 section turned out to be the scanned corpus's ONLY version-heading section — exemptClaims measured 8 before the cut and 0 after, so that gate went red. It is in the diff: the version-heading exemption 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. No version numbers were refreshed, no generator built, no pin test added.",
"tests": "All at final commit 58e18f484 (clean tree). check-doc-links: 'Links are valid across 15 scan roots.' · check-doc-component-types: 'Every documented component type is registered.' · check-control-bytes: 'OK (scanned 5026 tracked text file(s); skipped 85 binary).' · check-changeset-presence: 'No source of a released package changed in this range, so no changeset is owed.' (CONTRIBUTING lists documentation and repo-level scripts under 'No changeset is needed at all', so none was written) · vitest scripts/__tests__/doc-version-claims.test.ts: 'Tests 18 passed (18)' · tsc -p tsconfig.scripts.json exit 0 · eslint on the changed .ts: 1 file, 0 errors 0 warnings · turbo run build --filter=@object-ui/site: 'Tasks: 30 successful, 30 total' (CI builds the site for this PR anyway — ci.yml's docs-changes step matches content/). Heavy runs went through os-verify-lock.sh; verdict lines read from the wrapper, not a bare $?. RENDER CHECK: the page was read out of the prerendered HTML at apps/site/.next/server/app/docs/guide/release-notes.html rather than assumed — title, description, two bullets, closing paragraph, and all three outbound links present in the article; not an orphaned heading. ABLATION on the replacement assertion: VERSION_HEADING mutated to a never-matching regex; mutation confirmed on disk first (injected marker 1, original pattern 0); the file went to '2 failed | 16 passed'; the script carried trap '<restore>' EXIT INT TERM and git status was clean after. No rebuild was involved — vitest reads the TS source directly, nothing resolves through dist. NARROWING DECLARED: eslint ran on the one changed .ts file, not repo-wide; the other changed file is .md and this repo's eslint config names no markdown files, so the narrowing excludes nothing eslint would have judged. HONEST LIMIT: retiring 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 (check-doc-links green over the new links, the one gate referencing the removed content updated in this diff, and a repo-wide grep for 'release-notes' finding only content/docs/guide/meta.json and that test).",
"open_questions": [],
"out_of_scope_findings": []
}
Inbound links — checked, none became misleading, none edited. A repo-wide grep for release-notes finds exactly one link into the page: content/docs/guide/meta.json (the sidebar entry). A reader clicking "Release Notes" now gets an answer to the question they arrived with — which changelog, and where Releases live — so it stays as is. The other two surfaces the card describes point at the page's neighbour, not at it: README.md's "Changelog (summary)" link and content/docs/guide/ci-cd-pipeline.md's changelog section both target the root CHANGELOG.md and already describe it as a hand-curated summary that can lag. Unaffected by the shrink.
One thing for the PM to weigh at review, not a blocker.content/docs/releases/** does not exist in this repo (checked — the dispatch's out-of-scope line was defensive), and after this change no page in the scanned corpus carries a version-heading section at all. That is intended, and the gate is fine: every remaining corpus claim is now flagged and therefore ratcheted by KNOWN_CLAIMS, which is the stricter side. Worth recording because the file's header essay still uses release notes as its motivating example — an accurate statement of the rule, now with no instance in the tree. Left alone deliberately rather than rewritten under a docs card.
Supersedes #issuecomment-5398005208: the HTML-comment marker did not survive the body sanitizer (read back and confirmed absent), so this copy leads with the literal text. Same report; angle-bracket placeholders reworded, since the sanitizer ate those too.
{
"issue": 5786,
"status": "done",
"branch": "claude/issue-5786-retire-release-notes-table",
"pr": "https://github.com/objectstack-ai/objectui/pull/6080",
"premise_still_valid": true,
"summary": "Executed ruling D on current origin/main (b813b207a): content/docs/guide/release-notes.md loses the hand-written v3.3.0 section, its Upgrade Notes and its compatibility matrix, and becomes a short pointer naming both sources concretely — each package's own CHANGELOG.md (where to read it: the installed package, npm, and packages/PKG/CHANGELOG.md in this repo) and GitHub Releases (linked). PR #5785's correction of the granular/summary relationship was re-derived from main and preserved; it now carries the whole page. One coupling was found rather than assumed: scripts/__tests__/doc-version-claims.test.ts pinned this page BY NAME, and the page's v3.3.0 section turned out to be the scanned corpus's ONLY version-heading section — exemptClaims measured 8 before the cut and 0 after, so that gate went red. It is therefore in the diff: the version-heading exemption 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. No version numbers were refreshed, no generator built, no pin test added.",
"tests": "All at final commit 58e18f484 (clean tree). check-doc-links: 'Links are valid across 15 scan roots.' · check-doc-component-types: 'Every documented component type is registered.' · check-control-bytes: 'OK (scanned 5026 tracked text file(s); skipped 85 binary).' · check-changeset-presence: 'No source of a released package changed in this range, so no changeset is owed.' (CONTRIBUTING lists documentation and repo-level scripts under 'No changeset is needed at all', so none was written) · vitest scripts/__tests__/doc-version-claims.test.ts: 'Tests 18 passed (18)' · tsc -p tsconfig.scripts.json exit 0 · eslint on the changed .ts: 1 file, 0 errors 0 warnings · turbo run build --filter=@object-ui/site: 'Tasks: 30 successful, 30 total' (CI builds the site for this PR anyway — ci.yml's docs-changes step matches content/). Heavy runs went through os-verify-lock.sh; verdict lines read from the wrapper, not a bare exit code. RENDER CHECK: the page was read out of the prerendered HTML at apps/site/.next/server/app/docs/guide/release-notes.html rather than assumed — title, description, two bullets, closing paragraph, and all three outbound links present in the article; not an orphaned heading. ABLATION on the replacement assertion: VERSION_HEADING mutated to a never-matching regex; mutation confirmed on disk first (injected marker 1, original pattern 0); the file went to '2 failed | 16 passed'; the script carried a restoring trap on EXIT INT TERM and git status was clean after. No rebuild was involved — vitest reads the TS source directly, nothing resolves through dist. NARROWING DECLARED: eslint ran on the one changed .ts file, not repo-wide; the other changed file is .md and this repo's eslint config names no markdown files, so the narrowing excludes nothing eslint would have judged. HONEST LIMIT: retiring 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 (check-doc-links green over the new links, the one gate referencing the removed content updated in this diff, and a repo-wide grep for 'release-notes' finding only content/docs/guide/meta.json and that test).",
"open_questions": [],
"out_of_scope_findings": []
}
Inbound links — checked, none became misleading, none edited. A repo-wide grep for release-notes finds exactly one link into the page: content/docs/guide/meta.json (the sidebar entry). A reader clicking "Release Notes" now gets an answer to the question they arrived with — which changelog, and where Releases live — so it stays as is. The other two surfaces the card describes point at the page's neighbour, not at it: README.md's "Changelog (summary)" link and content/docs/guide/ci-cd-pipeline.md's changelog section both target the root CHANGELOG.md, and both already describe it as a hand-curated summary that can lag. Unaffected by the shrink.
One thing for the PM to weigh at review, not a blocker.content/docs/releases/ does not exist in this repo (checked — the dispatch's out-of-scope line was defensive), and after this change no page in the scanned corpus carries a version-heading section at all. That is intended, and the gate is fine: every remaining corpus claim is now flagged and therefore ratcheted by KNOWN_CLAIMS, which is the stricter side. Worth recording because the test file's header essay still uses release notes as its motivating example — an accurate statement of the rule, now with no instance in the tree. Left alone deliberately rather than rewritten under a docs card.
Activity
os-zhuang commentedon Aug 23, 2026
Routed — was filed with zero labels, which is the shape that goes invisible
PM,
domain:devx@ objectui seat (#5748). ⛔ No grading of the fix here and no assignee — the triage seat remains the standing producer ofdomain:*and may re-grade.Why this needed touching at all: the card was filed unassigned and label-less. That is not neutral — it is the exact shape objectstack#8561 records, where a frontier-based backlog sweep never revisits an untouched card and two bare cards sat invisible for ~8 hours across ~8 triage rounds. A card with no
domain:*appears in no lane view and no seat's queue. Labelling it is the difference between "waiting" and "lost".domain:devx— the anchoring, stated so it can be argued withUnder objectui's three-stream split, docs follow the surface they record. This page records the release/versioning surface: what shipped, at which version, against which
@objectstack/specrange and Node engine. That is the same surface ascontent/docs/guide/ci-cd-pipeline.md, which is already in this lane. It is not a component or app contract, so neitherdomain:uinordomain:specfits.needs-user-decision, notpm:queue— deliberatelyThe body is explicit that it is not proposing a resolution: refresh the page / pin it the way
QUICK_REFERENCE.mdis pinned / generate it / retire it in favour of the per-package changelogs are four different answers to "what is this page for", and only the maintainer holds that. Filing it aspm:queuewould put a decision card in a dispatchable queue — the precise defect this seat measured earlier today, where 11 of 49pm:queuecards in this lane turned out to need a human choice before work could start. ⛔ Not adding a twelfth.Two couplings the decision should not be made without
1. It shares a file with an open PR.
content/docs/guide/release-notes.mdis edited right now by PR #5785 (#5409, direction C), which rewrites the intro and the "Previous Versions" line on that page. Whatever is decided here lands after #5785 or merges into it — ⛔ never as a concurrent hand-edit of the same page. This card joins the lane's serial queue keyed on the docs surface.2. "What is the current version?" is itself contested, and #5442 is the card that settles it. This card's own table shows the ambiguity: the releases API says⚠️ This does not make the card blocked: the page is wrong by ~14 majors under either reading, and options pin / generate / retire are unaffected. But a naive refresh could enshrine whichever number happens to be read first.
17.5.0,QUICK_REFERENCE.mdsays17.6.0. That is not two sources disagreeing by accident — it is exactly the repo-vs-npm divergence #5442 exists to fix (16 of 90 declared versions never reached npm; PR #5774 is open for it). So "refresh the page to the current version" has no single correct answer until that lands.What survives whichever option is chosen
The card's own strongest observation:
QUICK_REFERENCE.mdtracks17.6.0becausequick-reference-current-release-4143.test.tsandsync-quick-reference-release.test.tspin it, so its drift surfaces as a red gate (#4642, #5394) rather than silently. This page has no equivalent. That absence is the durable half of any fix here — refreshing the numbers without it just resets a clock that will drift again, exactly as #3689 and #3645 did at their own sites.Generated by Claude Code
os-zhuang commentedon Aug 23, 2026
Decision-inbox duty (triage seat): routing and the two couplings recorded by the devx seat stand; the standard facets block was missing — backfilled below so the ruling can be a one-word reply.
[facets-block]
@objectstack/spec^3.3.0(实为 ^17.0.0-rc.5)与 Node ≥ 18(根 engines 为 ">=22") #3689/35 个包 README 的生成块 §Compatibility 版本已陈旧:声称@objectstack/spec^3.3.0,实际全仓锁 ^17.0.0-rc.5;部分包还列了自己并不依赖的@objectstack/client#3645 同形已证两次);per-package changelog 与 GitHub Releases 已经是权威源,这页是第二真相源。推荐:D 退役——页面收缩为一段指向 per-package CHANGELOG / GitHub Releases 的指路文,不再承载版本表;若维护者要保留版本页,则选 C(生成)而非刷新。落地排在 PR docs(ci): make the Auto Changelog lane honestly dispatch-only (#5409) #5785 之后(同文件串行)。回「D」/「C」/「刷新+pin」即可。
Generated by Claude Code
claude commentedon Aug 23, 2026
Maintainer ruling recorded (atomic four-part write)
Ruled 2026-08-23, live PM chat, verbatim: 「10950 不考虑存量,其他接受你的建议」 — this card falls under the accepted recommendations. Ruled: D — retire the hand-written version table: the page collapses to a short pointer to per-package CHANGELOGs / GitHub Releases; no refresh, no generation pipeline.
needs-user-decision→pm:queuein the same stroke (domain:devx). Serial constraint stands: land after PR #5785 (same file).Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
PM claim + dispatch order — R12
Claimed by the
domain:devx@ objectui execution seat (#5748), round R12, PM sessionsession_019b5UBNMtTzKbVtZZGvFuxe. Branch:claude/issue-5786-retire-release-notes-table.The maintainer has ruled. Execute D; do not re-open the question.
Verbatim, 2026-08-23: 「10950 不考虑存量,其他接受你的建议」 — recorded as:
So: ⛔ do not refresh the version numbers, ⛔ do not build a generator, ⛔ do not pin it with a test. Those were options A, C and "refresh+pin", and the maintainer chose none of them. The page becomes a short pointer.
17.5.0whileQUICK_REFERENCE.mdsays17.6.0, which is the repo-vs-npm divergence #5442 exists to fix. Retiring the table sidesteps that entirely, which is part of why it was chosen.Serial constraint: discharged
The routing comment required landing after PR #5785 (same file). #5785 merged 2026-08-23T10:11:56Z — verified. Proceed.
origin/main— do not work from the card's quoted text, and do not undo #5785's corrections. Your change composes with them.Scope
content/docs/guide/release-notes.mdcollapses to a short pointer at:CHANGELOG.mdfiles (Changesets writes these on each release commit — the source of truth for granular, current history), and⛔ Out of scope: the root
CHANGELOG.md,QUICK_REFERENCE.mdand its pin tests, anycontent/docs/releases/**file (⛔ never edit those in a code PR),check-doc-links.mjs, and #5442's version-divergence question.Verification
node scripts/check-doc-links.mjs— this page loses content and gains links; every one must resolve. Quote the verdict line.quick-reference-current-release-4143.test.tsandsync-quick-reference-release.test.tspinQUICK_REFERENCE.md, not this file, but verify that rather than assuming it; if something pins the version table you are removing, it is part of your diff.check-doc-component-types, control-byte scan, andcheck-changeset-presence.mjs's verdict (docs-only — expect none owed, but ask it).⛔ Never
git stash— shared stack, other agents are using it now.Refs: #5409 / PR #5785 · #5442 · #3689 · #3645.
Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
{ "issue": 5786, "status": "done", "branch": "claude/issue-5786-retire-release-notes-table", "pr": "https://github.com/objectstack-ai/objectui/pull/6080", "premise_still_valid": true, "summary": "Executed ruling D on current origin/main (b813b207a): content/docs/guide/release-notes.md loses the hand-written v3.3.0 section, its Upgrade Notes and its compatibility matrix, and becomes a short pointer naming both sources concretely — each package's own CHANGELOG.md (where to read it: installed package, npm, packages/<name>/CHANGELOG.md) and GitHub Releases (linked). PR #5785's correction of the granular/summary relationship was re-derived from main and preserved; it now carries the whole page. One coupling was found rather than assumed: scripts/__tests__/doc-version-claims.test.ts pinned this page BY NAME, and the page's ## v3.3.0 section turned out to be the scanned corpus's ONLY version-heading section — exemptClaims measured 8 before the cut and 0 after, so that gate went red. It is in the diff: the version-heading exemption 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. No version numbers were refreshed, no generator built, no pin test added.", "tests": "All at final commit 58e18f484 (clean tree). check-doc-links: 'Links are valid across 15 scan roots.' · check-doc-component-types: 'Every documented component type is registered.' · check-control-bytes: 'OK (scanned 5026 tracked text file(s); skipped 85 binary).' · check-changeset-presence: 'No source of a released package changed in this range, so no changeset is owed.' (CONTRIBUTING lists documentation and repo-level scripts under 'No changeset is needed at all', so none was written) · vitest scripts/__tests__/doc-version-claims.test.ts: 'Tests 18 passed (18)' · tsc -p tsconfig.scripts.json exit 0 · eslint on the changed .ts: 1 file, 0 errors 0 warnings · turbo run build --filter=@object-ui/site: 'Tasks: 30 successful, 30 total' (CI builds the site for this PR anyway — ci.yml's docs-changes step matches content/). Heavy runs went through os-verify-lock.sh; verdict lines read from the wrapper, not a bare $?. RENDER CHECK: the page was read out of the prerendered HTML at apps/site/.next/server/app/docs/guide/release-notes.html rather than assumed — title, description, two bullets, closing paragraph, and all three outbound links present in the article; not an orphaned heading. ABLATION on the replacement assertion: VERSION_HEADING mutated to a never-matching regex; mutation confirmed on disk first (injected marker 1, original pattern 0); the file went to '2 failed | 16 passed'; the script carried trap '<restore>' EXIT INT TERM and git status was clean after. No rebuild was involved — vitest reads the TS source directly, nothing resolves through dist. NARROWING DECLARED: eslint ran on the one changed .ts file, not repo-wide; the other changed file is .md and this repo's eslint config names no markdown files, so the narrowing excludes nothing eslint would have judged. HONEST LIMIT: retiring 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 (check-doc-links green over the new links, the one gate referencing the removed content updated in this diff, and a repo-wide grep for 'release-notes' finding only content/docs/guide/meta.json and that test).", "open_questions": [], "out_of_scope_findings": [] }Inbound links — checked, none became misleading, none edited. A repo-wide grep for
release-notesfinds exactly one link into the page:content/docs/guide/meta.json(the sidebar entry). A reader clicking "Release Notes" now gets an answer to the question they arrived with — which changelog, and where Releases live — so it stays as is. The other two surfaces the card describes point at the page's neighbour, not at it:README.md's "Changelog (summary)" link andcontent/docs/guide/ci-cd-pipeline.md's changelog section both target the rootCHANGELOG.mdand already describe it as a hand-curated summary that can lag. Unaffected by the shrink.One thing for the PM to weigh at review, not a blocker.
content/docs/releases/**does not exist in this repo (checked — the dispatch's out-of-scope line was defensive), and after this change no page in the scanned corpus carries a version-heading section at all. That is intended, and the gate is fine: every remaining corpus claim is now flagged and therefore ratcheted byKNOWN_CLAIMS, which is the stricter side. Worth recording because the file's header essay still uses release notes as its motivating example — an accurate statement of the rule, now with no instance in the tree. Left alone deliberately rather than rewritten under a docs card.Generated by Claude Code
yinlianghui-tw commentedon Aug 24, 2026
os-dev-report
Supersedes #issuecomment-5398005208: the HTML-comment marker did not survive the body sanitizer (read back and confirmed absent), so this copy leads with the literal text. Same report; angle-bracket placeholders reworded, since the sanitizer ate those too.
{ "issue": 5786, "status": "done", "branch": "claude/issue-5786-retire-release-notes-table", "pr": "https://github.com/objectstack-ai/objectui/pull/6080", "premise_still_valid": true, "summary": "Executed ruling D on current origin/main (b813b207a): content/docs/guide/release-notes.md loses the hand-written v3.3.0 section, its Upgrade Notes and its compatibility matrix, and becomes a short pointer naming both sources concretely — each package's own CHANGELOG.md (where to read it: the installed package, npm, and packages/PKG/CHANGELOG.md in this repo) and GitHub Releases (linked). PR #5785's correction of the granular/summary relationship was re-derived from main and preserved; it now carries the whole page. One coupling was found rather than assumed: scripts/__tests__/doc-version-claims.test.ts pinned this page BY NAME, and the page's v3.3.0 section turned out to be the scanned corpus's ONLY version-heading section — exemptClaims measured 8 before the cut and 0 after, so that gate went red. It is therefore in the diff: the version-heading exemption 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. No version numbers were refreshed, no generator built, no pin test added.", "tests": "All at final commit 58e18f484 (clean tree). check-doc-links: 'Links are valid across 15 scan roots.' · check-doc-component-types: 'Every documented component type is registered.' · check-control-bytes: 'OK (scanned 5026 tracked text file(s); skipped 85 binary).' · check-changeset-presence: 'No source of a released package changed in this range, so no changeset is owed.' (CONTRIBUTING lists documentation and repo-level scripts under 'No changeset is needed at all', so none was written) · vitest scripts/__tests__/doc-version-claims.test.ts: 'Tests 18 passed (18)' · tsc -p tsconfig.scripts.json exit 0 · eslint on the changed .ts: 1 file, 0 errors 0 warnings · turbo run build --filter=@object-ui/site: 'Tasks: 30 successful, 30 total' (CI builds the site for this PR anyway — ci.yml's docs-changes step matches content/). Heavy runs went through os-verify-lock.sh; verdict lines read from the wrapper, not a bare exit code. RENDER CHECK: the page was read out of the prerendered HTML at apps/site/.next/server/app/docs/guide/release-notes.html rather than assumed — title, description, two bullets, closing paragraph, and all three outbound links present in the article; not an orphaned heading. ABLATION on the replacement assertion: VERSION_HEADING mutated to a never-matching regex; mutation confirmed on disk first (injected marker 1, original pattern 0); the file went to '2 failed | 16 passed'; the script carried a restoring trap on EXIT INT TERM and git status was clean after. No rebuild was involved — vitest reads the TS source directly, nothing resolves through dist. NARROWING DECLARED: eslint ran on the one changed .ts file, not repo-wide; the other changed file is .md and this repo's eslint config names no markdown files, so the narrowing excludes nothing eslint would have judged. HONEST LIMIT: retiring 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 (check-doc-links green over the new links, the one gate referencing the removed content updated in this diff, and a repo-wide grep for 'release-notes' finding only content/docs/guide/meta.json and that test).", "open_questions": [], "out_of_scope_findings": [] }Inbound links — checked, none became misleading, none edited. A repo-wide grep for
release-notesfinds exactly one link into the page:content/docs/guide/meta.json(the sidebar entry). A reader clicking "Release Notes" now gets an answer to the question they arrived with — which changelog, and where Releases live — so it stays as is. The other two surfaces the card describes point at the page's neighbour, not at it:README.md's "Changelog (summary)" link andcontent/docs/guide/ci-cd-pipeline.md's changelog section both target the rootCHANGELOG.md, and both already describe it as a hand-curated summary that can lag. Unaffected by the shrink.One thing for the PM to weigh at review, not a blocker.
content/docs/releases/does not exist in this repo (checked — the dispatch's out-of-scope line was defensive), and after this change no page in the scanned corpus carries a version-heading section at all. That is intended, and the gate is fine: every remaining corpus claim is now flagged and therefore ratcheted byKNOWN_CLAIMS, which is the stricter side. Worth recording because the test file's header essay still uses release notes as its motivating example — an accurate statement of the rule, now with no instance in the tree. Left alone deliberately rather than rewritten under a docs card.Generated by Claude Code