Skip to content

Commit 4530d21

Browse files
committed
docs(spec): record #16577 as ruled, not pending, in the calendar carriers
The three in-tree carriers this PR added deferred the calendar route's severity to #16577 as an open question. It is not open: #16577 ruled B on 2026-09-11 (comment 5634033966, card closed completed) and fixed the route at warning-class under ADR-0078 §1 -- reasoning from exactly the premise this PR re-measures, that both doors are loud (the os validate warning, and ObjectCalendar's reachable refusal screen after objectui deleted the start_date / end_date floors). So the corrected row is not a change whose severity consequence is deferred; it is the evidence the standing ruling already rests on. The changeset ships into packages/spec/CHANGELOG.md, which is where the previous stale claim survived, so a second stale claim there would reproduce the defect this PR exists to correct. Also adds one clause to the calendar row: the quoted refusal literal is the text rendered AT THE PIN. objectui#10101 landed after the pin and moved it into a tt('calendar.configRequired', ...) default, so a non-English locale on objectui's head renders other words. Harmless for the console this repo ships, and the asserting pin citation below it is what reds at the next bump. Prose only: no schema, no severity, no behaviour, no new assertion. Claude-Session: https://claude.ai/code/session_01UDXER3sdqfeVYpEWZs5mZx Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6f1b457 commit 4530d21

3 files changed

Lines changed: 26 additions & 9 deletions

File tree

‎.changeset/17445-view-binding-calendar-fallback-corrected.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Two carriers asserted the same deleted behaviour: `VIEW_BINDING_BLOCKS`' calenda
1212
So the old body was wrong twice — there is no fallback to literal field names, and the failure is not silent. What it was right about is the remedy, and that is the half the new body keeps: it names `calendar.startDateField`, `CalendarConfigSchema`'s one required key, and records that the event title resolves through the ADR-0079 display-name chain when `titleField` is omitted. The `fix` hint is unchanged.
1313

1414
- **The message is now per type.** `VIEW_BINDING_MESSAGE` carries an entry for a type whose measured outcome is not the generic literal-fallback sentence; the other five types receive the generic body unchanged. A type that stops flooring gets an entry, never a reworded universal — the two carriers drifted apart once, and the map is what makes correcting both one edit.
15-
- **No severity moves.** Whether a renderer that refuses BY NAME still deserves WARNING under ADR-0078 §1 is #16577's question; correcting false prose does not answer it, and nothing here pre-empts it.
15+
- **No severity moves — the severity is already ruled.** #16577 ruled **B** on 2026-09-11 (comment `5634033966`, card closed `completed`): the `type: 'calendar'` route stays warning-class under ADR-0078 §1, and it stays there *because* both doors are loud — loud at `os validate` (this warning) and loud at render (objectui#7029 deleted the `start_date` / `end_date` floors; `getCalendarConfig` returns `null` and the named refusal screen is reachable). That is exactly the premise re-measured here, so the corrected row is the evidence the standing ruling rests on, not a change whose severity consequence is pending.
1616
- ⚠️ **The same reading found three sibling rows stale, and they are recorded rather than corrected** — out of this card's scope, and each changes what its row's severity rests on: `gantt`'s four floors are gone (objectui#7070, objectui#7499) and `ObjectGantt` refuses; `timeline`'s `created_at` floor is gone (objectui#7070) while its `titleField || 'name'` stands; `map`'s `locationField || 'location'` is gone on both faces (objectui#8169). The table now carries that re-measurement note so the three are not reused as current fact, and `kanban` / `tree` were re-read at the same ref and still say what they say.
1717

1818
No schema moved, no export moved and no accept set moved: this corrects prose and one warning string. `Clause-②: no`

‎packages/spec/src/kernel/functional-completeness.test.ts‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,13 @@ describe('checkViewCompleteness — layout bindings', () => {
176176
// reporting that something is missing.
177177
expect(f.message).toContain('calendar.startDateField');
178178
expect(f.fix).toContain('startDateField');
179-
// Severity is deliberately untouched here. Whether a renderer that
180-
// refuses BY NAME still deserves WARNING under ADR-0078 §1 is #16577's
181-
// question; correcting false prose does not answer it.
179+
// Severity is untouched because it is already RULED, not because the
180+
// question is open: #16577 ruled B (comment `5634033966`, card closed
181+
// `completed` 2026-09-11) — a `calendar` route that refuses BY NAME
182+
// stays warning-class under ADR-0078 §1, on the reasoning that BOTH
183+
// doors are loud, `os validate` and render. That is the reading the
184+
// assertions above re-measure, so this pin carries the ruling's
185+
// evidence rather than standing in for a pending one.
182186
expect(f.severity).toBe('warning');
183187
});
184188

‎packages/spec/src/kernel/functional-completeness.ts‎

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,18 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
227227
*
228228
* Either way the author asked for a surface that does not render, while
229229
* authoring reports success: WARNING, not error (ADR-0078 §1). ⚠️ The
230-
* rubric's other half — refuse what renders NOTHING — is what [#16577] is
231-
* asking of this route now that some of these renderers answer with a
232-
* refusal. This table records what was measured and deliberately does not
233-
* pre-empt that ruling: nothing here moves a severity.
230+
* rubric's other half — refuse what renders NOTHING — was put to [#16577]
231+
* for the `type: 'calendar'` route and is SETTLED, not pending: ruled B
232+
* (director seat, comment `5634033966`; the card closed `completed` on
233+
* 2026-09-11), the route STAYS warning-class and is carried at `warning` by
234+
* the table below. The ruling turns on BOTH doors being loud — loud at
235+
* `os validate` (this warning) and loud at render (objectui#7029 deleted the
236+
* `'start_date'` / `'end_date'` floors; `ObjectCalendar.getCalendarConfig`
237+
* returns `null` and the named refusal screen is reachable) — which is
238+
* exactly what the `calendar` row below now measures. So this table moves no
239+
* severity because the severity is already RULED, and the corrected row is
240+
* the evidence that ruling rests on. ⛔ Reopening it takes a new ruling,
241+
* not a re-read; a row going stale is a reason to re-measure the ROW.
234242
*
235243
* Every entry names its measured renderer binding. The verify-then-enforce
236244
* gate this table sits behind (the audit's Tier-A had named only the first
@@ -256,7 +264,12 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
256264
* flat `startDateField`, and the `if (!calendarConfig)` arm renders the
257265
* "Calendar configuration required" refusal screen, which names
258266
* `startDateField` as the key to declare (objectui#8170 corrected that
259-
* screen's second clause: `titleField` is NOT required). So the loss is
267+
* screen's second clause: `titleField` is NOT required). ⚠️ That literal
268+
* is the text RENDERED at the pin: objectui#10101 landed AFTER the pin and
269+
* moved it into a `tt('calendar.configRequired', …)` default, so on
270+
* objectui's head a non-English locale renders other words for the same
271+
* screen. Harmless for the console this repo ships — and the pin citation
272+
* below is what reds when the pin moves past it. So the loss is
260273
* total rather than partial — every record, on every object — and the
261274
* author is told at render time as well as here. Both reads are identical
262275
* at the pin this repo builds against (`.objectui-sha` = `87af769e9`), so

0 commit comments

Comments
 (0)