# our_wandb tasks

## Open

- [x] 2026-06-10 — media gallery now lays out horizontally (Cameron req): `#gallery` is flex-wrap row, panels `flex:1 1 260px` so all are visible at once (wrap on narrow screens). Verified in browser.
- [x] 2026-06-10 — added a global step slider (Cameron req): one master slider over the union of all logged steps; snaps every panel to its nearest-step image + syncs the per-panel sliders. Hides when a run has ≤1 step. Verified in browser; no serve.py restart needed (static file). Per-panel sliders kept.
- [x] 2026-06-10 — website_builder restarted serve.py on :8090; verified `/runs/` in a real browser (playwright) on the live yukon mount — list/detail/loss-chart/gallery all render, images load (naturalWidth>0), no console errors, public omidlab.net/runs/ → 200.
- [ ] After browser verify: ping Cameron + confirm the model-grouping key (`--name`) is the granularity he wants (groups are currently per exact run-name; some are size-1 — he may want a coarser model-family grouping).
- [ ] Update vault/fleet/infra/overview.md routes table with `/runs/`; fix stale yam_remote default root note in ROLE.md.
- [ ] (v2, deferred) `.wandb` protobuf parser for full per-step history on older runs whose output.log has no inline losses.

## Done

- [x] 2026-06-10 — read GUIDELINES + REPORT_FORMAT + vault slices + infra/yam context
- [x] 2026-06-10 — recon of real run dirs; confirmed layout, found live roots (yukon, not the stale yam_remote/russet mount), model-grouping key (`--name` in wandb-metadata.json args), and that output.log is a clean loss-curve source (no .wandb binary parsing needed for MVP)
- [x] 2026-06-10 — chose host: thin `/runs/` route on serve.py mirroring the data_viewer pattern (heavy code in separate files); plan written to outbox.md
- [x] 2026-06-10 — coordinated with website_builder; green-lit to add the route block directly (they own the serve.py restart)
- [x] 2026-06-10 — built `reports/wandb_runs.py` (scan/parse) + `reports/runs/index.html` (UI) + serve.py route block. Validated end-to-end via Flask test client on the live yukon mount: list/detail/index/media all 200; path-traversal + bad-id → 404. Handed restart to website_builder.
