You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
spec: interface pages accept appearance.allowedVisualizations: ['calendar'] but the page surface has NO calendar binding key at all — the #13748 shape on a different door #14073
Found while implementing #13817 (the list-view cross-field gate ruled on #13748). Recording only — not fixed there, per scope clause.
What is measured (schema + corpus, objectstack@6643ba1c)
packages/spec/src/ui/page.zod.ts — InterfacePageConfigSchema embeds appearance: AppearanceConfigSchema.optional(), whose allowedVisualizations enum includes calendar. The page config declares NO calendar: key (grep: zero calendar keys in the schema shape) — unlike the list-view door, there is no place to author a date binding at all.
examples/app-showcase/src/ui/pages/task-visualizations.pages.ts line 48 whitelists ['calendar'] on a list page; line 129 whitelists the full set including calendar. The file header states the per-viz field bindings "are auto-derived from the object — the author only whitelists".
What the objectui renderer actually does for an interface list page switched to calendar, especially AFTER objectui#7029 (removing the invented due_date default — the runtime half of the #13748 ruling, still open at filing time) lands. If page-door calendar rendering relied on the same invented default, these showcase pages flip from "coincidentally renders" to broken-at-runtime with no build-time signal — the exact loud-over-silent gap #13748 ruled against, on a door with no authoring remedy.
Possible directions (for triage, not decided here)
A. Give the page config an authorable calendar binding (a calendar: block or equivalent) and tie it cross-field like #13817 did for views.
B. Make page-door auto-derivation real and honest: derive from the object's field types, refuse loudly when no date field exists.
C. Narrow the page-door whitelist to visualizations the page surface can truthfully bind.
Found while implementing #13817 (the list-view cross-field gate ruled on #13748). Recording only — not fixed there, per scope clause.
What is measured (schema + corpus, objectstack@6643ba1c)
packages/spec/src/ui/page.zod.ts—InterfacePageConfigSchemaembedsappearance: AppearanceConfigSchema.optional(), whoseallowedVisualizationsenum includescalendar. The page config declares NOcalendar:key (grep: zero calendar keys in the schema shape) — unlike the list-view door, there is no place to author a date binding at all.examples/app-showcase/src/ui/pages/task-visualizations.pages.tsline 48 whitelists['calendar']on alistpage; line 129 whitelists the full set includingcalendar. The file header states the per-viz field bindings "are auto-derived from the object — the author only whitelists".appearance.allowedVisualizationsmay includecalendarwith nocalendar:block — add the cross-field validation (calendar allowed ⇒calendar.startDateFieldrequired) #13817 deliberately did NOT gate this door: the ruled refinement lives on the list-view schema, and a requirement the page surface cannot satisfy (no key exists) would be unauthorable.What is NOT measured
What the objectui renderer actually does for an interface
listpage switched to calendar, especially AFTER objectui#7029 (removing the inventeddue_datedefault — the runtime half of the #13748 ruling, still open at filing time) lands. If page-door calendar rendering relied on the same invented default, these showcase pages flip from "coincidentally renders" to broken-at-runtime with no build-time signal — the exact loud-over-silent gap #13748 ruled against, on a door with no authoring remedy.Possible directions (for triage, not decided here)
A. Give the page config an authorable calendar binding (a
calendar:block or equivalent) and tie it cross-field like #13817 did for views.B. Make page-door auto-derivation real and honest: derive from the object's field types, refuse loudly when no date field exists.
C. Narrow the page-door whitelist to visualizations the page surface can truthfully bind.
Refs: #13748 (ruling), #13817 (list-view half, landed separately), objectui#7029 (runtime half — remains open, not addressed here).
Generated by Claude Code