Blocked-by: objectstack-ai/objectstack#16894
⛔ RULED and now BLOCKED — the options below are HISTORY, ⛔ not a live fork. Ruling A was recorded by the director seat (decision batch #87, comment 5582071618) and confirmed by the maintainer (5582246697, verbatim 「批 #87 同意」): titleField is declared upstream on the spec's KanbanConfigSchema, and ⛔ this repo never declares a key the spec refuses by name. Option C was measured unavailable; option B was refused as a class. The upstream card is objectstack-ai/objectstack#16894, filed 2026-09-08T14:5xZ by the domain:spec @ objectui seat.
⚠️ The unblock criterion is installability, ⛔ not "the upstream card merged": this card waits for a released @objectstack/spec carrying the key and this repo's pin moved onto it. Only then does the mirror declare titleField as a real member, .passthrough() stop carrying it, and PR #8356's pinned refused set narrow to exactly ['cardFields'] — ⛔ that pin is never widened.
Filed by the domain:ui PM seat (session_01YBWFb5YgMU5dw8p2VKj16S) on behalf of the objectui#8213 dev, who measured it while landing PR #8356 and could not file it (search_issues rate-limited on all three attempts). ⛔ Not claimed.
What
The view-level titleField in the kanban config is declared nowhere:
- The spec refuses it by name.
KanbanConfigSchema from @objectstack/spec declares only groupByField, summarizeField and columns. Measured on the installed 17.3.0 with both controls firing on the same call shape: a bogus key draws unrecognized_keys (the parser can refuse) and a canonical config draws none (so a refusal is about the name, not the probe shape).
- This repo's own mirror accepts it only through
.passthrough() — i.e. by not looking. Contrast cardFields, which is a declared deprecated alias of the spec's columns. The two get different treatment for no stated reason.
- And it is live.
kanbanViewOptions floors it at 'name', and ListView forwards it onto the generated object-kanban node.
Measured directly on the producer's output during PR #8356:
kanbanViewOptions output, unrecognized_keys against KanbanConfigSchema
BEFORE #8356 → [groupBy, titleField, cardFields]
AFTER #8356 → [titleField, cardFields]
Same shape as objectui#8213, opposite disposition
objectui#8213's groupBy was drift — nothing read it, so it was deleted. titleField is the mirror image: the spec refuses it, but the renderer genuinely uses it. So it needs a home, not a deletion.
⚠️ This is why PR #8356's pin asserts the honest narrower claim — that the producer's refused set is exactly ['cardFields', 'titleField'] — rather than the "emits nothing the spec refuses" form its own dispatch brief originally specified. That stronger form was measured unreachable: it would have been red after the fix too. The pin as written still reddens for groupBy and additionally reddens for any fourth undeclared key, so this card cannot be silently widened past.
Options — ⛔ SUPERSEDED by ruling A above, retained for the record
- A — promote upstream. Add
titleField to the spec's KanbanConfigSchema. Correct if it is meant to be authorable at view level; grows the spec's surface for every consumer. ⭐ RULED. And the "grows the surface" framing was measured too pessimistic — 4 of the 5 item-titled view configs already declare exactly this key under exactly this name and type, so A is a regularisation.
- B — declare it in this repo's mirror as a real member, the way
CalendarConfig.defaultView is handled, so the passthrough stops being what carries it. Keeps it local and honest, but publishes a key the spec still refuses — the same tension objectui#8221 is stuck on for sort. ⛔ REFUSED as a class.
- C — declare it as a deprecated alias of whatever spec key covers the concept, the way
cardFields aliases columns — if such a key exists. Needs a measurement first: does one? ⛔ MEASURED UNAVAILABLE (5574629565): no alias target exists on the kanban config, and the deprecation direction is inverted — titleField is the spec's own canonical spelling on four siblings, so 'Deprecated alias for X' would be false in both halves.
⛔ Not an option: leaving it riding .passthrough(). That is the declared-vs-enforced gap this repo has been closing card by card.
Also recorded, deliberately not filed separately
packages/data-objectstack/src/updateView.draft.test.ts:38 authors kanban: { columns: [...], groupBy: 'status' } in a draft-view payload fixture — off-spec metadata, inert for that test's subject (metadata addressing), and no longer what any producer writes. Cosmetic; noted here rather than given a card of its own.
Related
objectui#8213 / PR #8356 (where it was measured) · objectui#8221 (the same declared-vs-enforced tension for sort) · objectui#8174 · objectui#8308 · objectui#7772
Dedup
⚠️ Bounded, declared rather than implied. The reporting dev could not search (rate limit). This seat ran one search_issues over open issues for stripRetiredBlockProps / RETIRED_BLOCK_PROP_KEYS / "read door" / restKanban / titleField — 368 hits, top 15 read, not an exhaustive sweep. Nearest: objectui#8308 (node-level cardTitle → titleField fallback operators) and objectui#8174 (ObjectKanbanSchema declares no filter / sort) — both node-level, neither about the view-level key's declaration status.
Blocked-by: objectstack-ai/objectstack#16894
⛔ RULED and now BLOCKED — the options below are HISTORY, ⛔ not a live fork. Ruling A was recorded by the director seat (decision batch #87, comment
5582071618) and confirmed by the maintainer (5582246697, verbatim 「批 #87 同意」):titleFieldis declared upstream on the spec'sKanbanConfigSchema, and ⛔ this repo never declares a key the spec refuses by name. Option C was measured unavailable; option B was refused as a class. The upstream card is objectstack-ai/objectstack#16894, filed 2026-09-08T14:5xZ by thedomain:spec@ objectui seat.@objectstack/speccarrying the key and this repo's pin moved onto it. Only then does the mirror declaretitleFieldas a real member,.passthrough()stop carrying it, and PR #8356's pinned refused set narrow to exactly['cardFields']— ⛔ that pin is never widened.Filed by the
domain:uiPM seat (session_01YBWFb5YgMU5dw8p2VKj16S) on behalf of the objectui#8213 dev, who measured it while landing PR #8356 and could not file it (search_issuesrate-limited on all three attempts). ⛔ Not claimed.What
The view-level
titleFieldin the kanban config is declared nowhere:KanbanConfigSchemafrom@objectstack/specdeclares onlygroupByField,summarizeFieldandcolumns. Measured on the installed 17.3.0 with both controls firing on the same call shape: a bogus key drawsunrecognized_keys(the parser can refuse) and a canonical config draws none (so a refusal is about the name, not the probe shape)..passthrough()— i.e. by not looking. ContrastcardFields, which is a declared deprecated alias of the spec'scolumns. The two get different treatment for no stated reason.kanbanViewOptionsfloors it at'name', andListViewforwards it onto the generatedobject-kanbannode.Measured directly on the producer's output during PR #8356:
Same shape as objectui#8213, opposite disposition
objectui#8213's
groupBywas drift — nothing read it, so it was deleted.titleFieldis the mirror image: the spec refuses it, but the renderer genuinely uses it. So it needs a home, not a deletion.['cardFields', 'titleField']— rather than the "emits nothing the spec refuses" form its own dispatch brief originally specified. That stronger form was measured unreachable: it would have been red after the fix too. The pin as written still reddens forgroupByand additionally reddens for any fourth undeclared key, so this card cannot be silently widened past.Options — ⛔ SUPERSEDED by ruling A above, retained for the record
titleFieldto the spec'sKanbanConfigSchema. Correct if it is meant to be authorable at view level; grows the spec's surface for every consumer. ⭐ RULED. And the "grows the surface" framing was measured too pessimistic — 4 of the 5 item-titled view configs already declare exactly this key under exactly this name and type, so A is a regularisation.CalendarConfig.defaultViewis handled, so the passthrough stops being what carries it. Keeps it local and honest, but publishes a key the spec still refuses — the same tension objectui#8221 is stuck on forsort. ⛔ REFUSED as a class.cardFieldsaliasescolumns— if such a key exists. Needs a measurement first: does one? ⛔ MEASURED UNAVAILABLE (5574629565): no alias target exists on the kanban config, and the deprecation direction is inverted —titleFieldis the spec's own canonical spelling on four siblings, so'Deprecated alias for X'would be false in both halves.⛔ Not an option: leaving it riding
.passthrough(). That is the declared-vs-enforced gap this repo has been closing card by card.Also recorded, deliberately not filed separately
packages/data-objectstack/src/updateView.draft.test.ts:38authorskanban: { columns: [...], groupBy: 'status' }in a draft-view payload fixture — off-spec metadata, inert for that test's subject (metadata addressing), and no longer what any producer writes. Cosmetic; noted here rather than given a card of its own.Related
objectui#8213 / PR #8356 (where it was measured) · objectui#8221 (the same declared-vs-enforced tension for
sort) · objectui#8174 · objectui#8308 · objectui#7772Dedup
search_issuesover open issues forstripRetiredBlockProps/RETIRED_BLOCK_PROP_KEYS/"read door"/restKanban/titleField— 368 hits, top 15 read, not an exhaustive sweep. Nearest: objectui#8308 (node-levelcardTitle→titleFieldfallback operators) and objectui#8174 (ObjectKanbanSchemadeclares nofilter/sort) — both node-level, neither about the view-level key's declaration status.