12 KiB
12 KiB
Structural proof preflight
- Product, route, or flow: Nexus authenticated legacy shell and the first migrated grid route,
/agents - Selected direction or inspected source:
/dashboard, captured inscreenshots/02-dashboard-desktop.png - First bounded slice: shared V2 tokens, legacy sidebar/topbar/content frame, and the Agents overview
- Explicit exclusions: dashboard and login visuals; route targets; stores, services, API contracts, backend behavior, and domain state transitions
- Owner: Codex
- Status: passed
Entry contract
- Entry mode: task-first
- Minimum context required before the first real action: current route title, gateway state, agent count, and any loading/error warning
- Why each preceding block is necessary: the shell orients the user; the route header identifies the operational scope; gateway feedback determines whether agent data is trustworthy
- First real action or task-entry control: open an agent profile
- Success destination: the existing
/agents/:idroute - Blocked-destination reason and recovery: when no agents are returned, the existing empty state names gateway reachability and configuration as the recovery path
| Viewport or container | Initial scrollY |
Identifying context rectangle | Action rectangle | Required reserve | Destination and sticky offset | Settled result |
|---|---|---|---|---|---|---|
Narrowest supported / 375px |
0 | x=14, y=76, w=332; identity and gateway status wrap inside the page frame |
first agent card x=14, y=186, w=332; keyboard activation verified |
14px page inset | /agents/iris; 62px topbar remains visible |
passed; no page or content x-overflow |
Representative wide / 1280px rendered browser ceiling |
0 | x=268, y=82, w=977; title uses Space Grotesk 24/30, 700 |
first agent card x=268, y=161, w=316 |
20px page inset | /agents/iris; 62px topbar remains visible |
passed; 248px sidebar and 62px topbar measured |
Section grammar
| Order | Section | Primary role | User question | Evidence or input | Layout grammar | Density and disclosure | Narrow transformation | State responsibility |
|---|---|---|---|---|---|---|---|---|
| 1 | Legacy shell | orient | Where am I and what can I open? | registered navigation and existing counts | fixed sidebar plus topbar | compact operational chrome | sidebar becomes an overlay | active route, connection status, mobile navigation |
| 2 | Route header | orient | Which agent surface and gateway state am I seeing? | agent count and gateway response | title cluster plus status badge | concise | stack and wrap | loading, gateway warning, error |
| 3 | Agent grid | act | Which agent should I inspect? | existing agent data | responsive card grid | operational summary per agent | 3 to 2 to 1 columns | runtime state and profile navigation |
| 4 | Empty/error message | recover | Why is no agent available and what can I check? | existing error and empty copy | single glass state panel | readable | full-width | diagnostic and next valid check |
- Accidental preamble removed or justified: no decorative preamble is added before the route identity.
- Repeated wrappers or layout grammars that need a product reason: cards are reserved for comparable agents and operational panels.
- Evidence kept with its claim: gateway state remains in the route header; runtime state remains inside its agent card.
- Actions kept with their object and consequence: profile navigation remains on the corresponding agent card.
- Recovery kept in destination context: loading, warning, error, and empty feedback stays inside the Agents page.
Signature-gesture distribution
- Gesture: blue-to-violet gradient with controlled glow
- One dominant use: active navigation and primary action
- Supporting echo 1: brand mark
- Supporting echo 2: a meaningful active or blocked status
- Prohibited sections or states: ordinary data cards, neutral inputs, metadata, empty states, long-form copy, and destructive confirmation surfaces
- Plain operational, error, and recovery grammar: glass surface, semantic border/status color, no decorative glow
Content and type pressure
| Pressure input | Exact fixture or source | Narrow result | Wide result | Fix or accepted rationale | Status |
|---|---|---|---|---|---|
| Longest heading | existing route titles such as Notifications and Project Detail |
retained at 24/30 and allowed to wrap | retained at 24/30 | wrap rather than shrink below the title contract | passed for the slice |
| Longest control label | Iris, Chief of Staff: View Profile accessible name |
keyboard reachable without changing visual copy | card action remains local to its object | preserve copy; allow action rows to wrap | passed |
| Largest value or identifier | claude-sonnet-4-5 |
contained in the card metadata track | contained in the three-column grid | mono text keeps the existing ellipsis policy | passed |
| Longest error, limitation, and recovery copy | authored error plus the existing gateway/configuration recovery copy | both wrap inside 332px | state surface remains inside the page frame | full-width glass state panels with natural wrapping | passed |
| Required localization | current German and English UI strings | German copy wraps naturally; English labels remain intact | no content rewrite | do not rewrite product copy in this visual migration | passed |
200% zoom |
represented structurally by the single-column narrow transformation and adjacent breakpoint matrix | no x-overflow | n/a | page remains vertically scrollable; controls wrap | accepted; final responsive matrix passed |
| Narrow parent container | 375px required viewport | scrollWidth=clientWidth=375; content overflow delta 0 |
n/a | min-width: 0, safe wrapping, and no page-level x overflow |
passed |
- Important instructions, limitations, provenance, status, safety, consequences, and recovery are at least
14px: required for final proof. - Any
12pxuse is truly secondary and nonessential, with contrast and line-height evidence: reserved for compact interface labels; metadata uses JetBrains Mono at 11px minimum. - Min-content and unbreakable-content policy: content columns use
minmax(0, 1fr)andmin-width: 0; identifiers wrap or use an existing internal scroller only on horizontal workspaces. - Risky breakpoints and adjacent widths: 375, 767/768, 1023/1024, 1440, and 1920px.
State-and-copy truth table
| State | Entry cause | Visible facts | Allowed actions | Forbidden stale copy or values | Recovery or next action | Focus target | URL, history, and storage effect |
|---|---|---|---|---|---|---|---|
| Initial/loading | route mounts and requests data | route title and loading message | navigation remains available | stale success state must not be presented as current | wait or navigate elsewhere | route heading | unchanged |
| Success | API returns agents and gateway data | count, gateway state, cards, runtime metadata | open an agent, navigate, refresh | loading/error copy | select an agent profile | first actionable card | existing router history only |
| Failure | API or gateway request fails | existing diagnostic message | navigate or refresh | stale cards presented as newly loaded | retry through the existing refresh/re-entry path | error message then next control | unchanged |
| Recovery/empty | response contains no agents | existing empty-state reason and checks | navigate or re-enter after configuration changes | invented agents or changed recovery copy | check gateway reachability/configuration | empty-state heading | unchanged |
- Additional orthogonal states required: connected, thinking, blocked, ready, stale, error, unsupported, mobile navigation open/closed, and keyboard focus.
- Atomic stale-content removal rule: visual CSS must not change existing state guards or data replacement behavior.
- Exact reset or recovery snapshot: current store and component behavior remains the source of truth.
Action vocabulary ledger
| User intent | Idle control | Pending or progress | Success or result | Failure and next action | Recovery, undo, or reversal |
|---|---|---|---|---|---|
| Refresh operational data | Refresh | existing loading/spinner treatment | updated current state | existing error message | invoke Refresh again |
| Inspect an agent | View Profile / agent card | route transition | agent detail route | existing route/error behavior | return through existing navigation |
- Same user-recognized verb and domain noun retained through the journey: yes; no product copy or action is renamed by the visual migration.
- Labels, statuses, toasts, confirmations, errors, recovery, and assistive announcements agree: existing strings remain authoritative.
- Empty and failure states name the next valid action: existing page copy is preserved and presented accessibly.
Proof architecture
- Stable semantic selectors, state attributes, and dedicated value nodes: route root classes, shell landmarks, existing data/state classes, and
data-routeon the legacy content frame - Assertions intentionally independent of translated copy, neighboring text, wrappers, and visual position: geometry and overflow checks target landmarks and route roots
- Explicit settle conditions for scroll, fonts, media, transitions, async state, and geometry: document fonts loaded, fixture/API requests settled, no pending transitions, and two animation frames after route mount
- Independent oracle or source of truth: router registration plus the independently authored audit fixture; production stores and API contracts are not modified
- Required positive and negative assertions: every registered route renders; no page-level horizontal overflow; dashboard/login source files remain visually untouched; navigation/events/handlers remain registered
- Source, build, harness, fixture, oracle, and capture bindings: repository HEAD and working tree, frontend build, local fixture, route matrix, and dated screenshots under this audit folder
- Capture claim ledger location:
design-qa.mdanddocs/audits/2026-07-26/DESIGN_MIGRATION_AUDIT.md - Failure classification: product / harness / evidence / environment
Structural slice gate
| Gate | Narrow evidence | Wide evidence | Independent rendered review | Status |
|---|---|---|---|---|
| Entry mode and minimum context remain true | title, count, gateway state, and first agent/action are visible | same hierarchy inside the standard page frame | accepted from rendered captures | passed |
| First action is reachable and completely framed | first card is fully framed and opens by Enter | first row is visible above the fold | /agents/iris navigation verified |
passed |
| Section roles and layout grammars remain distinct | shell, identity, grid/state surface remain separate | same roles with three-column grid | accepted | passed |
| Signature-gesture budget is respected | gradient is limited to active navigation, brand/primary action, and card identity accents | ordinary panels remain plain glass | accepted | passed |
| Long content, localization, and min-content pressure pass | long descriptions, model IDs, tags, and recovery copy wrap without x-overflow | three-column content remains contained | accepted for bounded slice | passed |
| Core path passes success, failure, and recovery | success grid, empty recovery, and API error were rendered | success grid rendered | fixture states captured independently | passed |
| Focus, state copy, controls, and recovery agree | focused agent card measured with 2px blue outline and 2px offset | keyboard Enter opened the existing destination | accepted | passed |
| Proof selectors, settle conditions, negatives, oracle, and capture binding pass | data-route, route root, landmark geometry, authored fixture, and dated captures recorded |
same | typecheck passed; dashboard/login source files untouched | passed |
- Automated result: candidate
- Independent rendered-review result: accepted
- Defects and classification: the initial comparison host was capped at 1280px; exact 1440px route checks and 1920px family checks were completed separately and passed.
- Contract corrections: moved the gateway chip below the identity cluster on narrow screens; kept all recovery copy in glass state panels; added keyboard-equivalent link semantics to agent cards.
- Expansion decision: proceed