Skip to content

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.

The replay player served by the platform: the commons-stock trajectory with
per-player wealth and harvest, the governance and reputation metrics, and the
cheap-talk / pacts panels — stepped through turn by turn.


Opening the player

Served (with a catalog). Start the platform and open the player in a browser:

# from the repository root
node main.js              # → http://localhost:3000
http://localhost:3000/replay/replay.html

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:

  1. 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.
  2. 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.


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.