You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(spec): `FormSection.pane` — explicit split-pane placement (objectui#2153 follow-up)
A `type: 'split'` form view had no way to say which pane a section renders in:
the renderer hardcoded "first section left, everything else right". That
positional rule is invisible in the metadata, so reordering sections silently
moved them across the divider, and an author (human or AI) could not place two
sections on the left at all.
FormSectionSchema gains an optional `pane: 'primary' | 'secondary'`:
- explicit and PER SECTION, so placement survives reordering and an agent
editing the view can see — and must preserve — where each section lives;
- omitted → the legacy positional rule (first section primary, others
secondary), so keyless metadata keeps its exact layout;
- split-only, enforced loudly: a FormViewSchema refinement rejects `pane` on
any other form type at parse (legacy `groups` alias and defaulted
`type: 'simple'` included). "Accepted but ignored" is the failure mode this
key must never have — a silent no-op reads as working, especially to an AI
author. Verified that zod 4 keeps refinements through `.extend()`, so the
flattened runtime-overlay variant in ViewMetadataSchema enforces it too;
- strict two-value enum — a typo ('left') is a parse error, not free text.
The 'split' enum comment claimed "Master-Detail split"; master-detail already
has two homes (`subforms` on the form, related lists on record pages), so the
comment now states split's non-redundant meaning: side-by-side resizable panes
with sections placed via `section.pane`.
The showcase task form's `split` view declared a single section — which renders
as a plain, unsplit form — and now demonstrates the feature: two sections with
explicit panes. `authorable-surface.json` regenerated (one new entry).
Renderer support ships in ObjectUI (SplitForm → FormSchema.fieldPanes, whose
pane keys are already named primary/secondary — a 1:1 mapping).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs(spec): regenerate the view reference for FormSection.pane
check:docs gates generated reference docs against the spec; the new key needs
its generated row committed alongside the schema change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
0 commit comments