Status: done # 08 — FRAUD: Reputation model + persistence ## What to build Implement graduated reputation per ADR-0018 §6: score derives only from tracker audit outcomes + uptime/latency. Slow build, instant loss, inactivity decay. ×0.8 routing multiplier per strike (not whole penalty — forfeiture stays full pending). **Scope split:** issue 05 owns **schema + SQLite persistence**; this issue owns **scoring rules** (deltas, decay, strike→multiplier wiring) on top of persisted fields. **Code refs:** - `packages/contracts/meshnet_contracts/__init__.py` — extend `RegistryWallet` / persistence from issue 05 - `packages/validator/meshnet_validator/__init__.py` — `_slash_route` forfeiture path (~125–133) - `packages/tracker/meshnet_tracker/billing.py` — `forfeit_pending` (~280–292) - Research: `.scratch/alpha-hardening/research-verifiable-inference.md` §6 ## Test-first 1. Red: persisted reputation/strike fields from issue 05 are ignored by scoring/routing today. 2. Green: clean audit +0.05 (tunable); failed audit −0.3 and strike; three strikes → ban persisted via issue-05 fields. 3. Inactivity decay after N days without completed jobs. ## Acceptance criteria - [ ] Uses `reputation_score` and strike/ban fields persisted by issue 05; does not introduce a second schema path - [ ] Audit pass/fail updates score with documented deltas - [ ] Strike applies ×0.8 multiplier to routing weight (separate from forfeiture amount) - [ ] Ban at 3 strikes; probation job count still enforced - [ ] No peer-to-peer reputation inputs ## ADR links - [ADR-0018](../../docs/adr/0018-fraud-detection-verification-and-reputation.md) §6 ## Blocked by - `05-a1-a5-persist-strike-ban-reputation_completed.md` - `07-fraud-commitment-bisection-blame_completed.md` (audit outcomes feed reputation)