feat(canon): §2.G strip UPGRADE_BASE_VERSION entirely (plausible verified dynamic-base green)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Gate satisfied — live: with the pin removed, plausible's upgrade tier resolves base 3.0.1+v2.0.0 via the same-version step-back (canonical 3.1.0 == head 3.1.0 → newest-older = 3.0.1, NOT the broken 3.0.0) and passes install+upgrade green (level 5/5). The pin is redundant, so removed everywhere: - meta.py KEYS entry (RecipeMeta field auto-drops; 15→14 keys). - run_recipe_ci.resolve_upgrade_base override branch + docstrings. - tests/unit/test_meta.py (count 15→14, dropped None-assert), test_upgrade_base.py (override test). - docs/recipe-customization.md (regenerated table + mentions), docs/testing.md. - tests/plausible/recipe_meta.py (pin removed), tests/bluesky-pds (re-enable note → dynamic base). 294 unit tests pass; lint clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -85,12 +85,6 @@ KEYS: tuple[Key, ...] = (
|
||||
"Callable `(ctx) -> [probe, ...]` returning extra readiness probes, run after install AND after upgrade: HTTP `{host, path, ok}` or TCP `{tcp_host, tcp_port, stable}`.",
|
||||
hook_params=("ctx",),
|
||||
),
|
||||
Key(
|
||||
"UPGRADE_BASE_VERSION",
|
||||
"str",
|
||||
None,
|
||||
"Optional explicit override pinning the upgrade tier's base to an exact published tag (rare; for a PR that adds a version *above* the newest tag). When unset (the norm) the base is resolved DYNAMICALLY (phase prevb): last-green (warm canonical) → target-branch (`main`) tip → else skip. See `run_recipe_ci.resolve_upgrade_base` + DECISIONS.",
|
||||
),
|
||||
Key(
|
||||
"BACKUP_VERIFY",
|
||||
"hook",
|
||||
|
||||
@ -92,8 +92,8 @@ def sso_dep_unverified(declared, deps_ready: bool, requires_deps_skipped: int) -
|
||||
|
||||
class BasePlan(NamedTuple):
|
||||
"""Resolved upgrade-base decision (phase prevb). `kind`:
|
||||
- "version" → deploy a pinned published version (`version`): an explicit UPGRADE_BASE_VERSION
|
||||
override, or last-green (warm-canonical) version. `previous/` may apply (version-guarded).
|
||||
- "version" → deploy a pinned published version (`version`): the last-green (warm-canonical)
|
||||
version (or its step-back). `previous/` may apply (version-guarded).
|
||||
- "ref" → deploy the target-branch (main) tip at commit `ref` (chaos): the true predecessor
|
||||
the PR merges onto, used when there is no last-green. `previous/` never applies to a ref base.
|
||||
- "skip" → no upgrade base; the single deploy is the PR head and the upgrade tier records a
|
||||
@ -113,8 +113,8 @@ def resolve_upgrade_base(
|
||||
stages, meta, recipe: str, head_ref: str | None = None, head_version: str | None = None
|
||||
) -> BasePlan:
|
||||
"""Dynamic upgrade-base resolution (phase prevb, replaces the static `recipe_versions[-2]`
|
||||
default). Order: explicit override → last-green (warm canonical) → target-branch (main) tip →
|
||||
skip. EXPECTED_NA[upgrade] / upgrade∉stages short-circuit to a declared skip first.
|
||||
default). Order: last-green (warm canonical, with same-version step-back) → target-branch (main)
|
||||
tip → skip. EXPECTED_NA[upgrade] / upgrade∉stages short-circuit to a declared skip first.
|
||||
|
||||
`head_version` is the head checkout's published version (the `coop-cloud.<stack>.version` label;
|
||||
see abra.head_compose_version). When the last-green warm-canonical version EQUALS it, deploying
|
||||
@ -129,8 +129,9 @@ def resolve_upgrade_base(
|
||||
real predecessor the PR merges on top of, used when there is no last-green. Else the tier is
|
||||
skipped with a recorded reason (structural, declared — not a silent pass).
|
||||
|
||||
`UPGRADE_BASE_VERSION` is RETAINED as an optional explicit override (wins when set) for the rare
|
||||
PR-adds-a-version-above-the-newest-tag case; it is no longer the default (DECISIONS prevb)."""
|
||||
The old `UPGRADE_BASE_VERSION` explicit-override knob was REMOVED in phase canon (§2.G): the
|
||||
dynamic last-green/step-back resolution makes it redundant (its only remaining user, plausible,
|
||||
now resolves base 3.0.1 via step-back once its canonical is established). See DECISIONS."""
|
||||
if "upgrade" not in stages:
|
||||
return BasePlan("skip", None, None, "upgrade tier not in requested stages")
|
||||
declared = (meta.EXPECTED_NA or {}).get("upgrade")
|
||||
@ -141,9 +142,6 @@ def resolve_upgrade_base(
|
||||
flush=True,
|
||||
)
|
||||
return BasePlan("skip", None, None, f"declared EXPECTED_NA[upgrade]: {declared}")
|
||||
override = getattr(meta, "UPGRADE_BASE_VERSION", None)
|
||||
if override:
|
||||
return BasePlan("version", override, None, "explicit UPGRADE_BASE_VERSION override")
|
||||
rec = canonical.read_registry(recipe)
|
||||
if rec and rec.get("version"):
|
||||
canon = rec["version"]
|
||||
|
||||
Reference in New Issue
Block a user