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
The #13748 ruling that produced #13817 (calendar cross-field gate) says in its scope clause: "Scope: calendar only — the measured defect. If timeline or another visualization has the same shape, that is a separate finding to measure first, not a rider here." This is that finding, filed for measurement — recording only.
What is structurally true today (objectstack@6643ba1c, view.zod.ts)
Every per-visualization binding block on the list view is optional (kanban, gallery, timeline, gantt, chart, map, tree), and TimelineConfigSchema / GanttConfigSchema have required binding keys (startDateField, and for gantt endDateField too) exactly like calendar's startDateField.
The existing checkViewCompleteness layer WARNS (not refuses) for a type-level view missing its binding; the switcher path was the unguarded one for calendar.
What needs measuring before any code (the ruling's precondition)
Per visualization, on the objectui renderer: when the switcher offers it with no block, does the renderer (a) hide the toggle (the client claims types "whose bindings don't resolve are hidden" — task.view.ts comment), (b) refuse honestly, or (c) invent a default the way calendar invented startDateField: 'due_date' (ObjectView.tsx, removed by objectui#7029 — remains open)? Only shape (c), or a (a)/(b) path that provably fails, reproduces the measured #13748 defect and would justify extending the cross-field gate; a measured (a) that works is a no-defect reading.
Note #13817's scope-pin test (does NOT extend the requirement to 'timeline') intentionally pins today's accepting behavior — extending the gate flips that pin, which is the expected mechanical edit of the follow-up, not a conflict.
Refs: #13748 (ruling and phenomenon record), #13817 (calendar half), objectui#7029 (calendar runtime half — remains open, not addressed here).
The #13748 ruling that produced #13817 (calendar cross-field gate) says in its scope clause: "Scope:
calendaronly — the measured defect. Iftimelineor another visualization has the same shape, that is a separate finding to measure first, not a rider here." This is that finding, filed for measurement — recording only.What is structurally true today (objectstack@6643ba1c, view.zod.ts)
kanban,gallery,timeline,gantt,chart,map,tree), andTimelineConfigSchema/GanttConfigSchemahave required binding keys (startDateField, and for ganttendDateFieldtoo) exactly like calendar'sstartDateField.appearance.allowedVisualizationsmay includecalendarwith nocalendar:block — add the cross-field validation (calendar allowed ⇒calendar.startDateFieldrequired) #13817,calendaris the ONLY entry ofappearance.allowedVisualizationstied cross-field to its block. A view whitelistingtimeline(organtt,map, ...) with no block still parses clean.checkViewCompletenesslayer WARNS (not refuses) for atype-level view missing its binding; the switcher path was the unguarded one for calendar.What needs measuring before any code (the ruling's precondition)
Per visualization, on the objectui renderer: when the switcher offers it with no block, does the renderer (a) hide the toggle (the client claims types "whose bindings don't resolve are hidden" — task.view.ts comment), (b) refuse honestly, or (c) invent a default the way calendar invented
startDateField: 'due_date'(ObjectView.tsx, removed by objectui#7029 — remains open)? Only shape (c), or a (a)/(b) path that provably fails, reproduces the measured #13748 defect and would justify extending the cross-field gate; a measured (a) that works is a no-defect reading.Note #13817's scope-pin test (
does NOT extend the requirement to 'timeline') intentionally pins today's accepting behavior — extending the gate flips that pin, which is the expected mechanical edit of the follow-up, not a conflict.Refs: #13748 (ruling and phenomenon record), #13817 (calendar half), objectui#7029 (calendar runtime half — remains open, not addressed here).
Generated by Claude Code