The content-slot table is canonical: every field enumerated with source,
format, emphasis, and empty-value behavior; composite regions specify their zone anatomy;
arrangement is decided, not implied. The schematics are generated from these specs with
real content and enforced truncation. A region without its slots is a box, not a
wireframe.
Decision: key-screen selection & conventionsSCR-001 dispatch board (dense interaction, the product's core),
its override dialog (it carries the FR-012 decision; dialogs that decide are
specified like screens), and SCR-003 mobile day view (novel
confirm flow). SCR-002 inherits the board's detail pattern;
SCR-004 the notice pattern, said, not implied. Fidelity:
lo-fi, no escalations. Action-order convention, declared once: primary rightmost in
dialogs, primary first on cards; labels descriptive, never "OK".
Single line; ellipsis past the meta budget; full text on hover
primary
never (id mandatory)
Priority + age
Job.priority · Job.created_at
"P1 · 12m"; minutes under an hour, then "1h 05m"; right-aligned,
tabular figures
meta
n/a
Selected treatment
n/a
Weight + border, never color
n/a
n/a
SCR-001 · suggestion card (CardStack): zone anatomy, in order
Zone
Source
Rule
1 · Title
Technician.hr_id · name
Primary tier; the longest realistic name is exercised:
"T-014 · J. Alvarez-Whittingham" truncates per rule, never collides
2 · Metadata line
returning-from context
Meta tier; hidden when absent; conditional visibility stated
3 · Chips
band · certification · telemetry
Proximity band (TERM-011 label[9]),
certification, "position 3 min old" rides the staleness flag
4 · Actions
n/a
Accept (primary, the card's tap target), then Override… (secondary)
Decision: arrangement
Suggestions are cards (heterogeneous content), ordered by the recommendation
module's rank, never re-sorted client-side
(FR-010[2]). The queue is a list
(homogeneous scans faster), sorted priority then age, fixed-height scroll, no
pagination.
Generated from the content-slot spec
(scr-001-board.wf.yaml → gen_wireframe.py):
typed element kinds, real representative content with edge cases (longest name, a
technician with no position), truncation enforced in render. The tables above are
canonical.
Override dialog: input spec
Input
Type
Rules
Reason
select · required
The six governed codes (enumeration[3]);
required is the marked minority; label top-aligned
Note
text · optional
250 maximum with a live counter; overflow rejected naming the limit
(US-3 row AT-3[8])
Mismatch warning
conditional line
Appears when the chosen technician lacks the required certification;
visibility rule stated
Actions
Cancel · Confirm override
Primary rightmost per the declared convention; labels descriptive
The dialog schematic, generated from
scr-001-override-dialog.wf.yaml; the note field shows its
edge-length content ellipsized, the warning line rides its condition.
State deltas: one base frame, per-state region changes
State
Regions that change
Pattern-library reference
Queue empty
ListPanel
Empty-state pattern: "No open jobs; intake sends them here" + intake link
Loading
ListPanel · CardStack
Skeleton rows pattern
Error
ListPanel
Error pattern: retry + the phone-fallback note; specific, never blaming
Basis: the Meridian design system, tokens v4.2
(internal reuse[6]); regions cite its named
components; no raw hex or pixel values anywhere. Gaps sent upstream: a
StalenessFlag chip variant and a
ReasonCode selector do not exist yet; filed as design-system
requests (linked[7]).
Accessibility at schematic altitude: board first focus lands on the newest job;
tab order queue → suggestions → actions; day view first focus on the confirm action. The
audit itself belongs to the accessibility deliverable, referenced.
§4
Open Questions
mandatory1 decision
Question
Owner
Answer by
Blocks
Does the override dialog live inline in the suggestion panel or as a modal?