Football League
A matchday weekend of league football — staggered kickoffs, minute-by-minute goals, and a league table kept from result messages.
A league matchday from fixture card to final table. Forty seeded fixtures carry home/away Club references wired straight from seed cells; each waits in scheduled until its kickoff (drawing attendance from the home venue's size tier), then runs first_half → half_time → second_half → full_time in quarter-hour turns. Goals are counter updates on Age-keyed probability rows — three regulation quarter-hours a half, a stoppage-time row, then a deterministic whistle — and the full-time whistle messages both clubs goals-for, goals-against, and the signed margin, which their first-match-wins handlers split into win, draw, or loss.
A compact showcase of realistic demonstration data. Scorelines land where football scorelines land (about 2.7 goals a game, home advantage included), the league table reconciles against the fixtures by construction, and each finished match generates a styled full-time document whose club identities are cross-entity lookups resolved at generation time — name, city, stadium, capacity, and crest for both sides, none of it carried on the match row.
Linked tables with guaranteed referential integrity.
Generated REST endpoints. Also exposed as MCP tools.
OSI-compatible definition, emitted with the dataset.
# football-league.osi.yaml — emitted automatically semantic_model: name: "football-league" source: "duckdb://football-league.db" entities: - name: club primary_key: id dimensions: - name: state type: categorical - name: t type: time measures: - name: row_count agg: count - name: active agg: sum filter: "state = 'ACTIVE'"
More worlds.
Game of Life
Conway's automaton as a perfectly observable, deterministic grid world.
London Underground
A live tube graph — eleven lines, hundreds of trains, platforms held as a mutex.
Pac-Man
A self-playing arcade game — ghosts chase a flood-filled distance field.