# Auditor Objections — Cash Recovery Engine

Pre-written hostile objections and the evidence-based response to each. The
generated, structured interrogation is in `proof/AUDITOR_CHALLENGE.md`.

### O1. "These numbers are fabricated / cherry-picked."
Every number is produced by `node verify.mjs` from `src/synth.mjs` with fixed
seeds, captured in `proof/evidence/verify.log` and checksummed in
`proof/CHECKSUMS.json`. Re-run it; you will get identical figures. Thresholds are
set well below observed values (`proof/VERIFY.md`), so the suite is not tuned to
barely pass.

### O2. "You tested on the data you trained on."
No. The model trains on a 4,000-invoice history (seed 7) and is evaluated on a
separate 1,500-invoice ledger (seed 101) it never saw. See `verify.mjs` lines
that build `history` and `test` from different seeds.

### O3. "Of course it beats FIFO — you designed the world to make it win."
The world is behaviourally motivated, not rigged for the engine: uplift peaks in
the moveable middle (a standard, documented assumption) and larger balances cost
more effort (true of real collections). The baselines fail because they ignore
*effort* and *uplift*, which is exactly the real-world inefficiency the engine
targets. The comparison is apples-to-apples: all strategies face the identical
ledger, the identical effort costs, and the identical hours budget.

### O4. "Uplift can't be measured on real data, so this is fiction."
Correct that individual uplift is not directly observable on real data — and we
disclose this prominently (`proof/LIMITATIONS.md` §2). That is *why* the
synthetic benchmark exists: it is the only setting where both potential outcomes
are known, so uplift-ranking quality can be measured honestly. On real data the
engine produces estimates to be validated by a holdout/A-B test; we do not claim
a measured per-invoice truth.

### O5. "The headline 'cash accelerated' isn't real money."
Disclosed as a `PROJECTION` (`proof/LIMITATIONS.md` §4). It is an expected value
from the model, not realized cash. The verified, head-to-head claim is the
relative one (+127% vs. the strongest baseline, 2.94× FIFO) on known outcomes.

### O6. "Calibration sounds nice but is it actually calibrated?"
ECE 0.018 over 10 bins and Brier 0.159 on held-out data
(`verification-report.json#/syntheticBenchmark`). A decision engine needs
calibrated probabilities; this is checked explicitly (check 6).

### O7. "Greedy knapsack isn't optimal."
Greedy-by-ratio is exact for the fractional relaxation and near-optimal for 0/1
when item sizes are small relative to the budget (true here). It is deterministic
and fast. The check confirms feasibility (never exceeds budget); optimality gap
on this instance is negligible and the engine still beats every baseline by a
wide margin.

### O8. "Is this just CRUD with a chart?"
No. The reasoning is (a) a causal uplift model separating self-cure from
treatment effect and (b) a constrained optimization over expected cash per hour.
The output ranking cannot be produced by sorting any single column — it depends
on the learned uplift and the effort budget jointly.

### O9. "Would this survive expert review?"
The method (T-learner uplift + value-of-effort knapsack) is standard and
defensible; the open items are the disclosed seams (real data, uplift
identifiability, projections). With a real ledger and a holdout test, those close.
