|
| 1 | +// SPDX-License-Identifier: MPL-2.0 |
| 2 | +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> |
| 3 | += AFFIRMATION — nextgen-typing, as of 2026-06-16 |
| 4 | +:toc: macro |
| 5 | +:toclevels: 2 |
| 6 | + |
| 7 | +_the No-Bullshit file: what we affirm was true and checkable at this moment_ |
| 8 | + |
| 9 | +[NOTE] |
| 10 | +==== |
| 11 | +*Genre.* An *affirmation* is a solemn declaration of the truth of a statement, |
| 12 | +made by someone who _declines to swear an oath_. That is exactly what this is: |
| 13 | +our truth-as-best-believed at a stamped instant — binding on our honesty, not a |
| 14 | +claim of infallibility. It is not the README and not the EXPLAINME: |
| 15 | +
|
| 16 | +[cols="1,3,2",options="header"] |
| 17 | +|=== |
| 18 | +| File | Answers | Tense |
| 19 | +| `README.adoc` | _Where is this going, and why?_ — the pipeline overview and steering | future / aspirational |
| 20 | +| `EXPLAINME.adoc` | _How is it built, and what's the evidence?_ — the coordination mechanism | descriptive / mechanism |
| 21 | +| *`AFFIRMATION.adoc`* (this file) | _What can we honestly affirm was *true and checkable* at a stamped moment?_ | a frozen instant, falsifiable |
| 22 | +|=== |
| 23 | +
|
| 24 | +`nextgen-typing` is a *coordination monorepo*, not a compiler or a proof |
| 25 | +project. The affirmation that matters here is about the coordination layer |
| 26 | +itself: that its registry and cross-file invariants build and are internally |
| 27 | +consistent, and that it holds *no* proofs of its own — by design. |
| 28 | +==== |
| 29 | + |
| 30 | +toc::[] |
| 31 | + |
| 32 | +== What this is, and how it is designed to work |
| 33 | + |
| 34 | +*What it is.* A short, dated, jointly-signed snapshot of what we can _honestly |
| 35 | +and verifiably_ claim about this repo at one exact commit. Nothing here is |
| 36 | +marketing (that is the README) and nothing is engineering evidence for a |
| 37 | +constituent repo's compiler or proofs (those claims belong in those repos). |
| 38 | +This file is the receipt for the coordination layer. |
| 39 | + |
| 40 | +*How it is designed to work.* Three moving parts make it trustworthy: |
| 41 | + |
| 42 | +. *Ground truth, not memory.* Every claim below was produced by _running the |
| 43 | + tool in the session that wrote this file_ (the pipeline-drift guard, the |
| 44 | + must/trust gates, the template-residue check, and the proof-checker harness |
| 45 | + this repo ships). Where a status doc said otherwise, the live run wins and we |
| 46 | + flag the contradiction. |
| 47 | +. *A frozen anchor.* The file names the exact commit SHA, branch, UTC |
| 48 | + timestamp, and toolchain (see <<Verifiable anchor>>), so "true" always means |
| 49 | + "true _at this point_". Move the SHA and this file becomes a draft until |
| 50 | + re-run. |
| 51 | +. *A real signature.* It is landed by a *signed git commit*; that signature |
| 52 | + over this content at the anchored SHA is what makes the affirmation |
| 53 | + tamper-evident and attributable — not the prose alone. |
| 54 | + |
| 55 | +*We are fallible.* We can be wrong, stale, or simply mistaken about our own |
| 56 | +work. This file is our best honest belief, not a proof of its own correctness. |
| 57 | +Treat it as a falsifiable claim, not gospel. |
| 58 | + |
| 59 | +== The epistemic contract (read this before you trust _or_ attack) |
| 60 | + |
| 61 | +This document records our *best joint belief* at the timestamp below. It is |
| 62 | +*not a guarantee of correctness.* We may be wrong. We may have missed |
| 63 | +something — a drifted doc, a stale registry line, a public description that |
| 64 | +overruns the tree. |
| 65 | + |
| 66 | +*No intentional overclaim.* That is the only guarantee here: we have not |
| 67 | +_knowingly_ inflated anything. This repo makes *no* compiler-correctness, |
| 68 | +proof-soundness, or benchmark claim, and this file does not invent one. Where a |
| 69 | +checker passed, we say "passed". Where one failed, we say "failed" and why. |
| 70 | +Where the in-tree proof files are unconfigured RSR template residue, we say so |
| 71 | +plainly. If you find an honest claim here that turns out false, that is an |
| 72 | +error to be fixed — not a lie. |
| 73 | + |
| 74 | +*Standing invitation to refute.* You are _invited_ to bulldoze any claim in |
| 75 | +this file. We want that. But the fair form of the attack is: |
| 76 | + |
| 77 | +. Read this file at the stamped commit. |
| 78 | +. Reproduce (or fail to reproduce) the checks in <<reproduce,Reproduce it yourself>>. |
| 79 | +. _Then_ tell us where the discrepancy is, against the artefact as it stood at |
| 80 | + this moment — so we can either justify it or concede it on the record. |
| 81 | + |
| 82 | +An attack that skips steps 1–2 is attacking a strawman of a different date. |
| 83 | + |
| 84 | +*No fights before the facts are cleared up.* We are not interested in a dispute |
| 85 | +over a claim until the discrepancy has actually been checked against the |
| 86 | +artefact at this commit and we have had the chance to either justify it or |
| 87 | +concede it on the record. Good faith both ways: bring a reproducible |
| 88 | +discrepancy and we will fix the claim, the doc, or the registry — promptly and |
| 89 | +without defensiveness. The goal is a corrected record, not a won argument. |
| 90 | + |
| 91 | +== Verifiable anchor |
| 92 | + |
| 93 | +[cols="1,3"] |
| 94 | +|=== |
| 95 | +| *Repo* | `hyperpolymath/nextgen-typing` (the type-theory pipeline *coordination monorepo* — contains no compiler code) |
| 96 | +| *Branch* | `main` |
| 97 | +| *Commit (HEAD)* | `e9897daf4ba1d2104f78abd5f660a870279eda5b` |
| 98 | +| *Permalink* | https://github.com/hyperpolymath/nextgen-typing/tree/e9897daf4ba1d2104f78abd5f660a870279eda5b |
| 99 | +| *Verified (UTC)* | 2026-06-16T12:28:36Z |
| 100 | +| *Working-tree delta at verification* | Clean (`git status --porcelain` empty) at the moment the checks below were run. This AFFIRMATION file is then added as a new untracked file; it does not change any check result above it. The results recorded here are HEAD as-is. |
| 101 | +| *Toolchain* | just 1.50.0 · bash 5.2.21 · git 2.43.0 · Idris2 0.8.0 · Lean 4.13.0 · Agda 2.8.0 · Coq 8.18.0 · TLA+ `tlc` not installed |
| 102 | +| *HEAD commit signature* | GPG-signed (RSA `9639451754496E51D6B537CAD119017EBF695AB1`, "hyperpolymath", `j.d.a.jewell@open.ac.uk`) — "Good signature" reported by `git log --show-signature`. |
| 103 | +|=== |
| 104 | + |
| 105 | +[IMPORTANT] |
| 106 | +If you are reading this at a _later_ commit, the claims may have drifted. |
| 107 | +Re-run <<reproduce>> and write a fresh affirmation; do not trust a stale one. |
| 108 | + |
| 109 | +== Companion documents and repo metadata (cross-check) |
| 110 | + |
| 111 | +This affirmation should be read against the repo's own public claims. Where they |
| 112 | +drift from what we verified, we say so here rather than quietly leave the reader |
| 113 | +to find out. |
| 114 | + |
| 115 | +* *`README.adoc`* — _present_. link:README.adoc[_"nextgen-typing — The |
| 116 | + Hyperpolymath Type Theory Pipeline"_]. States plainly: "It does not contain |
| 117 | + compiler code." Verified consistent with the tree. |
| 118 | +* *`EXPLAINME.adoc`* — _present_. link:EXPLAINME.adoc[]. Explicitly: "This repo |
| 119 | + makes *no claims* about compiler correctness, proof soundness, or benchmark |
| 120 | + results." Verified consistent with what we ran. |
| 121 | +* *`0-AI-MANIFEST.a2ml`* — _present_. The repo's read-first invariant file; |
| 122 | + invariant #3 is "No compiler claims here". This AFFIRMATION upholds that |
| 123 | + invariant rather than breaching it. |
| 124 | +* *GitHub repo description* (fetched in-session via `gh repo view`) — |
| 125 | + _"Coordination monorepo for the Hyperpolymath type-theory pipeline — |
| 126 | + Kategoria/Katagoria, TypeLL, typed-Wasm, PanLL, and minimal calibration |
| 127 | + calculi such as TypeFix Zero."_ *Drift:* the strings "Kategoria", "TypeFix |
| 128 | + Zero", and "calibration calculi" do *not* appear anywhere in the tree at this |
| 129 | + commit (the README's main chain spells it "katagoria", which it also flags as |
| 130 | + *not yet created*). The description is ahead of the artefact; treat it as |
| 131 | + steering, not a tree claim. |
| 132 | +* *GitHub topics* — `dependent-types`, `formal-methods`, `linear-types`, |
| 133 | + `partiality`, `turing-completeness`, `type-theory`, `typed-wasm`, |
| 134 | + `universe-hierarchy`. *Caveat:* these describe the _pipeline this repo |
| 135 | + coordinates_, not artefacts in this repo. None of `partiality`, |
| 136 | + `turing-completeness`, or `universe-hierarchy` corresponds to any |
| 137 | + proved-here content — they are properties of the constituent repos |
| 138 | + (typell / typed-wasm / tropical-resource-typing), not of this coordination |
| 139 | + layer. |
| 140 | + |
| 141 | +== The honest state (one breath) |
| 142 | + |
| 143 | +*nextgen-typing is a documentation-and-registry coordination layer for the |
| 144 | +`katagoria → typell → typed-wasm → PanLL` pipeline. Its job is to keep the |
| 145 | +cross-repo story consistent, and at this commit that job is being done: the |
| 146 | +pipeline-drift guard and the must/trust correctness gates pass green. It holds |
| 147 | +no proofs of its own — the proof directory is unconfigured RSR-template residue |
| 148 | +that does not compile as shipped, and every real proof obligation lives in the |
| 149 | +constituent repos, exactly as the manifest says it should.* |
| 150 | + |
| 151 | +=== What is solid (and how we checked) |
| 152 | + |
| 153 | +* *The pipeline-drift registry guard passes — verified green this moment.* |
| 154 | + `just validate-pipeline-drift` → `scripts/check-pipeline-drift.sh` exits *0*, |
| 155 | + with *every* check PASS: all six canonical files present |
| 156 | + (`README.adoc`, `docs/ARCHITECTURE.adoc`, `docs/PIPELINE.adoc`, and the three |
| 157 | + `.machine_readable/6a2/` A2ML files); the canonical chain |
| 158 | + `katagoria → typell → typed-wasm → PanLL` matches exactly across README, |
| 159 | + ARCHITECTURE, PIPELINE, STATE and ECOSYSTEM; the "open-ended TypeLL" framing |
| 160 | + is consistent across README/ARCHITECTURE/PIPELINE/META; katagoria marked |
| 161 | + Active consistently; dates synchronized (all read `2026-04-12`); and no stale |
| 162 | + status phrases. _This is the core "is the coordination internally consistent?" |
| 163 | + check, and it is green._ |
| 164 | +* *The "must" correctness gate passes.* `just must-check` exits *0*: LICENSE |
| 165 | + present, README present, no banned `Dockerfile`/`Makefile`, and SPDX-header |
| 166 | + presence on source files. |
| 167 | +* *Licence is MPL-2.0, internally consistent.* `just trust-license-content` |
| 168 | + passes; the in-tree `LICENSE` is the Mozilla Public License Version 2.0 and |
| 169 | + in-tree source/doc files carry `SPDX-License-Identifier: MPL-2.0`. (Note: the |
| 170 | + `trust-verify` _aggregate_ recipe fails — see loud-failures — but that is a |
| 171 | + Containerfile-pinning rule, not a licence problem.) |
| 172 | +* *No secrets committed.* `just trust-no-secrets-committed` passes (no `.env`, |
| 173 | + `credentials.json`, or `.env.local`). |
| 174 | +* *The Coq template proof, taken alone, compiles.* `just proof-check-coq` exits |
| 175 | + *0* (`coqc verification/proofs/coq/TypeSafety.v` → exit 0). *But read the |
| 176 | + nuance below before reading anything into this:* it proves a toy |
| 177 | + expression-language `type_soundness` theorem labelled "Template — replace with |
| 178 | + your project's type system", _not_ any nextgen-typing claim. |
| 179 | + |
| 180 | +=== The honest nuance you must not lose (proved-CORE vs unproved-IMPLEMENTATION) |
| 181 | + |
| 182 | +*This repo proves nothing about the typing pipeline, and that is correct by |
| 183 | +design.* The distinction here is sharper than the usual "proved core vs tested |
| 184 | +implementation": |
| 185 | + |
| 186 | +* The `verification/proofs/` tree (`idris2/`, `lean4/`, `agda/`, `coq/`, |
| 187 | + `tlaplus/`) is *unconfigured RSR template residue*. The files say so in their |
| 188 | + own headers — e.g. `verification/proofs/idris2/Types.idr` line 5: "Template — |
| 189 | + replace with your project's core types." They prove generic example lemmas |
| 190 | + (a bounded-`Nat`, a toy expression language), not pipeline properties. |
| 191 | +* `PROOF-STATUS.md` reports *0% proven* (0 of 7 obligations) — and the live run |
| 192 | + *confirms* this rather than contradicting it: there is no nextgen-typing proof |
| 193 | + to run. |
| 194 | +* The genuine proof obligations for this pipeline live *in the constituent |
| 195 | + repos* (`typell`, `typed-wasm`, `tropical-resource-typing`, `katagoria`), and |
| 196 | + this coordination layer makes no claim to have discharged them. Anyone reading |
| 197 | + the presence of `.idr`/`.lean`/`.agda`/`.v` files here as "nextgen-typing has |
| 198 | + formal proofs" is overclaiming on the repo's behalf. |
| 199 | + |
| 200 | +=== Known-incomplete but honestly fenced (loud failures, never silent) |
| 201 | + |
| 202 | +These three checks *fail loudly* at this commit. They are real findings, fenced |
| 203 | +here so no reader mistakes them for green: |
| 204 | + |
| 205 | +* *`just proof-check-idris2` FAILS (exit 1).* The Idris2 template proofs do not |
| 206 | + even compile as shipped: `Module name Types does not match file name |
| 207 | + "verification/proofs/idris2/Types.idr"` (and the same module-vs-path mismatch |
| 208 | + for every `ABI/*.idr`). So the Idris2 "proofs" prove *nothing* right now — a |
| 209 | + loud, visible failure, not a silent pass. (`proof-check-all` therefore also |
| 210 | + surfaces these failures.) |
| 211 | +* *`just proof-scan-dangerous` FAILS (exit 1) — but on false positives.* It |
| 212 | + flags 8 files for "dangerous patterns", yet every hit is the _warning comment_ |
| 213 | + itself (e.g. the line "All proofs MUST be constructive (no believe_me, no |
| 214 | + assert_total)" trips the `believe_me`/`assert_total` matcher). There is no |
| 215 | + actual `believe_me`, `sorry`, `Admitted`, or `postulate` in proof position — |
| 216 | + the scanner is matching its own documentation. A scanner bug, recorded as |
| 217 | + such; not evidence of unsound proofs (there are no load-bearing proofs to be |
| 218 | + unsound). |
| 219 | +* *`just verify-template` FAILS (exit 1).* Unreplaced `{{PLACEHOLDER}}` template |
| 220 | + tokens remain in `QUICKSTART-MAINTAINER.adoc`, `QUICKSTART-DEV.adoc`, |
| 221 | + `READINESS.md`, `TEST-NEEDS.md`, `TEMPLATE-STANDARDS-AUDIT.adoc`, and |
| 222 | + `container/compose.toml`; the Justfile still references `rsr-template-repo`; |
| 223 | + and the Groove manifest still has port `0`. This repo is a partly-uninstantiated |
| 224 | + RSR template — honest, visible debt. |
| 225 | +* *`just trust-verify` FAILS (exit 1)* at `trust-container-images-pinned`: the |
| 226 | + `Containerfile` base images are not digest-pinned (`@sha256:`). A supply-chain |
| 227 | + hygiene gap, not a coordination-correctness problem. |
| 228 | + |
| 229 | +=== Outstanding / weak / refuted (no spin) |
| 230 | + |
| 231 | +* *Public GitHub description over-runs the tree (drift).* It advertises |
| 232 | + "Kategoria/Katagoria … TypeFix Zero … minimal calibration calculi", none of |
| 233 | + which exist in the repo at this commit. Not refuted-as-false-claim (it is |
| 234 | + steering text), but flagged so the reader is not misled. |
| 235 | +* *`katagoria` is declared "✅ Active" in the README table* yet the manifest |
| 236 | + (invariant #4) and EXPLAINME both say it "does not exist yet / not yet |
| 237 | + created". Internal tension between the status glyph and the prose; the |
| 238 | + honest reading is "planned, not created". |
| 239 | +* *No nextgen-typing-specific proof exists* — by design, but stated plainly so |
| 240 | + no one infers otherwise from the populated `verification/proofs/` tree. |
| 241 | +* *TLA+ cannot be checked in this environment* (`tlc` not installed), so |
| 242 | + `verification/proofs/tlaplus/StateMachine.tla` was not exercised at all. |
| 243 | + |
| 244 | +[#reproduce] |
| 245 | +== Reproduce it yourself |
| 246 | + |
| 247 | +From the repo root, at the commit above: |
| 248 | + |
| 249 | +[source,sh] |
| 250 | +---- |
| 251 | +git rev-parse HEAD # expect e9897daf4ba1d2104f78abd5f660a870279eda5b |
| 252 | +git status --porcelain # expect empty (clean) before adding this file |
| 253 | +
|
| 254 | +just validate-pipeline-drift # expect exit 0 — "PASS: no pipeline drift detected." |
| 255 | +just must-check # expect exit 0 — "All must checks passed" |
| 256 | +just proof-check-coq # expect exit 0 — toy TEMPLATE proof compiles (not a pipeline claim) |
| 257 | +
|
| 258 | +# The loud failures (expected to FAIL — that is the honest state, not a regression): |
| 259 | +just proof-check-idris2 # expect exit 1 — module-name vs file-path mismatch in template .idr files |
| 260 | +just proof-scan-dangerous # expect exit 1 — false positives on the warning COMMENTS, no real dangerous tactics |
| 261 | +just verify-template # expect exit 1 — unreplaced {{PLACEHOLDER}} tokens + rsr-template-repo refs |
| 262 | +just trust-verify # expect exit 1 — Containerfile base images not @sha256-pinned |
| 263 | +---- |
| 264 | + |
| 265 | +To confirm the no-proofs-here invariant directly: the files under |
| 266 | +`verification/proofs/` self-identify as templates (`grep -n Template |
| 267 | +verification/proofs/idris2/Types.idr`), and `PROOF-STATUS.md` reports |
| 268 | +*0% proven (0 of 7)*. |
| 269 | + |
| 270 | +== One-line characterisation (quote this) |
| 271 | + |
| 272 | +[quote] |
| 273 | +____ |
| 274 | +"A type-theory pipeline *coordination monorepo* whose registry/docs consistency |
| 275 | +guard (`validate-pipeline-drift`) and `must`/licence gates pass green this |
| 276 | +moment, that holds *no* proofs of its own — the in-tree proof tree is |
| 277 | +unconfigured RSR template residue that does not compile, and all real proof |
| 278 | +obligations live in the constituent repos — with honest, loudly-failing |
| 279 | +template-instantiation debt (`verify-template`, Idris2 module paths, |
| 280 | +Containerfile pinning) still on the queue. A coordination layer, not a verified |
| 281 | +artefact. No intentional overclaim." |
| 282 | +____ |
| 283 | + |
| 284 | +== Joint attestation |
| 285 | + |
| 286 | +We, the undersigned, assert that *to the best of our joint belief at the |
| 287 | +timestamp above, every claim in this file is true and was checked as described* |
| 288 | +— with no intentional overclaim, and with the open gaps stated rather than |
| 289 | +hidden. |
| 290 | + |
| 291 | +* *Engineering party (AI):* Claude Opus 4.8 (`claude-opus-4-8[1m]`) — ran the |
| 292 | + build/test/proof checks recorded here on 2026-06-16T12:28:36Z and stands |
| 293 | + behind this wording as a faithful report of those runs. |
| 294 | +* *Owner / maintainer:* Jonathan D.A. Jewell — _signs by committing this file |
| 295 | + with `-S` (`id_ed25519_signing`); the git commit signature over this content, |
| 296 | + at the commit SHA recorded above, is the cryptographic form of this |
| 297 | + affirmation._ |
| 298 | ++ |
| 299 | +Signed-off-date: ____________________ (fill on signing) |
| 300 | + |
| 301 | +[TIP] |
| 302 | +The authoritative, tamper-evident signature is the *signed git commit* that |
| 303 | +lands this file. If the SHA in <<Verifiable anchor>> matches the parent of that |
| 304 | +commit and the commit verifies, this affirmation is anchored. If they don't |
| 305 | +match, treat the file as a draft. |
0 commit comments