Repository navigation
docs(plugin-form): document embeddable-form fields member vocabulary - #8869
Merged
os-warren merged 1 commit intoSep 10, 2026
Merged
Conversation
…(objectui#8847) `embeddable-form`'s top-level `fields` registration input had no description, leaving the same trap #8738/#8846 already closed for `object-form`: an author writing the spec `FormFieldSchema` object (`{ field: 'note' }`, legal in `sections[].fields`) into this key resolves to no name and is silently skipped. Add the description, modelled on `object-form` and `form`'s. `EmbeddableForm` passes `config.fields` straight into `<ObjectForm>` with no `sections`, so it renders through the same `SimpleObjectForm` read site — measured with a throwaway render probe (not committed) that it already inherits route 1's `console.warn` (objectui#8738/#8859): fires once for `fields: [{ field: 'note' }]`, does not fire for `fields: ['note']`. No behaviour change. Description text only. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w
Contributor
✅ 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
|
os-warren
marked this pull request as ready for review
September 9, 2026 23:44
os-warren
deleted the
claude/issue-8847-embeddable-form-fields-description
branch
September 10, 2026 00:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #8847
What
Adds the missing
descriptiontoembeddable-form's top-levelfieldsregistration input inpackages/plugin-form/src/index.tsx, modelled on the ones already onobject-form(PR #8846) andform(PR #8859). States that members are bare field names ({ name }tolerated), and that this is not thesections[].fieldsvocabulary, which also accepts the specFormFieldSchemaobject (identity keyfield, e.g.{ field: 'note', colSpan: 2 }) — that shape resolves to no name here and is silently skipped.This is the remainder the corrected card (
issuecomment-5604654332) identified:object-master-detail-formwas never bare; the genuinely undescribed second surface wasembeddable-form.Re-derived attribution table (measured on
origin/main@42ddd7f71, independently — not copied from the card)Bare
{ name: 'fields', type: 'array' },count: 1 (before this PR). Control: 4fieldsinputs total — matcher hits everything. After this PR: 0 bare, same control of 4.Measurement — does #8859's warning reach
embeddable-form?Yes — measured, not assumed.
EmbeddableForm.tsxbuildsschema = { type: 'object-form', objectName, fields: config.fields, ... }with nosectionsand noformType, and renders it through<ObjectForm>directly (not via the component registry).ObjectForm.tsx's formType/sections routing (schema.sections?.lengthguards on every sectioned branch) falls through toSimpleObjectForm— the exactwarnUnresolvedTopLevelFieldread site — regardless of the registered type key.Confirmed with a throwaway render probe (not committed — one-time proof per this repo's reverse-verification convention):
fields: [{ field: 'note' }]→console.warnfires once, with the same message text as theobject-formpin (objectFormFieldsMembers-8071.test.tsxrow 4): "top-levelfieldsentry { field: 'note' } resolved to no field name and was skipped... NOT the same vocabulary assections[].fields..."fields: ['note'](firing control) → 0 warnings.So the description text says "silently skipped" (matching the established wording on
object-form/form/object-master-detail-form, none of which mention the warning either) rather than claiming a warning this round adds — the warning already exists via inheritance and is out of scope for this PR (Clause-② no).Why / risk
Category-(c) trap per the card family: an author (or an AI generating metadata) writing spec-legal
sections[].fieldsshape into this top-level key gets a silent drop. Pure documentation addition — no accept-set, key, shape, or arm change; no new warning;normalizeSectionField,buildFlatFields,SimpleObjectForm, andwarnUnresolvedTopLevelFieldare untouched.Tests
pnpm exec vitest run packages/plugin-form/src/__tests__/objectFormFieldsMembers-8071.test.tsx --reporter=verbose→ 8/8 passed, same test names/order asmain— assertions did not move.pnpm exec vitest run packages/plugin-form/→ 89 files / 883 passed, 1 skipped (884) — full package regression, exit 0.pnpm exec vitest run apps/console/→ 98 files / 1132 passed — sweep per dispatch requirement, exit 0.pnpm --filter '@object-ui/plugin-form' run type-check(tsc --noEmit && tsc -p tsconfig.test.json) → exit 0, no output.turbo run build --filter='@object-ui/plugin-form^...') → 11/11 successful, thenpnpm --filter '@object-ui/plugin-form' build→ exit 0; confirmed the new description string reachedpackages/plugin-form/dist/index.js.node scripts/check-doc-example-types.mjs→ exit 2, but only on missingdist/*.d.tsfor ~26 unrelated packages (workspace-wide build precondition, out of this PR's local-verification scope); theUNGATED_EXAMPLESledger itself has zero entries forpackages/plugin-form/src/index.tsx(grepped directly), so today's ledger re-keying by sibling PRs does not touch this file. My edit is also a net-zero line-count single-line replacement (git diff --stat: 1 insertion, 1 deletion), so no line-shift risk either way.node scripts/check-changeset-presence.mjs→ exit 0 after adding the changeset.node scripts/check-changeset-no-major.mjs→ exit 0.npx eslint packages/plugin-form/src/index.tsx --no-inline-config→ exit 0, 25 pre-existing warnings (none on the touched line), 0 errors.origin/mainpre-flight: empty window (worktree base42ddd7f71==origin/mainat push time).Changeset
.changeset/8847-embeddable-form-fields-description.md— patch bump for@object-ui/plugin-form(publishedinputs[].descriptionis an authoring surface).Generated by Claude Code