# v-harness Frontend Adoption Ledger

This ledger began as an `observed`-only study. Viewer V0.4 is the first
implementation project to change selected rows. A status means:

- `adopted` — the same interaction principle is implemented with equivalent
  evidence semantics;
- `modified` — the principle is retained but changed for the internal static,
  read-only product boundary;
- `rejected` — deliberately excluded after review;
- `observed` — still only a study input.

Implementation source:
`0-Project/20260704-vdiff-vharness-visual-trajectory-viewer/`.
Validation evidence: `docs/qa/v04/`, `scripts/qa_viewer_v04.py`, the V0.4 data
tests, and the V0.7 schema contract.

| v-harness mechanism | Dimension | V0.4 status | Implementation and validation evidence | Boundary / difference |
| --- | --- | --- | --- | --- |
| Visual Gallery cards | Data management | modified | Overview Gallery; `overview-1600.png`; browser QA confirms 10 real V3 cards and zero trace requests | Cards are read-only and expose separate Open/Compare actions; no compute-on-card-click. |
| Versioned run archive | Data management | adopted | `catalog.json` immutable `run_uid` / `case_run_id`; 25-run uniqueness tests | No hidden latest-run lookup. |
| Batch selection tray | Data management / comparison | modified | same-case comparison tray and Matrix cell selection | Selection creates a comparison URL, not a compute batch. |
| Gallery case × run matrix | Data management | modified | Matrix view; browser QA confirms ten V3 rows across seven runs | Status uses text badges and four independent axes. |
| Unified run dossier | Single case | adopted | Run workspace with identity, four axes, visual comparator and tabbed evidence | One selected epoch is expanded; the default page is not a full long trace. |
| Target/reproduction fullscreen compare | Single case / comparison | adopted | Run visual comparator and fixed-target Compare workspace | Implemented inside the viewer shell rather than an independent fullscreen stack. |
| Synchronized scroll and fit | Comparison | adopted | Run and Compare controls; three-run QA | Overlay is disabled unless real image dimensions match. |
| Box/list cross-highlighting | Single case / epoch | adopted | BBox overlay and grounding list share evidence objects; keyboard/Escape/focus QA | Uses buttons and managed evidence panel rather than pointer-only hover. |
| Grounding as stage zero | Epoch | adopted | Verification workspace `Stage 0 · Grounding` | Provenance states stored overlay / derived boxes / unavailable. |
| Per-epoch gate evidence | Epoch | adopted | selected-epoch strip/detail, gate issues, deep link to replay | Only one epoch detail is expanded at a time. |
| Tool-group chips | Epoch | adopted | selected epoch tool groups and explicit aggregate counting scope | Counts never imply order when ordered events are absent. |
| Full visual question/answer bank | Epoch | adopted | Verification and selected-epoch evidence lists | Long evidence is progressive and opens in a managed panel. |
| Live typed event stream | Replay | modified | deterministic static replay over all raw events; `case-h1` 770/770 QA | It is not live and never substitutes merged turns for raw events. |
| HTML interactive replay | Replay | adopted | Play/Pause/seek/filter/deep-link, event narrator and mobile Visual/Events/Evidence tabs | Speed is events/second, not claimed wall-clock time. |
| Intermediate frame capture | Replay | modified | replay frame provenance; V3 `case-h1` reports 770 events but seven distinct frames | Missing visuals are held/unavailable; one event is not assumed to equal one frame. |
| Managed overlay stack | Cross-cutting | modified | one evidence panel and one navigator drawer; Escape closes the top surface and restores focus | Replaces independent listener stacks. |
| Explicit empty/error recovery | Cross-cutting | adopted | aggregate-only, final-only, missing visual and workspace error states | Recovery only navigates evidence; it never starts compute. |
| Card click starts compute | Data management | rejected | Separate Open/Compare buttons and read-only product contract | Viewer never runs, stops, retries, uploads or deletes cases. |
| Hidden latest-run resolution | Data management | rejected | immutable URL and identity tests | Every dossier, epoch and replay resolves an explicit `case_run_id`. |
| Hover-only destructive actions | Cross-cutting | rejected | no destructive actions in Viewer V0.4 | Destructive control is outside this product. |
| Independent overlay/Escape stacks | Cross-cutting | rejected | managed panel/drawer state and keyboard QA | One Escape action closes only the current top surface. |
| Event equals unique frame | Replay | rejected | checksum-based replay test and frame provenance UI | Repeated checksum is `held_previous`, not a new frame. |
| Construction strategy derivation | Single case | observed | Debug tab shows only adapter-provided evidence; otherwise `not captured` | No frontend inference of strategy is allowed yet. |
| Persistent multi-user annotations | Cross-cutting | observed | Not implemented | Requires a backend/account model and remains out of V0.4 scope. |

