$ node.exe node_modules\tsx\dist\cli.mjs scripts\bench.ts
(cwd: .)
exit 0 after 23.4s

--- stdout ---
environment: Windows_NT 10.0.26300 · 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz × 4 · 7.8 GiB RAM · Node v24.18.0
database: PostgreSQL 18.4 on x86_64-windows (embedded, fsync off, loopback)
dataset: 10000 synthetic assets (+ sources, evidence, date claims, 2000 proposals) in one workspace; seeded in 2.1 s
load: 20 concurrent virtual users × 60 requests = 1200 requests in 14.2 s (84 req/s), errors: 0

| endpoint | n | p50 ms | p95 ms | p99 ms | max ms |
|---|---:|---:|---:|---:|---:|
| GET /assets | 342 | 161 | 267 | 474 | 808 |
| GET /imports | 171 | 148 | 291 | 518 | 542 |
| GET /privacy/overview | 172 | 218 | 370 | 517 | 699 |
| GET /proposals | 172 | 160 | 250 | 394 | 645 |
| GET /review/inbox | 172 | 349 | 496 | 718 | 748 |
| GET /timeline | 171 | 357 | 519 | 638 | 722 |
| **all** | 1200 | 202 | **435** | 573 | 808 |

SLO check (docs/02: API p95 < 500 ms for metadata reads at 20 concurrent users): PASS (p95 = 435 ms)

--- stderr ---

