--- 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//arenas//`. 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//arenas//` 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//arenas//`. - 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)