claim(M1): per-recipe history sourced from local /var/lib/cc-ci-runs artifacts (full history, not Drone 100-build slice)
Some checks failed
continuous-integration/drone/push Build is failing

history_for() now enumerates run dirs' results.json, groups by recipe, sorts
newest-first by finished timestamp (mixed numeric+named ids — timestamp is the
only correct key), caps at HISTORY_CAP=30, skips malformed/empty/no-recipe dirs.
Overview + badges + /runs + security guards + stdlib-only unchanged.
Local verify: 13/13 unit tests; full-fixture vs 308 real results.json →
bluesky-pds=8 in exact ts order, plausible capped 30 newest, edge dirs skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 16:25:39 +00:00
parent 2d5211f401
commit 3595e80d08
6 changed files with 277 additions and 8 deletions

View File

@ -0,0 +1,14 @@
# 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.
- [ ] M2: deploy (rebuild dashboard image via deploy-dashboard reconcile / nixos-rebuild; content-hash
tag rolls on dashboard.py change), verify live on `/recipe/bluesky-pds` + ≥2 recipes, overview +
badges still 200, host health after.
- [ ] M2: confirm retention does not trim `/var/lib/cc-ci-runs` (record in DECISIONS if a cap needed).
- [ ] DONE: both gates Adversary-PASS in REVIEW-dash.md → write `## DONE` in STATUS-dash.md.