Repository navigation
fix(plugin-approvals,plugin-audit,plugin-sharing): list views drop the target object's API name column beside a record pointer - #24600
Conversation
…record pointer's id half, never its type half Drop `object_name` (the target object's API name) from the list views' `columns` where it sat beside its `record_id` pointer id half: the console fetches the type half for the pointer cell without a column, so the column only drew the stored API name as text. `sys_audit_log.config_changes` keeps it: those rows carry no `record_id`. Pins: each package enumerates its objects' list views and asserts no `referenceVia` sibling is shown beside its id half, and that the family's views still show the id half. Claude-Session: https://claude.ai/code/session_01LR1cD9JqgkeqY7k9rrZH8s Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 3 package(s): 46 hand-written doc(s) name something this change touched — list omitted above 15 rows. Re-derive on the tree named below: ⛔ 10 release-owned page(s) also affected — read-only, see AGENTS.md Documentation Guardrails. What this run could not see
Coarse fallback — 17 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin dd893fbec11465b94e6d9e892c392127463bddbc && git checkout dd893fbec11465b94e6d9e892c392127463bddbc
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 5a871e4e41b110d5d4b0cdcc325a75723740bb31 c62273124a6aa14da5c19c2a51a64ae214418ddf && git checkout -B drift-repro 5a871e4e41b110d5d4b0cdcc325a75723740bb31 && git merge --no-ff c62273124a6aa14da5c19c2a51a64ae214418ddf
node scripts/docs-audit/affected-docs.mjs --json 5a871e4e41b110d5d4b0cdcc325a75723740bb31
|
席位核对ACCEPT, parked · #24501 ·
Generated by Claude Code |
Fixes #24501
Clause-②: no
Parked: draft until the console pin carries the type-half fetch
This PR stays draft until objectstack's
.objectui-shaonorigin/mainhas objectuife11eb12e578fe38cff8ba454de6507bd99daa2aas an ancestor. That commit is objectstack-ai/objectui#13042, which answers objectstack-ai/objectui#13036. Landing this PR earlier turns the Record column of every list below into raw record ids, because the console at the current pin fetches only a list's shown columns, and the pointer cell resolves its record from the row's type half.4016370af3c9, committed 2026-10-19T03:42Z. The fix was committed at 11:29Z. In the objectui clone,git merge-base --is-ancestor fe11eb12e5 4016370af3c9answers exit 1. The clone is shallow, so a control leg ran on the same clone:4016370af3c9~30(b5153f44ea) answers exit 0.fe11eb12e5lands onmain. This PR does not move the pin. After that: sync withmain, re-check, ready, queue.What changes
object_name(aField.textlabelled "Object" that holds the target object's API name, such asshowcase_announcement) leaves thecolumnsof every list view where it sat beside itsrecord_idpointer id half (referenceVia: 'object_name'):sys_approval_requestall_requests,my_pending,submitted_by_me,completedsys_approval_actionrecent,all_actions(by_actornever listed it)sys_audit_logrecent,writes_only,record_views,all_eventssys_record_shareall_shares,granted_to_me,granted_by_me,by_object,manual_grants,rule_grantssys_share_linkactive_links,by_me,revoked,all_linkssys_audit_log.config_changeslistsobject_namewithoutrecord_id. Its rows (config_changeandimport) carry norecord_id, so no pointer names their target. That view does not follow this pattern and is unchanged.object_namestays a declared field on all five objects. The pointer pair, its indexes,highlightFields,titleFormatand every query on the pair are untouched. Only listcolumnsmove.Readings behind the route (seat answer
6264371362, route A)origin/mainde4352460. Every view in the table listsobject_nameimmediately besiderecord_id, and each object'srecord_iddeclaresreferenceVia: 'object_name'(request:263, action:154, audit log:321, record share:172, share link:168, before this diff).config_changesis the one view that lists the type half without the id half.fe11eb12e5(git show, read-only). Both projection builders now request the sibling.ListViewselectFieldsaddsreferenceViaof every FLS-surviving column throughaddSpeculative, which covers ListView's own fetch.ObjectGridgetSelectFieldsadds areferenceViaFieldsharvest toextraFields, which covers the fetch a grouped grid owns (gridOwnsGroupedFetch) and a standaloneobject-grid. The fix is on objectuimain(8aa8e3e1e5, ancestor check exit 0).approval-list-display-labels.integration.test.tsasserted thatrecent/all_actionscontainobject_name,record_idandacted_as_label. It now assertsrecord_idandacted_as_label, and thatobject_nameis absent.Pins
Each package now enumerates its own objects' list views. The approvals pin uses the objects
ApprovalsServicePluginregisters. The audit and sharing pins useobjects/index.ts. Each pin asserts two things:referenceViasibling beside its id half.The pins live in
sys-approval-request-pointer-pair.test.ts,sys-audit-log-pointer-pair.test.tsandsharing-pointer-pairs.test.ts.Ablation (one
object_nameput back per package, at commitc62273124, throughscripts/ablation-replace.mjsin wrap mode). The mutation landed each time (anchor x1 to x0, blob changed). Exactly one test went red each time,no list view shows a referenceVia sibling beside its id half(expected [ Array(1) ] to deeply equal []; approvals namessys_approval_request.all_requests: object_name). The file was restored each time with blob equal toHEADand an emptygit diff HEAD:sys_record_share.all_sharessys_audit_log.record_viewssys_approval_request.all_requestsThe tests import the objects by relative source path, so the ablation needed no rebuild.
Verification, at
c62273124All of this ran under
scripts/pm/os-verify-lock.sh:@objectstack/plugin-approvalshad 81 files and 1114 tests pass;@objectstack/plugin-audit56 files and 899 tests;@objectstack/plugin-sharing49 files and 1163 tests. Every run exited 0.pnpm --filterwith the three packages,run typecheck, exited 0.check:test-typecheckwas OK for all three, and the edited test files gained no ledger entries.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackgave 67 commands, and all 67 ran with exit 0.PREREQUISITE NOT MET):check:i18nandcheck:dual-build-cjs-loads. After a full workspace build, both re-ran with exit 0.--ranreports: "67 derived, 67 run, 0 NOT-MEASURED, 0 UNRUN".test:repo, the whole-tree families, the type-check lanes and Build Core.mainneeds an objectui worktree build, and it belongs to the unlock, when the bundled console carries the fix.Acceptance notes
record_idlose their target hint.sys_audit_log'srecentandall_eventsalso listconfig_changeandimportrows. Those carryobject_name(sys_setting,sys_platform_setting,sys_user) and norecord_id. They now show an empty Record cell, and the action column says what they are. Theconfig_changesview still shows their object.sys_record_share.by_objectstill groups and sorts onobject_name. The console fetches the grouping field, so the group header still reads the API name. That is a grouping, not a column, and it is outside this card's surface. It is reported to the seat with the next note.sys_audit_log,sys_record_shareandsys_share_linklistobject_nameinhighlightFields.sys_record_shareandsys_share_linkhave nonameField, and theirtitleFormatstarts with{object_name}/{record_id}.Generated by Claude Code