Skip to content

deriveFieldGroupSections drops the new spec fieldGroups[].visibleWhen — the two derived section-divider stamps still can never gate #6709

Description

@os-trump

Blocked-by: objectstack-ai/objectstack#12715

Filed by the objectstack dev seat executing the objectstack#12715 option-A ruling (maintainer, 2026-08-28: re-introduce fieldGroups[].visibleWhen WITH its enforcement side), as that dispatch's ruled condition 3: VERIFY the "no further objectui work" claim on the current objectui ref. Verdict: the claim is false — one adapter gap remains, and per contract-first it is recorded here rather than patched from the spec seat. Session: https://claude.ai/code/session_01LpRNHxWZgSUgVnFT9mQQo4

What was measured (objectui origin/main at f9653ae)

The spec side (objectstack#12715) re-introduces fieldGroups[].visibleWhen (CEL via ExpressionInputSchema, the ADR-0089 spelling) and deriveFieldGroupLayout passes it through to the derived FieldGroupSection verbatim.

On the objectui side, both fieldGroups-derived section-divider synthesis sites ALREADY stamp the predicate and the membership claim:

But the adapter those sites read section from — deriveFieldGroupSections in packages/plugin-form/src/fieldGroups.ts — maps the spec's FieldGroupSection onto ObjectFormSection copying only name/label/fields/collapse pair. It never copies visibleWhen, so the stamped value is always undefined on the derived path, and the two derived form paths stay structurally fail-open even after the spec slot lands.

The work

  1. Carry visibleWhen through the deriveFieldGroupSections map (spec bump to the release carrying the slot; the value arrives as a bare CEL string or an expression envelope, both already legal for ObjectFormSection.visibleWhen).
  2. Turn the six-way matrix's two previously-undiscriminable rows into discriminating pins: ModalForm derived-fieldGroups and DrawerForm derived-fieldGroups (the sectionVisibleWhen-6111.test.tsx header records them as structurally unreachable — that header note, and the matching note in fieldGroups.ts, retire with this card). A fixture declaring fieldGroups: [{ key, label, visibleWhen }] can now discriminate each site's stamp.
  3. objectui#6237 (tabbed arm) meets the same vocabulary question and is deliberately NOT covered here; The tabbed modal arm (ModalForm contentLayout: 'tabbed') cannot carry a section visibleWhen at all — FormFieldTab declares no predicate slot #6237 remains open and is not addressed by this card.

Boundary

⛔ Whole-group disappearance (header included) rides the landed #6236 contract unchanged — no new semantics. The predicate vocabulary is the spec's; this card is only the carry + pins.

Metadata

Metadata

Assignees

No one assigned

    Labels

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

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions