--- 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)