68 lines
3.2 KiB
Markdown
68 lines
3.2 KiB
Markdown
# BACKLOG — cc-ci
|
||
|
||
Two single-writer sections (§6.1): Builder edits only `## Build backlog`; Adversary edits only
|
||
`## Adversary findings`. Closing an item = checking the box in your own section.
|
||
|
||
## Build backlog
|
||
|
||
### M0 — Foundations
|
||
- [x] Author flake.nix (NixOS host cc-ci) + hosts/cc-ci/{configuration,hardware}.nix from baseline
|
||
- [x] Deploy mechanism decision + first rebuild from repo (DECISIONS.md) — switch --flake on host
|
||
- [x] sops-nix wiring: host age key (from ssh host key) + master recovery key; secrets/secrets.yaml;
|
||
decrypt a test secret on host → /run/secrets/test_secret (0400 root) verified
|
||
- [x] Gate: M0 — `ssh cc-ci 'systemctl is-system-running'` healthy after rebuild from repo
|
||
→ CLAIMED 2026-05-26, awaiting Adversary (see STATUS.md)
|
||
|
||
### M1 — Swarm + abra target
|
||
- [x] Docker + single-node swarm via Nix (modules/swarm.nix: docker + swarm-init oneshot + `proxy`
|
||
overlay net + daily autoprune). Verified: Swarm=active, proxy overlay present.
|
||
- [x] Traefik (file provider → /var/lib/ci-certs/live/) as a swarm stack on `proxy`; wildcard cert
|
||
served as default cert. Verified end-to-end: gateway 143.244.213.108:443 SNI-passthrough →
|
||
cc-ci Traefik terminates TLS w/ `CN=*.ci.commoninternet.net` (LE E8), HTTP 404 (no router yet).
|
||
- [ ] abra installed; deploy + tear down a trivial recipe by hand over HTTPS
|
||
- [ ] Gate: M1 — recipe reachable over HTTPS at *.ci.commoninternet.net, torn down clean
|
||
|
||
### M2 — Drone online
|
||
- [ ] Drone server + exec runner via Nix; Gitea OAuth app
|
||
- [ ] hello-world .drone.yml runs green; logs in Drone UI
|
||
- [ ] Gate: M2 — push to cc-ci triggers visible green build
|
||
|
||
### M3 — Comment bridge
|
||
- [ ] comment-bridge service: HMAC verify, !testme exact match, collaborator check, Drone API call
|
||
- [ ] PR comment posting with run link
|
||
- [ ] Gate: M3 — live demo on scratch PR; auth enforced
|
||
|
||
### M4 — Harness + install stage
|
||
- [ ] run_recipe_ci.py + conftest; install stage for recipe #1 + Playwright assertion; teardown
|
||
- [ ] Gate: M4 — green install run, no orphaned app/volume
|
||
|
||
### M5 — Upgrade + backup/restore stages
|
||
- [ ] Add upgrade + backup/restore stages for recipe #1
|
||
- [ ] Gate: M5 — upgrade preserves data; backup→mutate→restore returns original
|
||
|
||
### M6 — Recipe-local tests + second recipe
|
||
- [ ] Discover/run recipe-repo tests/; enroll DB-backed recipe #2
|
||
- [ ] Gate: M6 — both green; recipe-local tests merged
|
||
|
||
### M6.5 — Breadth ramp (recipes 3→6)
|
||
- [ ] Enroll recipes 3–6 covering remaining D10 categories, no harness surgery
|
||
- [ ] Gate: M6.5 — recipes 3–6 three-stage green
|
||
|
||
### M7 — Secrets hardening (D6)
|
||
- [ ] Full sops model, rotation doc, log redaction + leak test
|
||
- [ ] Gate: M7 — secret-grep finds nothing
|
||
|
||
### M8 — Dashboard (D7)
|
||
- [ ] Overview page + badges + PR-comment outcome reflection
|
||
- [ ] Gate: M8 — overview matches reality; outcomes mirrored
|
||
|
||
### M9 — Reproducibility + docs (D8/D9)
|
||
- [ ] docs/install.md from-scratch rebuild; all docs complete
|
||
- [ ] Gate: M9 — Adversary rebuilds from docs on throwaway host
|
||
|
||
### M10 — Proof (D10)
|
||
- [ ] All six recipes green via real !testme PRs; flip STATUS to DONE
|
||
|
||
## Adversary findings
|
||
<!-- Adversary-only section. Builder must not edit below this line. -->
|