.sightmap/ YAML and classify every interactive node into a tier:
A view is a set of timestamped captures, and all three commands score the union of that set: real pages render differently load to load, so a component missing from one capture is not a dead selector. All three exit 0 on success and 1 on failure.
These commands read the
.snap.tree.json files written by snapshot — see Capture commands for producing them and View sets for how the sets are organized. Coverage only scores nodes; validating the YAML itself is validate and lint (see Corpus commands).coverage
Re-runs T1/T2/T3 coverage on saved captures. With no arguments it walks every capture under .sightmap/snapshots/; pass one or more FILE.snap paths to score just those (each needs its .snap.tree.json sibling). Counts visible nodes only by default — running with --include-hidden unintentionally inflates T3 with false failures.
coverage prints a per-capture tier line (each capture describes one DOM), but judges component presence across the whole view set:
[Warnings]— components that matched 0 of N snaps while their leaf selector part does match nodes: the scoped selector is likely broken.[Absent]— components that matched 0 of N snaps and whose leaf part matches nothing either: structurally valid selector, element simply not rendered in the captured scenarios.[Presence]— components matched in only a subset of the set, with the last-matched capture stamp. These are not failures; they are what a union-scored set is for.
[Warnings], [Absent]) are reported without affecting the exit status. A trailing [Annotation gaps] section is purely advisory — it lists non-interactive content nodes whose accessible name carries real information but that have zero component context, and never affects the exit status.
Flags:
--trace, each failing capture also prints its orphan clusters, grouped by role and nearest stable-attribute ancestor with a suggested selector:
multi-coverage
Builds the cross-page coverage matrix: one row per component, one column per view. A view’s captures fold into a single column whose cell is the maximum matched count across the set — “renders up to K of these” — and - marks a component that never matched in any of that view’s captures. The column header reads view·N when the view carries more than one capture.
Below the matrix, multi-coverage lists global candidates: components that matched in 2 or more views but are not yet in components.yaml. Candidates count views, not capture files, so a single view snapped many times never trips the threshold. The promotion rule of thumb: 3+ views with the same selector, always promote; 2 views with identical selectors, usually promote; 2 views with different selectors, keep view-scoped.
Flags:
DigitalEndcap, a lazy carousel that rendered in only one of home’s three captures — it still reads 4, not dead. FacetFilter and PromoBanner each appear in a single view, so they are correctly not promotion candidates.
report
The corpus health table: one row per view with a URL, aggregated over the view’s whole view set. URLs come from each view’s top-level url: in views/*.yaml. Views with no saved captures show MISSING – run: sightmap snapshot --all.
How a set of N captures rolls up to one row:
The max-T3 gate is what keeps
report and coverage in agreement: both fail iff some capture in a set has an orphan, so a clean final load can never mask an earlier capture’s gaps. After the table, a T2 quality section aggregates the largest T2 clusters across all views — each entry is a component whose subtree contains multiple unnamed interactive children, i.e. the next place to add child components. report exits 1 when any view fails the T3 gate or has no captures.
Flags:
Typical flow
1
Refresh captures
Run
sightmap snapshot --all against a live session to append a novelty-gated capture for every view URL declared in views/*.yaml (see Capture commands).2
Score the sets
Run
sightmap coverage (add --trace on failures). Fix broken selectors flagged under [Warnings], and author components for any orphan clusters until every capture reads 0 orphaned T3 ✓.3
Promote cross-page components
Run
sightmap multi-coverage and move each global candidate that appears in 2+ views into components.yaml.4
Check corpus health
Run
sightmap report. You are done when every view shows ✓, nothing is MISSING, and the T2 quality list contains only clusters you have deliberately accepted.