The shared driver core for mix compile.scry and mix scry: database
lifecycle, manifest warm start, input sync, the souffle gate, and
analysis demand.
One Roux.Database lives for the duration of a run; the manifest is
the only continuity across OS processes. The manifest is written even
when analyses degrade — the input syncs done this run stay warm, so
error-loop editing stays incremental.
When souffle is missing, no solve is demanded at all: a memoized
{:error, :souffle_not_found} would only heal when an input above it
changed, so the degraded path never lets one into the manifest. The
souffle version rides :env_fingerprint as the second line of
defense — installing (or upgrading) souffle moves the fingerprint and
invalidates anything that slipped through.
Summary
Functions
The manifest path shared by mix compile.scry and mix scry — one
incremental state, whichever entry point drives it.
Runs the configured analyses against the project's compiled beams.
Functions
@spec manifest_file() :: String.t()
The manifest path shared by mix compile.scry and mix scry — one
incremental state, whichever entry point drives it.
@spec run( Scry.Config.t(), keyword() ) :: Scry.Runner.Result.t()
Runs the configured analyses against the project's compiled beams.
Options:
:manifest(required) — the manifest path for cross-run incrementality.:force— skip the warm start and recompute everything (defaultfalse).