Skip to content

finding(app-shell,types): the view-level titleField is undeclared on BOTH faces — the spec refuses it by name, this repo's mirror accepts it only via .passthrough(), and it is live #8367

Description

@os-justin

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 / titleField368 hits, top 15 read, not an exhaustive sweep. Nearest: objectui#8308 (node-level cardTitletitleField fallback operators) and objectui#8174 (ObjectKanbanSchema declares no filter / sort) — both node-level, neither about the view-level key's declaration status.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions