Dual-surface factor lab
Reader
A designer or engineer comparing enough page options to freeze factors — and anyone evaluating human–system interface loops for Outer Voice or Stackmates.
Primary job
Demonstrate one canonical state projected onto dual surfaces: a human exploration panel (spatial, narrative, recoverable) and an agent protocol panel (typed, explicit, no visual inference required). Factor contrast lives on the human side; freeze and learning return to the earliest owner.
Composition thesis
Dream specimen, not production catalogue. Dark full-bleed shell with
Orient → Explore → Act → Observe → Correct → Learn loop rail. One LabState
controls both surfaces. Human panel shows live-stage claim + factor options;
agent panel shows canonical JSON, permitted actions, and constraints. Same
frozen claim across options. Vary placement, evidence, density, nav scent —
never invent a second identity. A second specimen on Explore is the public
journey navbar: four chrome-only options (A–D) for the live doors
Principles → Priorities → Platform → Process → Play. Current door in every
specimen is Process. Shared claim copy does not change. Thoughts may appear only
as option D, after a hairline, as a glossary door — a Wik product choice, not
doctrine. No clinic CTA. No crimson current-door. No live navbar swap from this
page.
Experiment binding
| Field | Value |
|---|---|
| Signal | hermes:ux:human-system-interface-loop |
| Candidate | Dual-surface + one canonical state (human + agent panels) |
| Disposition | matched trial only — discovery ≠ adoption |
| Falsifier | Treating this page as a promoted OV standard without three matched trials + Wik COMMIT; separating human and agent surfaces into two apps or unlinked states |
Loop stations (HSI)
The human–system interface loop follows Orient → Explore → Act → Observe → Correct → Learn. Each phase has explicit human and agent responsibilities:
- Orient: human sees job/constraints; agent discovers identity and authority
- Explore: human compares options; agent reads state and legal transitions
- Act: human names the factor that mattered; agent validates and executes freeze
- Observe: human sees consequence; agent receives result and exposes variance
- Correct: human recovers or stops; agent corrects, retries, or escalates
- Learn: human keeps what changed judgment; agent returns evidence to earliest owner
Loop architecture from Inner hermes:ux:human-system-interface-loop. PE
helpers (popover + command/commandfor) trial under
hermes:ux:signal:html-platform-mid-2026 — present in doctrine popover only.
Design instruments (reference)
Factor contrast is one station on this wireframe lab. Station→instrument map:
| Station | Instrument | Purpose |
|---|---|---|
| Shape (contrast) | Factor contrast | Name the factor that changed judgment; freeze for next tighter round |
| Shape + craft | Inspo (inspomcp.dev) | Real-world composition contrast for open factors |
| Write | SlopMonster (pnpm slop) | Score shared copy once before options diverge |
| Compose + govern | @shadcn/lint | Warnings on local TypeScript against design-system tokens |
| AI interaction | json-render (hold) | Guardrailed generative UI catalog with one canonical state |
| Craft (spatial only) | ThreeUI + checklist | Frozen spatial factors; HTML completes task; meaning survives without WebGL |
Live craft skill: .agents/skills/impeccable/SKILL.md.
Instruments supply evidence, gates, or reference at their station only — do not
install a parallel taste stack.
Protected constraints
- Local design-system primitives for the live stage claim/CTA/evidence.
- Same copy across options (CONTENT_DRIFT kill signal).
- Human names the deciding factor; agents do not declare a visual winner.
- Do not invent clinic CTA or Attention/COMMIT via new widgets.
- One canonical state; both surfaces are projections of that state.
- Navbar specimens reuse live door labels and routes from
src/data/site-navigation/navigation-registry.js. Do not mass-rename Playbook to Process here; the public navbar already says Process. - Thoughts-in-navbar is optional (option D). Do not present it as Inner doctrine.
Public journey navbar (Explore)
Same A–D switcher grammar as page composition. Factors: sequence marks, current-door mark, density, Thoughts door.
| Option | Title | What the reader gets | Varies |
|---|---|---|---|
| A | Sequential spine | Numbered 1–5 with hairline connectors | sequenceMarks |
| B | Current-door emphasis | Same five doors; current is a muted pill, not crimson | currentMark |
| C | Compact list | Tighter type; current is ink weight only | density |
| D | Expanded with Thoughts | Five journey doors, then a quieter /thoughts/ glossary link | thoughtsDoor |
Recommendation for freeze (not a shipped winner): B. It teaches “where I am” without implying every reader walks 1–5, and without promoting Thoughts.
Observable proof
- Human and agent panels resolve to the same freeze, constraints, and stop authority.
- A reader can switch options and see live-stage factor variation (A–D).
- A reader can name which factor to freeze next and record learning.
- An agent can read
data-agent-stateJSON without scraping pixels.