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).