---
title: "BDPD v0.7 — Release Notebook"
subtitle: "Replication Library: four classical papers, reproducible end-to-end"
author: "Roberto Brunelli"
date: "2026-05-19"
release_tag: "v0.7"
release_type: "infrastructural"
format:
  html:
    toc: true
    code-fold: true
    embed-resources: true
---

# Overview {#sec-overview}

v0.7 is the **Replication Library** release. The platform that v0.6
made plug-friendly is now anchored to the commons-literature corpus.
Four annotated paper replicas (Hardin 1968, Olson 1965,
Janssen & Ostrom 2006, Dayton-Johnson 2002) ship as a Quarto book
under `examples/scenarios/`, each runnable in under 30 seconds.

This is an **infrastructural** release: no new physics, no new agent
behaviour, no behavioural change to the simulation. The contract is
that all canonical sweeps continue to reproduce bit-identically
against v0.6.5; the regression baseline carries forward unchanged.

The toolchain is pinned: Node 20, Python 3.12, `uv`, Quarto ≥ 1.5.
`.tool-versions` (asdf/mise) declares them at the repo root, and
`package.json` `engines.node ≥ 20` matches the Docker base image.

# What changed {#sec-what-changed}

## Replication Library

Four end-to-end replicas in a Quarto book:

| Scenario | Year | Coverage | Headline |
|---|---|---|---|
| Hardin — *Tragedy of the Commons* | 1968 | Full | Strategy contrast, commons-ratio gap 0.000 vs 0.361 |
| Olson — *Logic of Collective Action* | 1965 | Partial | Privileged-member restraint delays collapse 36%, lifts welfare 27%, but tragedy still wins |
| Janssen & Ostrom — *Empirically Based ABMs* | 2006 | Full | Group-size effect; N=12 collapses 2.8× faster than N=4 |
| Dayton-Johnson — *Inequality and Conservation* | 2002 | Partial | Inequality monotonically extends commons life; no U-shape on BDPD built-ins |

Each scenario directory keeps its standalone `notebook.qmd` so
rendering a single chapter still works in isolation.

`examples/scenarios/REPRODUCIBILITY.md` is the single source of truth
for the canonical toolchain, locked dependency files (with SHA-256
hashes recorded at release time), and the snapshot tag policy:
single tag `v0.7` covers all four scenarios as a unit; per-scenario
frozen tags were sketched but rejected (shared engine, freezing as a
unit is honest about the coupling).

## Plugin API contract v1.0

[`dev/plugin-api-contract.md`](../dev/plugin-api-contract.md) is no
longer a stub. The contract declares **Plugin API version 1.0**
(distinct from the BDPD core version), with:

- Formal semver policy
- Deprecation policy: survival ≥ 1 major
- Native-plugin trust model: trusted only, admin-loaded
- Recommended manifest fields: `version`, `bdpd_plugin_api`,
  `requires`

Two inaccuracies in the v0.6.5 stub were fixed retroactively:

- Plugin files export `default` an object `{ type, name, …required }`,
  not a `register(registry)` function.
- The engines registry exists (`engine/engine-registry.js` with
  `ENGINE_REGISTRY` + `buildEngine()`); the plugin loader installs
  plugin engines via `factory: (modelSpec) => BaseEngine` keyed by
  `name`.

## Docker quickstart

- `HEALTHCHECK` in `Dockerfile` probes `/api/health` every 30 s with
  a 20 s start-period. Container transitions `starting → healthy`
  within ~8 s on a warm host.
- [`getting-started/installation-docker.md`](../getting-started/installation-docker.md)
  is **additive** to the from-source `installation.md`, not a
  replacement. Covers prerequisites (Manjaro/Arch note on the
  separate `docker-compose` plugin package), `clone → build → wait
  healthy → run sweep → down`, devcontainer pointer for VS Code,
  explicit non-goals (multi-stage, registry push, signed plugins,
  GPU passthrough — all deferred to v0.8+).

# Scope decisions {#sec-scope}

Three originally-planned deliverables were **dropped** with explicit
rationale:

- **Colab badges** → deferred to v1.1 *only if* requested. Docker
  quickstart covers "click-to-run without a native toolchain" with
  a comparable user experience; v0.7 targets commons researchers
  (R / Python / NetLogo natives), not the AI/ML audience for whom
  Colab is the default.
- **Scenarios 5–7** (Vasconcelos full, Yoon, Perolat) → deferred to
  their gating-feature release (v1.0 cross-arena observability,
  v0.9 governance plugin, runner per-turn timeline export).
  Anticipating with workarounds would produce a partial replica
  that weakens the library's promise.
- **P1–P11 / CT1–CT6 BDPD sweeps as scenarios** → dropped. The
  canonical sweeps already exist under `experiments/`, are pinned
  by manifest, and are in the strict regression suite. Reformatting
  them as `examples/scenarios/` entries would be cosmetic.

# References {#sec-refs}

- [Replication library — Quarto book](../publications/index.md)
- [Plugin API contract](../dev/plugin-api-contract.md)
- [Docker installation](../getting-started/installation-docker.md)
- [Changelog v0.7](../dev/changelog.md)
