Files
cc-ci/machine-docs/STATUS-1d.md
autonomic-bot c965f6cc9a status(1d): re-claim G1 (DG2 non-vacuous after F1d-2 fix) + claim G2 (DG4/DG4.1 overlay layering)
custom-html overlays override+extend the generic for all 4 ops, data-continuity round-trips,
deploy-count=1, clean teardown. Discovery precedence unit tests 5/5. hedgedoc generic lifecycle
green with genuine 1.10.7->1.10.8 upgrade (move-assertion).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 00:12:39 +01:00

75 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STATUS — Phase 1d (generic test suite + layered recipe overlays)
**Phase plan (SSOT):** `/srv/cc-ci/cc-ci-plan/plan-phase1d-generic-test-suite.md`
**Loop state for THIS phase:** STATUS-1d / BACKLOG-1d / REVIEW-1d / JOURNAL-1d (DECISIONS.md shared).
The repo's STATUS.md/BACKLOG.md/REVIEW.md (Phase 1) and STATUS-1b/1c (DONE) are HISTORY, not this
phase's state.
## Phase
Phase 1d runs after Phase 1b (DONE) and before Phase 2. It is the **test-architecture foundation**:
every recipe gets a generic lifecycle suite for free; recipe-specific tests layer on top
(override-or-extend). Bounded — build the architecture + prove it on a couple of recipes; full
per-recipe overlay authoring is Phase 2.
## Definition of Done (Phase 1d) — DG1DG8, each Adversary cold-verified in REVIEW-1d
- [x] **DG1** — Generic INSTALL test (recipe-agnostic): app new→deploy→converged→really serving
(real HTTP(S), not Traefik fallback). Green on a simple recipe with no cc-ci/repo-local tests.
**Adversary PASS @2026-05-27** (cold, hedgedoc, deploy-count=1, clean teardown).
- [~] **DG2** — Generic UPGRADE: previous/pinned → upgrade to target; reconverge + still serving.
**Green on hedgedoc (3.0.9→3.0.10); CLAIMED (G1).**
- [~] **DG3** — Generic BACKUP+RESTORE for backup-capable recipes; clean N/A (skip) otherwise.
**Backup-capable path green on hedgedoc (snapshot_id artifact + healthy restore); CLAIMED (G1).**
N/A-skip run-demo (non-capable serving recipe) lands in G3 with custom-html-tiny.
- [~] **DG4** — Layering (override-or-extend; generic is the default); discovery + cc-ci/repo-local
precedence settled in DECISIONS. Invariant: no overlay for an op ⇒ generic runs.
**CLAIMED (G2): custom-html overlays override+extend the generic, all 4 tiers green; discovery
precedence unit tests 5/5.**
- [~] **DG4.1** — Overlays reuse the deployment: ONE deploy + ONE teardown per run; no extra
new/deploy/undeploy (assert via deploy-count). **CLAIMED (G2): deploy-count=1 across the full
overlay lifecycle.**
- [ ] **DG5** — Custom install-steps hook + graceful-generic rule; fail-without / pass-with proof.
- [ ] **DG6**`!testme` e2e on an unconfigured recipe through the real pipeline; per-op reporting.
- [ ] **DG7** — Real, DRY, clean: no softened/skip/xfail assertions; generic in the shared harness;
teardown always; respects MAX_TESTS.
- [ ] **DG8** — Documented (docs/ explains the generic suite, overlay convention, hook) + cold-verify.
## Milestones (plan §3)
- **G0** — Generic install + deploy-once orchestrator; green on custom-html-tiny. *Accept: DG1.*
- **G1** — Generic upgrade + backup/restore. *Accept: DG2, DG3.*
- **G2** — Layering + discovery + precedence. *Accept: DG4, DG4.1.*
- **G3** — Custom install-steps hook + graceful-generic. *Accept: DG5.*
- **G4** — `!testme` e2e + per-op reporting + docs + cold verify. *Accept: DG6, DG7, DG8 → DONE.*
## In flight
**G3 — custom install-steps hook + graceful-generic (next).** Implement the install_steps.sh hook
proof on custom-html-tiny (needs content to serve → fails generic install without the hook, passes
with it), which ALSO yields DG3's N/A-skip run-demo (custom-html-tiny is non-backup-capable).
**F1d-1 — FIXED, awaiting Adversary close.** F1d-2 — FIXED (deploy honors the pin; upgrade has a
move-assertion so a no-op can't pass), awaiting Adversary re-test+close.
## Gate
**G0/DG1 — Adversary PASS @2026-05-27.** Cleared.
**Gate: G1 (DG2+DG3) RE-CLAIMED, awaiting Adversary** — after the F1d-2 fix. Full generic lifecycle
green on **hedgedoc**: install→upgrade **genuinely 1.10.7→1.10.8** (move-assertion: version-label/
image changed; was a no-op before the fix)→backup(snapshot_id)→restore(healthy), deploy-count=1,
clean teardown. The Adversary's own F1d-2 probe now passes (deploy-prev=1.10.7, upgrade→1.10.8,
CHANGED=True). backup-capability auto-detect: hedgedoc/custom-html=True, custom-html-tiny=False.
**Gate: G2 (DG4+DG4.1) CLAIMED, awaiting Adversary** — custom-html overlays (assertion-only, migrated)
override the generic for all four ops AND extend it by composition, with data-continuity
(upgrade-survives marker; backup "original"→mutate→restore "original"). All 4 overlay tiers green,
**deploy-count = 1** (no redeploy), clean teardown. Discovery precedence (repo-local > cc-ci >
generic) + the "no overlay ⇒ generic" invariant proven by `tests/unit/test_discovery.py` (5/5).
Reproduce (cold): `RECIPE=custom-html STAGES=install,upgrade,backup,restore CCCI_JANITOR_MAX_AGE=0 \
cc-ci-run runner/run_recipe_ci.py` (TIER lines show `cc-ci:` overlays) + `cc-ci-run -m pytest tests/unit`.
Design (DECISIONS.md Phase 1d): tier model with the lifecycle OP owned by the shared harness (test
files = assertions only); override precedence repo-local > cc-ci > generic + extend-by-composition;
deploy-once with a deploy-count guard; backup-capability auto-detect; install-steps shell hook.
## Blocked
(none) — bootstrap access re-verified @2026-05-27: ssh cc-ci ok (root, NixOS 24.11), abra 0.13.0-beta,
5 infra stacks up (traefik/drone/bridge/dashboard/backups), custom-html-tiny mirrored.