Reach 2.x is validated at multiple levels.
Project gates
mix compile --force --warnings-as-errors
mix ci
mix docs
mix hex.build
mix ci includes formatting, JavaScript checks, Credo/ExSlop, ExDNA duplication checks, architecture policy, Dialyzer, and tests.
Canonical CLI validation
Checked-in canonical command tests exercise command routing, canonical envelopes, graph-backed candidates, and JSON purity.
mix test test/reach/cli/canonical_tasks_test.exs test/reach/cli/json_output_test.exs
ProgramFacts oracle validation
Reach uses ProgramFacts-generated Elixir projects and oracle facts to validate call graphs, layouts, data flow, effects, architecture policies, branch/control-flow policies, and syntax policies.
Exograph corpus calibration
From a Reach source checkout, repository-only calibration tooling can consume Exograph's versioned query and hydration APIs without making Exograph execute Reach analyzers. This tooling is isolated from the shipped Reach runtime and Hex package:
cd dev/calibration
mix calibration.run \
--base-url http://localhost:4200 \
--limit 25 \
--kinds dual_key_fallback,false_collapsing_lookup \
--output /tmp/reach-calibration.json
When indexed prefilters are available, Reach hydrates only the candidate files
returned by Exograph. Pass one or more --paths globs to override that scope;
queries without indexed prefilters fall back to lib/**.
Each finding receives a stable review ID. Supply a JSON object mapping those IDs
to true_positive or false_positive with --labels; the report then includes
reviewed precision per smell kind. Snapshot fingerprints and package versions
make reviewed samples reproducible.
Block quality
Visualization changes must preserve source coverage, disjoint block ranges, branch boundaries, clause blocks, non-empty labels, connected exits, and no duplicated lines.
mix test test/reach/visualize/block_quality_test.exs