Files
cc-ci/machine-docs/STATUS-1d.md
2026-05-28 02:26:34 +01:00

86 lines
6.0 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)
## DONE
**Phase 1d COMPLETE @2026-05-28.** All DG1DG8 Adversary cold-verified PASS within 24h in REVIEW-1d
(final sign-off commit 4a6d6cf — DG1·DG2·DG3·DG4·DG4.1·DG5·DG6·DG7·DG8 all PASS, NO VETO; findings
F1d-1 + F1d-2 both CLOSED). The Adversary cold-verified DG6 with its OWN independent `!testme` on
hedgedoc PR#1 → Drone build **154** (success): `!testme` triggered <60s, `!testmexyz` did NOT trigger,
all 4 tiers ran tests/_generic (no-overlaygeneric), per-op `install/upgrade/backup/restore=pass,
custom=skip`, deploy-count=1, clean teardown, PR comment `✅ passed → …/154`, secret-leak grep clean.
Evidence: REVIEW-1d "## G4 / DG6+DG7+DG8 PASS @2026-05-28". Builder build #153 = the same e2e green.
Loop stops; the generic-suite + layered-overlay foundation is ready for Phase 2.
**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 newdeployconvergedreally 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).
- [x] **DG2** Generic UPGRADE: previous/pinned upgrade to target; reconverge + still serving.
**Adversary PASS @2026-05-28** (genuine 1.10.71.10.8 move + no-op guard raises; F1d-2 closed).
- [x] **DG3** Generic BACKUP+RESTORE for backup-capable recipes; clean N/A (skip) otherwise.
**Adversary PASS @2026-05-28** (backup snapshot_id artifact + healthy restore on hedgedoc).
N/A-skip run-demo green: custom-html-tiny (non-backup-capable) backup/restore = skip (G3 Run B).
- [x] **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.
**Adversary PASS @2026-05-28** (override LIVE on custom-html's 4 ops + extend + precedence 5/5).
- [x] **DG4.1** Overlays reuse the deployment: ONE deploy + ONE teardown per run; no extra
new/deploy/undeploy (assert via deploy-count). **Adversary PASS @2026-05-28** (deploy-count=1).
- [x] **DG5** Custom install-steps hook + graceful-generic rule; fail-without / pass-with proof.
**Adversary PASS @2026-05-28** (custom-html-tiny: fail-without / pass-with the install_steps.sh hook).
- [x] **DG6** `!testme` e2e on an unconfigured recipe through the real pipeline; per-op reporting.
**Adversary PASS @2026-05-28** (own !testmebuild 154; !testmexyz rejected; per-op report +
clean teardown + PR outcome). Builder build #153 = the same e2e green (`✅ passed → …/153`).
- [x] **DG7** Real, DRY, clean: no softened/skip/xfail assertions; generic in the shared harness;
teardown always; respects MAX_TESTS. **Adversary PASS @2026-05-28** afd75a4 migrated the
remaining overlays to the assertion-only deploy-once contract; build #153/#154 left zero residual.
- [x] **DG8** Documented (docs/ explains the generic suite, overlay convention, hook) + cold-verify.
**Adversary PASS @2026-05-28** b756e72 (docs/testing.md + enroll-recipe.md + README).
## 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
(none) **Phase 1d DONE** (see top). G0G4 all Adversary PASS; F1d-1 + F1d-2 CLOSED; no VETO.
Next: Phase 2 (author additive overlays + custom install steps per recipe) builds on this foundation.
## Gate
**G0/DG1 Adversary PASS @2026-05-27.** Cleared.
**G1 (DG2+DG3) — Adversary PASS @2026-05-28** (re-claim after F1d-2 fix). Verified genuine prevtarget
(1.10.71.10.8 moves) and the no-op guard raises. F1d-1 + F1d-2 both CLOSED. No VETO.
**G2 (DG4+DG4.1) — Adversary PASS @2026-05-28** (override LIVE on custom-html's 4 ops, extend-by-
composition, data-continuity, deploy-count=1, precedence unit tests 5/5). No VETO.
**G3 (DG5 + DG3 N/A-skip) — Adversary PASS @2026-05-28.** No VETO. DG1DG5 all Adversary-verified;
F1d-1 + F1d-2 closed.
**G4 (DG6 + DG7 + DG8) — Adversary PASS @2026-05-28 (FINAL sign-off, commit 4a6d6cf).** The Adversary
cold-verified with its OWN `!testme` (build 154): trigger <60s, `!testmexyz` rejected, all tiers
generic, per-op install/upgrade/backup/restore=pass + custom=skip, deploy-count=1, clean teardown,
PR outcome reflected, secret-leak grep clean. DG7 (no-regression/DRY/teardown-always) + DG8 (docs)
verified. **DG1DG8 all PASS, NO VETO → ## DONE written.** Phase 1d complete.
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.