|
| 1 | +# Estate Proof-Debt Audit — 2026-05-26 |
| 2 | + |
| 3 | +**Scanner:** automated grep sweep across 283 estate repositories. |
| 4 | +**Date:** 2026-05-26 (HEAD-state snapshot). |
| 5 | +**Scope:** every `*.v`, `*.lean`, `*.agda`, `*.idr`, `*.idr2`, `*.fst`, `*.dfy`, `*.tla`, `*.ads`, `*.adb` file outside `.git/`, `target/`, `_build/`, `node_modules/`. |
| 6 | + |
| 7 | +**What was searched:** |
| 8 | +- Coq: `Axiom`, `Admitted`, `admit.` at line start |
| 9 | +- Lean: `sorry`, `axiom <name>` |
| 10 | +- Agda: `postulate` (top-level) |
| 11 | +- Idris2: `believe_me`, `really_believe_me`, `assert_total`, top-level `partial`, `%default partial` |
| 12 | +- F\*: `assume val`, `admit_p` |
| 13 | +- Cross-language: `TODO PROOF`, `OWED:`, `FIXME PROOF` |
| 14 | +- Plus Rust/Haskell `unsafePerformIO` / `unsafeCoerce` as a "soundness escape" indicator |
| 15 | + |
| 16 | +### Headline numbers |
| 17 | + |
| 18 | +| Language | Files scanned | |
| 19 | +|---|---| |
| 20 | +| Coq (`*.v`) | 554 | |
| 21 | +| Lean (`*.lean`) | 190 | |
| 22 | +| Agda (`*.agda`) | 1211 | |
| 23 | +| Idris2 (`*.idr`/`*.idr2`) | 4109 | |
| 24 | +| F\* (`*.fst`) | 7 | |
| 25 | +| Dafny (`*.dfy`) | 2 | |
| 26 | +| TLA+ (`*.tla`) | 68 | |
| 27 | +| SPARK (`*.ads`+`*.adb`) | 1011 | |
| 28 | + |
| 29 | +### Top offenders (raw counts, including archive/vendored) |
| 30 | + |
| 31 | +``` |
| 32 | +# Proof-debt sweep 2026-05-26T12:18:05+01:00 |
| 33 | +007 | files= 59 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 16 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 34 | +absolute-zero | files= 6638 | Coq-Axm/Adm= 72 | Lean-srry/ax= 315 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 35 | +affinescript | files= 593 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 36 | +affinescript-stdlib-pr | files= 37 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 37 | +agda-stdlib | files= 1229 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 27 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 38 | +ambientops | files= 138 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 39 | +asdf-tool-plugins | files= 567 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 40 | +betlang | files= 10 | Coq-Axm/Adm= 0 | Lean-srry/ax= 5 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 41 | +bofig | files= 6 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 42 | +bofj-kitt | files= 19 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 6 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 43 | +boinc-boinc | files= 7 | Coq-Axm/Adm= 0 | Lean-srry/ax= 1 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 44 | +boj-server | files= 126 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 9 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 45 | +burble | files= 55 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 2 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 46 | +civic-connect | files= 12 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 47 | +developer-ecosystem | files= 710 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 8 | Idr-prtl= 56 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 48 | +docmatrix | files= 10 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 49 | +docudactyl | files= 11 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 50 | +echidna | files= 103 | Coq-Axm/Adm= 0 | Lean-srry/ax= 6 | Agda-pst= 2 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 12 |
| 51 | +echidnabot | files= 7 | Coq-Axm/Adm= 1 | Lean-srry/ax= 4 | Agda-pst= 0 | Idr-blv= 1 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 52 | +echo-types | files= 609 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 53 | +eclexia | files= 8 | Coq-Axm/Adm= 9 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 54 | +email-octad-experiment | files= 14 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 9 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 55 | +ephapax | files= 23 | Coq-Axm/Adm= 3 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 1 | Idr-prtl= 1 | Fstr-asm= 0 | TODO= 14 | Unsafe= 0 |
| 56 | +fireflag | files= 9 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 57 | +flatracoon | files= 12 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 58 | +formatrix-docs | files= 10 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 59 | +frayed-knot-toolkit | files= 6 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 0 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 60 | +fraying-model-computational-testbed | files= 13 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 6 | Idr-prtl= 0 | Fstr-asm= 0 | TODO= 0 | Unsafe= 0 |
| 61 | +gossamer | files= 28 | Coq-Axm/Adm= 0 | Lean-srry/ax= 0 | Agda-pst= 0 | Idr-blv= 13 | Idr-prtl= 4 | Fstr-asm= 0 | TODO= 2 | Unsafe= 0 |
| 62 | +``` |
| 63 | + |
| 64 | +### Filtered by active development (excluding archive/vendored mirrors) |
| 65 | + |
| 66 | +- **`hyperpolymath-archive`** — 878 Lean sorry/axiom, 18 partial Idris, 3 believe_me. *Archive — frozen, not active debt.* |
| 67 | +- **`repos-monorepo`** — 170 Coq axiom/admit, 129 Lean sorry, 105 believe_me, 138 partial. *Monorepo of vendored copies — proxy debt.* |
| 68 | +- **`absolute-zero`** — 72 Coq Axiom/Admitted, 315 Lean sorry/axiom across ~6638 proof files. **Active.** Open issue: #44 baseline glob fix + class-J axiom audit per memory. |
| 69 | +- **`maa-framework`** — 80 Coq, 54 Lean across just 25 files. **High density. Active.** |
| 70 | +- **`hypatia`** — 3 Coq, 6 Lean, 3 Agda postulate, 12 believe_me, 3 unsafe across 81 files. **Active.** |
| 71 | +- **`echidna`** — 6 Lean sorry, 2 Agda postulate, 12 unsafe. **L3-resume work per memory.** |
| 72 | +- **`betlang`** — 5 Lean sorry. `substTop_preserves_typing` axiom per memory (PR#27 closed but axiom remains). |
| 73 | +- **`echidnabot`** — 1 Coq, 4 Lean, 1 believe_me. |
| 74 | +- **`ephapax`** — 3 Coq Admitted (Semantics.v:4924, 5983, 6572), 1 believe_me, 1 partial, 14 TODO PROOF. **Active — closure plan owned (Item 1 in MEMORY).** |
| 75 | +- **`vcl-ut`** — 8 believe_me, 14 TODO PROOF. Known: HOLE deeper than documented (memory). |
| 76 | +- **`typed-wasm`** — 5 believe_me. |
| 77 | +- **`stapeln`** — 10 believe_me, 34 partial across 102 files. |
| 78 | +- **`proven`** — 51 believe_me, 10 partial, 1 unsafe, 372 TODO markers across 853 files. **Largest active TODO surface.** |
| 79 | +- **`proven-servers`** — 1 believe_me, 10 partial, 1 TODO. |
| 80 | +- **`standards`** — 4 Agda postulate, 1 believe_me, 11 partial. The canonical repo has its own proof debt. |
| 81 | +- **`veridical-simulation-core`** — 4 believe_me. |
| 82 | +- **`valence-shell`** — 1 Agda postulate, 8 partial. |
| 83 | + |
| 84 | +### Cross-cutting patterns |
| 85 | + |
| 86 | +1. **Idris2 `partial`** is the most common active marker (138 in repos-monorepo, 34 in stapeln, 11 in standards, 10 in proven, etc.). `partial` is correctness-relevant but often masquerades as ergonomic ("totality just hard to prove here"). |
| 87 | +2. **`believe_me`** clusters around extraction-boundary code (Rust↔Idris FFI, codec runtime). Pattern repeats across typed-wasm, hypatia, stapeln, vcl-ut, somethings-fishy, snifs, rsr-template-repo (each 5–12 usages). |
| 88 | +3. **`TODO PROOF` / `OWED` markers** in `proven` (372) and `ephapax` (14) indicate that the codebases track their own debt — they're better surfaced than purely silent debt elsewhere. |
| 89 | +4. **Agda `postulate`** in `standards` (4) and `valence-shell` (1) — needs review for whether these are necessary axioms (e.g. `funExt`) or genuine debt. |
| 90 | +5. **Soundness-escapes outside proof languages**: `unsafePerformIO`/`unsafeCoerce` showed 12 in echidna, 3 in hypatia, 2 in somethings-fishy — these are not "proof debt" per se but soundness-relevant and warrant audit. |
| 91 | + |
| 92 | +### Recommended next moves |
| 93 | + |
| 94 | +| Repo | Action | Priority | |
| 95 | +|---|---|---| |
| 96 | +| ephapax | Close `formal/Semantics.v` 3 Admitteds via 6-9 day plan in `project_ephapax_preservation_closure_plan.md` | P0 (already on roadmap) | |
| 97 | +| absolute-zero | Triage 72 Coq Admitteds + 315 Lean sorries — likely cluster around T0 axiom-audit territory | P0 | |
| 98 | +| maa-framework | High density (80+54 in 25 files) — investigate whether vendored or original | P1 | |
| 99 | +| betlang | Discharge `substTop_preserves_typing` per PR#27 recipe | P1 | |
| 100 | +| proven | Convert the 372 TODO PROOF markers into a discharge schedule | P1 | |
| 101 | +| standards | Audit 4 Agda postulates + 11 Idris partials — set the example for downstream | P1 | |
| 102 | +| typed-wasm, stapeln, vcl-ut, hypatia, snifs, somethings-fishy | Each 5-15 believe_me — audit & document | P2 | |
| 103 | +| Rest | Document in per-repo `docs/tech-debt-2026-05-26.md`; no urgent fix | P3 | |
| 104 | + |
| 105 | +### Trusted-base reduction policy (proposed estate rule) |
| 106 | + |
| 107 | +Reuse the [boj-server backend-assurance harness pattern](https://github.com/hyperpolymath/boj-server) for `believe_me` / `assume val` / `Trust X` blocks: each must be one of |
| 108 | +- (a) discharged by a proof, |
| 109 | +- (b) property-tested via QuickCheck/Verus-style adversarial tests, |
| 110 | +- (c) annotated with a refutation budget and tracked in `docs/proof-debt.md`. |
| 111 | + |
| 112 | +### Coverage caveat |
| 113 | + |
| 114 | +This scan is **syntactic**, not semantic. It cannot distinguish: |
| 115 | +- Necessary axioms (e.g. `funExt` in HoTT) from genuine debt. |
| 116 | +- `partial` used because Idris2's totality checker is incomplete vs `partial` used to bury non-termination. |
| 117 | +- `unsafePerformIO` used at a verified library boundary vs ad-hoc soundness break. |
| 118 | + |
| 119 | +The per-repo PRs ask each repo's maintainer to classify each finding. |
| 120 | + |
| 121 | +--- |
| 122 | + |
| 123 | +🤖 Generated by Claude Code estate-wide proof-debt scan (2026-05-26). |
| 124 | +Companion docs: `2026-05-26-estate-licence-debt.md`, `2026-05-26-estate-documentation-debt.md`. |
0 commit comments