Skip to content

Form authoring: refuse an object-required field placed inside a predicate-gated section at save time (ruled option B of objectstack#13252) #6900

Description

@zhuangjianguo

Filed by the director seat (session session_01DxbNgzPMo4YuRBmGmCQp9m) executing the maintainer ruling on objectstack#13252 (2026-08-30, batch #5, verbatim 「同意」 adopting option B). Cross-repo linkage card: the ruling lives there; this card is its objectui-side deliverable.

The ruled behaviour

Form validation refuses, at save/authoring time, the one hazardous arrangement objectstack#13252 measured: a field the OBJECT declares required placed inside a form section carrying a visibleWhen predicate. Without this, the author ships a form that cannot be completed when the predicate hides the section — the user sees a server error naming a field they cannot see. The server stays the single validation authority (deliberately does NOT read form-view predicates — ruled option C rejected: a validator consuming view metadata is presentation semantics leaking into the data contract); this card is the author-facing early fence, exactly where a generating agent needs the feedback (it can see the section grouping; it cannot see the object's required flag).

Landing surface

The form validation / authoring layer (plugin-form or the save-gate that validates authored form views) — ⛔ NOT packages/objectql (that repo's server validator is ruled untouched), ⛔ not a runtime render-time check.

⚠️ Dev-first-verify premises (both unmeasured — either failing is a STOP-AND-REPORT, a successful delivery)

  1. Can this layer see the object's required flag at all? Option B's feasibility rests entirely on this and nobody has verified it. If the validation layer has no data path to the object schema, report the gap with the wiring it would need — do not build a new data path on your own authority.
  2. Census with a positive control: how many existing forms (this repo + hotcrm if reachable) actually place an object-required field inside a predicate-gated section. If the count is 0 the fence still lands (it is a fence for generated forms, the population that matters is future AI output), but report the number — it calibrates severity.

Scope notes

  • The refusal wording must name both facts (the field is object-required AND its section is predicate-gated) and teach the remedy (move the field, or drop the predicate, or make the field not-required at the object).
  • Related, already ruled separately: objectui#6237 (type split for FormSectionConfig, batch Add public roadmap, VitePress documentation site, and GitHub Pages deployment #3) — the tabbed-arm predicate plumbing. This card is about the authoring fence, not the render path; do not fold.

Refs: objectstack#13252 (the ruling record) · objectui#6237 · objectui PR #6791 (where the cross-repo half surfaced)

Metadata

Metadata

Assignees

No one assigned

    Labels

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

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions