docs(plugin-form): object-master-detail-form's fields description says it bounds what is drawn; Save also writes seeded initialValues (objectui#11114) - #11149
Conversation
…s it bounds what is drawn; Save also writes seeded initialValues (objectui#11114) The registration called `fields` "the submitted set", but Save's parent leg also writes a parent value seeded through `initialValues` / `initialData` that `fields` does not list. The triage ruling keeps that behaviour (it is how a hidden parent key reaches a record) and corrects the text: `fields` bounds what the form draws and edits, and on a create the submitted set is the drawn fields plus any seeded value. - index.tsx: the `fields` input's description says so, and that a seed for an undeclared, server-owned, computed or read-only field is still stripped. - topLevelFieldsWarnCoverage-8847: the pin keeps its direction and assertion; its header bullet and inline comment now cite the ruled behaviour instead of calling it handed back. - ObjectForm.tsx: the comment beside the sections/fields intersection made the same claim about the pool; comment only. - changeset for @object-ui/plugin-form (patch). Claude-Session: https://claude.ai/code/session_011p7ikEivgXefNDaE5S5Uec Co-authored-by: Claude <noreply@anthropic.com>
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: Inputs: card objectui#11114 (body, triage 5893817922, claim 5899087766, os-dev-report 5899423413), PR objectui#11149 (body, 4-file list, net diff against Check-runs on the head: 43 latest runs, every one on this head and every one completed at 21:47Z — 40 ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #11114
Clause-②: no
The
object-master-detail-formregistration called itsfieldsinput "the submitted set". Save writes more than that: a parent value seeded throughinitialValues(orinitialData) thatfieldsdoes not list is written too. The triage ruling on the card (comment 5893817922) keeps the behaviour and corrects the text, so that is what this PR does. ⛔ No behaviour changes; the parent leg is not filtered tofields.What changed
packages/plugin-form/src/index.tsx: thefieldsinput's description. Only the clause "this key is also the parent pool for values, create defaults and the submitted set" is replaced; the rest of the sentence is byte-identical. It now saysfieldsbounds what the form DRAWS and edits, and that on a create the submitted set is the drawn fields plus any parent value seeded throughinitialValues(or its alternate spellinginitialData), drawn or not. It adds one qualifier the probes below measured: a seed for an undeclared, server-owned, computed or read-only field is still stripped, as on any save.packages/plugin-form/src/__tests__/topLevelFieldsWarnCoverage-8847.test.tsx: the pin 「the key bounds what is DRAWN, not what the parent leg WRITES」 keeps its direction, its title and its assertion. Its header bullet and the inline comment above the assertion now cite the ruled behaviour instead of describing it as "handed back".packages/plugin-form/src/ObjectForm.tsx: comment only, see the surface note below..changeset/11114-master-detail-fields-text.md:@object-ui/plugin-formpatch.Measured at
385ebc5c6(the dispatch's mechanism assumptions)MasterDetailFormmounted in create mode,fields: ['status'], the create Save clicked, the batch's parent leg read fromdataSource.batchTransaction(throwaway probe file, deleted; not committed):initialValues: { status, note }gives a parent leg carryingnote, which is not drawn. Same withinitialDataas the seed.readonlyfield, aformulafield andowner_idare dropped.details[].totalFieldwrites its rollup onto the parent whateverfieldslists (total: 0in the probe).memowith a staticdefaultValuethatfieldsdoes not list, and that nobody seeded, is written (memo: 'object-default'). This is the dispatch's "different defect" question; it is reported on the card, not changed or described here.object-master-detail-formis in the public block tier, andmanifestFromConfigscopies each input'sdescriptionverbatim. A throwaway probe over the real registry read the plugin-form manifest entry after this change: the new sentence present, the old clause absent, and an unchanged phrase of the same description ("the two INTERSECT") present as the positive control. No generated file in this repo carries the text (git grepfor the description's opening words findsindex.tsxonly), so nothing here is regenerated. The pinnedsdui.manifest.jsoncopy that objectstack holds follows at its own sync.Surface note
The claimed file surface was
index.tsx, the 8847 pin and a changeset. One file is beyond it: the comment inObjectForm.tsxbeside the sections/fields intersection saidfieldsis "the parent field pool for values, create defaults and the submitted set". That is the same false claim in the implementation, and the description's own wording derives from it. It is corrected in place under the bounded exemption, with all four conditions checked: same defect class; a mechanical comment rewording; no open PR touchesObjectForm.tsx(the open PR list's file sets were read); no gate family beyond this PR's. The surface is supplemented here rather than in a new claim.Not touched (Acceptance notes)
apps/console/src/__tests__/registry-inputs-spec-parity.test.ts: the ledger rowpins:forobject-master-detail-form.fieldsstill says "the registration calls this key the parent pool for 'the submitted set'", which is now stale, and so does the historical slice-18 docblock. Left alone because open PR objectui#11086 holds that file. Both belong to whoever next edits it.sectionEntryOverrides-10475.test.tsxquotes the earlier card wording "values, create defaults and the submitted set stay pool-driven" inside a quotation; not edited.8738-object-form-fields-description.mdnamesObjectForm.tsx(flagged bycheck-changeset-claims, report-only); read, still true.initialValuesinput's own description ("Values to prefill on the PARENT record increatemode.") is unchanged; thefieldsdescription now carries the fact.Verification
pnpm exec vitest runon the 8847 pin plus the three sibling master-detail member files: 4 files, 29 tests passed.pnpm exec vitest runon the console's registry consumers (registry-inputs-spec-parity,masterDetailFormTypeManifest,masterDetailFormI18nLabelManifest,public-contract,public-block-binding-reach): 5 files, 257 tests passed.pnpm --filter @object-ui/plugin-form type-checkafterpnpm --workspace-concurrency=2 --filter '@object-ui/plugin-form^...' build(the dependency closure): exit 0.pnpm exec eslint --no-inline-configon the three changed source files: 3 files linted, 0 errors, 86 warnings, none on a changed line.check-changeset-presence,check-control-bytes,check:new-line-citations,changeset:check: exit 0 each, re-run at813b8826ffor the first three.Generated by Claude Code