---
title: "BDPD v1.0 — Release Notebook"
subtitle: "World substrate: nested arenas, links, treaties, world-meta agents"
author: "Roberto Brunelli"
date: "2026-05-28"
release_tag: "v1.0"
release_type: "scientific"
format:
  html:
    toc: true
    code-fold: true
    embed-resources: true
---

# Overview {#sec-overview}

v1.0 is the **World substrate** release. v0.9 left BDPD with a fully
governed *single* arena: a logistic commons growing at rate $r$ up to
capacity $K$, players harvesting each round, pacts negotiated between
players, sanctions enforced by a meta-agent. The unit of study was
one commons under one policy.

v1.0 keeps every one of those mechanisms unchanged and wraps a new
object around them. A `World` holds one or more arenas; arenas remain
the sites of harvest, pact, sanction. The World adds three substrates
above them: **Resource Links** (cross-arena flow), **Treaties**
(cross-arena constraints), **World meta-agents (C3.b)**
(`world_sanctioner`, `treaty_enforcer`). A fourth ingredient, the
**`exclude` perturbation**, migrates pact-violating players to a
designated *junk arena* via `World.migrateAgent`.

Each of these v1.0 additions has a single load-bearing test that
shipped with it (Phases W/L/C/D). The remaining empirical question
— how these mechanisms behave in combination, and how they behave
under LLM agents — is answered by **Paper 2** (the v1.0 compass
paper). Paper 1 (Governance MVP) is the citable artefact for the
v0.9 layer underneath.

Tag `v1.0` on `e4d658a`, merged into `main` on 2026-05-28. 27 commits
across Phases W/L/C/D/B.

# Headline empirical findings {#sec-findings}

Five mini-pilots ship as v1.0 closure experiments. Three of them
have LLM N=5 replications that **qualitatively invert** the
built-in headline (Paper 2 §3):

| Vignette | Built-in | LLM N=5 | Inversion |
|---|---|---|---|
| **V1 — Cliff confinement** | survivors 9/9, arena0 collapse 5/5 | (built-in only) | n/a |
| **V2 — Voluntary sanctioner ladder (D3)** | A_reflex viol 3, B_voluntary50 viol 1.8 | A 3, B 1.8, C 16.8 (gate-by-repeat backfires) | repeatThreshold flip |
| **V3 — Treaty enforcer (D4)** | enforcer fires 1.0, shock 18.1 | enforcer fires 2.4 ± 0.9, shock 38.2 ± 13.6 | LLMs breach cap 2.4× more |
| **V4 — Exclusion + junk (D5)** | junkPurity 1.00 | junkPurity 0.63 ± 0.34 | behavioural contagion |
| **V5 — Seed robustness (F2.1)** | events flat 5/5 | depth-of-cliff cv 20-60% | qualitative vs quantitative |

Three Seneca roads emerge from the compass (Paper 2 §4): **A
(hidden monitoring)**, **B (behavioural contagion sweep)**, **C
(enforcement at scale)**. The v1.0 substrate supports all three
without further engineering; the cost of each is concentrated in
agents and metrics, not in substrate.

# What changed {#sec-what-changed}

## Phase W — World substrate

- **W1 — `World` data structures** (`platform/world.js`). `Link`,
  `Treaty`, `World`, `WorldRegistry`. Arenas held by reference (no
  clone), held under `data/worlds/<wid>/arenas/<aid>/`. Engine-
  agnostic by construction: World never inspects engine kind.
- **W2 — Super-scheduler** (`World.tick`). One global round =
  each running arena ticks once in parallel (`Promise.all`), then
  Link flows applied, then world meta-agents observe. Per-arena
  schedulers stay invariant. Auto-close on
  `all_arenas_ended`.
- **W3 — Storage path wired.** `data/worlds/<wid>/arenas/<aid>/`
  populated by `WorldRegistry`. Legacy `default` world keeps the
  v0.9 layout.
- **W4 — REST surface.** `/api/worlds/*` endpoints for create /
  list / get / start / close / tick / addArena / addLink /
  addTreaty / addMetaAgent / runRounds.

See [World](../platform/world.md) for the full surface.

## Phase L — Resource Links

- **L1 — `Link.type = 'resource'` handler.** End-of-round outflow
  $\alpha \cdot S_t^{(\text{src})}$ from source to target. Two-pass
  algorithm keeps results deterministic when multiple links share
  the same source. Skips closed arenas on either side.
