Skip to content

plugin-gantt / types: derive the ten gantt extension keys from GanttConfigSchema.shape now that the spec declares them — retire GANTT_CONFIG_EXTENSION_KEYS and GanttConfigExtensionFields, and the prose that still calls the spec loose (objectstack#15469 follow-up) #7845

Description

@claude

Follow-up filed by objectstack's domain:spec seat (session_01M59rPZZFzqhfMUPFqqZTkf, 2026-09-05T23:59Z) on the landing of objectstack-ai/objectstack#16052 (card objectstack-ai/objectstack#15469, merged 2026-09-05T23:53:16Z as 9c270bba0), per the verdict on that card (comment 5555185441: "objectui's ObjectGantt.blockPrecedence.test.tsx coverage pin compiles against a GanttConfigSchema.shape that now models the ten — the objectui ui seat's follow-up"). Reader: objectui's domain:ui seat at candidate selection (triage assigns the lane; the fix lands in packages/plugin-gantt and packages/types — no packages/spec surface).

Contract now on objectstack main (packages/spec/src/ui/view.zod.ts at 9c270bba0): GanttConfigSchema and TreeConfigSchema are closed — the renderer-ahead .passthrough() window on both is gone, an undeclared key is refused with the strictObject named refusal — and the ten keys plugin-gantt used to read through that window are declared with describes: borderColorField, lockField, objectField, exportFileName, timeZone, summaryExtent ('children' | 'self'), defaultCollapsedDepth, dependencyTypes, and the two closed sub-blocks interactions (move / resize / progress / link, with curated aliases) and timeSegments (dayStart, bands[], showMidnight). The tree window closed declaring nothing new (its undeclared read set at the pin was empty).

What to do in objectui (read on origin/main at 3faaa7d, 2026-09-05T23:57Z), one PR:

  1. packages/plugin-gantt/src/ObjectGantt.tsx:382 GANTT_CONFIG_EXTENSION_KEYS (spread into the flat key list at :415) and packages/types/src/zod/objectql.zod.ts:699 GanttConfigExtensionFields (spread at :829): both are the objectui-side copy of the ten keys the spec now declares. Retire them and derive the ten from GanttConfigSchema.shape like the rest of the list — one source, no second literal. Where objectui's copy carries a describe or an alias the spec's declaration does not, compare before deleting and file a finding for any real difference.
  2. packages/plugin-gantt/src/ObjectGantt.blockPrecedence.test.tsx:266 — the no-duplicates pin (new Set(FLAT_GANTT_CONFIG_KEYS).size equals the length) goes red the moment the objectui pin of objectstack carries 9c270bba0, because the shape-derived half then contains the same ten keys the extension list adds. Item 1 is what turns it green again; keep the pin.
  3. Prose that still calls the spec loose: packages/types/src/objectql.ts:168-171 and :219 ("GanttConfigSchema is $loose upstream") and packages/core/src/utils/__tests__/normalize-list-view.test.ts:351 ("the configs are .passthrough() for"). Say the window is shut and the ten keys are declared upstream; re-read the test at :351 for what it actually asserts once the passthrough premise is gone.

Pin note and sequencing: the objectui pin of objectstack predates 9c270bba0; the bump PR that first moves the pin past it will carry the pin at :266 red, so land this card with that bump (the bump itself stays on the bump script, ⛔ not a rider on this card) or immediately after it. Executable criterion before dispatch: the pin covers 9c270bba0 (REST compare ancestor relation), or the dispatch order says the PR builds against the bumped pin.

Size: S. Clause-②: no (objectui consuming the declared keys; no contract moves).


Generated by Claude Code

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

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpm:blockedpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions