Repository navigation
fix(spec): align reportForm with the 9.0 dataset-bound ReportSchema (ADR-0021) - #1730
Merged
Merged
Conversation
…ADR-0021) The authoring form still declared the pre-9.0 query-form fields (objectName / columns / groupingsDown / groupingsAcross / filter) that the single-form cutover removed from ReportSchema — so spec-driven editors rendered controls whose output the schema strips at parse time (and `filter` had been renamed `runtimeFilter`). Declare the dataset-bound shape instead: a Dataset binding section with `dataset` (new `ref:dataset` widget hint) + `values` / `rows` string-tag selectors, `runtimeFilter` under Filter & chart, and joined blocks unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
akarma-synetal
pushed a commit
to akarma-synetal/framework
that referenced
this pull request
Sep 17, 2026
…7.4.0 section (objectstack-ai#17105) * docs(releases): split the v17 page per minor, and draft the missing 17.4.0 section `content/docs/releases/v17.mdx` had reached 5,611 lines / 369 KB — 5.7x the finished v16 page, at 17.3.0, with 17.4.0 still to land. At roughly 90k tokens it is two thirds of the budget this project advertises for an entire application, in one release-notes file. It is now a folder, one self-contained page per minor: v17/index.mdx major landing: intro, release status, the cross-release upgrade-checklist guidance, References v17/17.0.mdx 1,917 highlights + detail + its own upgrade checklist v17/17.0-prerelease.mdx 1,688 archive: the rc.0 … rc.6 train, 30% of the old page and read by nobody upgrading between shipped versions v17/17.1 .. 17.3.mdx the same shape, 375-783 lines each v17/17.4.mdx NEW — see below A reader's question is per-minor, and the old page answered it in three places 1,200 lines apart: "What's new in 17.2.0", "Breaking changes & migration in 17.2.0", and "17.2.0" under a separate "Upgrade checklist" heading. Each minor page now carries all three. Content is conserved: every line of the old body appears in exactly one new file, verified by set difference. The `### 17.x.0` checklist headings are kept verbatim, so their `objectstack-ai#1730`-style anchors survive the move. 17.4.0 was published on 2026-09-09 — the releases index already named it the current series — and had no section on any page. `v17/17.4.mdx` is a MACHINE DRAFT and says so at the top: 396 changesets de-duplicated by hash across all 61 package changelogs (a changeset that bumps six packages appears once), split into 35 carrying a breaking marker, 140 other minor entries, and 221 patch entries reported as counts rather than enumerated. No editorial pass has been made, the Highlights section is deliberately absent rather than guessed, and the upgrade checklist is not written because nobody has walked 17.3.0 → 17.4.0. Deciding what is user-facing is the maintainer's judgement at release time. Two gates learn the second layout rather than being weakened. `check-release-notes` (page existence) and `check-release-page-status` (what the page says) now accept either `v<major>.mdx` or `v<major>/index.mdx`; neither layout is deprecated and no baseline or exception list is introduced. Both pass, as does `check-release-section-coverage`, which skips v17 and names its own reason. `role-word-baseline.json` records a pure relocation: the single row `content/docs/releases/v17.mdx: 2` becomes `v17/17.0.mdx: 2`. Nothing else in the baseline moved — the sum is unchanged and no other file was re-baselined in the same stroke. One reserved word in a changeset's own headline is elided in 17.4.mdx with the elision stated inline, rather than silently rewritten. `upgrading.mdx` follows the checklist links to their new pages and gains a 17.4.0 row that says plainly that its checklist is not written. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016M1gHPfToXY4sUdzsD2CHa * docs(releases): nest the 17.0 pre-release archive under 17.0, and give 17.4.0 the sibling section shape Two corrections to the split. The rc.0 … rc.6 archive sat at the top level of `v17/`, so the sidebar listed it as a peer of the five real releases. It is not a release — it is 17.0.0's own pre-history — so 17.0.0 becomes a folder and the archive moves inside it: v17/17.0/index.mdx the release v17/17.0/prerelease.mdx the train that preceded it v17/17.0/meta.json The archive is now one level down, reachable by expanding 17.0.0 rather than sitting beside it, and its URL says the same thing: `/docs/releases/v17/17.0/prerelease`. Its title is now "Pre-release train (rc.0 … rc.6)" so the nav entry reads as an archive without opening it. The minors that have no sub-pages stay flat files; a minor becomes a folder only when it has something to nest. 17.4.0 now carries the same section shape as 17.1.0 through 17.3.0 — "Highlights — 17.4.0", "What's new in 17.4.0" with "Breaking changes & migration", "New capabilities", "Fixes" and "New in Console (Studio)" beneath it, then "Upgrade checklist" — so a reader crossing releases lands where they expect. Only the shape is finished. The two sections no mechanical pass can produce say so where they stand instead of being filled with a guess: Highlights is a judgement about audience, and the upgrade checklist is a walked route nobody has walked for 17.3.0 → 17.4.0. The Console section names the pin endpoints it can measure — `00d3f09c500c` (the last of 17.3.0's four moves, per that page) to `53ded82bf7a4` (the value of `.objectui-sha` on this tree, bumped by 30b0990) — and states plainly that the intermediate bumps are NOT enumerated, because this checkout's history for that file does not carry them. Naming the gap beats guessing the chain. `role-word-baseline.json` follows the move: one row, path only, `v17/17.0.mdx: 2` to `v17/17.0/index.mdx: 2`. Count unchanged, nothing else re-baselined. check-release-notes, check-release-page-status, check-role-word, check-doc-anchors (337 fragment links, all resolving) and check-docs-single-h1 all pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016M1gHPfToXY4sUdzsD2CHa * docs(releases): delete the 17.0.0 pre-release archive instead of housing it The rc.0 … rc.6 archive was 1,688 lines — 30% of the old monolithic v17 page — describing changes BETWEEN release candidates of a version that shipped on 2026-08-14. The train it records ended 2026-08-10. Everything it carried is contained in the shipped 17.0.0. It had no good home. Flat inside `v17/` it sat in the sidebar as a peer of the five real releases, which it is not. Nested under `17.0/` it forced a folder and a fourth path segment into existence for one archive page, and made 17.0.0 the only minor that expands. Both placements were wrong for the same reason: the page does not earn a place in the reading path, so any place given to it is one too many. Deleted. `17.0` goes back to a flat file, the folder and its `meta.json` go with it, and the sidebar loses the nesting level entirely: Releases > v17 > [v17, 17.4.0, 17.3.0, 17.2.0, 17.1.0, 17.0.0] Nothing is lost that a reader can reach for. "When exactly did X change during the rc train" is a changelog question, not a documentation-site one, and it is answered by the `CHANGELOG.md` files inside the published npm tarballs and by this repository's history. 17.0.0's own page now says that in place of the archive link, rather than pointing at a page that is gone. The two links into the archive — both written earlier in this same branch — go with it. `role-word-baseline.json` follows the file back to the flat path: `v17/17.0/index.mdx: 2` returns to `v17/17.0.mdx: 2`, count unchanged, nothing else re-baselined. check-release-notes, check-release-page-status, check-role-word, check-doc-anchors and check-docs-single-h1 all pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016M1gHPfToXY4sUdzsD2CHa * docs(releases): give the v17 minor pages dotless slugs so link checking resolves them The v17 split landed the per-minor pages as `17.0.mdx` … `17.4.mdx`, and "Check Documentation Links" went red with 20 `File not found` errors, all of them `/docs/releases/v17/17.N`. Root cause, reproduced against the pinned lychee 0.24.2 with the workflow's own argv and isolated in a three-link fixture: /docs/t/17.3 (17.3.mdx exists) -> ERROR File not found /docs/t/17-3 (17-3.mdx exists) -> OK /docs/t/plain (plain.mdx exists) -> OK `--fallback-extensions mdx,md` does not fire when the last path segment already contains a dot — lychee reads `.3` as the extension and never tries `.mdx`. It is the filename shape, not the split, that the checker cannot follow. So the slugs lose the dot. Nothing else moves: * `git mv` 17.N.mdx -> 17-N.mdx, contents untouched; * every `/docs/releases/v17/17.N` link rewritten to `17-N`; * `v17/meta.json` pages renamed to match; * the role-word baseline key follows the file (count stays 2 — pure relocation, the one path that gate documents as legitimate). Frontmatter titles are unchanged, so the sidebar still reads 17.0.0 … 17.4.0 — the slug is invisible to readers. Verified locally with the workflow's exact command line: 2152 links, 0 errors (was 20). check-release-notes, check-release-page-status, check-doc-anchors, check-docs-single-h1 and check-role-word all pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016M1gHPfToXY4sUdzsD2CHa * fix(gates): regenerate the hand-written docs ledger, and stop the coverage gate skipping v17 Two consequences of the v17 split that CI found and the local run had not. 1. `scripts/docs-audit/handwritten-docs.json` is GENERATED output — the audit scope, derived as `content/docs/**/*.mdx` minus the generated references, with hand-editing rejected outright. The split moved six pages under it, so `check:docs-audit-scope` went red naming both directions of the drift: one listed path gone, six real pages unlisted. Regenerated with the gate's own `--write`; the diff is exactly those six for that one, nothing else moved. Left unfixed this is not cosmetic: a FULL audit would have called itself full while silently skipping every v17 page, and an agent pointed at the dead path would report "0 fixes" — indistinguishable in the summary from a page that was read and found accurate. 2. `check-release-section-coverage` looked only for a flat `v<major>.mdx`, so after the split it printed "(v17: … skipped)" and then reported "2 GA major(s) in scope (v16, v17); every one has a heading on its major's release page". It was asserting nothing about v17 while naming it as covered. The skip is explicitly justified in the source by the two sibling gates going red on the same fact — and this PR taught both of them the folder layout, so that justification had gone. It now reads either layout, the folder as one corpus, because "some heading names this minor" is a property of the major's prose wherever it is written; the split moved `## What's new in 17.1.0` from line 3475 of one file to line 5 of another, which is not a coverage change. Proven to measure rather than merely stop printing "skipped": with every heading naming the 17.4 series mutated away, the gate reports the finding against `content/docs/releases/v17/` and exits 0 advisory / 1 --strict. Its 50-case self-test is unchanged and still passes. No gate is weakened and no baseline or exception list is added: one generated artifact regenerated by its own generator, and one lookup taught the second layout its two siblings already accept. check:docs-audit-scope, doc-anchors, doc-authoring, docs-redirects, docs-single-h1, release-notes, release-page-status, release-index-currency-sync, role-word, quick-reference-counts, corpus-claim-drift, published-readme-links, org-identifier and docs-image-tag all pass; lychee reports 2152 links, 0 errors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016M1gHPfToXY4sUdzsD2CHa --------- Co-authored-by: Claude <noreply@anthropic.com>
This branch was successfully deployed
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.
Summary
reportForm(the canonical Report authoring FormView) still declared the pre-9.0 query-form fields —objectName/columns/groupingsDown/groupingsAcross/filter— that the ADR-0021 single-form cutover removed fromReportSchema. Spec-driven editors (e.g. objectui's ReportDefaultInspector, which rendersreportFormverbatim) therefore offered controls whose output the 9.0 schema strips at parse time, andfilterhad been renamedruntimeFilter.This aligns the form with the schema:
objectNamejoined):datasetwith a newref:datasetwidget hint (mirroring the existingref:objectconvention), plusvalues/rowsasstring-tagsfilter→runtimeFilter(jsonwidget)Changeset: patch on
@objectstack/spec(fixed group).Test plan
pnpm buildin packages/specpnpm testin packages/spec — 6527 passedDownstream: objectui will consume this via its dataset-native report editor (PR to follow there).
🤖 Generated with Claude Code