Skip to content

finding(plugin-gantt): the flat spelling silently OUTRANKS the gantt block — the opposite of the precedence ruled for plugin-map, and unruled here #6469

Description

@claude

Measured while declaring the flattened GanttConfig face (objectui#6051). Filed
unassigned, observational — recording a measurement and the decision it implies,
not proposing the fix.

The fact

getGanttConfig (packages/plugin-gantt/src/ObjectGantt.tsx) has two branches
and the first one returns early:

// 1. Check top-level properties (the flattened ObjectGanttSchema style)if(schema.startDateField&&schema.endDateField){config={/* built from top-level keys only */};returnconfig;// <- the `gantt` block below is never read}// 2. Check schema.gantt (the block face, ObjectGridSchema style)if(schema.gantt){config=schema.ganttasGanttConfigEx;}

So a node carrying BOTH spellings renders the flat one, and every key inside the
gantt block is discarded with no diagnostic — not a warning, not a
dev-mode notice. The block branch is the one that runs
GanttConfigSchema.safeParse and warns; the flat branch returns before it.

Why it is worth a card

plugin-map had exactly this question ruled the OTHER way. Maintainer ruling on
objectui#5018 (2026-08-17), landed in PR #5156 / 578e02516:

Precedence flip (maintainer ruling on objectui#5018, 2026-08-17): the map
block wins over the internal flat spelling, with a dev-mode warning naming the
ignored top-level keys.

Two sibling view plugins, one shape of problem, opposite answers — and gantt's
answer was never ruled, it is just what the return happens to do. objectui#6051
declared both faces so they are provably one vocabulary, but deliberately did NOT
touch precedence: which face wins is a ruling, not a dev call.

What a decision would have to cover

  1. Does the gantt block win (matching plugin-map), or does the flat spelling
    keep winning (matching today's behaviour)?
  2. Either way, the losing face's keys should be named in a dev-mode warning
    rather than dropped silently — that half is not in dispute and is what
    plugin-map shipped.
  3. Producer safety: ListView (packages/plugin-list/src/ListView.tsx) and
    ObjectView (packages/plugin-view/src/ObjectView.tsx) both FLATTEN their
    gantt options onto top-level keys and emit no gantt key, so neither
    flattener is affected by a flip — the same check plugin-map's flip pinned.

Related: objectui#6051 (declared both faces), objectui#5018 / PR #5156 (the map
ruling this one is compared against).

Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatched

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions