26c5b51b98
run_encounter gains llm_policy and per-run policy_factory (mutually exclusive with policy/llm_policy); replay.py logs every (observation, action) keyed by call_seq to JSONL and replay() reproduces the recorded battle bit-identically (wins/draws/rounds/transcript) with mismatch, exhausted, duplicate and out-of-order guards. P0 frontier complete: the recorded run replays identically.