Replay Player¶
The replay player opens a recorded BDPD game and lets you step through it turn-by-turn — the commons trajectory, each player's wealth and harvest, the governance signals, cheap-talk, pacts and sanctions, and (for multi-arena Worlds) the cross-arena cascade.
It is static: a recorded game is a single trace.json file and the player is
a single HTML page. Replaying one needs no engine, no LLM, and no server — so
a game can be shared as a file or embedded in teaching material later.
For the data contract, the kind:"world" envelope and the architecture, see the
developer reference: Web Replay — plan & data contract.

Opening the player¶
Served (with a catalog). Start the platform and open the player in a browser:
The landing page shows a catalog of available games (see below).
Offline (no server). The player also works as a pure file viewer: open
web/replay/replay.html and drag-and-drop any trace.json /
world_trace.json onto the drop zone. No catalog, but the full player works.
The catalog¶
When served, the catalog is built from two sources, in order:
- Curated showcase — a small, git-tracked set of the most interesting games
(
web/replay/fixtures/), shown first under a Curated showcase header with an accent bar. Always available, even with no recorded runs on disk. - Live (runtime) games — every game you have recorded under
data/, listed below a Live (runtime) games divider.
Each catalog row is a real link, so you can open a game in place, ctrl/⌘-click for a new tab, or shift-click for a new window — one page per game.
Shareable links¶
Every game is its own URL — bookmark it, share it, or open several at once:
| URL | Opens |
|---|---|
…/replay.html?trace=<url> |
a game (single arena or World) |
…/replay.html?trace=<url>&round=N |
jump straight to turn / round N |
…/replay.html?trace=<url>&arena=B |
a World, drilled into arena B |
<url> is the path to the trace, e.g.
/replay/fixtures/llm_cascade.json (curated) or
/data/worlds/<id>/world_trace.json (live).
What you see¶
Single-arena games show, per turn:
- Commons stock trajectory (with capacity and collapse-threshold guides);
- Wealth & harvest per player (granted vs asked, plus any announced value);
- Reputation and Governance metrics (cooperation index, sanction rate, announce frequency, silent defection, lie score);
- when the game carries them, a Cheap-talk log and a Pacts & sanctions panel (these only appear for LLM-driven games that actually use them).
World (multi-arena) games show a synchronized grid of arena cards — each with its resource (and, for Seneca, capital and hidden pollution) mini-chart — plus a cross-arena flow panel and a per-card mechanism summary. A consolidated arena detail line (above the raw round record) links into any arena's full single-arena view.
A few games to start from (in the curated showcase):
- LLM governance + cascade — every mechanism at once, real cognition;
- Seneca pollution cascade — hidden pollution with a perverse "no visible culprit" signal;
- Governed cascade (cap-leading) — regulation turns the cascade into a win-win;
- Tragedy of the commons vs Cooperative survival — the collapse phase transition.
Recording your own games (--trace)¶
A game becomes replay-able when its run emits a trace. --trace is an opt-in
flag on the experiment runner and the pilots; it writes the replay artifact
(trace.json, or world_trace.json for a World) plus a catalog entry under
data/ (without it, runs stay aggregate-only).
# from the repository root
node experiments/experiment.js run aggressive_fraction --trace # single-arena sweep
node scripts/pilot_v11_s2_polycentric.mjs --trace # Seneca pollution cascade (World)
# → ✓ world trace → worlds/s2_cascade/world_trace.json
Reload the catalog (or open the printed path with ?trace=) and the new game is
there, under Live (runtime) games.
To promote a game into the git-tracked curated showcase, add it to
scripts/curate_fixtures.mjs and re-run it. The full emitter list and the data
contract are in the developer reference.