Uh oh!
There was an error while loading. Please reload this page.
docs(spec): name the real per-tier styling primitive on PageSchema kind/source - #10436
Conversation
…nd/source (#10286) The `kind` and `source` `.describe()` strings taught "constrained JSX/HTML+Tailwind" as the html tier's authoring format. ADR-0080's 2026-06-30 amendment retracted that framing on styling: a page's `source` is runtime metadata, so the console's build-time Tailwind never scans it and authored utility `className`s silently produce no CSS (the ADR-0065 failure — the Task Desk modal's `bg-black/50` backdrop rendered transparent). `packages/spec/scripts/build-docs.ts` published the retracted framing verbatim into content/docs/references/ui/page.mdx, with no adjacent correction. Both descriptions now name the actual per-tier primitive, mirroring the amendment: `html` styles via the registered components' structured props plus a JSON `style` object with `hsl(var(--token))` theme colors; `react` styles via inline `style` with the same token colors; neither authors Tailwind classes. Wording cross-checked against the two sources the tree already had right — the generated react contract's STYLING section (skills/objectstack-ui/references/react-blocks.md) and the html tier's own example docstring (examples/app-showcase/src/ui/pages/command-center-jsx.page.ts) — so the tree keeps one voice. Prose only, no schema shape or acceptance change. Every load-bearing claim survives: parse-never-execute, the compiler package per tier (@objectstack/sdui-parser for html, @object-ui/react-runtime for react), `source` authoritative over `regions`, and the ADR-0081 OS_PAGE_REACT=off gating. The `source` TSDoc block carried the same retracted framing and is corrected with it, in the same declared file. Regenerated content/docs/references/ui/page.mdx wholesale via repo tooling (check:generated proved exactly one artifact stale, --fix regenerated only that one). Rider, per the card: packages/sdui-parser/src/index.ts's header comment named the package @object-ui/sdui-parser; its published name is @objectstack/sdui-parser. Comment only — no changeset entry, see the PR body. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016gcKVsiywU9CcS96S5t9qD
📓 Docs Drift CheckThis PR changes 2 package(s): 1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 117 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin c9bd6d8e968d12819f558cc4b688175d80d3ba83 && git checkout c9bd6d8e968d12819f558cc4b688175d80d3ba83
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 6276651dc1ece03f93f17227ac957b908a2dbd9e 4cf78dc6bb8086838f104ccae26e203ea7ed8da6 && git checkout -B drift-repro 6276651dc1ece03f93f17227ac957b908a2dbd9e && git merge --no-ff 4cf78dc6bb8086838f104ccae26e203ea7ed8da6
node scripts/docs-audit/affected-docs.mjs --json 6276651dc1ece03f93f17227ac957b908a2dbd9e
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#10286
PageSchema'skindandsource.describe()strings taught "constrainedJSX/HTML+Tailwind" as the
htmltier's authoring format — a framing ADR-0080's own2026-06-30 amendment retracted on styling.
packages/spec/scripts/build-docs.tspublishes those strings verbatim, so
content/docs/references/ui/page.mdx— the page adeveloper lands on from search — taught the retraction with no adjacent correction.
What the amendment says
docs/adr/0080-ai-authored-ui-jsx-source.md, header amendment (quoted, not edited —docs/adr/**is a governed surface and is untouched by this PR):The change
packages/spec/src/ui/page.zod.ts— both describes now name the actual per-tier stylingprimitive:
htmlvia the registered components' structured props plus a JSONstyleobject with
hsl(var(--token))theme colors,reactvia inlinestylewith the sametoken colors, and neither with Tailwind classes (with the why:
sourceis runtimemetadata the build-time Tailwind never scans).
Every load-bearing claim survives — this was the card's explicit constraint:
html)@objectstack/sdui-parser/@object-ui/react-runtimesourceauthoritative overregions'jsx'deprecated-alias noteOS_PAGE_REACT=offOne voice. Wording was cross-checked against the two sources the card names as
already correct, so the tree does not gain a third phrasing: the generated react
contract's STYLING section (
skills/objectstack-ui/references/react-blocks.md) and thehtmltier's own example docstring(
examples/app-showcase/src/ui/pages/command-center-jsx.page.ts).Also in the same declared file, named here rather than left silent: the TSDoc block
above
sourcecarried the identical retracted framing ("a constrained JSX/HTML+Tailwindtext compiled by
@objectstack/sdui-parser"). Correcting the describe while leaving itwould have left the file contradicting itself. It is the same defect class, mechanically
fixed against the same ADR text, inside the file surface this card already claims; it is
source-internal (it does not project into
page.mdx— verified by grep on the generatedfile).
Regenerated, wholesale, via repo tooling
pnpm --filter @objectstack/spec buildthencheck:generatedproved exactly one of14 artifacts stale —
content/docs/references/**— and--fixregenerated only thatone. That the other 13 stayed green is itself the evidence for
Clause-②: no: noauthorable-surface, api-surface, spec-changes or migration-registry movement, i.e. no
schema shape, no acceptance change, no public-surface widening. The
page.mdxdiff isexactly the two table cells.
Rider (sanctioned by the card)
packages/sdui-parser/src/index.ts's header comment named the package@object-ui/sdui-parser; itspackage.jsonpublishes@objectstack/sdui-parser(thesourcedescribe already had this right). Leftover from the hoist out of objectui.One line, comment only.
Changeset disposition. One entry,
@objectstack/specpatch — consumer-visibledescribe strings, per the #10173 / #10079 precedent for prose-only spec text that lands
in
content/docs/references/. The sdui-parser rider gets no entry: it changes asource comment only — no export, no behaviour, no published surface — and per AGENTS.md
§Before-you-commit a changeset is for feature work, with pure fixes exempt. There is
nothing an
@objectstack/sdui-parserconsumer could read in a CHANGELOG and act on.Verification
Gate families derived from the actual diff via
node scripts/pm/dispatch-gates.mjs(no paths passed — the script takes its own change set from the merge base), then re-run
on the final commit
4cf78dc6b: 24 of 25 green, each exit code captured before anypipe.
Tests and typecheck, both green on this tree:
Declared narrowing — one gate not run locally.
node scripts/check-dev-prereqs.mjsexits 1 here with
✗ The workspace is not built — 1 unmet precondition, not a list of problems. 64 of 67 workspace packages declare an entry point under dist/ that is not on disk. It is a whole-workspace precondition check (pnpm build, all 67 packages), nota judgement on this diff, and a prose-only change cannot move it. CI runs it on a built
tree. Named rather than quietly skipped.
Generated by Claude Code