Problem
Public, tokenless POST /api/demo writes into the refund-agent suite while the 50-run prune selects newest runs with no suite filter, so anyone can evict real history with demo spam.
Where
app/api/demo/route.ts (public write) + prune in app/api/runs/route.ts / demo/route.ts (no suite scope).
Acceptance
Add a failing test first asserting repeated demo POSTs are throttled (429) or the prune is per-suite. Then fix.
Problem
Public, tokenless
POST /api/demowrites into therefund-agentsuite while the 50-run prune selects newest runs with no suite filter, so anyone can evict real history with demo spam.Where
app/api/demo/route.ts(public write) + prune inapp/api/runs/route.ts/demo/route.ts(no suite scope).Acceptance
Add a failing test first asserting repeated demo POSTs are throttled (429) or the prune is per-suite. Then fix.