from __future__ import annotations import os import re import sys from typing import Iterable from fastapi.testclient import TestClient from deck_builder.builder import DeckBuilder from deck_builder.partner_selection import apply_partner_inputs def _fresh_client() -> TestClient: os.environ["ENABLE_PARTNER_MECHANICS"] = "1" # Ensure a fresh app import so feature flags are applied for module in ("code.web.app", "code.web.routes.build"): if module in sys.modules: del sys.modules[module] from code.web.services.commander_catalog_loader import clear_commander_catalog_cache clear_commander_catalog_cache() from code.web.app import app client = TestClient(app) from code.web.services import tasks tasks._SESSIONS.clear() return client def _first_commander_tag(commander_name: str) -> str | None: from code.web.services import orchestrator as orch tags: Iterable[str] = orch.tags_for_commander(commander_name) or [] for tag in tags: value = str(tag).strip() if value: return value return None _OPTION_PATTERN = re.compile(r'