SCENARIOS / FOOTBALL LEAGUE
Sports

Football League

A matchday weekend of league football — staggered kickoffs, minute-by-minute goals, and a league table kept from result messages.

Async Tick FSM
SCHED 1H HT 2H FT GOAL +1 MATCHDAY · 40 FIXTURES 2–1 HOM v AWY · FULL TIME TABLE PTS 01 IRO 12 02 OAK 12 03 ASH 9 04 DUN 8 RESULT
SCHEMATICSports
Clock tick · 15 min/turn
Update Asynchronous
Clubs 20 (seed file)
Fixtures 40 (seed file)
Goals ~2.7 a match
Venue tiers Grand / Large / Mid / Compact
OVERVIEW

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.

TRAITS
Async
Independent, event-driven timelines
Tick
Discrete fixed-step time
FSM
Entities are finite-state machines
SCHEMA

Linked tables with guaranteed referential integrity.

TABLECOLUMNSDESCRIPTION
club ID, name, city, stadium, capacity, colours, crest, played, wins, draws, losses, goals_for, goals_against, points, current_state One row per club: the identity the match report cites (including the crest image URL) plus the league-table tallies its result handlers keep.
match ID, venue_tier, home_score, away_score, home_margin, away_margin, attendance, home_id, away_id, scheduled_at, kickoff_at, full_time_at, current_state One row per fixture: the final score and signed margins, the gate, both club references, and wall-clock kickoff and full-time stamps.
LIVE API

Generated REST endpoints. Also exposed as MCP tools.

POST /scenarios/football-league/experiments Seed a fresh matchday card
POST /scenarios/football-league/experiments/{eid}/run Advance N quarter-hour turns
GET /scenarios/football-league/experiments/{eid}/entities/match Query fixtures by state or scoreline
POST /scenarios/football-league/experiments/{eid}/documents Generate full-time match reports
GET /scenarios/football-league/experiments/{eid}/dataset Download the exported dataset
SEMANTIC LAYER

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'"