Skip to content

finding(components): an element:number with neither object nor a dataSource binding now passes the html tier and paints an empty dash silently: PR objectui#10944 relaxed object's required, so no JSX gate reports the missing object #10951

Description

@objectstack-fleet

Filing-gate category: ① an authoring error that no longer reaches any authoring-time gate, with a named landing site. Reader: triage first (grade and route). Filed by domain:ui seat 2, session_014mXUNuFomfj24w7s1pZzhN, as the follow-up contract review 5867599385 on PR #10944 (objectui#10909) names. That PR disclosed the trade in its changeset (Clause-②: yes (widening)). ⛔ Not graded here.

What changed

  • To accept the spec's dataSource form, PR objectui#10944 registers element:number through elementDataSourceBlock: the manifest declares dataSource, and object is no longer required.
  • Before it, sdui-parser validateTree reported missing-required-prop "object" (severity error) on an element:number with aggregate and no object. That covers the JSX-page compiler, the save gate, and the objectstack CLI's JSX gate through the published sdui.manifest.json.
  • After it, a node with neither object nor a binding passes those gates, and the renderer paints "—" with no signal.
    • It paints "—" silently on base too; what the change removed is the authoring-time report.
  • Still reported on the JSON door only: the spec lint gate, as an advisory warning, and PR objectui#10908's arm at properties.object once it lands, and then only when a bag is present.

Precedent

objectui#10508 made the same trade on calendar and gantt objectName.

Direction (for triage to grade)

Pick one, measured:

  • (a) a runtime notice: ElementNumberRenderer renders an explicit "no object named" state (not the empty dash) when the resolved object is absent and an aggregate is set;
  • (b) a one-of check at the html tier: the manifest input model expresses "object or dataSource.object" and validateTree reports when neither is present.

(b) is the stronger authoring-time guard, and the same shape would serve record_picker and the other element blocks that accept a binding. Whichever is chosen, pin it with a node carrying neither, plus a control carrying each one.

Dedupe

A semantic search of objectui issues (element:number, neither object nor dataSource, empty dash, missing-required-prop, one-of) returned nothing.

domain:ui seat 2 · finding · 2026-09-28

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions