.sightmap/ YAML without opening a browser. They classify each interactive node into a tier:
A view can have several timestamped captures.
coverage reports tiers per capture and evaluates component presence across the set. multi-coverage takes the highest match count per component in each view. report aggregates each view into one row.
These commands read the
.snap.tree.json files written by snapshot. See Capture commands for creating them and View sets for their layout. Use validate and lint to check the YAML itself; see Corpus commands.coverage
Re-runs T1/T2/T3 coverage on saved captures. With no arguments, it reads captures under .sightmap/snapshots/ and legacy .snap files in the current directory. Pass one or more FILE.snap paths to score only those files; each needs a .snap.tree.json sibling. Coverage counts visible nodes by default. Use --include-hidden when hidden and off-screen nodes belong in the analysis.
coverage prints tiers for each capture and evaluates component presence across the view set:
[Warnings]lists components that matched none of the captures even though their leaf selector matched nodes. The full scoped selector is likely wrong.[Absent]lists components whose full selector and leaf selector matched nothing in the set.[Presence]lists components that matched only some captures and shows the most recent matching capture.
[Warnings], [Absent], [Presence], and [Annotation gaps] do not affect the exit status. [Annotation gaps] lists non-interactive content nodes with no component context when their accessible names contain a letter and are at least 12 characters long.
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 a cross-page matrix with one row per component and one column per view. Each cell is the highest match count for that component across the view’s captures. - means the component never matched in that view. The column header reads view·N when the view has more than one capture.
Below the matrix, multi-coverage lists components that matched in at least two views but are not global components. It counts views rather than capture files.
Flags:
DigitalEndcap matched four nodes in at least one home capture, so its cell reads 4. FacetFilter and PromoBanner each appear in one view and are not listed as global candidates.
report
Prints one row for each view with a top-level url. Each row aggregates the view set. A view with no saved captures shows MISSING – run: sightmap capture --all.
How a set of N captures rolls up to one row:
report fails if any capture has a T3 orphan or any view is missing captures. The maximum T3 count prevents a clean capture from hiding orphans in another capture. The T2 quality section lists up to 15 components whose subtrees contain at least three unnamed interactive children.
Flags:
Typical flow
1
Refresh captures
Run
sightmap capture --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 review the global candidates. Move a component into the root components: collection only when it should match every view.4
Check corpus health
Run
sightmap report. Check that every view shows ✓, no view is MISSING, and each remaining T2 cluster is intentional.