Eighteen navigable frames — fourteen desktop and one 375 px phone frame per flow — covering the org-admin management UI, the translation
workbench, per-list access control, and the embeddable <SelectionListPicker>.
Approving them freezes the visual and interaction contract — and the build inventory below — before
any feature UI is written. Built in the fuse-seam design system (tokens only).
Create a list, curate its values, order them deliberately, and stay inside the
org's quota ceilings. Values carry an immutable service-minted id (what consuming apps persist), an
immutable interop code, and a translatable label.
Paginated table with status filter and search. Loading, empty and error states.
Name, immutable key with slug validation, source locale. Inline 400 / 409 / 403 handling.
Tabbed detail with the ordered value table. Archive vs purge made explicit. Includes 404-not-403.
Code locked after create, id revealed, purge behind typed confirmation.
Lifted row, drop target, keyboard-reorder contract, and rollback when the save fails.
All four ceilings, the ≥80% warning, and the at-limit disabled CTA with its tooltip.
Card rows, row actions in a sheet, value dialog as a BottomSheet, touch reorder, quota reason as text; loading / empty / error / 404.
Runtime i18n for org-authored content across 11 locales. Machine output is always
badged, human work is never overwritten, and a changed source is flagged rather than silently stale.
RTL (ar, he) flips the target column, not the source.
Per-locale completion, source marked, machine counts, and start/autofill CTAs.
Source beside translation, M badges, source_hash mismatch warning, RTL layout.
States the count and the source locale, and guarantees human strings survive. Partial-failure state.
Source stacked above translation, sticky Save all, per-cell RTL, autofill as a BottomSheet; running / partial / save-failed / 403.
Per-list ReBAC with action granularity — five non-stacking roles. The load-bearing
state is last-owner protection: demoting or revoking the sole list-owner returns
409 CONFLICT, shown inline on that row.
Grants table, role matrix, and the 409 last-owner refusal.
Member search with already-granted marking, role select with plain-language descriptions.
Grant cards, the 409 last-owner refusal inline on the card, role list, Add person as a BottomSheet; loading / empty / error / 403.
The embeddable component every consuming product mounts. Shown in a generic host form — not in the FuzeFront shell — because that is where it actually lives. It persists the item id and re-resolves the label per viewer, per locale.
Combobox bound by list key, in authored sort order. Loading, empty, error, 404.
Chips, clear-all, no-matches filtering, and a host-imposed max.
A stored id whose value was archived still renders its label, greyed and badged — never blank. Contrasted with a purged id.
Field-width control, menu inline under it, thumb-sized options, wrapping chips; archived / purged values and every state.
Approving these frames approves this inventory. The implementation builds exactly these flows, components and packages — it cannot quietly invent a different architecture. Stories S9, S10, S11 and S13 are blocked until the relevant flow here is approved.
build.flows[].responsive)--touch-target / --sheet-max-h / safe-area tokens; the
frames-only device preview lives in mobile.css, which the desktop frames do not load.
frame.css for the frames. They are not one-offs to
copy into feature code: frontend-engineer is the sole editor of design-system/
and adds them as a foundation PR before or alongside the UI. This designer specifies the primitives;
it does not write them.