## New File
- PolicyControllerAi.java (840 lines): Extends Forge's PlayerControllerAi
to intercept AI decisions at chooseSpellAbilityToPlay() and route them
through the Python policy server. Falls back to Forge built-in AI on
any failure. Inner PolicyAiController overrides AiController with full
legal action gathering via ComputerUtilAbility.
## Wiring
- GameSession.java: Import + Javadoc for PolicyControllerAi decision flow.
Logs decision pipeline when policy server connects. End-of-game reward
submission via PolicyControllerAi lifecycle.
- BatchRunner.java: New setPolicyServer(url) method. Appends
--policy midrange --policyServer <url> to Forge subprocess command when
policy server URL is configured.
## Path Updates (Forge-Repo rename)
- README.md: Forge link → KoalaTrapLord/Forge-Repo, build path updated
- .env.example: FORGE_JAR_PATH and FORGE_WORKING_DIR → Forge-Repo
- lab_api.py: Auto-detect paths try Forge-Repo first, forge-repo as legacy
## MacroActionExecutor
- Added public isRemovalCard(), isDrawCard(), isRampCard() wrappers so
PolicyControllerAi can consult the same card-role databases.
Refs: Issue #83 Phase 2.4