Status: ready-for-agent # 10 — FRAUD: Penalty calibration wiring (forfeit + strike + ban) ## What to build End-to-end wiring: confirmed audit failure → atomic pending forfeiture + strike + reputation decay + audit-rate snap to max. Ensure payout cannot race penalty (ADR-0015). Document 19× deterrence math in validator README. **Code refs:** - `packages/validator/meshnet_validator/__init__.py` — `_slash_route` (~102–134) - `packages/tracker/meshnet_tracker/server.py` — `_handle_billing_forfeit` (~2429–2464) - `packages/tracker/meshnet_tracker/billing.py` — `forfeit_pending` (~280–292), payout exclusion for banned (~3337–3344 in settlement loop) - `packages/validator/README.md` — update 20× → 19× at p=0.05 Per ADR-0018: **full pending forfeiture** is primary penalty; ×0.8 is routing decay per strike, not partial forfeit. ## Test-first 1. Red: integration from issue 34 — extend with multi-hop blame wallet from issue 07. 2. Green: node with pending balance → audit fail → pending zero, strike++, banned on 3rd, excluded from next settlement. 3. Settlement loop skips banned wallets (~3337–3344). ## Acceptance criteria - [ ] Audit failure triggers forfeiture + strike in one tracker transaction - [ ] Banned nodes excluded from `payables` / settlement - [ ] Validator uses authenticated forfeit endpoint (issue 02) - [ ] README: `L > 19× g` at p=0.05; pending balance = collateral - [ ] Integration test: 60-request fraud scenario → ban within threshold ## ADR links - [ADR-0018](../../docs/adr/0018-fraud-detection-verification-and-reputation.md) - [ADR-0015](../../docs/adr/0015-usdt-custodial-settlement.md) - Research: [research-verifiable-inference.md](../research-verifiable-inference.md) §1.1 ## Blocked by - `07-fraud-commitment-bisection-blame.md` - `08-fraud-reputation-model-persistence.md` - `02-a2-unified-auth-boundary.md`