# BACKLOG — phase `dash`

## Build backlog

- [x] Root-cause confirmed (Drone 100-build window) + host artifact schema inspected.
- [x] M1: rewrite `history_for` to source from `/var/lib/cc-ci-runs` local artifacts, newest-first by
      `finished`, capped at HISTORY_CAP, malformed/empty dirs skipped, security/other routes unchanged.
- [x] M1: unit test for local sourcing (count/order/cap/skip) + full-fixture verify vs real data.
- [ ] M1: awaiting Adversary PASS in REVIEW-dash.md.
- [x] M2: deployed. Procedure (host flake source = `/etc/cc-ci` git clone):
      `ssh cc-ci 'git -C /etc/cc-ci pull && systemd-run --no-block --unit=ccci-dash-sw --collect
      --property=Type=oneshot nixos-rebuild switch --flake /etc/cc-ci#cc-ci'`. Content-hash image tag
      rolls dashboard.py change: current deployed `15addbc7bf45` → expected new `11ac2a1e6c07`
      (`sha256sum dashboard/dashboard.py | cut -c1-12`). Then verify live on `/recipe/bluesky-pds`
      (8 runs) + ≥2 recipes, overview + badges still 200, deploy-dashboard active, host health after.
- [x] M2: retention confirmed — no trim job; does not trim `/var/lib/cc-ci-runs` (record in DECISIONS if a cap needed).
- [x] DONE: both gates Adversary-PASS in REVIEW-dash.md → write `## DONE` in STATUS-dash.md.
