chore(spec): close react-block frontend-only divergence — overlay data/fields/options (ADR-0081)#2488
Merged
Merged
Conversation
…a/fields/options (ADR-0081) The conformance ratchet (#2485) accepted three frontend-only props in its baseline: ObjectChart `data`, ListView `fields`/`options`. These aren't real divergence — they're legitimate binding escape-hatches the component accepts that the spec schema simply doesn't model (static chart data; a simplified column list; a per-viewType options bag). The fix for "component accepts a prop the contract doesn't document" is to document it, not to leave it as accepted noise. - Add `data` (ObjectChart), `fields` + `options` (ListView) to the react-blocks overlay as `binding` props with honest descriptions, so the AI-facing contract (react-blocks.md / .contract.json) now declares them. - Regenerate the contract artifacts and the conformance baseline: every block is now 0 frontend-only. The ratchet is noise-free — any future frontend-only prop is a real, actionable signal rather than sitting in an accepted baseline. No public API-surface change (overlay entries, not new exports). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 90 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
os-zhuang
added a commit
that referenced
this pull request
Jun 30, 2026
Records the model that the spec↔contract↔conformance↔prop-gate work converged on (now implemented + merged across framework #2478/#2480/#2482/#2484/#2485/#2488/ #2489 and objectui #2113/#2115), so future contributors don't re-litigate it: - the spec zod schema is the protocol source of truth; the AI-facing contract is GENERATED from it (zero-drift), never hand-authored; - registry inputs are the designer palette (a curated subset) — spec-only is a soft signal, frontend-only is the actionable one; - React-interaction props (callbacks/controlled/binding escape-hatches) live in a thin overlay, not the spec; declaring a genuine binding there is how a frontend-only prop is closed (baseline now 0 frontend-only); - conformance is a build-time baseline ratchet (build-console.sh, warn-only), not a per-PR gate — the manifest only exists at console-build time; - authoring correctness is a hard gate at os validate (missing-required = error, typo = warning); and the dogfood golden page proves the chain closes. Captures the alternatives rejected (copy props into spec / per-PR hard gate / hand-authored contract / registry-as-source). Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
What
Follow-up to the conformance ratchet (#2485). That PR's baseline accepted three frontend-only props —
ObjectChart.data,ListView.fields,ListView.options. This closes them so the baseline is 0 frontend-only across every block, making the ratchet noise-free.Why these aren't real divergence
All three are legitimate binding escape-hatches the component genuinely accepts, that the spec schema just doesn't model:
ObjectChart.data— pass static/precomputed data directly instead of binding viaobjectName+aggregate.ListView.fields— a simplified column list (directly analogous toObjectForm.fields, already in the overlay).ListView.options— a per-viewType options bag (kanban/calendar/gantt extras).The divergence was "component accepts a prop the contract doesn't document." The fix is to document it (in the react-blocks overlay → the AI-facing contract), not to leave it sitting as accepted baseline noise.
How
react-blocks.tsoverlay asbindingkind with honest descriptions.react-blocks.contract.json+references/react-blocks.md(AI now sees these props) andreact-conformance.baseline.json(allfrontendOnly: []).Result
@objectstack/specbuild green; api-surface unchanged (overlay entries, not new exports).🤖 Generated with Claude Code