chore(prevb): bootstrap phase state + settled dynamic-base/previous decisions
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
autonomic-bot
2026-06-17 00:04:43 +00:00
parent 7517c4f58c
commit 423ebcbcbc
4 changed files with 116 additions and 0 deletions

View File

@ -1441,3 +1441,24 @@ but stays well within the ≤90 s budget. Acceptable.
(same model as keycloak realm marker). Idempotent creation (409 = already exists → OK).
`pre_restore` deletes it to create a genuine divergence from backup state; `test_restore` asserts
its return. The sqlite3 DB is the persistence layer being tested.
- **Dynamic upgrade base — SETTLED (2026-06-17, phase prevb).** The upgrade tier's BASE version is
resolved at run time, replacing the static `previous_version(vers[-2])` default. Resolution order:
(1) **last-green** = the warm-canonical registry record (`canonical.read_registry(recipe).version`,
status warm/idle) when present; (2) fallback **target-branch (`main`) tip** = the recipe repo's
`main` HEAD (a git ref, chaos-deployed) — the true predecessor the PR merges onto; (3) **else skip**
the upgrade tier with a declared reason (new recipe / no predecessor / head==main). EXPECTED_NA[upgrade]
and `upgrade∉stages` still short-circuit to skip first. `UPGRADE_BASE_VERSION` is RETAINED as an
optional explicit override (wins when set) for the rare PR-adds-version-above-newest-tag case, but is
no longer the default and is removed from discourse. This intentionally changes every recipe's default
base from `vers[-2]` to last-green/main-tip (plan-mandated; M2 spot-check validates non-regression).
- **Per-recipe `previous/` overlay — SETTLED (2026-06-17, phase prevb).** `tests/<recipe>/previous/`
optionally holds the minimal config to deploy the *previous (last-green) version* when it can't deploy
as-published (e.g. `compose.previous.yml` for an image relocation). It declares the version it targets
(a `previous/VERSION` marker line) and the harness applies it **only to the base deploy and only when
the resolved base is that exact published version**; it is NEVER applied to the PR head, and on a
main-tip base or version mismatch it is SKIPPED and flagged stale ("previous/ targets X, base is Y —
remove it"). The all-deploys `compose.ccci.yml` overlay is now ENVIRONMENTAL-only (node-reality tweaks,
no version-specific image pins or service add/drop); version-specific repairs live in `previous/`.
Discourse ships NO `previous/` (base bitnamilegacy:3.5.0 deploys clean).