Coverage reporting

Updated Oct 18, 2026

Unclassified and unresolved edges are reported rather than skipped, so a new package subtree or a misspelled prefix in the policy always leaves a trace instead of vanishing. Whether that trace fails the build depends on severity: only an entry at error severity sets a non-zero exit code.

JSON output always includes a coverage array:

hecate check --format json | jq '.coverage'

Each entry carries state, severity, importer, imported, line, and whichever endpoint groups were resolved. Text output hides coverage warnings by default to keep snapshots stable; pass --show-coverage to see them alongside a pass or fail message. Coverage findings that fail the check are always shown.

An edge covered by a matching ignore_imports entry is exempted rather than reported, so it appears in the ignored section and not in coverage. Only an unclassified or unresolved edge with no matching ignore reaches the coverage section.

Outside strict mode these findings are warnings, so adding a subtree does not break an existing build. Inside strict mode they become failures.