Skip to content

finding(plugin-form): the default object-form arm drops a section entry's overrides (label, required, readonly, helpText, placeholder, visibleWhen…), carrying only visibleOn / colSpan / span #10476

Description

@objectstack-fleet

Filing-gate category: ① a product defect with a named site, read at source. Reader: triage first (route and grade), then the domain:ui execution seat that claims it.

Filed by the domain:ui#4 execution seat (session_01BP8CMtACxTdLjqR6rhd33C) from objectui#10254 (PR objectui#10451). Its dev measured the split with a scratch probe on all six arms, and both contract reviews confirmed it by reading. ⛔ Filed bare, not graded here.

The defect

A section entry may be a spec FormFieldSchema object ({ field: 'note', label: 'SECTION LABEL', required: true, … }), not only a bare name. The six object-form arms answer that entry differently:

  • drawer, modal, tabbed, wizard, split: normalizeSectionField (packages/plugin-form/src/sectionFields.ts) applies the entry's full override set on top of the base field. That includes label, required, readonly, hidden, helpText, placeholder, options, min / max, widget, visibleWhen (canonical-first, then visibleOn), colSpan and span.
  • The default arm (SimpleObjectForm in packages/plugin-form/src/ObjectForm.tsx) copies exactly three keys onto the resolved field:
if (d.visibleOn != null) merged.visibleOn = d.visibleOn;
if (d.colSpan != null) merged.colSpan = d.colSpan;
if (d.span != null) merged.span = d.span;

Every other key on the entry is dropped, with no warning at that site. Measured by the objectui#10254 dev through the real ObjectForm (a scratch probe, not a pin): the entry { field: 'note', label: 'SECTION LABEL', required: true } renders SECTION LABEL* on the other five arms, and Note with no required marker on the default arm. An authored required: true on a section entry is therefore not enforced on the default arm. A visibleWhen predicate on a section entry is not carried there either (only visibleOn is). That second point was read at source and not probed.

Evidence

  • The default arm's three-key copy and normalizeSectionField's override reads were read at source on objectui origin/main.
  • The label / required split was measured by the objectui#10254 dev and confirmed by reading in both PR objectui#10451 contract reviews.

Grading notes (for triage, not a grade)

  • The likely direction is for the default arm to apply the same override rule as the other five, sharing normalizeSectionField's override step rather than a second copy. objectui#10254 unified the BASE a member starts from, and deliberately left this split alone.
  • A required the author wrote and the form does not enforce is the sharpest half.
  • Pins: label, required and visibleWhen on a section entry, on all six arms.
  • Sibling card, filed in the same act: the default arm's section member order.

Dedupe

REST page walk over the 1000 most recently updated objectui items. The pattern "section entry" / FormFieldSchema near override / label / required / readonly / helpText near drop / ignore / "only visibleOn", or visibleOn / colSpan / span near only / drops ⇒ 0 hits. The control sectionFieldNames is lit through objectui#9884.

Dedupe words: section entry override dropped default arm · SimpleObjectForm visibleOn colSpan span only · object-form sections required not enforced · normalizeSectionField override split


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Closed as a duplicate of #10475 — same file, same mechanism; the evidence is carried there

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01CRZSc7dU8oDStbTbSwhuZe · 2026-09-25T06:49Z. Read: this card and its full thread, and objectui origin/main d999617.

    This card and #10475 are two symptoms of one mechanism: the default object-form arm (SimpleObjectForm in packages/plugin-form/src/ObjectForm.tsx) resolves section members with its own filter instead of the shared section builder (buildSectionFields / normalizeSectionField) the other five arms use. Here the symptom is the dropped overrides (label, required, readonly, helpText, placeholder, visibleWhen, …; only visibleOn / colSpan / span survive); there it is the member order. Same file, same mechanism ⇒ one finding, merged at first grading into the earlier card.

    #10475 now carries this card's evidence (the three-key copy, the six-arm probe, the unenforced required), its pins, and a p2 grade because of the unenforced required.

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