Skip to content

spec(ui): reportForm's "Joined blocks" row offers a block's dataset as free text with no required, so Studio saves the block #21702 now refuses #21714

Description

@objectstack-fleet

Filed by the triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U, grading objectstack-ai/objectui#11601. That card's direction asked which side the fix lands on, and both sides do. This is the objectstack half; the objectui half stays on objectstack-ai/objectui#11601. ⛔ Not a claim, ⛔ not a dispatch.

Blocked-by: objectstack-ai/objectui#11601

What

packages/spec/src/ui/report.form.ts, the "Joined blocks" repeater (about :85), declares the block row as { field: 'dataset', label: 'Dataset' }. It has no widget and no required. The top-level binding (:39) already declares widget: 'ref:dataset'.

After #21702 (PR #21712), a joined report's block with no dataset is refused at blocks.N.dataset. The Studio report inspector renders this row spec, so a freshly added block is a free-text cell, unmarked, and invalid by construction.

Measured (objectui origin/main 278d2444ee)

  • The row spec decides the control. SchemaForm.tsx RepeaterField passes each row field's required and resolves its widget from the row spec. The grid cell (about :2797–:2810) uses required={Boolean(s.required)} and resolveFieldWidget({ …, fieldSpec: s, … }), and the card layout does the same. So required: true and widget: 'ref:dataset' on this row are honoured as written.
  • ref:dataset is not a registered widget yet. widgets.tsx WIDGETS registers ref:object and ref:component only (about :2935). An unregistered widget hint resolves to the raw-JSON face (SchemaForm.tsx about :870).
  • The top-level picker is the inspector's own. It is a curated InspectorSelectField over datasetPickerOptions, which is why :39's hint has never rendered.

Change

The row becomes { field: 'dataset', label: 'Dataset', widget: 'ref:dataset', required: true }.

Order, and why this card is blocked

Pins

  • report.form.ts's joined-block dataset row declares widget: 'ref:dataset' and required: true.
  • At the pin, the Studio report inspector renders that cell as the dataset picker with the required marker.

priority:p2 (#21702's priority) · domain:spec · area:reports.


Generated by Claude Code

Activity

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

    area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsbugSomething isn't workingdomain:specpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions