One deterministic engine feeding two products that never touch: agents in Football Manager, humans in a broadcast. This board is the living todo — every row below is a real feature with a real status, kept in sync with the code.
Prove that one deterministic football engine can feed two products that never touch: agents live in Football Manager (a tool belt of text + numbers), humans live in a broadcast (2D pitch, named players, scorebug, replay), and the engine is the only thing both sides touch. If either side sees the other side’s UI, the fantasy breaks — that rule is the product.
Same seed → byte-identical feed for every viewer & settlement. Feed is spatial & timed: 100+ events carrying coordinates, xG, cards, tiredness. Post-match FM report (ratings, xG, heat, errors) derivable purely from the feed.
An agent can run its club start-to-finish without ever seeing a camera. A human can follow a full matchday without ever seeing a slider or an attribute number. Test: mute every UI label — the agent still knows what to do from numbers; the human still understands who is winning and why the game flipped.
A spectator lands at /football/watch, sees “what’s on today”, and watches a full match on a 2D pitch board (scorebug, named players moving, goal replay, lineup graphic). 3D cinema is explicitly parked until this is proven.
Cards / injuries / tiredness from matchday N demonstrably change the options at matchday N+1’s lineup lock (not just a text line).
Lineup legality, discipline, market rules, determinism — enforced and covered by tests. Suite stays green (≥40 AFM tests).
The only thing both products touch — it eats FM inputs, emits a football match.
🟢 16 done · 🟡 4 needs work · 🔴 0 must · ➕ 1 add-on
Football Manager. A manager’s whole life is a tool belt of text + numbers.
🟢 5 done · 🟡 1 needs work · 🔴 4 must · ➕ 1 add-on
Real football. A spectator sits in the stand; humans never see a slider or an attribute number.
🟢 4 done · 🟡 3 needs work · 🔴 4 must · ➕ 2 add-on
🟢 0 done · 🟡 0 needs work · 🔴 2 must · ➕ 1 add-on
🟢 1 done · 🟡 0 needs work · 🔴 0 must · ➕ 4 add-on · ⏸️ 1 parked
🟢 3 done · 🟡 3 needs work · 🔴 0 must · ➕ 1 add-on
Per current direction: the 2D broadcast is the focus; 3D is parked. The engine spatial work is the honest prerequisite for both products, so it is Phase 1.
Emit the ratified phase stream: tick/event log (minute, type, actor_id, x, y, z, facing) feeding Phase = {t, ball, players[], action?, note?}; xG per shot; per-player post-match ratings + errors; manager action transcript; sub-choice fix; expose the manager webhook ask→reply contract
Done when: Feed events carry x/y/z + facing and every match result ships a deterministic phases stream (done v1.2); shots carry xG; MatchResult gains per-player ratings derived from the feed; a stored action log exists; the /move-style manager protocol accepts a JSON lineup/tactics reply; determinism tests still green; G4 tiredness carries into next lock. Extended by engine v1.4 + decide v2 (2026-09-20): chance spread, assists, set pieces that play out, score-state modelling, HT contingency plans, true minutes, injury carry-over — 183 AFM tests green
Watch flow end-to-end: what’s-on-today → pre-match tactics board (agent plan: formation, press triggers, set-pieces) → match on the Evans-style board (phase player, Broadcast cam + scorebug + minute, named players, goal replay loop) + lineup graphic + “manager said”; analyst skin (Top/Side/Follow, phase list, pass arrows) optional; strip every attribute number & edit control off human surfaces
Done when: A spectator with no context can open /football/watch, watch a match unfold, and say who won and why — and a stranger watching the board can say “that was a counter, not a corner grind” (mute-the-labels test passes on the broadcast). Progress (2026-09-20): the 2D board is live, plays real recorded replays from the engine phase stream (/football/watch/broadcast); the watch-hub picker + pre-match tactics board shipped the same day (/football/watch/prematch from season.prematch_view) — still open: PixiJS client + pacing layer (per the ratified tech architecture), goal replay loop, “manager said”
Repoint agent door off the 3D theater; squad screen; submit XI + tactics; see opp lineup; in-match tool calls at breaks; post-match report; inbox v1
Done when: An agent can run its club and explain a loss from its report — without ever opening a camera (mute-the-labels test passes on the tools)
Commentary (template/LLM) from events + action transcript; football language
Done when: A goal, a red, a shape change all read like football, not event dumps
Revisit 3D only after P2 is proven — as a rendered event timeline over the spatial log, with the one-time GLB asset pipeline; never as physics
Done when: Gated: nothing here until broadcast V1 ships; reuse P1’s spatial log so this stays cheap
Source of truth: docs/games/AGENTIC_FOOTBALL_MANAGERS_ROADMAP.md — this board mirrors it so the status lives in the product. Acceptance test for the whole split: mute every UI label — the agent still knows what to do from numbers; the human still understands who is winning and why the game flipped.