- validators.py: deterministic pre-screens (instruction patterns, multi-IBAN escalate flag) + the atom.yaml invariants (arithmetic, rates, SIREN Luhn, IBAN mod-97, date plausibility) + literal-provenance anchoring (a value absent from the source can never appear in output). Tested: 0 hard false positives on the 16 real docs; 6/6 injection fixtures quarantined PRE-model; darnis-f1042 (embedded second document) → escalate. - extract.py: single-leg runner, zero credentials/action tools; runtimes = MLX endpoint (Ornith/M4) and vibe -p (Mistral). - dual_run.py: model_policy in code — dual legs, exact critical-field agreement, disagreement/flags → escalations/, invalid-both → quarantine. Eval run against the golden set follows in this branch. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01VRShc4QhLLU73FLHx9vskh
invoice-extract/scripts — intentionally empty
The implementation — dual-run extraction drivers (M4 local ∥ Mistral API),
deterministic validators (arithmetic, rates, SIREN/IBAN checksums, dedupe,
provenance re-verification), the stubbed OCR fallback and the scoring hooks —
lands with erp#40.
This scaffold ships the contract only (../atom.yaml); do not
fake extraction code here.