Uh oh!
There was an error while loading. Please reload this page.
docs(fields): tombstone MasterDetailField as a form-unreachable orphan - #5316
Merged
os-support-ai merged 1 commit intoAug 19, 2026
Merged
Conversation
Re-derived on origin/main before writing this down: `fieldWidgetMap` has no key resolving to MasterDetailField (the `master_detail` key deliberately resolves to LookupField — the child-side FK must render as a single-value picker, not the widget's one-to-many list model). `registerField`/ `registerAllFields` only walk `fieldWidgetMap`'s keys, so no form path reaches it. Its only in-repo consumer is its own direct-render test (complex-widgets.test.tsx). Every future widgets/** audit (#3291 DOM leak sweep, #3318 aria-invalid ledger, #4788 readonly-plumbing scan — the class this card was filed from) re-discovers and re-investigates this component against its false denominator. The header comment lets auditors skip the file on sight. Disposition 1 (delete the widget + its public export) is a breaking change to a published surface and is explicitly out of scope here — left to the maintainer with the liveness evidence this tombstone documents. Fixes#4811 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RV6yuVCxymHYE16PL9vQkE
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
os-support-ai
marked this pull request as ready for review
August 19, 2026 13:22
Uh oh!
There was an error while loading. Please reload this page.
os-support-ai
deleted the
claude/issue-4811-master-detail-field-tombstone
branch
August 19, 2026 13:22
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 freeto 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#4811
What
Adds a tombstone header comment to
packages/fields/src/widgets/MasterDetailField.tsxrecording that the component:fieldWidgetMap(packages/fields/src/index.tsx);registerField/registerAllFieldsonly walkfieldWidgetMap's keys);master_detailfield-type key deliberately resolving toLookupFieldinstead (the child-side FK must render as a single-value picker in create/edit forms, not this widget's one-to-many list model);complex-widgets.test.tsx, which renders it directly and proves nothing about form reachability).Purpose: every future
widgets/**sweep (the #3291 DOM-leak sweep / #3318 aria-invalid ledger / #4788 readonly-plumbing scan class — #4788 is where this orphan was originally found) stops paying the false-denominator tax of re-discovering and re-investigating an exported-but-unreachable component.Scope is disposition 2 only, per the triage comment on #4811. Disposition 1 (deleting the widget and its public export) is explicitly out of scope — it is a breaking change to a published surface and is left to the maintainer, with the liveness evidence this tombstone documents. Nothing about the component's export, behavior, or registration changed.
Verification of the tombstone's claims (re-derived on current
origin/main, not trusted from the issue body)fieldWidgetMap: greppedpackages/fields/src/index.tsx— themaster_detailentry (line ~2717) resolves toLookupField; no map entry anywhere resolves toMasterDetailField. Counter-probed the grep methodology against known-present keys ('text','number','select') to confirm the search itself works.registerField()looks upfieldWidgetLoaderByKey[fieldType](backed byfieldWidgetMap) and warns+returns if absent;registerAllFields()only iteratesObject.keys(fieldWidgetMap). Neither has a special case forMasterDetailField. A full-repo grep (all extensions, excludingnode_modules/.git/dist) forMasterDetailFieldturns up only: the widget's own definition, its own test, theindex.tsxbarrel export + explanatory comment, an unrelatedMasterDetailFieldMetadatatype inpackages/types(a metadata shape, not a consumer of this component), and a changelog line in an old changeset.master_detail→LookupField: confirmed at the map entry itself, with the adjacent comment explaining why (child-side FK needs a single-value lookup picker, not a one-to-many list).complex-widgets.test.tsx.All four claims hold; the tombstone was safe to write.
Verification
node scripts/check-changeset-presence.mjs→ passes with the added empty-frontmatter changeset (.changeset/master-detail-field-tombstone-4811.md);node scripts/check-changeset-no-major.mjs→ passes (no major declared).grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]') on both changed files → clean (this repo has noscripts/check-nul-bytes.mjs, so the manual fallback was used).pnpm --filter '@object-ui/fields^...' build→ exit 0.pnpm exec vitest run packages/fields/ --maxWorkers=2(run from repo root, per the repo's own vitest-invocation guard) → 107 test files / 1802 tests passed.pnpm --filter '@object-ui/fields' type-check→ exit 0, no errors.pnpm --filter '@object-ui/fields' lint→ exit 0 (839 pre-existing warnings across the package, 0 errors; the one warning on the changed file, line 27'sany, predates this change and sits outside the added comment block).All commands run from the repository root; head commit
47c77c03b.Generated by Claude Code