A single issue surfaced by an analysis pass. Findings carry a stable
check id (so they can be allowlisted in CI), a severity, and the source
location they point at.
Summary
Types
How much to trust the finding
Report grouping: :primary = high-signal coupling/correctness; :secondary = structural/advisory.
Functions
Numeric rank for a severity (lower = more severe).
A stable identity for a finding, used to allowlist it in .firebreak.exs or to
diff a run against a committed baseline.
Sort findings by severity (high first), then by module/line.
Which report tier a check belongs to. :primary is the high-signal coupling and
correctness set the report leads with; :secondary is the structural/advisory
set (blast-radius strategies, orphan heuristics, intensity advice) — real, but
more often by-design or lower-confidence, so it's grouped afterwards.
Types
@type confidence() :: :exact | :best_effort
How much to trust the finding:
:exact— derived from the runtime supervision tree (Mod.init/1).:best_effort— derived from static source parsing, which may miss dynamically-assembled structure or rest on a heuristic.
@type severity() :: :high | :medium | :low | :info
@type t() :: %Firebreak.Finding{ check: atom(), confidence: confidence(), details: map(), file: String.t() | nil, line: non_neg_integer() | nil, message: String.t(), module: module() | nil, severity: severity() }
@type tier() :: :primary | :secondary
Report grouping: :primary = high-signal coupling/correctness; :secondary = structural/advisory.
Functions
Numeric rank for a severity (lower = more severe).
A stable identity for a finding, used to allowlist it in .firebreak.exs or to
diff a run against a committed baseline.
Deliberately excludes volatile data — line numbers, caller counts, message wording — so a finding keeps the same signature as the surrounding code shifts. The optional discriminator distinguishes multiple findings of the same check on the same module (e.g. a boot-order pair is keyed by its callee).
"cross_tree_coupling:MyApp.Sup"
"boot_order_dependency:MyApp.Early/MyApp.Late"
Sort findings by severity (high first), then by module/line.
Which report tier a check belongs to. :primary is the high-signal coupling and
correctness set the report leads with; :secondary is the structural/advisory
set (blast-radius strategies, orphan heuristics, intensity advice) — real, but
more often by-design or lower-confidence, so it's grouped afterwards.