Skip to content

Commit ce3156b

Browse files
docs(proof-debt): update triage counts after #144/#145 work
- Update DISCHARGE counts: ~59→~61, DISCHARGE-after-totality: ~7→~5 - Mark singleKeyPath and anyMatchesTAny as DISCHARGE (proven#81 complete) Refs #90 (Phase-3 umbrella) Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
1 parent 7dceee7 commit ce3156b

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

docs/proof-debt-triage-tier-a.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ This file is the per-site disposition data for every `||| OWED:` annotation in t
1414

1515
| Disposition | Count | Share | Estimated Phase 3 cost |
1616
|---|---:|---:|---|
17-
| **DISCHARGE** (provable in Idris2 0.8.0 today) | **~59** | 28% | ~30h (~4 focused days) |
18-
| **DISCHARGE-after-totality** (blocked on totality refactor first) | **~7** | 3% | TBD per totality ticket |
17+
| **DISCHARGE** (provable in Idris2 0.8.0 today) | **~61** | 28% | ~31h (~4 focused days) |
18+
| **DISCHARGE-after-totality** (blocked on totality refactor first) | **~5** | 3% | TBD per totality ticket |
1919
| **PROPERTY-TEST** (concrete-input spot-check in `tests/properties/`) | **~66** | 31% | ~22h (~3 focused days) |
2020
| **OWED-AXIOM** (permanent or until-Idris2-upgrade) | **~79** | 38% | 0h discharge; ongoing ledger maintenance |
2121

@@ -309,16 +309,16 @@ Discrepancies of ±2 against the 210 figure are real — sub-agents occasionally
309309
| setHasKey | 139 | `isObject obj ⇒ hasKey k (set k v obj) = True` | 1 | OWED-AXIOM | 0 | same `prim__eq_String` blocker |
310310
| removeNotHasKey | 157 | `hasKey k (remove k obj) = False` | 1 | OWED-AXIOM | 0 | String `!=` on pairs + filter |
311311
| appendLengthInc | 197 | `length (arr ++ [v]) = length arr + 1` || DISCHARGE | ~40 min | `lengthAppend` + `plusZeroRightNeutral` + S congruence |
312-
| singleKeyPath | 228 | `getPath [Key k] (JsonObject obj) = lookup k obj` | 3 | DISCHARGE-after-totality | ~50 min | getPath is `covering`; mutually-recursive metric — tracked in **#81** |
312+
| singleKeyPath | 228 | `getPath [Key k] (JsonObject obj) = lookup k obj` | 3 | DISCHARGE | ~50 min | getPath covering→total refactor complete (proven#81); six-arm split on JsonValue |
313313
| parseNullCorrect | 258 | `parseJson "null" = Just JsonNull` | 1 | PROPERTY-TEST | ~10 min | concrete input |
314314
| parseTrueCorrect | 264 | `parseJson "true" = Just (JsonBool True)` | 1 | PROPERTY-TEST | ~10 min | concrete input |
315315
| parseFalseCorrect | 270 | `parseJson "false" = Just (JsonBool False)` | 1 | PROPERTY-TEST | ~10 min | concrete input |
316316
| parseEmptyFails | 279 | `parseJson "" = Nothing` | 1 | PROPERTY-TEST | ~10 min | concrete input |
317317
| parseEmptyArray | 287 | `parseJson "[]" = Just (JsonArray [])` | 1 | PROPERTY-TEST | ~10 min | two-char lookahead via strSubstr |
318318
| parseEmptyObject | 294 | `parseJson "{}" = Just (JsonObject [])` | 1 | PROPERTY-TEST | ~10 min | same lookahead pattern |
319-
| anyMatchesTAny | 339 | `matchesType v TAny = True` for all `v` | 3 | DISCHARGE-after-totality | ~50 min | matchesType is `covering`; six-arm split after totality — tracked in **#81** |
319+
| anyMatchesTAny | 339 | `matchesType v TAny = True` for all `v` | 3 | DISCHARGE | ~50 min | matchesType covering→total refactor complete (proven#81); six-arm split on JsonValue |
320320

321-
**Module summary:** 1 DISCHARGE + 2 DISCHARGE-after-totality + 6 PROPERTY-TEST + 4 OWED-AXIOM. Cost: ~3-4h (2h if totality lands). Half the module is concrete-input PROPERTY-TEST (parser tests); covering-function gap is the second-largest blocker after String FFI.
321+
**Module summary:** 3 DISCHARGE + 0 DISCHARGE-after-totality + 6 PROPERTY-TEST + 4 OWED-AXIOM. Cost: ~2-2.5h. Half the module is concrete-input PROPERTY-TEST (parser tests); covering-function gap resolved (proven#81).
322322

323323
### SafeArchive / Proofs.idr (6 OWED — note: 7 grep hits include 1 meta-comment in module header)
324324

@@ -369,7 +369,7 @@ Discrepancies of ±2 against the 210 figure are real — sub-agents occasionally
369369

370370
3. **Family 4 (External KDF / opaque libs) is almost always OWED-AXIOM** — these are honest trusted-base entries. SafeCrypto and SafePassword's KDF-params proofs are the canonical examples. There is no Idris2 fix that helps here; the axiom names which external library claim is being trusted.
371371

372-
4. **Family 3 (covering / totality)** sites are DISCHARGE-after-totality. Three modules have them: SafePassword (`analyzeStrength`), SafeJson (`getPath`, `matchesType`), SafeRegex (`matchingTerminatesLemma`). Each needs a per-module totality-refactor ticket.
372+
4. **Family 3 (covering / totality)** sites are DISCHARGE-after-totality. Two modules still have them: SafePassword (`analyzeStrength`) and SafeRegex (`matchingTerminatesLemma`). SafeJson's covering→total refactor (proven#81) discharged both `getPath` and `matchesType`. Each remaining module needs a per-module totality-refactor ticket.
373373

374374
5. **The 5 SafePassword KDF params proofs** (argon2ParamsValid, bcryptCostBounded, defaultArgon2Valid, defaultBcryptValid, defaultScryptValid) should likely be lifted into a dedicated `Hash.Proofs` module once external-library correctness is formalised as a separate layer. They're not really logic proofs — they're parameter-bound assertions over abstract record fields.
375375

docs/proof-debt-triage.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,9 @@ follow-up.
337337
modules/day.
338338

339339
**Day 11–14 (Tier B per-site reads — totality-blocked).**
340-
- File a totality-refactor ticket per Tier B module (SafeRegex, SafeJson,
341-
SafeTOML, …). Per-site dispositions land as "DISCHARGE blocked on totality
342-
ticket #N".
340+
- File a totality-refactor ticket per Tier B module (SafeRegex, SafeTOML,
341+
…; SafeJson proven#81 is CLOSED). Per-site dispositions land as "DISCHARGE
342+
blocked on totality ticket #N".
343343

344344
**Day 15–18 (Tier C confirmation — 30+ OWED-AXIOM permanents).**
345345
- For each OWED-AXIOM site, verify the doc comment names the external claim
@@ -423,9 +423,9 @@ day-band:
423423
- **proven#80** — SafePassword.Strength `windows`/`detectPatterns`/
424424
`analyzeStrength` covering→total refactor. Discharges 3 OWED sites
425425
(`strengthScoreBounded`, `higherImpliesLower`, `veryStrongSatisfiesAll`).
426-
- **proven#81** — SafeJson.Access `%default covering` → per-function
427-
`total` refactor. Discharges 2 OWED sites (`singleKeyPath`,
428-
`anyMatchesTAny`).
426+
- **proven#81** **CLOSED** — SafeJson.Access `%default covering` → per-function
427+
`total` refactor. Discharged 2 OWED sites (`singleKeyPath`,
428+
`anyMatchesTAny`) in proven@33155ce.
429429
- **proven#83** — SafeCrypto `modernIsSecure`/`standardIsSecure` Idris2
430430
0.9.0 dependency tracker (NOT a totality issue; case-rewrite
431431
eta-expansion in elaborator). Discharges 2 OWED sites once 0.9.0 lands.
@@ -491,9 +491,9 @@ mechanically.
491491
+6 from Days 19-21)
492492
- **~54** long-tail single-file modules still extrapolated as
493493
overclaim candidates
494-
- **3** GitHub issues open for Phase 3 unblocking (#80, #81, #83)
494+
- **2** GitHub issues open for Phase 3 unblocking (#80, #83; #81 CLOSED)
495495

496-
Total visible, grep-discoverable debt entries: **~386** (280 + 87 + 19).
496+
Total visible, grep-discoverable debt entries: **~384** (278 + 87 + 19).
497497
The estate-wide trust-root ledger is now honest about every entry it
498498
names; the residual ~54 extrapolated modules are honestly tagged as
499499
extrapolated.

0 commit comments

Comments
 (0)