Rate Limit Dashboard
Sliding window counters · Fail-closed · Tenant-scoped · Observable
Quick Test Setup
Click a button → watch console logs + toast notification. Bucket count in "Live Rate Limit Buckets" will update.
Rate Limit Policy Matrix
Red Team Flood Tests
130 rapid recall requests (burst=120) → expect ~120 allowed, remainder throttled (±small concurrency drift)
mwRecallMemory
8 rapid oracle checks → expect 429 after 5
oracleSearch
5 rapid batch rate checks → expect 429 after 2
batchIngestBottles
Acquire lock, try again → expect 409 conflict
batchExtractAllBottles
Verify cost guard tracks usage correctly — expects at least 1 allowed under daily cap (200 searches)
oracleSearch
Live Rate Limit Buckets (0)
Total buckets: 0
✅ No buckets — cleared successfully!
Execution Log
Waiting for activity...
Cost Guard — Daily Usage
Abuse Resistance Audit Trail
Stage 8 — Rate Limiting & Abuse Resistance
Limiter failure → 503 deny. Never allow on broken limiter.
tenant_id always from auth token. Never from caller payload.
Per-minute AND per-hour caps for expensive endpoints.
Every 429 + cost cap hit logged to AuditLog for abuse detection.
Hard caps prevent runaway LLM/embedding spend per tenant per day.
Batch jobs locked per tenant — no parallel extraction disasters.