Repository navigation
ci(abi): gate the Idris2 proofs on every PR, with module-shaped paths - #279
hyperpolymath wants to merge 3 commits into
Conversation
The Idris2 modules are named PanicAttack.ABI.<M> but lived in src/abi/, so `idris2 --check src/abi/<M>.idr` failed on a module-name mismatch from any directory. No CI job checked them, which is how Stripping.idr sat on main not compiling while PROOF-NEEDS called it closed. - Move src/abi/*.idr to src/abi/PanicAttack/ABI/ (pure renames) and add src/abi/panic-attack-abi.ipkg listing the five modules. - Add the `abi-proofs` job to proven-tests.yml: every PR and push to main runs `idris2 --typecheck src/abi/panic-attack-abi.ipkg` and fails on a non-zero exit or any `Error:` line. It reuses the framework job's pinned installer and Idris2 cache key, and only the actions that workflow already locks, so actions.lock is unchanged. - PROOF-NEEDS.adoc: the gate is now the receipt; the first local receipt is kept; the gate row leaves the open list. EXPLAINME and PROOF-PROGRAMME point at the new paths. CHANGELOG history and the retired .a2ml files are left as they are. Checked locally: the package type-checks (Idris2 0.7.0); a planted false lemma and a planted missing import both fail it; the job's run step passes as written; actionlint 1.7.7 is clean; validate-sha-pins and check-allowed-actions pass with the checksum-pinned yq v4.54.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jma5ixtpeZyJRmfoSsC98u
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 16 minutes. View limit details
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. |
Codex Review Summary: ❌ FailedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
# Conflicts: # PROOF-NEEDS.adoc
|
|
Closing as superseded by #281, by the owner's decision. #281 (on Generated by Claude Code |
…ous PA1 (#288) This replaces #282, which GitHub would not retarget from the closed #279's branch ("part of a stack"). The branch and its changes are the same, now merged with current main. ## What The Idris2 `PatternCompleteness.idr` (PA1) is replaced by the code that actually does the routing, plus exhaustive tests. - **New `src/assail/routing.rs`:** - `route(Language) -> Route` is an exhaustive match with no wildcard. - `Route::analyzer()` names the analyzer each route reaches. - `runs_cross_language(is_configuration)` returns `!is_configuration`. - **`analyzer.rs`:** the dispatch in `analyze_inner` now matches on `route(file_lang)`. So the table is the code that runs, not a model of it. Only the match arm heads changed, plus the cross-language guard. - **`src/types.rs`:** adds `Language::ALL` (52 variants). An exhaustive `ordinal` test keeps it complete. ## Claims and how they are tested (status `TESTED`) Each test was seen to fail on a planted fault. | Claim | Test | Planted fault it caught | |---|---|---| | (a) Every language analyzer is reached | `every_language_analyzer_is_reached` | an unrouted `analyze_chapel` | | (b) No language falls back to the generic analyzer while a dedicated one exists | `no_language_falls_back_while_a_dedicated_analyzer_exists` | Java sent to `Generic` | | (c) Cross-language checks run exactly on non-configuration content | `cross_language_checks_run_exactly_off_configuration` (a Justfile plus `main.lua`, end to end) | `runs_cross_language` forced to `true` | | (d) The README's language counts match the table | `readme_language_counts_match_the_table` | the README's stale 49 | Routing is not coverage. `Language::Unknown` goes to `InputAdapter`, and a file there with no adapter is marked unsupported and skipped. `PROOF-NEEDS.adoc` says so. ## Retired - **`src/abi/PatternCompleteness.idr`**, for three reasons: - It was vacuous: `GenericAnalyzer` inhabited its witness for every language. - It was stale: it covered 50 of 52 languages. - It was partly false: it said cross-language checks always run. - `PROOF-PROGRAMME`, `PROOF-NEEDS` and `EXPLAINME` now point PA1 at `src/assail/routing.rs`. - The pa1 entry in `0-AI-MANIFEST.a2ml` is deleted (a deletion only). - The README now says 51 supported languages instead of 49, in the badge, the capabilities list and the summary. ## Found, not fixed here (recorded as open obligations in PROOF-NEEDS) - Unquoted `http://` URLs are missed by the cross-language check. `analyze_cross_language` strips `//` comments from every file, which also cuts `curl http://host` in shell and Justfile recipes. - PA1 (a) to (c) still need a proof with Creusot/Pearlite and Verus. ## Not changed `.machine_readable/6a2/{META,NEUROSYM,STATE}.a2ml` still name `PatternCompleteness.idr`. They are legacy A2ML files, so they are left for the owner or the deed conversion. ## Verification - `cargo test --lib`: 482 passed, 0 failed, after merging current main. - `cargo fmt --check` passes. - Against main, the diff is only this PR's 10 files. --- _Generated by [Claude Code](https://claude.ai/code/session_0136P7ZnmBahbhfkFEP6ark4)_ --------- Co-authored-by: Claude <noreply@anthropic.com>



Stacked on #277.
The Idris2 modules are named
PanicAttack.ABI.<M>but lived insrc/abi/, soidris2 --check src/abi/<M>.idrfailed on a module-name mismatch from any directory. No CI job checked them. That is howStripping.idrsat onmainnot compiling whilePROOF-NEEDS.adoccalled it closed.Changes
src/abi/*.idr→src/abi/PanicAttack/ABI/, pure renames. Newsrc/abi/panic-attack-abi.ipkglists the five modules.abi-proofsjob in.github/workflows/proven-tests.yml, on every PR and on pushes tomain.idris2 --typecheck src/abi/panic-attack-abi.ipkg, and fails on a non-zero exit or anyError:line. Idris2 0.7.0 can print an error and still exit 0.actions.lockis unchanged.PROOF-NEEDS.adoc: the gate is now the receipt, the first local receipt is kept, and the gate row leaves the open list.EXPLAINME.adocandPROOF-PROGRAMME.adocpoint at the new paths. EXPLAINME's three descriptions also now say what each module actually shows; for PA1 that is "vacuous as stated".CHANGELOG.adochistory and the retired.a2mlfiles are left as they are.Verification
All of the following were run locally:
idris2 --typecheck src/abi/panic-attack-abi.ipkgpasses: 5/5 modules, exit 0, noError:line.Error:line.actionlint1.7.7 is clean.yqv4.54.1 thatci-integrity.ymluses:validate-sha-pins.sh: 0 unpinned refs.check-allowed-actions.sh: 0 tree-policy gaps..githooks/validate-actions-lock.sh, run on a pristine clone withgh-actions-lockv0.2.0 (checksum-verified) andmetadatastician/standardsat the pinned087f6bf, reports thatactions.lockis in sync.Generated by Claude Code