Repository navigation
fix(abi): type-check the Idris2 proofs in CI and re-prove line-comment stripping - #281
Merged
Merged
Conversation
…t stripping
No CI job had ever type-checked src/abi/, and with Idris2 0.7.0 none of
the five modules checked as committed. PROOF-NEEDS.adoc marked them ✅
with no receipt.
- scripts/ci/check-idris-abi.sh: stages a module-path view of the
unchanged files (they declare PanicAttack.ABI.* but live flat) and
type-checks each one. It fails on a type error, a missing %default
total, or believe_me / assert_total / assert_smaller / postulate /
idris_crash in code. Verified both ways: it passes here, fails on
main's Stripping and Types, and fails on a planted believe_me.
- proven-tests.yml: a blocking `idris-abi` job builds Idris2 from the
v0.7.0 tag (commit checked), caches it, and runs the script. It records
a PROOF-POLICY §6 deviation; actionlint is clean; it uses only
already-locked action pins.
- Stripping.idr: the 2026-06-02 proof never type-checked (unsolved
constraint in the // case, decEq not imported). It is re-proved through
stripIsIdOnClean (identity on //-free text) and stripIsClean /
bodyIsClean (output is //-free, mutual induction).
stripLineCommentsIdempotent and bodyIsFixedPoint follow. The strippers
use explicit Bool steps. An exhaustive differential run over all 29,524
strings of length ≤ 9 on {/, x, \n} matches the previous definitions,
and a mutant blanking with '/' is rejected.
- Types.idr: adds the Eq Severity that Ord needs and fixes the LangId
declaration syntax.
- PROOF-NEEDS.adoc, EXPLAINME.adoc and CHANGELOG.adoc now record that the
earlier claims had no receipt, and name the new one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PFaqv6iBXrt3W5Akd1Fq5k
Contributor
|
Caution Review failedThe pull request is closed.
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
hyperpolymath
marked this pull request as ready for review
November 9, 2026 15:43
hyperpolymath
enabled auto-merge (squash)
November 9, 2026 22:49
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Problem
PROOF-NEEDS.adocmarks panic-attack's Idris2 ABI proofs ✅, but no CI job ever type-checkedsrc/abi/. With Idris2 0.7.0, none of the five modules checked as committed:PanicAttack.ABI.*does not match the flat pathsrc/abi/*.idrTypes.idrOrd SeveritywithoutEq SeverityStripping.idr|||block at line 222;stripLineCommentsIdempotentdoes not type-check (unsolved constraint in the//case;decEqnot imported)PatternCompleteness,ClassificationSoundness,AttestationUnforgeabilityChange
scripts/ci/check-idris-abi.sh:idris2 --checkon each module;%default total, orbelieve_me,assert_total,assert_smaller,postulateoridris_crashin code.proven-tests.yml, newidris-abijob (blocking, every PR):v0.7.0tag, checking commit27780073…;The workflow header explains why this departs from its "no Idris2 bootstrap on PRs" rule: a claim needs a receipt on every change, and the cache keeps it fast.
Stripping.idr, re-proved:stripIsIdOnClean: stripping is the identity on text with no//.stripIsClean/bodyIsClean: the strippers' output has no//, by mutual induction.stripLineCommentsIdempotentandbodyIsFixedPointfollow.Boolsteps, which can be reasoned about.Types.idr: adds the missingEq Severityand fixes theLangIddeclaration syntax.PROOF-NEEDS.adoc,EXPLAINME.adoc,CHANGELOG.adoc: state that the earlier ✅ claims had no receipt, and name the new one.Validation (Idris2 0.7.0, built here from the same tag)
scripts/ci/check-idris-abi.shpasses all 5 modules.StrippingandTypesFAIL;believe_me: FAIL./instead of a space): rejected atbodyStepIsCleanand the sanity tests.{/, x, \n}(29,524 inputs), 0 mismatches and 0 non-idempotent outputs.actionlint1.7.7 is clean, andasciidoctor --failure-level=WARNis clean on the edited.adocfiles.Departure from the agreed plan
The agreed option was "CI job + ipkg". I did not add an
.ipkg, because one needs the files moved tosrc/abi/PanicAttack/ABI/. Their paths are cited in about 13 places, including legacy A2ML metadata that agents may not edit. The staging script gives the same check with no moves. Moving the files plus an.ipkgis the cleaner long-term layout and is a natural follow-up.Generated by Claude Code