feat(ui): position assignment panels as pure SDUI — Positions tab on sys_user, Holders/Permission Sets tabs on sys_position#2770
Merged
Conversation
…sys_user, Holders/Permission Sets tabs on sys_position Adds relationshipValueField (default 'id') to RecordRelatedListProps — the generic name-keyed-junction affordance (sys_user_position.position stores sys_position.name) used for both the list filter and the Add picker's parent-side value. sys_user detail gains a Positions tab (assign via picker storing the machine name, valueField: 'name'); new sys_position detail page ships Holders (relationshipValueField: 'name') and Permission Sets tabs, registered by plugin-security. All server rules (D12 delegated-admin gate, audience-anchor rejection) surface their denials in the Add dialog; ADR-0091 validity columns become plain column additions later. Zero bespoke React. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oLzaP8n7A3YKFmgaHWC8H
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 3 package(s): 96 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…ll suite 6676/6676 green) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oLzaP8n7A3YKFmgaHWC8H
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012oLzaP8n7A3YKFmgaHWC8H
os-zhuang
marked this pull request as ready for review
July 10, 2026 10:48
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.
Summary
Closes the last management-UI gap from the ADR-0090 waves — assigning positions to people and composing positions from permission sets — as pure SDUI, per the "metadata-first" directive. Zero bespoke React; every panel is a
record:related_listdeclaration, so all server-side governance (D12 delegated-admin gate, audience-anchor rejection) surfaces its denial in the generic Add dialog.Spec (additive)
RecordRelatedListProps.relationshipValueField(default'id') — which parent-record field the junction'srelationshipFieldstores. This is the generic affordance for name-keyed junctions:sys_user_position.positionstoressys_position.name, so a Holders list on a position declaresrelationshipValueField: 'name'. Used for both the list filter and the parent-side value the Add picker writes.Pages
sys_userdetail — new Positions tab: assign positions via the Add picker (stores the position machine name via the existingadd.picker.valueField: 'name'); columns show the assignment BU anchor andgranted_by. Tab curation comment updated (4 → 5 lists).sys_positiondetail (new page, shipped by plugin-security's manifest) — Holders (name-keyed via the new prop) and Permission Sets (ordinary id-keyed binding junction) tabs. ADR-0091'svalid_from/valid_untilbecome plain column additions when L1 lands.Sequencing note
The generic renderer support for
add.pickerandrelationshipValueFieldlands in objectui together with the ^14 alignment (in progress); until then these tabs degrade to read-only lists in older consoles. Documented in the changeset.Verification
gen:api-surfaceregenerated ·check:liveness✓ · changeset: minor × 3🤖 Generated with Claude Code
https://claude.ai/code/session_012oLzaP8n7A3YKFmgaHWC8H
Generated by Claude Code