Surfaced by post-merge verification of #6303 (PR #6581). Both that PR and its predecessor #6305 were individually correct; the defect is a property of their sequence, which is why only a check after the merge finds it.
The measurement
Three shipped source files now tell a reader that a decision is open, and name a closed card as its home:
| file | line | text | card named | that card's state |
|---|
packages/plugin-kanban/src/ObjectKanban.tsx | 712 | "stays open on #6303 for a human ruling." | #6303 | closedcompleted 2026-08-26T14:50:21Z |
packages/plugin-calendar/src/ObjectCalendar.tsx | 465 | "stays open on #6303 for a human ruling." | #6303 | closed |
packages/plugin-gantt/src/ObjectGantt.tsx | 1283 | "to the bucket is open (#6259), and spans kanban/calendar/RecordDetailDrawer as one decision (#6303)" | #6259, #6303 | both closedcompleted |
So the pointer chain terminates on closed cards in every direction. The question they point at is not tracked anywhere.
The question that lost its home
Whether the record-navigation drawer default should converge on the size bucket rather than staying on the CSS literal. It is a real behaviour change, not a spelling cleanup — quoting the measurement the three files carry:
size: 'lg' … that bucket is min(92vw, 960px), which agrees with the above only at viewport >= 1600px and is up to 53% wider below it.
It spans four surfaces: ObjectGantt, ObjectKanban, ObjectCalendar and RecordDetailDrawer's own default. Deciding it for one and not the others re-opens the divergence #6303 was filed to close, so it has to be answered once, for all four.
Why the pointers went stale
#6259 asked the width-vs-size question for the gantt. PR #6305 answered the width half only — drop the deprecated spelling, keep the pixels identical — and deliberately left the bucket half open, saying so in a code comment that pointed forward at #6303. #6303 then carried both halves, and PR #6581 implemented the same width half for kanban and calendar, again leaving the bucket half open in the same words. Its Fixes #6303 closed the card, and the open half went with it.
Nobody did anything wrong at either step. A card that carries a decided half and an undecided half closes when the decided half lands, and the undecided half needs its own card before that happens rather than after.
The current state, verified on main
The width half is fully converged — all three renderers now read identically, and the literal survives in code at exactly one place repo-wide, which is its home:
ObjectKanban.tsx:713 const navConfig = (schema as any).navigation ?? { mode: 'drawer' };
ObjectCalendar.tsx:466 const navConfig = (schema as any).navigation ?? { mode: 'drawer' };
ObjectGantt.tsx:1285 const navConfig = schema.navigation ?? { mode: 'drawer' };
ObjectKanban.tsx:1018 width={navigation.width as any}
ObjectCalendar.tsx:783 width={navigation.width as any}
ObjectGantt.tsx:1724 width={navigation.width as any}
RecordDetailDrawer.tsx:129 width = 'min(960px, 60vw)', <- the single remaining code occurrence
Every other occurrence of the literal in those three renderers is prose in the explanatory comments. So nothing is broken today; what is missing is the tracker for the deliberately-deferred half.
What this card is asking for
Two things, and only the first is mechanical:
- A live home for the bucket question — which is what this card is, if triage grades it into the decision box; the three in-code pointers should then be updated to name it instead of a closed card. That doc-only correction is small and belongs to whichever card gets the ruling, not to a rider on unrelated work.
- The ruling itself, which is a human decision: a change that is up to 53% wider below a 1600px viewport on four record surfaces is a published-behaviour change, not a cleanup.
⛔ Filed unassigned and ungraded by the domain:ui execution seat (session session_011SfZeFWrhGLHmfq61xbz4q) — recording only. Grading and routing are triage's.
The reusable half
A card that closes on Fixes # takes any deferred half with it. Where a dispatch deliberately narrows to the decided half of a question — as #6303's did — the open half needs a card of its own at dispatch time, not at merge time, and the code comments should point at that card from the start.
Surfaced by post-merge verification of #6303 (PR #6581). Both that PR and its predecessor #6305 were individually correct; the defect is a property of their sequence, which is why only a check after the merge finds it.
The measurement
Three shipped source files now tell a reader that a decision is open, and name a closed card as its home:
packages/plugin-kanban/src/ObjectKanban.tsxcompleted2026-08-26T14:50:21Zpackages/plugin-calendar/src/ObjectCalendar.tsxpackages/plugin-gantt/src/ObjectGantt.tsxcompletedSo the pointer chain terminates on closed cards in every direction. The question they point at is not tracked anywhere.
The question that lost its home
Whether the record-navigation drawer default should converge on the
sizebucket rather than staying on the CSS literal. It is a real behaviour change, not a spelling cleanup — quoting the measurement the three files carry:It spans four surfaces:
ObjectGantt,ObjectKanban,ObjectCalendarandRecordDetailDrawer's own default. Deciding it for one and not the others re-opens the divergence #6303 was filed to close, so it has to be answered once, for all four.Why the pointers went stale
#6259 asked the
width-vs-sizequestion for the gantt. PR #6305 answered thewidthhalf only — drop the deprecated spelling, keep the pixels identical — and deliberately left the bucket half open, saying so in a code comment that pointed forward at #6303. #6303 then carried both halves, and PR #6581 implemented the samewidthhalf for kanban and calendar, again leaving the bucket half open in the same words. ItsFixes #6303closed the card, and the open half went with it.Nobody did anything wrong at either step. A card that carries a decided half and an undecided half closes when the decided half lands, and the undecided half needs its own card before that happens rather than after.
The current state, verified on
mainThe
widthhalf is fully converged — all three renderers now read identically, and the literal survives in code at exactly one place repo-wide, which is its home:Every other occurrence of the literal in those three renderers is prose in the explanatory comments. So nothing is broken today; what is missing is the tracker for the deliberately-deferred half.
What this card is asking for
Two things, and only the first is mechanical:
⛔ Filed unassigned and ungraded by the
domain:uiexecution seat (sessionsession_011SfZeFWrhGLHmfq61xbz4q) — recording only. Grading and routing are triage's.The reusable half
A card that closes on
Fixes #takes any deferred half with it. Where a dispatch deliberately narrows to the decided half of a question — as #6303's did — the open half needs a card of its own at dispatch time, not at merge time, and the code comments should point at that card from the start.