Repository navigation
fix(plugin-detail): fold a declared pointer pair type half into its record card (objectui#13102) - #13109
Merged
objectstack-fleet[bot] merged 2 commits intoOct 20, 2026
Conversation
… card (objectui#13102) record:details drew a referenceVia pair's type half (object_name) as its own row of stored machine name beside the record card the id half draws. The type half now leaves the body when its id half is drawn in the same body, read from the object's declared pair only. The row value stays on the record, so the card still resolves the pair. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
…(objectui#13102) Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
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
|
objectstack-fleet
Bot
deleted the
claude/issue-13102-details-pointer-type-half
branch
October 20, 2026 02:51
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 #13102
Clause-②: no
What changes
record:detailsno longer draws a record pointer pair's type half as its own row. An object can declare a polymorphic pointer as a pair: the id half (record_id) names its sibling withreferenceVia(object_name).DetailSectionalready draws the id half as the record card, headed by the target object's label. The type half also drew as a row of stored machine name beside that card.foldPointerTypeHalvesinpackages/plugin-detail/src/renderers/record-details.tsxruns after every other fold (field security, the strip dedupe, the H1 dedupe). It reads the object's declared fields: every field with a non-emptyreferenceViathat names a declared sibling forms a pair. When the id half is drawn anywhere in this body (the directfieldslist or any section,{ group }references included, since they resolve before the fold), the type half leaves every list of the body.object_namethat no field names inreferenceViastill draws.ctx.data) is untouched, so the card still resolves the pair from the type half's value, and every other reader still reads it.One choice beyond the card's wording: the type half is folded only when its id half is drawn in the same body. If the body does not draw the id half (for example, the author listed
object_namebut notrecord_id), no card on this body names the target object, so the type half keeps its row. Without this condition, the object type would be shown nowhere on the body. Pinned by the third case below.No export, prop, key or spec surface moves. The helper is module-private.
Tests
New:
packages/plugin-detail/src/renderers/__tests__/record-details.pointerTypeHalf-13102.test.tsx, through the realRecordDetailsRendererin aRecordContextProvider, with a probe face registered underRECORD_POINTER_CARD_TYPE:sectionsbody: one card, and it receives{ objectName: 'invoice', recordId: 'inv_1' }(so the type half still feeds the card). NoTarget Object Typelabel and noinvoicetext in the body.fieldsbody: the same fold.referenceViadraw every listed field,object_nameincluded.Both fixtures declare
nameField: 'name', so the page-H1 dedupe takesnameand none of the fields under test. A first run without it showed the H1 dedupe hidingobject_nameon the control object.Ablation (via
scripts/ablation-replace.mjsin the objectstack checkout, anchorconst body = foldPointerTypeHalves(filteredFields, filteredSections, objSchemaFields);replaced with the unfolded pass-through), on HEAD5a5fd3415e: anchor 1 to 0, blob90106dfff7e2to570f6724e181. Cases 1 and 2 went red (Tests 2 failed | 2 passed (4)), and the controls stayed green. Restore: blob after restore90106dfff7e2equals the HEAD blob, andgit diff HEADis empty. The test imports the renderer by relative path fromsrc, so nodistbuild sits between the mutation and the run. The same ablation also ran on the first commit83fdc295c0, with the same result.Gates (worktree HEAD
5a5fd3415e, basedf943a2a1a)pnpm --filter '@object-ui/plugin-detail^...' build, thenpnpm --filter @object-ui/plugin-detail type-check(tsc --noEmit && tsc -p tsconfig.test.json): exit 0.--listFilesontsconfig.test.jsoncounts the new test file once.--maxWorkers=1, under the shared lock: the new file4 passed (4). The family that reads the touched file (all 22renderers/__tests__/record-details.*files plus__tests__/DetailSection.recordPointer-12045.test.tsx):Test Files 23 passed (23),Tests 173 passed (173).packages/plugin-detail/directory. The dispatch order bars whole-package-directory runs in this container.eslint --no-inline-configon the two changed source files: exit 0, 0 errors.record-details.tsxcarries 29 warnings, the same count as itsorigin/mainversion, and the new test file carries 0.check:phantom-deps,check:self-import,check:unreferenced-sources,check:doc-example-readers,check:handler-key-reads,check:side-effects-array,check:element-data-source-declaration,check:spec-symbols,check:action-forward-parity,check:designer-field-key-parity,check:icon-record-names,check:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:control-bytes,check:new-line-citations,scripts/check-hand-rolled-comment-mask.mjs,scripts/check-changeset-fixed.mjs,scripts/check-changeset-presence.mjs.check:spec-floors: exit 1,no-artifact(no full workspace build in this worktree). Recorded, not fixed, as the order says.Changeset
.changeset/13102-details-pointer-type-half.md:@object-ui/plugin-detailpatch.Session:
https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gBGenerated by Claude Code