dollyVision / design system / part Three Hestia Media Group

Where the tokens meet the work.

The finding card and its density study, the evidence viewer and focus-order map, the matcher explanation and diff, and the queue, coverage and progress components.

03
Finding card

The workhorse

Everything the semantic layer defines meets here. The card carries eleven distinct signals; the design problem is ordering them so an operator triaging four hundred findings by keyboard reads the right one first.

critical regressed automated:axe AA DV-4A81-0117
Interactive control has no accessible name.
main > nav.utility > button:nth-of-type(2)
live differs t1 certain failing 08-08 ACME-2291 · in progress
4.1.2 Name, Role, Value · level A

For all user interface components, the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set.

screenshot
a11y tree
filmstrip
Add an SME note…
/checkout/payment v3 → v4 · seen 3 versions
critical regressed automated:axe AA DV-4A81-0117
Interactive control has no accessible name.
main > nav.utility > button:nth-of-type(2)
live differs t1 certain failing 08-08 ACME-2291 · in progress
4.1.2 Name, Role, Value · level A

For all user interface components, the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set.

screenshot
a11y tree
filmstrip
Add an SME note…
/checkout/payment v3 → v4 · seen 3 versions
Reading order — severity and status lead, because triage is a decision about urgency. Identity signals (staleness, confidence, recheck, ticket) form a second band, visually lighter. The 2px left rule repeats the status colour so a scanning eye can find the regressions down a long list without reading a single chip.
04
Density study

Three densities, same card

The list pane is where an operator spends the day. Each option keeps every signal reachable and differs only in how many it shows before you ask. Pick one as the default — the other two can stay as a view control.

1a Ledger 28px rows
Interactive control has no accessible name
Contrast 3.1:1 on placeholder text
Redundant link text in footer
Focus indicator obscured by sticky header
Keyboard trap in date picker

Severity as a bare meter, status and staleness as two mono glyphs. Roughly 30 findings visible at once. Everything else on selection, in the detail pane.

1b Banded 67px rows
Interactive control has no accessible name
critical regressed differs 4.1.2 · /checkout
Contrast 3.1:1 on placeholder text
serious open 1.4.3 · /search
Redundant link text in footer
minor fixed 2.4.4 · all pages
Keyboard trap in date picker
critical manual gone 2.1.2 · /booking

Title first, badges as a second line that wraps. Around 12 findings visible. The compromise option: labels stay legible, criterion and page stay on the row.

1c Gutter-coded 50px rows
regr
Interactive control has no accessible name
4.1.2 AA · axe · differs
open
Contrast 3.1:1 on placeholder text
1.4.3 AA · axe · matches
fixed
Redundant link text in footer
2.4.4 A · custom · matches
man
Keyboard trap in date picker
2.1.2 A · manual · gone

A fixed 68px gutter holds severity and status in a constant position, so the eye tracks one column down the list. Metadata collapses to one mono line. Around 17 visible.

Recommendation1c as the default. The constant gutter is what makes a long list scannable, and it survives the badge count growing when Theme E adds two statuses; 1a earns its place as a keyboard-triage mode, and 1b reads better in the re-review lanes where there are only a handful of items.
06
Evidence

What the finding is standing on

Findings bind to captured evidence, never to what someone remembers seeing. The viewer's job is to make the binding obvious, and to keep snapshot and live modes impossible to confuse.

Screenshot a11y tree DOM excerpt Focus filmstrip Focus order snapshot v4 live
target element
1440 × 900 · captured 2026-08-08T09:14:26Z
Focus filmstrip
stop 07 / 24 · :focus-visible captured
Evidence log
e-0441 · scan · v4
e-0518 · micro-capture
captured-during: live-review
evidence captured

Mode is a two-state control, not a checkbox: the active half is a filled ink block reading SNAPSHOT V4. In live mode the same block turns amber and the viewport takes a 2px amber frame — the one place the alarm colour is allowed to describe a mode rather than a change.

