You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 877ede2
Browse filesBrowse the repository at this point in the historyBrowse files
## Why
Phase 4b–4d of the residual-evidence-types ultraplan (absolute-zero is
upstream of echo-types, hence of residual). Four defects let the prover
gate say green without checking:
| defect | before | after |
|---|---|---|
| absent Isabelle / Mizar | `echo "… (skipped)"`, then
`ALL-PROVERS-GREEN` on 4 of 6 provers | `fail=1`; a listed Agda module
missing on disk also fails |
| z3 | `z3 cno_properties.smt2` (file does not exist) under `\|\| true`;
the live check was z3's exit code, 0 for sat **and** unsat | generic
expect-checker: every `(check-sat)` must carry `; expect sat\|unsat` and
the verdicts must match in order; fails on `unknown`, `(error`, missing
annotation, no files, rc≠0 |
| assumptions | no `Print Assumptions` ran anywhere; "closed under the
global context" was prose | `proofs/coq/check-assumptions.sh` over the
17 theorems PROOF-STATUS names, in the Coq CI job, with a `--control`
that must reject `landauer_limit_positive` (rests on `kB_positive`) |
| Agda | CI checked 2 of 4 modules; `EchoBridgeCNO.agda` had no `--safe`
pragma | pragma added; CI, Justfile and the gate check all four |
Also: `Justfile` `verify-z3` no longer skips-as-passes; `verify-coq`
runs the gate; `verify-all` runs the self-test. PROOF-STATUS: the Agda
section now matches CI, the assumptions claim is the measured fact
(17/17 closed, gated), the census pointer is #171.
## Evidence (measured locally 2026-09-23, before push — the owner may
merge before CI reports)
**Gate self-test** `proofs/tests/gate-selftest.sh` — 16/16, each
negative asserting its reason string (stub PATH, `HOME` overridden
because the gate prepends `~/.elan/bin`):
```
PASS: A all provers present -> ALL-PROVERS-GREEN
PASS: B isabelle absent -> fail
PASS: C mizar verifier absent -> fail
PASS: D MIZFILES unset -> fail
PASS: E z3 verdict mismatch -> fail
PASS: F z3 (error line -> fail
PASS: G z3 unknown verdict -> fail
PASS: H idris2 exit 3 -> fail
PASS: I positive control repeats green
PASS: J real z3, committed OND_checks.smt2 -> OK
PASS: K real z3, expect-flipped mutant -> fail
PASS: L real z3, (check-sat) without expect -> fail
PASS: M no .smt2 files -> fail
PASS: N real z3, contradictory assertions vs expect sat -> fail
GATE-SELFTEST OK: 16/16 cases
```
**Meta-mutants (does the suite itself bite?)** — reverting the Isabelle
line to `(skipped)` flunks exactly case B; replacing the checker's
comparison with `got="$expected"` flunks exactly E, G, K, N. Both
restored, suite green again.
**Assumptions gate** — `ASSUMPTIONS-CHECK OK: 17/17 theorems closed
under the global context`; `--control`: `landauer_limit_positive
rejected, naming kB_positive`; an empty audit file fails as vacuous; a
renamed theorem fails on coqc exit 1. Full census for #171: 182
top-level theorems, 109 closed, 73 axiom-dependent.
**Agda** — `agda 2.6.4.3 --safe --without-K` passes `CNO`, `OND`,
`EchoBridgeScaffold`, `EchoBridgeCNO`. ⚠ CI runs Agda **2.6.3 / stdlib
v1.7.3**; the two newly-checked modules have not been run at that
version locally (`Axiom.Extensionality.Propositional` exists in v1.7.3).
A red there is a **finding** (issue with acceptance criteria), not a
revert of the gate.
**Workflow** — `Bun.YAML.parse` ok (4 jobs); `actionlint` clean; `gh
actions-lock --verify-local`: all 16 workflows have complete lockfile
coverage (no `uses:` line changed). `just verify-z3`, `verify-coq`,
`verify-gate-selftest`, `build-agda` all rc=0.
## Deliberately left out of this PR
- The per-prover convenience targets `build-coq` / `build-mizar` still
print "skipping" when the tool is absent; the canonical `just verify`,
`verify-z3` and `verify-coq` do not. (Same defect class; separate small
change if wanted.)
- The gate's "listed Agda module missing on disk → fail" branch is not
covered by the self-test (it would need a mutated source tree).
- The plan's "fix the README.adoc filename (`EchoCNOBridge` does not
exist)" item was **wrong**: `proofs/agda/README.adoc:39` cites
echo-types' `proofs/agda/EchoCNOBridge.agda`, which exists on echo-types
main. Not changed.
- The axiom tag grammar (four forms across 38 declarations) and the
full-tree census gate → #171.
## Merge policy
Auto-merge (squash) goes on only when **every** check is green (owner
ruling 2026-09-22). Any pre-existing red gets a triage issue, not a
merge-over. Refs #171; #170 (Scorecard highs) is unrelated but its
`code_scanning` rule may now evaluate on this PR for the first time — if
it blocks, that belongs on #170.
**Second commit (`b0a08cc`)** — CodeRabbit's Major on the first commit
was right: the canonical gate `proofs/verify-all-provers.sh` built Coq
but never ran `check-assumptions.sh`, so `just verify` could print
ALL-PROVERS-GREEN on an axiom-bearing theorem (the same defect class
this PR cures elsewhere). The gate now runs the audit and its
`--control` after a successful build, each with its own reason line; the
self-test's `coqc` stub answers `Print Assumptions` faithfully (Closed
for the 17 audited theorems, `Axioms: kB_positive` for the control's
target) and cases O/P prove the gate turns red for each audit mutant.
Self-test 16/16; against the previous gate exactly O and P fail. Real
prover locally (Coq 8.20.1): ASSUMPTIONS-CHECK OK 17/17,
ASSUMPTIONS-CONTROL OK. The two docstring commits between are
CodeRabbit's.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01QYY8Gp4v4x2J7iSNn1vZ57https://claude.ai/code/session_01QYY8Gp4v4x2J7iSNn1vZ57
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
0 commit comments