- Reuses the `engine.step` `context.inflow / outflow` channel
  reserved since v0.6 (nested-safety §5 #2) — kept available but
  not consumed in v1.0; end-of-round application is the canonical
  path.

## Phase C — World-level governance (C3.b)

- **`World.addMetaAgent`** wires `role: 'meta'` agents at the world
  level. Same `GOVERNANCE_REGISTRY` as C3.a — strategies opt-in to
  C3.a, C3.b, or both via their `observe()` signature.
- **`WorldSanctionerAgent`.** World-level mirror of arena
  `SanctionerAgent`. Reflexive: one `sanction` spec per violation,
  routed via `target: { arenaIds: [aid] }`.
- **`TreatyEnforcerAgent`.** Monitors a named [Treaty](../platform/treaties.md).
  Recognises payload `{ type: 'harvest_cap_per_arena_per_round',
  perRoundPerArena: N }`. Emits one `wealth_shock` per offending
  arena per round, with collective sanction semantics.

See [Governance](../platform/governance.md) for strategy reference.

## Phase D — Pilots

- **D1 (`pilot_v10_d1_*.mjs`) — Cliff confinement.** 3×3 world with
  one focal arena (Mule-style) plus 8 conservative arenas. Tests
  whether the cliff stays local. Result: yes — 5/5 collapses in
  arena0, 9/9 survivors elsewhere.
- **D2 — Graduated ladder under Mule** (v0.9, carried in). Anchor.
- **D3 (`pilot_v10_d3_*.mjs`) — Voluntary sanctioner ladder.** 3
  cells: `A_reflex`, `B_voluntary50` (stock < 0.5), `C_voluntary50_r2`
  (stock < 0.5 + ≥ 2 prior). Built-in: B reduces violations
  vs A by 40%. LLM N=5: B preserves the reduction; C backfires (16.8
  violations, mule wealth 55).
- **D4 (`pilot_v10_d4_*.mjs`) — Treaty enforcer.** 3-arena world
  (5p + 3p + 3p) with treaty `harvest_cap_per_arena_per_round = 8.0`.
  Built-in: enforcer fires 1.0× per round, shock 18.1. LLM N=5:
  enforcer fires 2.4 ± 0.9, shock 38.2 ± 13.6 — LLMs breach the
  cap structurally more often.
- **D5 (`pilot_v10_d5_*.mjs`) — Exclusion + junk arena.** 4-arena
  world: 3 mains under `voluntary_sanctioner` + 1 shared junk.
  Repeat violators are migrated via `exclude` perturbation. Built-in
  junkPurity 1.00; LLM N=5: 0.63 ± 0.34 — migrated LLM violators
  continue defecting in the junk, creating behavioural contagion.

All 5 pilots have a seed-robustness sweep
(`scripts/sweep_v10_seed.mjs`) over `PILOT_SEED ∈ {17, 23, 29, 31, 37}`
with `observability.commonsStock.noise = 0.03`. Institutional events
(collapse, sanction counts, exclude counts) are flat across seeds;
depth-of-cliff metrics (final stock when stock is near threshold)
are sensitive (cv 20-60%). Full ledger in Paper 2 §A1.

## Phase B — Cross-arena messaging

- **`World.routeCrossArenaMessage`.** Private messages route across
  arenas in the same world. Broadcasts and announcements stay
  arena-scoped (cheap talk is a feature of the local commons
  community, not a world-wide PA system).
- B1c cache measurement: inbox cheap-talk does not break the
  DeepSeek prompt cache; miss/turn stable ~200 across 1→2 messages
  in the inbox. Validated in `memory/project_v09_b1b_cache_measurement`.

## `exclude` perturbation

- **`applyExclude`** in `platform/perturbation.js`. Wires through
  `arena._world.migrateAgent` (set by `World.addArena`). Required
  payload: `playerId`, `junkArenaId`; optional `reason`.
- Failure modes return `{ applied: false, description }`: arena not
  in a world, target same as source, underlying `migrateAgent`
  error.
- Junk arena pattern: see [Perturbations — `exclude`](../platform/perturbations.md#exclude).

# Closed doors (intentional v1.0 non-scope) {#sec-closed-doors}

For honest reading of v1.0:

- No `Link.type` other than `'resource'`. The enum is a one-line
  extension; no v1.0 vignette consumes it.
- No HTTP meta-agents at the World level. `addMetaAgent` is builtin-
  only; HTTP world-meta is deferred to v1.1 (parallel to the C3.a
  HTTP path).
- No cross-arena cheap talk between pact-level players. Cross-arena
  messaging is private (1:1) only.
- No world-level persistence shell (`worlds.json`). Replay relies on
  per-arena JSONL logs under `data/worlds/<wid>/arenas/<aid>/`.
- No agent persistence across World restarts. World composition is
  evaluated fresh each run.

The Seneca commons (R, C with hidden pollution P) substrate work
(Paper 3 candidate) opens on `v1.1-dev` — see
[`dev/V1.1_PLAN.md`](../dev/V1.1_PLAN.md) once published.

# Nested-safety audit closure {#sec-nested-safety}

All 8 of the BDPD_ultimate_edition §5 nested-safety decisions are
honoured: 8/8 ✅, 0 violations. The post-tag fix for #8 (storage
path world-prefix) and the rectification of the #4
METRIC_REGISTRY false positive close the audit. v0.9 → v1.0 opens
on a fully nested-safe base.

# Smoke coverage {#sec-smoke}

D5 junkPurity 1.00 (built-in baseline). All v1.0 pilot smokes green
pre-tag. The seed-robustness sweep (`F2.1`, 5 pilots × 5 seeds) and
the LLM N=5 sweeps (`F2.2`, V2 + V3 + V4 LLM replications) ship as
post-tag closure work; results in Paper 2.

# References {#sec-refs}

- [Paper 2 — v1.0 Compass](../publications/paper_02/_site/index.html)
- [World](../platform/world.md)
- [Treaties](../platform/treaties.md)
- [Governance](../platform/governance.md)
- [Perturbations — `exclude`](../platform/perturbations.md#exclude)
- [V1.0_PLAN.md](../dev/V1.0_PLAN.md)
