fm-core — layer 2: the deterministic simulation core.
Hard invariants enforced here (DESIGN.md):
- the core is a pure fold over an append-only event log (
state); - no wall clock (game-time derives from events —
GameDatemoves only viaMatchdayAdvanced), no unseeded randomness (rngstreams derive from the seed recorded inGameStarted), no inline LLM calls (none exist yet; when they do, their outputs arrive as recorded events); - the evaluation/telemetry spine is a passive event-stream consumer
(
observer).
match_engine runs the Phase 2a event-based possession engine
(MATCH_MODEL.md); only its score folds into GameState — the
minute-by-minute trace rides alongside, never inside, the fold.