Public task and development documentation. Official evaluation boundary.

Scenario schema, version 1.0

A scenario is one JSON object. All keys are required except description. Unknown keys are rejected at every level, so a typo cannot silently become a default. Numbers must be finite. Integers must be JSON integers (1, not 1.0 and not true).

{
  "schema_version": "1.0",
  "scenario_id": "one_person_one_exit",
  "description": "optional free text",
  "grid": {"width": 7, "height": 3},
  "obstacles": [[0, 0], [0, 1]],
  "exits": [{"id": "E1", "position": [1, 5]}],
  "people": [{"id": "P1", "position": [1, 1]}],
  "ignitions": [[1, 3]],
  "fire": {"model": "deterministic", "spread_interval": 1, "exits_flammable": true},
  "movement": {"conflict_resolution": "lowest_id_wins", "enter_fire": "casualty"},
  "termination": {"max_steps": 50},
  "seed": 1
}
Field Type Rules
schema_version string Must be "1.0".
scenario_id id Matches ^[A-Za-z0-9_-]{1,64}$.
grid.width, grid.height int 1 to 1024.
obstacles list of [row, col] In bounds, no duplicates. These are walls: impassable and non-flammable.
exits list of {id, position} At least one. Unique IDs and positions. Not on an obstacle.
people list of {id, position} At least one. Unique IDs and positions. Not on an obstacle, exit or ignition point.
ignitions list of [row, col] Cells burning at step 0. May be empty. In bounds, no duplicates, not on an obstacle. On an exit only if fire.exits_flammable is true.
fire.model "deterministic" | "stochastic" See the simulation contract.
fire.spread_interval int ≥ 1 Fire spreads on steps where step % interval == 0.
fire.exits_flammable bool Whether exits can catch fire and become unusable.
fire.spread_probability number in [0, 1] Required for stochastic. Forbidden for deterministic.
movement.conflict_resolution "lowest_id_wins" The only V1 rule. It is stated explicitly.
movement.enter_fire "blocked" | "casualty" What happens when someone moves into a burning cell.
termination.max_steps int, 1 to 100000 Step limit.
seed int, 0 to 2^64 − 1 Default run seed. A new simulator for the scenario and seed can override it, and the record stores the seed used. Evaluator-private: never shown to a model (see v1-fairness-spec.md).

Canonical form and identity

After parsing, the following lists are sorted: obstacles and ignitions by position, and exits and people by ID. The scenario JSON text emits canonical JSON (sorted keys, no whitespace). The scenario content hash is its SHA-256. Input order therefore never changes a scenario's identity. Run records store the hash, so a replay against a different scenario is rejected.

Fixtures

Each description starts with TEST FIXTURE. and ends with an ASCII layout. They are not benchmark scoring scenarios, and they are not the hidden evaluation set.

Fixture Purpose
one_person_one_exit Basic movement and evacuation, no fire.
blocked_shortest_route The shortest route crosses fire. The safe route is longer. Exits are not flammable.
multiple_exits Three people, two exits, fire in the middle.
narrow_corridor A one-wide queue, chain moves and exit throughput.
fire_threatening_exit Fire burns the near exit at step 1. The far exit stays usable.
stochastic_room Seeded stochastic spread with the blocked fire-entry policy.

The canonical public V1 scenarios are a separate set in scenarios/public/v1/. See scenario-suite.md.

Reviewed public benchmark contract. Apache License 2.0. Download Markdown