Status: ACTIVE. The full env-var surface for running VERDICT, grouped by purpose. Each
row names the default and which script/component reads it. Defaults are what the code ships;
when in doubt, grep the script.
Credentials (Amendment A1 — one of three, priority order)¶
Enables live dashboard streaming to :3000 + pins case_id so the dashboard can open before the run finishes
FINDEVIL_REPO_ROOT
repo root
dashboard (apps/web)
Lets the dashboard serve audit JSONL from any case dir
FINDEVIL_DASHBOARD_EXTRA_ROOTS
unset
dashboard
Additional allowed roots for case paths (e.g. tmp/auto-runs)
PYTHONPATH
prepended services/agent
scripts/verdict (local mode)
Resolves the agent package in FIND_EVIL_LOCAL=1
FINDEVIL_L1_DOCKER
unset
dashboard build
Disables some Next.js optimizations for CI Docker
FIND_EVIL_FAULT_INJECT
unset
find_evil_auto.py (verify stage)
Demo/showcase fault hook: verifier_reject_once:<finding-id-fragment> corrupts ONE verify replay's tool name on the first attempt so the verifier rejects and the re-dispatch loop recovers — live, on camera. Inert by default; never silent (audited fault_injection record + stderr banner)
FIND_EVIL_REQUIRE_ASSERTED_VALUES
unset (1 to enable)
events.Finding validator
Fact-fidelity (R3) gate: when 1, a CONFIRMED finding MUST declare asserted_values and an INFERRED finding MUST declare asserted_values or derived_from, so the verifier's entailment check can re-extract each value. Default-off until the finding emitters populate the field.
FIND_EVIL_REQUIRE_COUNTER_HYPOTHESIS
unset (1 to enable)
judge.judge_findings
Counter-hypothesis gate: when 1, a solo (single-pool, uncorroborated) CONFIRMED finding collapses to INFERRED unless cross-pool corroboration raises it back — a CONFIRMED claim must survive the other pool's challenge. Default-off; trades recall for a stricter corroboration bar (the verifier + ≥2-artifact-class gate already cover this in the default pipeline).
FIND_EVIL_REQUIRE_ARTIFACT_REBIND
unset (1 to enable)
verifier.reverify_finding
Evidence re-binding gate: when 1, the verifier re-derives the artifact from the cited tool_call's recorded *_path argument(s) and REJECTS (drift_class=artifact_rebind_mismatch) a finding whose claimed artifact_path does not match what the cited call read — hardens against a real tool_call_id glued to a fabricated artifact. A preflight (runs before replay); a call with no *_path argument is not gated. Default-off until finding emitters set artifact_path to the cited call's path.
Anti-coherence "too clean" gate: when 1, a CONFIRMED finding MUST carry a non-blank counter_hypothesis (the benign alternative it ruled out); the schema validator rejects construction and the verifier preflight rejects re-verify (drift_class=counter_hypothesis_missing). Binds only CONFIRMED (the strongest tier); lower tiers exempt. Complements the judge.py FIND_EVIL_REQUIRE_COUNTER_HYPOTHESIS discipline. Default-off until emitters populate the field.
Explicit opt-in for the local operator memory sidecar.
INDEX_PATH
~/.cache/qmd/<index>.sqlite
local qmd-mcp.mjs
Forces the QMD SQLite store when an operator supplies a local obsidian-mind/ vault.
The public release does not ship an operator memory vault. scripts/run-mcp-qmd.sh
exits cleanly unless FINDEVIL_ENABLE_QMD=1 is set and
obsidian-mind/.claude/scripts/qmd-mcp.mjs is present as a real local file.