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
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 nowidgetand norequired. The top-level binding (:39) already declareswidget: 'ref:dataset'.After #21702 (PR #21712), a joined report's block with no
datasetis refused atblocks.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/main278d2444ee)SchemaForm.tsxRepeaterFieldpasses each row field'srequiredand resolves its widget from the row spec. The grid cell (about:2797–:2810) usesrequired={Boolean(s.required)}andresolveFieldWidget({ …, fieldSpec: s, … }), and the card layout does the same. Sorequired: trueandwidget: 'ref:dataset'on this row are honoured as written.ref:datasetis not a registered widget yet.widgets.tsxWIDGETSregistersref:objectandref:componentonly (about:2935). An unregistered widget hint resolves to the raw-JSON face (SchemaForm.tsxabout:870).InspectorSelectFieldoverdatasetPickerOptions, 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
widgetline waits for objectui#11601's renderer. Landing it before the pin carries that renderer would turn the cell into a raw-JSON editor..objectui-shacarries objectui#11601's merge.required: truealone is safe today. PR feat(spec)!: a joined report refuses a block that binds no dataset, at blocks[i].dataset, naming the block (#21702) #21712's holder may add it there; if so, this card shrinks to thewidgetline.Pins
report.form.ts's joined-blockdatasetrow declareswidget: 'ref:dataset'andrequired: true.priority:p2(#21702's priority) ·domain:spec·area:reports.Generated by Claude Code