From 7f3e7c26f69a3675a833437cbd3c7da5d1d240b3 Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Wed, 17 Jun 2026 00:27:06 +0000 Subject: [PATCH] recon(prevb): M1 code pre-review (sound; 63 prevb unit tests pass cold) + builder heads-up (pre-existing red test) --- machine-docs/BUILDER-INBOX.md | 20 ++++++++++++++++++++ machine-docs/REVIEW-prevb.md | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 machine-docs/BUILDER-INBOX.md diff --git a/machine-docs/BUILDER-INBOX.md b/machine-docs/BUILDER-INBOX.md new file mode 100644 index 0000000..5bdb033 --- /dev/null +++ b/machine-docs/BUILDER-INBOX.md @@ -0,0 +1,20 @@ +# Builder inbox (from Adversary) + +2026-06-17T00:30Z — Two non-gate heads-ups from my M1 pre-review (code only; I did NOT read JOURNAL): + +1. **Pre-existing red unit test (NOT prevb, but scope your "unit green" claim).** The FULL `tests/unit/` suite + is 283 pass / **1 FAIL**: `test_warm_reconcile.py::test_traefik_spec_is_stateless_with_setup` → + `KeyError: 'health_domain'`. It fails identically at gtea-DONE (778720c) and the prevb feat never touched + warm_reconcile (the `pxgate-M1` traefik-probe change 0e9fd38 refactored the spec without updating the test). + I will NOT block M1 on it. But when you CLAIM M1, please state which test set "green" refers to (prevb surface + vs full suite) so the claim is honest. Fixing it is optional/out-of-scope for prevb. + +2. **(nit)** the rewrite of `test_upgrade_base.py` dropped `test_expected_na_other_rung_does_not_suppress`. The + behavior is still correct (`.get("upgrade")`), just no longer has a dedicated test — consider re-adding one line. + +My M1 code pre-review otherwise looks sound (dynamic base + previous/ + discourse migration + teeth in +test_upgrade.py; 63 prevb-relevant unit tests pass cold). The formal M1 PASS still needs your e2e claim with +proof the head ran real `discourse/discourse:3.5.3` (not bitnamilegacy) + sidekiq gone, plus my own cold +acceptance + a deliberately-broken-head break-it probe. Put the WHAT/HOW/EXPECTED/WHERE in STATUS when you claim. + +(Delete this file once read — that's the "consumed" signal.) diff --git a/machine-docs/REVIEW-prevb.md b/machine-docs/REVIEW-prevb.md index 5c17c97..983ff72 100644 --- a/machine-docs/REVIEW-prevb.md +++ b/machine-docs/REVIEW-prevb.md @@ -18,8 +18,39 @@ SSOT: `/srv/cc-ci/cc-ci-plan/plan-phase-prevb-previous-dynamic-base.md`. Facts CONFIRMED. (Caution noted: gitea `raw?ref=` silently falls back to default branch — must use the FULL sha when cold-verifying head content.) Foundation for "discourse needs no previous/" holds. +## Pre-review (M1 code, gate NOT yet CLAIMED — preliminary recon, not a verdict) +2026-06-17T00:30Z — studied the M1 `feat` commit bb2e3c6 (code/diff only, NOT JOURNAL). Design looks sound: +- `resolve_upgrade_base` → BasePlan(kind, version, ref, reason): override → last-green (`canonical.read_registry`) + → main-tip (`recipe_branch_commit`) → skip. `.runs` gates the upgrade tier. head_ref = `recipe_head_commit`. +- `previous/` surface (lifecycle): `has_previous`, `previous_target_version` (VERSION marker), `previous_status` + (version-guarded apply/stale), provide/remove overlay, compose_file add/remove. Base-only; **stripped before + head redeploy** (`generic.perform_upgrade` → `remove_previous_overlay` + COMPOSE_FILE strip). Good teeth. +- discourse migrated: `compose.ccci.yml` now ENVIRONMENTAL-ONLY (`order: stop-first`); bitnamilegacy pins + + sidekiq + UPGRADE_BASE_VERSION **removed**. `test_upgrade.py` asserts running `app` image == official + `discourse/discourse:3.5.3` (not bitnamilegacy) + sidekiq gone; resolves as the upgrade-tier overlay + (`resolve_overlay_op`→`test_{op}.py`), run as its own pytest → rc!=0 fails the tier. Real teeth confirmed. +- **Unit tests run cold (nix pytest): 63 passed** (test_upgrade_base + test_previous + test_meta). Matrix + EXPANDED, not weakened (override-wins / last-green-primary / main-tip-fallback / head==main-tip skip / no-pred skip). + +STILL REQUIRED for the formal M1 PASS (needs the Builder's e2e claim + my cold acceptance run): + (a) discourse upgrade tier GREEN locally with proof the head ran real 3.5.3 (not bitnamilegacy) + no sidekiq; + (b) BREAK-IT: a deliberately-broken head still fails the upgrade tier (base resolution didn't paper over it); + (c) base falls back to main when last-green absent (unit-covered; e2e desirable); + (d) `previous/` ignored for the head (code-confirmed; e2e desirable). + +## Adversary findings (pre-review notes) +- [F-prevb-A] (PRE-EXISTING, NOT a prevb regression; INFO) `tests/unit/test_warm_reconcile.py:: + test_traefik_spec_is_stateless_with_setup` is RED on main — `KeyError: 'health_domain'`. Fails identically at + the gtea-DONE commit 778720c (verified by checkout), and the prevb feat never touched warm_reconcile — the + `pxgate-M1` traefik-probe change (0e9fd38) refactored the spec without updating this test. Out of prevb scope, + but it means the FULL `tests/unit/` suite is NOT all-green (283 pass / 1 fail). Flagging so "unit green" claims + are scoped honestly. Not an M1 blocker. +- [F-prevb-B] (NIT) old `test_expected_na_other_rung_does_not_suppress` was dropped in the rewrite; the behavior + (an EXPECTED_NA for a non-upgrade rung must not suppress the base) is preserved via `.get("upgrade")` but no + longer has a dedicated test. Low risk; consider re-adding one line of coverage. + ## Verdicts -(none yet) +(none yet — awaiting M1 CLAIM with e2e evidence) ## Open VETOes (none)