SelectionListPicker — the effective list for a key
Bound to key="priority", exactly as before. What changes is
which list that key means.
A · Acme has an organization-visible fork → the fork wins
New support ticket
Helpdesk · a consuming product's form · viewer: Sam Ortiz (member)
The caption renders only with the opt-in showSource prop (admin / form-builder
screens). End-user forms get no caption at all: to them it is simply “Priority”. The caption is derived from the one list the
service returned (forked_from, visibility) — no extra request, and no
“behind source” check in a picker.
front_sl_01jfq3w8z6y5x4c3b2a1n9m8k7 · org Acme · visibility org · forked_from front_sl_01jf8k2m3n4p5q6r7s8t9v0w1x
Submits { "priority": "front_sli_01jfq3w8z6y5x4c3b2a1n9m8b2" } — the fork's item id.
B · No fork → the common list
New support ticket
Same form, in Initech (no fork) · viewer: a member
front_sl_01jf8k2m3n4p5q6r7s8t9v0w1x · platform org · visibility platform
Archived “Critical (legacy)” is not offered — active values only, authored order, as in 4.0.0.
Shadowing edge cases
All decided by the service (design record D8). The picker's only job is to render the one list it is given — these panels exist so QA can assert it does not second-guess the answer.
C · Private fork (a draft) — shadows only for grant-holders
D · Fork archived → falls through to the active common list
Archiving the fork is the “revert to common” action; the picker shows no archived caption, because one lookup returns only the common list and says nothing about the ignored fork. Values saved from the fork keep rendering (archived items still resolve) — see the next frame. Restoring the fork (frame 6, “existing, archived”) makes it win again. Falls through only to an active common list; with the common list archived or gone the picker renders no effective list.
States
Embedded in someone else's form: never throw into the host, never silently render an empty control.
Loading
One skeleton for both requests (effective-list lookup, then items) at final height. The source caption (if enabled) appears with the options, never before.
Error — either request failed
Retry in place; keep any selected value. A failed lookup must not fall back to a second, different list — that would show values the service didn't choose.
Also the state for a 403 on the lookup: a caller whose only
tenant role is developer holds no SelectionListCatalog:list, so
GET /v1/selection-lists refuses outright — it is a load failure, never “List unavailable”.
No effective list — getEffectiveList → null
No readable active list with key
priority in this organization and no active common one (e.g. the fork was archived while the common list
is archived or gone). Reached only from a 200 with an empty page — not an error from the service; the picker
renders this state and does not throw. A 403 is the error state, not this one.
Flag OFF — 4.0.0 lookup
With fuzefront.selection-lists.shared-lists OFF the picker does not send
include_shared and renders no source caption: GET ?key=priority exactly as the
approved 4.0.0 picker. Common lists are invisible; a key with no own list renders “List unavailable”.
Test hooks: [data-frame='09-picker-effective'] · [data-panel='picker'] · [data-picker='priority'] · [data-effective-source='own'] · [data-effective-source='platform'] · [data-effective-source-caption='own'] · [data-effective-source-caption='platform'] · [data-badge='fork'] · [data-badge='common'] · [data-case='private-fork'] · [data-case='archived-fork'] · [data-effective-inspector] · [data-combo-control] · [data-selected-label] · [data-item='front_sli_01jfq3w8z6y5x4c3b2a1n9m8b6'] · [data-state='loading'] · [data-state='error'] · [data-state='not-found'] · [data-state='flag-off'] · [data-error='NOT_FOUND'] · [data-action='retry']
Contract: GET /v1/selection-lists?key=&include_shared=true&limit=1 (client getEffectiveList) ·
GET /v1/selection-lists/{listId}/items?status=active&locale=.
Tokens only — no raw hex, spacing or type outside tokens.css / frame.css.