Repository navigation
Closed
Labels
priority:p2Medium: important, M3Medium: important, M3
Description
Part of the metadata liveness audit umbrella #1878 (P2 — spec hygiene, cluster #6).
Problem
Inverse drift: renderers depend on props the spec does not declare. These break a strict Schema.parse() — the renderer needs a key that a spec-validating author would never be allowed to write.
Checklist
- dashboard:
component/data/rowField/columnField - view:
ObjectViewform-adapter keys - app:
accentColor/badgeVariant/separator(also listed under naming drift)
For each: either add the prop to the spec (if it's legitimately authorable) or remove the renderer's dependency on it so strict validation holds.
Resolution
All three reconciled so strict validation holds:
- dashboard —
component/data+ the pre-ADR-0021 inline-analytics keys (rowField/columnField/…) are quarantined and rejected by the strictDashboardWidgetSchemaerror map (dashboard.zod.ts), pointing authors atdataset/dimensions/values(renderer-only extras →options). (already onmain) - app —
accentColor/badgeVariant/separatordeclared onAppSchema(app.zod.ts). (already onmain) - view — the structured
buttons/defaults(added toFormViewSchemaunder spec: structured form button/defaults config on FormViewSchema + enrollviewin the liveness ledger #2998 Track A) are now consumed by the objectuiObjectFormrenderer, so the two liveness-ledger entries flipexperimental → live. The remaining flat form-adapter keys (customFields/className/fields) stay classified as renderer-only ObjectUI extensions, not spec surface (objectui#2545). Landed as a coordinated pair:- feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm objectui#2790 —
ObjectFormfoldsbuttons/defaultsonto its flat props (merged6dee2cb) - chore(spec): flip FormView buttons/defaults to live; close view inverse-drift (#1894) #3417 — flips the ledger to
live, drops the ADR-0078 markers, regenerates theviewreference doc, updates the audit docs (mergedc4df271)
- feat(form): consume spec-aligned FormView buttons/defaults in ObjectForm objectui#2790 —
Both merged with green CI. Closing.
Evidence
docs/audits/README.mdcluster Migrate from npm to pnpm #6docs/audits/2026-06-dashboardschema-property-liveness.md,2026-06-viewschema-property-liveness.md,2026-06-appschema-property-liveness.md
Metadata
Metadata
Assignees
Labels
priority:p2Medium: important, M3Medium: important, M3
Activity
chore(spec): mark aspirational props experimental + declare renderer-…
chore(spec): metadata-liveness P2 follow-through — mark aspirational …
feat(lint): error (not warn) when a legacy dashboard widget binds no …
feat(lint): catch legacy pre-ADR-0021 dashboard analytics keys at aut…
os-zhuang commentedon Jul 22, 2026
All three inverse-drift items are now reconciled so a strict
Schema.parse()holds:component/data/rowField/columnField— ✅ already resolved onmain:component/data+ the pre-ADR-0021 inline-analytics keys are quarantined and rejected by the strictDashboardWidgetSchemaerror map (dashboard.zod.ts), which points authors atdataset+dimensions/values(renderer-only extras →options).accentColor/badgeVariant/separator— ✅ already resolved onmain: all three declared onAppSchema(app.zod.ts).ObjectViewform-adapter keys — the last open piece, now done. The structuredbuttons/defaults(added toFormViewSchemaunder spec: structured form button/defaults config on FormViewSchema + enrollviewin the liveness ledger #2998 Track A) were stillexperimentalbecause no renderer read them. Fixed as a co-landed pair:ObjectFormfoldsbuttons/defaultsonto its flat renderer props (ObjectView+RecordFormPageforward them); flat keys kept as deprecated back-compat.view.form.buttons/view.form.defaultsexperimental → livein the liveness ledger, drops the ADR-0078 markers, updates the audit docs. The remaining flat adapter keys (customFields/className/fields) stay classified renderer-only ObjectUI extensions, not spec surface (objectui#2545).Both PRs are up as drafts and verified green locally (spec liveness gate; objectui type-check + DOM suites). CI is currently red only due to a GitHub Actions runner-allocation outage (every job failing at provisioning with
runner_id: 0), which I'm re-running once runners recover. Part of umbrella #1878.Generated by Claude Code
feat(form): consume spec-aligned FormView buttons/defaults in ObjectF…
chore(spec): flip FormView buttons/defaults to live; close view inver…
docs(ui): correct the navigation item type count and document `separa…
feat(spec): fail CI when a schema variant is missing from its hand-wr…
test(spec): the last ui/ file group's test titles state each cited de…