2.9 KiB
STATUS — Phase 1e (generic-harness corrections HC1–HC4)
Phase plan (SSOT): /srv/cc-ci/cc-ci-plan/plan-phase1e-harness-corrections.md
Loop state for THIS phase: STATUS-1e / BACKLOG-1e / REVIEW-1e / JOURNAL-1e (DECISIONS.md shared).
Phase-1/1b/1c/1d STATUS/BACKLOG/REVIEW files are HISTORY (1d DONE) — not this phase's state.
Phase
Phase 1e corrects the Phase-1d shared generic-test harness, before Phase 2 authors overlays on top. Three corrections, each Adversary cold-verified, no test weakened:
- HC1 — upgrade tier upgrades to the PR head (code under test) via
abra app deploy --chaos, not a published tag. - HC2 — repo-local (PR-authored)
test_*.py/install_steps.shrun only for recipes on an explicit cc-ci approval allowlist (default-deny); else cc-ci+generic only. - HC3 — the generic runs by default (additive) alongside any overlay; skipping it is explicit (env/recipe_meta opt-out). Op runs once (harness-owned); generic + overlay assertions both evaluate post-op state.
- HC4 — Adversary cold re-verifies no regression (D1–D10/DG1–DG8) + the three new behaviors.
Definition of Done (Phase 1e) — HC1–HC4, each Adversary cold-verified in REVIEW-1e
- HC1 — PR-head upgrade proven to deploy PR-head; deploy-count guard reconciled (==1).
- HC2 — repo-local ignored for a non-approved recipe, run for an approved one.
- HC3 — generic runs alongside an overlay by default; skipped only with the opt-out set.
- HC4 — no regression cold-verified; deploy-once + teardown still sacred.
Milestones (plan §3)
- E0 — HC2 trust gate (allowlist, default-deny). Accept: repo-local ignored unless approved.
- E1 — HC3 additive + op/assertion split. Accept: overlay+generic both run; opt-out skips; count=1.
- E2 — HC1 upgrade-to-PR-head. Accept: upgrade demonstrably deploys PR-head.
- E3 — HC4 cold re-verification + docs → DONE.
In flight
E1 (HC3) — additive generic + op/assertion split (orchestrator owns the op; generic+overlay both assert post-op state; opt-out via env/recipe_meta; migrate generic + overlays to assertion-only).
Gate
Gate: E0/HC2 — CLAIMED, awaiting Adversary @2026-05-28. Repo-local (PR-authored)
test_*.py/install_steps.sh/ops.py is default-deny: consulted only for recipes on the cc-ci
approval allowlist tests/repo-local-approved.txt (empty ⇒ deny). Centralized gate in
discovery.py (repo_local_approved/_gated); resolve_overlay_op/custom_tests/install_steps/
pre_op_hook all honor it. Evidence: cc-ci-run -m pytest tests/unit -q → 8 passed on cc-ci
(commit d38a695), incl. repo-local ignored-when-unapproved / honored-when-approved; cc-ci hook
(custom-html-tiny) still resolves so DG5 is unaffected. Allowlist location overridable via
CCCI_REPO_LOCAL_APPROVED_FILE for cold demonstration.
Blocked
(none) — bootstrap access re-verified @2026-05-28: ssh cc-ci ok (root, NixOS).