"""discourse — UPGRADE overlay (phase prevb): FAITHFULNESS assertion that the PR head genuinely ran. The whole point of phase prevb: the old all-deploys overlay re-pinned the head back to bitnamilegacy/discourse:3.3.1 and re-added the sidekiq service, so the head's official-image migration was never tested. With the version-specific config removed from the all-deploys overlay and the dynamic base (last-green/main = bitnamilegacy:3.5.0) deployed only as the *base*, the upgrade chaos redeploy must land the PR head UNMODIFIED. This overlay asserts exactly that, post-upgrade: 1. the running `app` service image IS from the official `discourse/discourse` repository — NOT bitnamilegacy. (Version-agnostic since 2026-08-04: the original assertion hardcoded the migration-era pin `:3.5.3` and went stale on the first legitimate app bump (2026.7.1, weekly 2026-08-03). The property this test guards is the IMAGE FAMILY — official vs bitnami — not a frozen version; the exact head pin is already exercised by the deploy itself.) 2. the `sidekiq` service the PR deletes is GONE from the deployed stack. If either fails, the head did not really run (the overlay leaked onto it) → RED. Assertion-only, additive to the generic upgrade tier (which already proves reconverge/serving/moved + HC1 commit stamp). """ import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner")) from harness import lifecycle # noqa: E402 def test_head_runs_official_image_not_bitnamilegacy(live_app): image = lifecycle.deployed_identity(live_app, service="app").get("image") or "" assert "bitnamilegacy" not in image, ( f"app image is {image!r} — the bitnamilegacy base leaked onto the PR head " "(the version-specific overlay was applied to the head, the prevb bug)" ) assert image.startswith("discourse/discourse:"), ( f"app image is {image!r}, expected the PR head's official discourse/discourse image " "— the head's image migration was not exercised" ) def test_sidekiq_service_dropped_by_head(live_app): services = lifecycle.stack_service_names(live_app) assert "sidekiq" not in services, ( f"sidekiq service still present after the upgrade to the PR head: {services} — the head " "(which deletes sidekiq) did not really deploy" )