Uh oh!
There was an error while loading. Please reload this page.
docs(guide): resolve four react-pages.md contradictions toward the framework's sources - #5462
Merged
Merged
Conversation
…amework's sources (#5413) The guide is live material — `@object-ui/react-runtime`'s README links it twice — so each contradiction was reachable teaching. All four re-measured against objectstack@f094214b3 (the card's pin 502dc6fe7 had moved 65 commits). 1. Tailwind styling. The guide taught Tailwind `className` as the react tier's styling primitive; ADR-0080's 2026-06-30 amendment retracted that under ADR-0065 (Accepted). Replaced with the per-tier primitive, plus a Styling section giving the mechanism. 2. `record:*` scope. Offered as the illustrative in-scope example while `os validate` rejects it (react-block-needs-record-context, severity error). Tag-derivation rule kept; exclusion, real error text and alternatives added. 3. `adapter.find` options. `filters:` is not a QueryParams key — corrected to `$filter`. The same sample also treated the result as an array; `find` resolves to a QueryResult, so `.map` on it throws. Corrected alongside. 4. Block inventory. Runtime scope and authored contract stated as two tiers, with the generated react-blocks.md named as the prop authority. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
os-support-ai
marked this pull request as ready for review
August 21, 2026 00:34
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#5413
The guide is live material —
@object-ui/react-runtime's README links it twice(
README.md:19and:127) — so each contradiction was reachable teaching.Every claim was re-measured, not inherited. The card measured against
objectstack@502dc6fe7; that pin had moved 65 commits by the time this ran. All fourwere re-measured against
objectstack@f094214b3and objectui77f846a8b. Nothing hadbeen fixed upstream in the meantime, so no axis is moot — but three of the card's
citations had drifted, noted below.
Per-axis verdict
All four came out settled, each by a live shipped mechanism rather than by an ADR
whose status could be argued. Nothing goes to the decision inbox.
kindtable and the html-tier blurb; restyled the headline example to an inlinestyleobject; replaced the "so use Tailwind" conclusion on the layout-containers paragraph; added a Styling section giving the mechanism and the per-tier primitivepackages/lint/src/validate-page-source-styling.ts— rulepage-source-className-tailwind, fires onkindhtml/react/jsx, hint names inlinestyle+hsl(var(--token))for react and structured props + JSONstylefor html. Registered inauthoring-rules.ts:741(tier: 'advisory'), exported fromlint/src/index.ts:152, released in@objectstack/lint@11.5.0(changelogec7175d, which states it "corrects … ADR-0080/0081 away from the 'HTML + Tailwind' framing"). Backed by ADR-0065 (Accepted 2026-06-22) and ADR-0080's 2026-06-30 header amendmentrecord:*scopeos validateerror text, the per-block alternatives table, and the note that the rule matches by type soBlock type="record:…"is caught toopackages/spec/src/ui/react-blocks.ts— theREACT_RECORD_BLOCK_ALTERNATIVESledger and the withdrawal rationale (#4413);packages/lint/src/validate-react-page-props.ts:913—REACT_BLOCK_NEEDS_RECORD_CONTEXT, severityerror, matched by type not by tag listadapter.findoptionsfilters:→$filter; added the load-bearing-$note with the exact key listpackages/types/src/data.ts:42—QueryParamsdeclares only$-prefixed keys;packages/data-objectstack/src/index.ts:2976convertQueryParamsbuilds a fresh options object from$-prefixed reads only, so an unprefixed key reaches no branch. The framework's own react page uses$filter(renewals-pipeline.page.ts:67)react-blocks.mdas the prop authority, and moved the flat-props example off two deprecatedObjectGridspellingsREACT_BLOCKSinpackages/spec/src/ui/react-blocks.tsis exactlyObjectForm,ListView,ObjectChart,Block; objectuipackages/core/src/registry/public-blocks.tsPUBLIC_BLOCKSplusbuildComponentScope(renderers/layout/react-page.tsx:66, `if (!tagWhy axis 1 is settled rather than escalated
This is the one the card framed as an ADR-amendment question, so it got the most scrutiny.
The amendment lives in ADR-0080, whose own Status line still reads "Proposed" — but the
amendment is a correction pointing back toADR-0065, which is Accepted, and it has
since been implemented and released: a dedicated lint rule ships and is wired into
os validate/os build, the generated react contract carries it, and objectstack#10286 /PR #10436 has just carried the same correction into
PageSchema's own describes. Thatcard's
needs:contract-reviewlabel is a path-limb process gate onpackages/spec/src/**,and its reviewer graded the content limb "no" — it is not a dispute about direction.
Nothing anywhere in either tree argues the other way.
Three of the card's citations had drifted — corrected here
packages/lint/src/validate-responsive-styles.ts(style-classname-tailwind)as the Tailwind corroborator. Counter-probed: that rule never reads page
source—it walks
regions[].components[]only, and the file contains no occurrence ofsourceat all. The rule that actually governs the source tier is the separate
validate-page-source-styling.tscited above. Same conclusion, stronger and correctauthority.
QueryParamsatpackages/types/src/data.tsin the framework repo.That path does not exist at
objectstack@f094214b3; the file is objectui's own.record:*gate applies to the four withdrawn tags. It matches bytype prefix, so all
record:*blocks are covered — including the six never in thecontract — and
Block type="record:…"with the type spelled out.One bounded in-place fix, declared
The
Live datasample had a second defect in the same call, same class (the samplecontradicts
ObjectStackAdapter's real contract): it passed the result straight tosetRowsand then called.mapon it.findresolves to aQueryResult(
{ data, total, page, pageSize, hasMore }), never a bare array —normalizeQueryResult(
data-objectstack/src/index.ts) returns that shape on every branch, andfindisdeclared as returning a promise of
QueryResult(generic elided here — GitHub's sanitizereats angle brackets). As written the sample throws. Corrected to
res.dataalongside the$filterfix and called out in the prose, rather than left as a silent rider. Same file,same defect class, same gate family, no new verification surface.
Verification
All results below are on the final commit
42a1d7359, re-run after committing; exitcodes captured per gate, never through a pipe.
Plus the standing control-byte self-scan on the changed files
(
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]') — clean.One gate narrowed, declared not skipped.
check:doc-snippetscompiles everyts/tsxfence in a covered document against built
dist/*.d.ts, andreact-pages.mdis covered(not in
UNGATED_DOCS). Its only input from this file is onetsxfence, and that fence isbyte-identical before and after — extracted and compared programmatically, 1 fence
before, 1 after,
IDENTICAL: True— with itsdoc-snippet: fragmentmarker stillimmediately above it. The gate's verdict on this file therefore cannot move, and CI runs it
on a built tree regardless. No ablation was run: nothing here is a gate-can-fail claim.
No test was skipped, disabled, or quarantined.
content/docs/utilities/index.mdwas nottouched (sibling card #5360 is in flight there);
content/docs/releases/untouched; noforce-push.
Changeset
Empty frontmatter — docs-only, so this publishes nothing, declared explicitly rather than
left undeclared (objectui does not use a
skip-changesetlabel).check-changeset-presenceconfirms none is owed.
Out-of-scope findings, filed not fixed
"HTML + Tailwind" framing, one of them the published TSDoc on
PageSchema.kind(
packages/types/src/layout.ts:616), which links this guide and so will contradict itonce this lands. Outside this card's declared file surface.
showcase CRM workbench react page passes
limit: 200toadapter.find, the samedropped-option class, in a second file that #10288's stated one-file change does not
reach.
Generated by Claude Code