# Einheiten: backend/tft/cli.py stand: f41ac76b5789 ## backend/tft/cli.py::current_set beschreibung: Liefert die aktuell aktive TFT-Set-Nummer aus dem statischen Daten-Zeiger. input: keine Argumente; liest den vom Modul `tft.paths` bereitgestellten latest-Pointer output: `int` – die Set-Nummer aus dem gelesenen JSON entscheidungen: - Bricht hart ab, wenn noch keine statischen Daten existieren, statt einen Default zurückzugeben beleg: "raise SystemExit(\"no static data yet: run `fetch-static` first\")" - Bezieht den Set-Schlüssel ausschließlich aus dem Feld `set` des Pointer-JSONs beleg: "return json.loads(pointer.read_text())[\"set\"]" - Kapselt den Import von `tft.paths` lokal in der Funktion, um Modullade-Reihenfolge unabhängig zu halten beleg: "from tft import paths" kanten: - wird-genutzt-von: backend/tft/cli.py::main ## backend/tft/cli.py::main beschreibung: Stellt die Kommandozeilen-Schnittstelle des `tft`-Tools bereit und verzweigt eingegebene Subcommands auf die passenden Pipeline-Funktionen. input: Prozess-Argumente aus `argparse` (Subcommand + Optionen wie `--set`, `--policy`, `--games`) output: Konsolen-Statusmeldungen bzw. Fehlerausgaben; bei `refresh` ruft es rekursiv Sub-Stages als Subprozess auf entscheidungen: - Erlaubt ausschließlich die registrierten Subcommands, indem `required=True` gesetzt wird beleg: "sub = parser.add_subparsers(dest=\"command\", required=True)" - Trennt Subcommand-Implementierungen per Lazy-Import innerhalb der `elif`-Zweige beleg: "if args.command == \"fetch-static\":" - Bricht den `refresh`-Lauf beim ersten nicht-null Returncode eines Subprozesses ab beleg: "if result.returncode != 0:" - Übergibt beim `autoplay`-Subcommand die Default-Politik `econ`, falls `--policy` fehlt beleg: "default=\"econ\"" - Nutzt beim `calibrate`-Pfad strikt Holdout-Daten via `holdout_only=True` beleg: "holdout_only=True)" kanten: - wird-genutzt-von: backend/tft/cli.py::main