"""Generic UPGRADE tier (Phase 1d DG2 + Phase 1e HC3) — recipe-agnostic, assertion-only. The orchestrator deployed the base version once and performed the upgrade ONCE in place (Phase 1e HC1: to the PR-head code under test via `abra app deploy --chaos`), recording the pre-upgrade identity in the run-scoped op state. This tier ASSERTS the upgrade reconverged, still serves, and actually MOVED the deployment (version/image/chaos label) — it does NOT perform the op. Runs by default ALONGSIDE any recipe overlay (additive); skipped only via an explicit opt-out.""" import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner")) from harness import generic # noqa: E402 def test_upgrade_reconverges(live_app, meta): generic.assert_upgraded(live_app, meta)