ADR Index¶
This page lists every Architecture Decision Record in Moodle Playground. See
Architecture Decision Records for the policy and
ADR-0000-template.md for the starting point.
The index is maintained by hand. When an ADR is added, superseded, or changes status, update the table.
ADR-0001 through ADR-0023 were migrated from the former docs/decisions/
folder and keep their original lightweight format (see
Legacy ADRs).
| ID | Title | Status | Date |
|---|---|---|---|
| ADR-0000 | Template | Template | — |
| ADR-0001 | Service Worker-level caching for scoped static assets | Accepted | 2026-03-27 |
| ADR-0002 | Plugin type and name auto-detection from GitHub URLs | Accepted | 2026-03-27 |
| ADR-0003 | Direct database inserts for course module addition (WASM SQLite compat) | Accepted | 2026-03-27 |
| ADR-0004 | OPcache tuning and runtime UX defaults for WASM (amended by ADR-0011) | Accepted | 2026-03-27 |
| ADR-0005 | Resilient blueprint step execution with graceful error handling | Accepted | 2026-03-27 |
| ADR-0006 | Language pack installation via the CORS proxy and Moodle's lang_installer | Accepted | 2026-06-08 |
| ADR-0007 | Course backup (.mbz) restore blueprint step | Accepted | 2026-06-08 |
| ADR-0008 | Blueprint provisioning for roles, scales and cohorts | Accepted | 2026-06-08 |
| ADR-0009 | File-backed Moodle configuration settings in blueprints | Accepted | 2026-06-08 |
| ADR-0010 | Build-time localcache seed (theme CSS + DI container) | Accepted | 2026-06 |
| ADR-0011 | Bundle content trim and php.ini / runtime tuning (amends ADR-0004) | Accepted | 2026-06 |
| ADR-0012 | Static-file fast path bypassing the serial PHP request queue | Accepted | 2026-06 |
| ADR-0013 | Build-time RequireJS combined-bundle seed (re-enable cachejs) | Superseded by ADR-0033 | 2026-06 |
| ADR-0014 | Patch production code that require_once()s files under tests/ | Accepted | 2026-06 |
| ADR-0015 | Buffer the request body synchronously for Firefox (SW fetch handler) | Accepted | 2026-06 |
| ADR-0016 | Runtime PR file overlay for Moodle core PR previews (applyPrOverlay) |
Accepted | 2026-06-28 |
| ADR-0017 | Explicit Moodle Playground scenario blocks in tracker issues | Accepted | 2026-07-01 |
| ADR-0018 | Solid compression for core bundles (tar.zst) — experiment that led to adoption | Accepted | 2026-07-05 |
| ADR-0019 | Streaming (bounded-memory) extraction for tar.zst core bundles (amended by ADR-0020) | Accepted | 2026-07-05 |
| ADR-0020 | Preserve empty plugin-type-root directories in the tar.zst bundle | Accepted | 2026-07-06 |
| ADR-0021 | Blueprint per-step timing instrumentation + [blueprint-perf] diagnostics channel |
Accepted | 2026-07-08 |
| ADR-0022 | Browser-side course backup (.mbz) download with progress | Accepted | 2026-07-08 |
| ADR-0023 | Resilient resource fetching + non-fatal-by-default blueprint steps | Accepted | 2026-07-08 |
| ADR-0024 | Lower base PHP memory_limit and Emscripten INITIAL_MEMORY for browser WASM environments | Proposed | 2026-07-12 |
| ADR-0025 | Boot-time asset delivery overlap, static fast-paths, and long-lived runtime diagnostics | Proposed | 2026-07-12 |
| ADR-0026 | Playground-specific minimization of Moodle configuration and features for memory and simplicity | Proposed | 2026-07-12 |
| ADR-0027 | Coherent selective crash recovery checkpoints | Proposed | 2026-07-12 |
| ADR-0028 | Sentry error monitoring via a minimal hand-rolled envelope client | Proposed | 2026-08-15 |
| ADR-0029 | Timestamped Build IDs for deployment identification and cache versioning | Proposed | 2026-08-16 |
| ADR-0030 | Pinned Moodle prerelease channels | Proposed | 2026-09-16 |
| ADR-0031 | Proxy worker serves generic responses as sandboxed data | Proposed | 2026-09-25 |
| ADR-0032 | Moodle 5.3 LTS is the default branch | Accepted | 2026-10-03 |
| ADR-0033 | Moodle-owned JavaScript revisions and versioned RequireJS seeds | Accepted | 2026-10-16 |
| ADR-0034 | Cache public immutable ESM responses inside the existing scope | Accepted | 2026-10-16 |
| ADR-0035 | Checkpoint provisioning and restore volatile blueprint artifacts | Accepted (amended by ADR-0036) | 2026-10-16 |
| ADR-0036 | Download blueprint plugin and unzip archives again on reload | Accepted (extended by ADR-0037) | 2026-10-16 |
| ADR-0037 | Verify re-downloaded blueprint archives against a checkpointed hash on reload | Accepted | 2026-10-16 |
| ADR-0038 | Validate OPcache file-cache timestamps and blacklist the eval script path | Accepted | 2026-10-16 |
| ADR-0039 | Start OPcache's file cache on PHP 8.3/8.4 via the uwsgi SAPI name, behind an experimental flag |
Accepted (amended by ADR-0046) | 2026-10-16 |
| ADR-0040 | Expose the experimental OPcache flag as an info-panel toggle that reloads without resetting | Accepted | 2026-10-17 |
| ADR-0041 | Exclusive ownership of a playground scope | Proposed | 2026-10-18 |
| ADR-0042 | Stream service-worker static responses while caching them | Proposed | 2026-10-18 |
| ADR-0043 | Discard the OPcache file cache after CLI runs, before the next web request | Proposed | 2026-10-18 |
| ADR-0044 | Raise PHP memory_limit to 512M while the OPcache file cache is live | Proposed | 2026-10-18 |
| ADR-0045 | Leave cross-origin requests to the browser instead of passing them through the Service Worker | Proposed | 2026-10-19 |
| ADR-0046 | Turn the OPcache file cache on by default | Proposed | 2026-10-19 |
| ADR-0047 | Expose the runtime web root to blueprints as {{MOODLE_DIRROOT}} |
Proposed | 2026-10-22 |
PR #341 review follow-up: ADR-0033 clarifies production JS after purges, ADR-0034 qualifies warm-cache evidence and header visibility, and ADR-0035 covers early checkpoints, shell identity, partial artifacts and non-replayed crash recovery. All three were accepted when PR #341 merged.
The second-review follow-up also clears the separate on-disk hook registries on plugin/overlay restore; ADR-0035 records this distinction from MUC.
ADR-0037 (issue #345) adds the SHA-256 of each installed archive to the ADR-0035 checkpoint so an ADR-0036 re-download can be verified before it runs, and retries failed plugin downloads with a message that names the archive.