Focus-order traversal map

2.4.3 evidence, and the thing no competitor ships. Every focus stop in order, the travel between them drawn to scale, and traps marked where the path closes on itself.

/checkout/payment · tab order 24 stops · 4,180px travel · 1 trap
HEADER PAYMENT FORM ORDER SUMMARY FOOTER 1 2 3 4 5 6 7 8 9 14 15 16 17 18 19 20 21 22 23 24 10 11 12 13 TRAP · STOPS 10–13 STOP 5 → 6: 1,240PX
ordered stop trap member traversal pathlong travel annotated in place
07
Identity & diff

Showing the work

The signal bundle is stored rather than hashed, so the SME can always see why two findings were linked. Both of these components exist to make a machine judgement inspectable.

Why matched t3
signal
v3
v4
role
button
button
landmark
main/nav[2]
main/nav[2]
data-testid
cart-open
cart-open
dom path
div>ul>li:2>button
div>nav>button
text
Confirm match C Reject R
Three of four durable signals hold; the DOM path moved. That is a probable match, so it waits for a person. Confirming writes identity only — never a status.
Side-by-side diff semantic · never pixel
v3 · 2026-06-02
v4 · 2026-08-08
changed aria-label: "" "Submit search"
added role: "button"
removed title: "search"
Only assessed properties are diffed, and the changed one is the one highlighted in both panes. Pixel comparison exists in exactly one place: focus-state appearance.
08
Progress & gates

Knowing when you are done

One definition of the sign-off gate, stated the same way everywhere it appears: the manual lanes are empty and the manual track's coverage is complete for this version. Nothing else closes it.

Re-review queue · three lanes
unchanged
0
changed
6
gone
2
O still open F fixed X removed A re-anchor U undo
One-key actions belong to these three lanes and nowhere else. The Tier-3 and Jira-signalled lists sit apart because they carry different authority.
Coverage meter · manual track
perceivable 9/9
operable 12/17
understandable 10/10
robust 3/3
gate open 5 criteria and 8 lane items remain.
Scan progress · capture stages
/checkout/payment done
/search snapshot
/account auth
Five pips, one per stage: load, axe, custom checks, snapshot artifacts, filmstrip. An authentication failure is its own outcome, not a page error.
Sample-freeze declaration
sample frozen 2026-05-30T11:02:19Z
42 pages declared from 1,180 discovered · WCAG-EM · conformance target 2.2 AA
home · login · search · pdp · checkout · contact · account
A frozen sample reads as a legal declaration, not a settings row — square frame, ink rule, timestamp on the face. Unfreezing takes a confirmation and writes an audit-trail note.
Undo toast
6 findings marked fixed undo U
Every one-key and bulk status operation gets one. Rapid keyboard triage guarantees misfires, so undo is a guarantee rather than a courtesy.
Jira push lifecycle
queued uploading rate-limited done skipped · has ticket
Heavy evidence payloads meet Atlassian's rate limits, so in-flight is a normal state. Skipped is dashed: it is the idempotency guard reporting, not a failure.
11
Diagnostics

When the tool itself is the problem

The capture engine may run on another machine, so a failure has to be diagnosable without shelling into a container. The panel's hard rule is on its face: bundles carry logs, never captured client evidence.

Settings › Diagnostics Recent app and engine errors, with their log context.
2026-08-08 09:14 engine Session expired mid-run on /account — 3 pages unreached View log
2026-08-07 16:02 app Crash on launch — report surfaced at next start View log
2026-08-06 11:48 engine Chromium build 18 days behind stable View log
Diagnostic bundle
Export bundle ~4.2 MB
logs only · no client evidence
Remote status endpoint
enabled token · rotated 14d ago
http://engine.local:7801/status
Read-only scan progress and log tail, reachable within operator infrastructure only.
Amber here is Rule 01 — an engine error is something that changed underneath the operator. App-level entries stay neutral until they are the thing blocking work.