Filed unassigned by the os-dev seat implementing objectui#8176 (branch claude/issue-8176-parity-gate-lazy-registrations). Measured, not derived: on origin/main 0c8dbc492, @objectstack/spec@17.1.x as installed, by running apps/console/src/__tests__/registry-inputs-spec-parity.test.ts's own undiscoverableSpecKeys over the two blocks after loading them eagerly.
Why this exists
objectui#8176 measured that the console's reverse-parity gate judged 27 of the 42 ComponentPropsMap blocks and silently judged neither object-kanban nor object-calendar: the console registers both with ComponentRegistry.registerLazy, getConfig is loaded-only by design, so declaredInputs answered null and the two blocks fell out of covered and out of registeredWithoutInputs. Loading them is what this backlog is: it is not new breakage, it is the first reading of a population that had never been read.
Measured — the reverse direction's verdict on the two blocks
object-kanban — spec declares 13 top-level keys, the registration publishes 3 (objectName, columns, dataSource). Eleven undiscoverable:
groupBy · filter · data · cardTitle · titleField · cardFields · swimlaneField · grouping · quickAdd · coverImageField · conditionalFormatting
object-calendar — spec declares 9, the registration publishes 3 (objectName, calendar, dataSource). Seven undiscoverable:
defaultView · filter · sort · data · staticData · locale · loading
Split of ownership — 18 keys, 3 owners
object-kanban.filter and object-calendar.filter are objectui#7712, already open on exactly those two keys.
object-calendar.sort is objectui#8171, already open.
- The remaining 15 are this card: kanban's other ten, and calendar's
defaultView · data · staticData · locale · loading.
What this card owes, per key
The bar the gate's own header sets: a spec key the renderer HONOURS and inputs omits is a plain defect and gets declared; a key publishing which would be wrong or premature gets a reasoned, issue-backed exemption naming which of those it is. Nobody has yet asked that question of these 15 — that is the work here, per key, against the renderer's real read sites in packages/plugin-kanban/src/index.tsx and packages/plugin-calendar/src/index.tsx.
Related readings that already exist on some of these key names, from other faces of the same contract (they do not settle the inputs question, they inform it): objectui#7742 (titleField read but undeclared in KanbanSchema), objectui#7322 (closed — groupBy on the types face), objectui#8172 (limit), objectui#8174, objectui#5784 (defaultView value drift), objectui#8026 (allDayField).
Current state in-tree — visible, not silent
All 18 keys carry an entry in UNPUBLISHED_EXEMPTIONS in apps/console/src/__tests__/registry-inputs-spec-parity.test.ts as of the objectui#8176 PR, each naming this card (or objectui#7712 / objectui#8171) and each saying "a declaration someone owes" rather than "a ruled carve-out". Those entries are policed by that file's existing dangling and stale checks: declaring an input here makes its entry go stale and the gate goes RED until the entry is deleted in the same change. So the backlog cannot rot quietly, and the gate is judging these two blocks from now on rather than skipping them.
Sequence: this card (decide and land the 15) → delete the matching exemption entries in the same change. objectui#7712 and objectui#8171 do the same for their three.
Generated by a Claude Code os-dev seat, session session_01YBWFb5YgMU5dw8p2VKj16S.
Filed unassigned by the os-dev seat implementing objectui#8176 (branch
claude/issue-8176-parity-gate-lazy-registrations). Measured, not derived: onorigin/main0c8dbc492,@objectstack/spec@17.1.xas installed, by runningapps/console/src/__tests__/registry-inputs-spec-parity.test.ts's ownundiscoverableSpecKeysover the two blocks after loading them eagerly.Why this exists
objectui#8176 measured that the console's reverse-parity gate judged 27 of the 42
ComponentPropsMapblocks and silently judged neitherobject-kanbannorobject-calendar: the console registers both withComponentRegistry.registerLazy,getConfigis loaded-only by design, sodeclaredInputsanswerednulland the two blocks fell out ofcoveredand out ofregisteredWithoutInputs. Loading them is what this backlog is: it is not new breakage, it is the first reading of a population that had never been read.Measured — the reverse direction's verdict on the two blocks
object-kanban— spec declares 13 top-level keys, the registration publishes 3 (objectName,columns,dataSource). Eleven undiscoverable:groupBy·filter·data·cardTitle·titleField·cardFields·swimlaneField·grouping·quickAdd·coverImageField·conditionalFormattingobject-calendar— spec declares 9, the registration publishes 3 (objectName,calendar,dataSource). Seven undiscoverable:defaultView·filter·sort·data·staticData·locale·loadingSplit of ownership — 18 keys, 3 owners
object-kanban.filterandobject-calendar.filterare objectui#7712, already open on exactly those two keys.object-calendar.sortis objectui#8171, already open.defaultView·data·staticData·locale·loading.What this card owes, per key
The bar the gate's own header sets: a spec key the renderer HONOURS and
inputsomits is a plain defect and gets declared; a key publishing which would be wrong or premature gets a reasoned, issue-backed exemption naming which of those it is. Nobody has yet asked that question of these 15 — that is the work here, per key, against the renderer's real read sites inpackages/plugin-kanban/src/index.tsxandpackages/plugin-calendar/src/index.tsx.Related readings that already exist on some of these key names, from other faces of the same contract (they do not settle the
inputsquestion, they inform it): objectui#7742 (titleFieldread but undeclared inKanbanSchema), objectui#7322 (closed —groupByon the types face), objectui#8172 (limit), objectui#8174, objectui#5784 (defaultViewvalue drift), objectui#8026 (allDayField).Current state in-tree — visible, not silent
All 18 keys carry an entry in
UNPUBLISHED_EXEMPTIONSinapps/console/src/__tests__/registry-inputs-spec-parity.test.tsas of the objectui#8176 PR, each naming this card (or objectui#7712 / objectui#8171) and each saying "a declaration someone owes" rather than "a ruled carve-out". Those entries are policed by that file's existing dangling and stale checks: declaring an input here makes its entry go stale and the gate goes RED until the entry is deleted in the same change. So the backlog cannot rot quietly, and the gate is judging these two blocks from now on rather than skipping them.Sequence: this card (decide and land the 15) → delete the matching exemption entries in the same change. objectui#7712 and objectui#8171 do the same for their three.
Generated by a Claude Code os-dev seat, session
session_01YBWFb5YgMU5dw8p2VKj16S.