|
| 1 | +// SPDX-License-Identifier: CC-BY-SA-4.0 |
| 2 | +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> |
| 3 | += Maintainer Runbook |
| 4 | +:toc: macro |
| 5 | +:toclevels: 2 |
| 6 | + |
| 7 | +[.lead] |
| 8 | +For *maintainers* — gate-keeping changes, keeping the proof cone green, keeping |
| 9 | +the documentation honest, and cutting releases. Authoritative sources: |
| 10 | +`roadmap-gates.adoc`, `CLAUDE.md` (current-rung-state + per-arc DO-NOT-reopen |
| 11 | +lists), and `.machine_readable/6a2/`. |
| 12 | + |
| 13 | +toc::[] |
| 14 | + |
| 15 | +== 1. The non-negotiable build cone |
| 16 | + |
| 17 | +Every change must hold the invariant: |
| 18 | + |
| 19 | +[source,sh] |
| 20 | +---- |
| 21 | +agda -i proofs/agda proofs/agda/All.agda # exits 0 |
| 22 | +agda -i proofs/agda proofs/agda/Smoke.agda # exits 0 |
| 23 | +sh scripts/kernel-guard.sh # PASS |
| 24 | +---- |
| 25 | + |
| 26 | +under `--safe --without-K`, with *zero postulates* in the load-bearing tracks |
| 27 | +and no escape pragmas (`believe_me`, `assert_total`, `postulate`, `sorry`, |
| 28 | +`Admitted`, `unsafeCoerce`). Every headline theorem is pinned in `Smoke.agda`; |
| 29 | +every new module is wired into `All.agda` (an orphan module that compiles but |
| 30 | +is not in `All.agda` is treated as dead code). |
| 31 | + |
| 32 | +== 2. The identity gates (the falsifiability contract) |
| 33 | + |
| 34 | +The identity claim rests on three gates, each with an explicit *failure action* |
| 35 | +(see <<Roadmap.adoc#,Roadmap>> and `roadmap-gates.adoc`): |
| 36 | + |
| 37 | +. *Distinct phenomenon* — echo types name structured loss as distinct from |
| 38 | + refinement types / lenses / HoTT fibres / quotients / provenance semirings. |
| 39 | +. *Characteristic theorems* — at least two theorems are naturally echo-shaped, |
| 40 | + not generic Σ lemmas. |
| 41 | +. *Canonical examples* — at least one fully worked example where echo types are |
| 42 | + the right explanatory unit. |
| 43 | + |
| 44 | +Gates are *reassessed at every tagged release* — surviving one round grants no |
| 45 | +immunity in the next. A failed gate is recorded in `docs/retractions.adoc` (a |
| 46 | +new dated `R-`/`F-` entry), *never silently revised*. Retractions are the |
| 47 | +mechanism that makes the claim falsifiable; they are not failures of the repo. |
| 48 | + |
| 49 | +== 3. When a proof rung lands — rung-consolidation policy |
| 50 | + |
| 51 | +Per `CLAUDE.md`, each named theorem / iso-shape that lands triggers: |
| 52 | + |
| 53 | +. *Branch housekeeping* — enumerate open remote branches ahead of `main`; |
| 54 | + decide landing / superseded / abandoned. |
| 55 | +. *Cherry-pick* to a consolidation branch off latest `main`, in dependency |
| 56 | + order (conflicts are usually additive, in `Smoke.agda` / `All.agda`). |
| 57 | +. *Human docs* — sweep `roadmap.adoc`, `docs/echo-types/composition.md`, |
| 58 | + `overview.md`, and the wiki for stale `(Open)` tags; use honest labels |
| 59 | + `(Landed)` / `(Partial)` / `(Open)`. |
| 60 | +. *Machine docs* — update `CLAUDE.md` current-rung-state and the `6a2/` files |
| 61 | + (see Section 4). |
| 62 | +. *Verify* — the build cone (Section 1). |
| 63 | +. *Fast-forward `main`* and push. |
| 64 | +. *Session ledger* — record the rung, the commits folded in, the remaining |
| 65 | + open pieces, and the smallest useful next advance. |
| 66 | + |
| 67 | +== 4. Machine-doc currency discipline |
| 68 | + |
| 69 | +When a *track's status changes*, the change must propagate to all of: |
| 70 | + |
| 71 | +* `.machine_readable/6a2/STATE.a2ml` — `[metadata]` phase + the current-workstream |
| 72 | + framing (historical blocks are preserved, not deleted; mark them HISTORY). |
| 73 | +* `.machine_readable/6a2/META.a2ml` — add an ADR for any architecture-level |
| 74 | + decision (status / supersedes per `[development-practices.versioning-of-decisions]`). |
| 75 | +* `docs/bridges/cross-repo-bridge-status.md` — the bridge ledger. |
| 76 | +* the wiki (<<Home.adoc#,Home>> one-line status + <<Roadmap.adoc#,Roadmap>>). |
| 77 | + |
| 78 | +Worked example: the 2026-06-21 ordinal-track *retirement* (`D-2026-06-21`) was |
| 79 | +swept through STATE.a2ml (currency note + phase), META.a2ml (adr-012), the |
| 80 | +bridge ledger (Tropical long-game row), and the wiki — keeping human and |
| 81 | +machine documentation consistent. Mirror that pattern. |
| 82 | + |
| 83 | +== 5. Release checklist |
| 84 | + |
| 85 | +Versioning is SemVer 2.0.0 (current target `0.1.1`; recipe-extension target |
| 86 | +`0.2.0+`). To cut a release: |
| 87 | + |
| 88 | +. [ ] Build cone green (Section 1) on `main`. |
| 89 | +. [ ] Identity gates reassessed (Section 2); any failure recorded in |
| 90 | + `docs/retractions.adoc`. |
| 91 | +. [ ] `CHANGELOG.md` updated; `[Unreleased]` rolled to the version. |
| 92 | +. [ ] Machine docs current (Section 4): `6a2/STATE.a2ml`, `META.a2ml`, |
| 93 | + bridge ledger, wiki one-line status. |
| 94 | +. [ ] Tag minted; mirrors (gitlab, codeberg) consistent. |
| 95 | +. [ ] *Then*, author-driven and *not* auto-run: Zenodo DOI, installable library |
| 96 | + packaging, outreach. Flag to the owner; do not start unprompted. |
| 97 | + |
| 98 | +== 6. CI lanes and known parked failures |
| 99 | + |
| 100 | +Substantive lanes that must stay green: Agda (`check` + `cold-check`), |
| 101 | +`governance/*`, the secret scanners (`gitleaks`/`trufflehog`/`*-secrets`), |
| 102 | +CodeQL (`analyze`), and Hypatia. A docs-only change passes the Agda lanes |
| 103 | +trivially (no `.agda` touched). |
| 104 | + |
| 105 | +*Parked, do not chase:* `scorecard.yml` / `mirror.yml` `startup_failure` at 0s |
| 106 | +is the billing-wall *pattern B* (a structural reusable-workflow failure, not a |
| 107 | +Guix/Nix policy failure). Hypatia may post pre-existing repo-level findings |
| 108 | +(e.g. a stale Scorecard `TokenPermissionsID` code-scanning alert that cannot |
| 109 | +auto-clear while Scorecard is billing-walled); confirm the Hypatia *check |
| 110 | +conclusion* (it is usually `success`) before treating a comment as a gate. |
| 111 | + |
| 112 | +== 7. Branch hygiene |
| 113 | + |
| 114 | +Single-`main` policy (Hypatia `GS007`). Remote-branch deletion is *owner / |
| 115 | +GitHub-UI only* — agents get HTTP 403 and the MCP has no delete-branch |
| 116 | +endpoint, so stale-branch cleanup is flagged in an issue and actioned by the |
| 117 | +owner. |
0 commit comments