perf(web): request only the displayed spectrum side

Add optional addressSide=source|destination response projection. Omission retains the full API. Keep both sides in row membership, grouping, MAX(bucket_end) and coverage queries. Decode only the requested blob and return the other array empty. Scope dashboard request/cancellation/window-cache keys to the side.

After Mini checkpoint: default visible/all charts 478.9/2845.6 -> 455.9/2805.9 ms, TBT 104 -> 98 ms, heap 18.5 -> 18.1 MiB. Real default selected-source decoded payload 860.8 -> 414.6 KiB, saving 51.8%. SQLite and D1 tests compare projection with full responses, including unequal sides and an opposite-side-only bucket. Stored schema, additive rollups, half-open windows and zero-fill are unchanged.

Checkpoint measurements above predate the final QA lifecycle/coverage fixes and are not isolated shipping effects. Combined shipping benchmark: 477.2/2934.3 ms default visible/all charts, 114 ms observed initial TBT, 18.2 MiB retained heap and 191.1 KiB gzip JS. Original baseline: 509.1/3258.9 ms, 130 ms, 18.3 MiB, 228.1 KiB. Layer 3: 569.3/4271.3 ms, 159 ms, 29.9 MiB, 202.4 KiB. Baseline dates, five API runs, three fresh contexts per page and one warmup; no concurrent QA/build/dev work. Shipping artifacts: /tmp/atlantis-frontend-overhaul/perf/layer4-shipping/results.json. Full gates pass with 220 web and 70 e2e tests.
72e556f9faflamboh committed on 10/6/2026, 7:02:36 PMparent63b43c9
3 files changedLine totals unavailable