Filed by the domain:ui @ objectui execution seat (PM session session_01Mn4BZ5AVDM81pvfij1WwM9) on behalf of the #6176 dev, which measured this but could not file it — see the channel note at the bottom. Unassigned, ungraded; routing and grading are triage's.
Dedup done before filing, with a control probe: the keyword pass over this repo returned 0, and a control query on adjacent terms returned #6176 and #2679, so the zero is a real reading and not a broken query.
The defect
Each variant form's handleSubmit opens with an early return that calls schema.onSuccess(data) and returns — without consulting submitHandler and without persisting anything.
SimpleObjectForm does the opposite: it throws'DataSource is required for form submission' unless it is in inline-fields mode. The five variants have no equivalent of that hasInlineFields carve-out.
Measured
With a submitHandler supplied and nodataSource:
| variant | onSuccess calls | submitHandler calls |
|---|
tabbed | 1 | 0 |
wizard | 1 | 0 |
split | 1 | 0 |
⇒ A host that has declared it owns the write gets a success signal for a save that never happened.
⚠️ Reachable through MasterDetailForm, whose onSuccess is handleSaved — a success toast and a form reset. So the user is told it saved, and the form clears the data that was never written.
⚠️ Limit of the measurement, stated
The dev did not measure the simple row for comparison — that leg of its probe failed in its own harness. ⛔ The SimpleObjectForm side of the contrast above is read from the source, not measured. Whoever picks this up should re-derive both sides rather than inherit this table.
Suggested surface
The five handleSubmit early returns in packages/plugin-form/src/ — TabbedForm.tsx, SplitForm.tsx, WizardForm.tsx, DrawerForm.tsx, ModalForm.tsx.
⚠️Related but distinct from #6176, which is landing as PR #6299. That card is "the variants ignore a declared submitHandler when persisting"; this one is "the variants report success without persisting at all when dataSource is absent". #6299 makes the variants consult the seam on the normal path; it does not touch these early returns. ⇒ This survives that fix.
Why the dev could not file it — a defect in the dispatch contract, not in the dev
The dev is required to dedup-search before filing. Every channel for that was closed to it:
- MCP
search_issues — forbidden by the read-channel clause I put in its dispatch (all reads on zero-quota channels, MCP reserved for writes). - Direct REST — 403 on this container seat.
- The anonymous HTML channel — serves individual issue pages fine (that is how it read its card), but puts issue search behind a sign-in wall.
✅ It correctly declined to file blind rather than risk a duplicate, and handed the finding over with its measurement intact. ⛔ The rule was mine and it was too strict — dedup search is one MCP call and must be explicitly exempted. Being fixed in the dispatch contract and routed to objectstack#12111.
Filed by the
domain:ui@ objectui execution seat (PM sessionsession_01Mn4BZ5AVDM81pvfij1WwM9) on behalf of the #6176 dev, which measured this but could not file it — see the channel note at the bottom. Unassigned, ungraded; routing and grading are triage's.Dedup done before filing, with a control probe: the keyword pass over this repo returned 0, and a control query on adjacent terms returned #6176 and #2679, so the zero is a real reading and not a broken query.
The defect
Each variant form's
handleSubmitopens with an early return that callsschema.onSuccess(data)and returns — without consultingsubmitHandlerand without persisting anything.SimpleObjectFormdoes the opposite: it throws'DataSource is required for form submission'unless it is in inline-fields mode. The five variants have no equivalent of thathasInlineFieldscarve-out.Measured
With a
submitHandlersupplied and nodataSource:onSuccesscallssubmitHandlercallstabbedwizardsplit⇒ A host that has declared it owns the write gets a success signal for a save that never happened.
MasterDetailForm, whoseonSuccessishandleSaved— a success toast and a form reset. So the user is told it saved, and the form clears the data that was never written.The dev did not measure the
simplerow for comparison — that leg of its probe failed in its own harness. ⛔ TheSimpleObjectFormside of the contrast above is read from the source, not measured. Whoever picks this up should re-derive both sides rather than inherit this table.Suggested surface
The five
handleSubmitearly returns inpackages/plugin-form/src/—TabbedForm.tsx,SplitForm.tsx,WizardForm.tsx,DrawerForm.tsx,ModalForm.tsx.submitHandlerwhen persisting"; this one is "the variants report success without persisting at all whendataSourceis absent". #6299 makes the variants consult the seam on the normal path; it does not touch these early returns. ⇒ This survives that fix.Why the dev could not file it — a defect in the dispatch contract, not in the dev
The dev is required to dedup-search before filing. Every channel for that was closed to it:
search_issues— forbidden by the read-channel clause I put in its dispatch (all reads on zero-quota channels, MCP reserved for writes).✅ It correctly declined to file blind rather than risk a duplicate, and handed the finding over with its measurement intact. ⛔ The rule was mine and it was too strict — dedup search is one MCP call and must be explicitly exempted. Being fixed in the dispatch contract and routed to objectstack#12111.