feat(career): bundle the AXA club venue pack (career stage 2) (#963)
ship-ci / ci (push) Waiting to run

The Velvet Room (50 stars) now ships in every build like the bar and
arena: 4 reactive crowd loops, 2 stingers, and a balcony flyover intro
rendered from the AXA Music Stage scene (110 spectators, state-scaled
stage washes over the venue's own neon). Audio files are dive-bar
placeholders until club-scale recordings land.

The installed/delete test now asserts bundled-fallback semantics:
with every venue bundled, deleting a downloaded pack reveals the
bundled copy instead of uninstalling.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Byron Gamatos
2026-07-14 16:54:08 +02:00
committed by GitHub
co-authored by Claude Fable 5
parent af611770aa
commit 2991612531
13 changed files with 39 additions and 1 deletions
+6 -1
View File
@@ -121,12 +121,17 @@ def test_pack_file_serving_and_traversal_guard(client):
def test_state_reports_installed_and_delete_removes(client):
# All three venues now ship bundled, so deleting the downloaded copy
# falls back to the bundled pack: installed stays True by design
# (downloaded packs override bundled ones, never replace them).
_install_fake_pack("club")
state = client.get("/api/plugins/career/state").json()
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is True
assert client.delete("/api/plugins/career/packs/club").status_code == 200
state = client.get("/api/plugins/career/state").json()
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is False
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is True
# the downloaded override itself is gone
assert not (career_routes._venue_dir("club") / "manifest.json").exists()
def test_download_worker_end_to_end(client, tmp_path):