Lead sources
- created_by user
- “It was created by a user, not set up automatically.”
- created_by system
- “It was set up automatically for your organization.”
- created_by deleted user
- “Its creator's account has been deleted.”
created_by is an AuthorPrincipal — a user id, a system principal or
the deleted-user sentinel, decided offline by its prefix — and never a display name. The hint branches on that form only; it never
renders the raw identifier, never claims the creator is still a member, and never looks a usr_ value up (no directory read is part of this contract, and a
member without a role cannot read the list's roster).
| Label (en) | Code | Status |
|---|---|---|
| Referral | REF | active |
| Trade show | EVENT | active |
| Inbound web | WEB | active |
A common list your organization has already replaced
Reached from the index with the Common filter, or from a link. The detail asks the service once which list
the key means for this organization (getEffectiveList("priority")). If the answer is not this list,
the Fork CTA is not offered — forking again would only return the existing fork — and the way forward is your version.
If the lookup fails, the page shows the plain common-list notice without a Fork CTA and a quiet
“Couldn't check for your organization's version — Retry”: offering Fork on a guess is how a duplicate request ends in a confusing
200. A private fork you hold no role on is invisible to you; the service then answers with the common
list, the CTA shows, and forking returns 409 fork_exists (handled there).
Translations tab, read-only
The approved 4.0.0 locale index (selection-lists/07-locale-index) minus every mutation:
no “Edit”, no “Auto-fill”, no “Add language”. Rows link to a read-only locale view. Machine text keeps its M badge.
| Language | Translated | Notes |
|---|---|---|
| English (source) | 5 / 5 | — |
| Français | 5 / 5 | M 2 machine |
| עברית | 5 / 5 | — |
Each translated locale's name opens its read-only locale view at the existing 4.0.0 route
/settings/selection-lists/:listId/translations/:locale. The source locale has no link — its text is the Values tab.
Read-only locale view — Français
| Code | English (source) | Français | Notes |
|---|---|---|---|
| LOW | Low | Basse | — |
| NORMAL | Normal | Normale | M |
| HIGH | High | Haute | M |
The approved 4.0.0 locale editor (selection-lists/08-locale-editor) with the same reads, rendered
readOnly: the target column is plain text — no inputs, no Save / Save all, no “Mark reviewed”, no Auto-fill.
Machine text keeps its M badge; for he/ar the target cell carries
dir="rtl" exactly as in the editor. Rows shown: the first three of the common Priority list.
States
Every state below is contract. The detail route is the same for every visibility; only the badge, the notice and the way forward change.
Loading
No edit controls and no Fork CTA render until editable, visibility
and the effective-list answer are known — a control that flashes and disappears reads as a bug.
Empty — a readable list with no active values
No values to pick from
This list has no active values yet. Forms that use it show “No options available”. Only someone with a role on the list can add values.
No “+ Add value” for a read-only viewer — the 4.0.0 empty-state CTA is gated on editable.
Error — the list loaded, its values didn't
Couldn't load values
Nothing has been changed. The badge and notice above stay — they came from the list, which did load.
Not found — another organization's list, or no shared read
List not found
No list with that id, or you can't read it. Another organization's
org list, or a caller without shared read (the developer role), gets
404 — never 403 — so this URL can't probe whether a list exists.
editable absent — service still on 4.0.0 behaviour
No read-only marker, no notice, no Fork CTA. The detail offers the approved 4.0.0
affordances and lets each mutation's own authorization answer (403 → the 4.0.0 message).
Absence is unknown, never false.
Feature flag OFF — fuzefront.selection-lists.shared-lists
The shared-lists UI is absent, not disabled: no visibility badge,
no read-only notice, no Fork CTA, no effective-list lookup. The detail is exactly the approved 4.0.0 frame
selection-lists/03-list-detail. The service still sends 4.1.0 shapes
(visibility: "private", forked_from: null) — the UI ignores them. A member
with no role cannot reach Lead sources at all (404), as today.
Test hooks: [data-frame='03-readonly-states'] · [data-visibility='org'] · [data-readonly-notice='org'] · [data-owner-hint][data-created-by-kind='user'] · [data-created-by-kind='system'] · [data-created-by-kind='deleted-user'] · [data-editable='false'] · [data-readonly-notice='shadowed'] · [data-action='open-own-version'] · [data-panel='locale-index'][data-readonly='true'] · [data-action='open-locale-readonly'] · [data-locale-link='fr'] · [data-panel='locale-editor'][data-readonly='true'] · [data-locale-view='fr'] · [data-panel='value-table'][data-state='loading'] · [data-panel='value-table'][data-state='empty'] · [data-panel='value-table'][data-state='error'] · [data-panel='value-table'][data-state='not-found'] · [data-error='NOT_FOUND'] · [data-state='editable-unknown'] · [data-state='flag-off'] · [data-action='retry']
Contract: GET /v1/selection-lists/{listId} · GET /v1/selection-lists/{listId}/items ·
GET /v1/selection-lists/{listId}/translations · GET /v1/selection-lists?key=&include_shared=true&limit=1. Shared read is
SelectionListCatalog:read_shared in the caller's tenant + the service's visibility predicate (design record D4).
Tokens only — no raw hex, spacing or type outside tokens.css / frame.css.