Skip to content

Commit df71e5f

Browse files
checkpoint(2026-06-13): record dogfood proof-CI in state/roadmap/wiki + harden Lean job (#244)
Estate checkpoint refresh (echidna half), tracked in #238. Brings the machine-readable state and docs current with PR #234 (proof corpus repaired + CI-gated, squash-merged to `main` 2026-06-06), and hardens the seam that flaked on #234. ## `docs(checkpoint)` — state/roadmap/wiki - **`STATE.a2ml`**: new `session-2026-06-13-dogfood-proof-ci` entry (changes, latent bugs fixed, CI-environment gotchas, gap closed); `last-updated` bumped. - **`ROADMAP.a2ml`**: proof-corpus CI recorded as a Stage-1 (Autonomous Proof Execution) gate; dates bumped. - **`docs/ROADMAP.md`**: proof-corpus CI noted alongside the R5a/R5b guardrails. - **`docs/wiki/{Getting-Started,Home}.md`**: document `just proofs*` + the dogfood proof-CI for local runs (wiki kept bleeding-edge). ## `ci(proofs)` — Lean dependability The Lean job let `lake build` resolve the pinned toolchain lazily; elan maps the version against the GitHub releases API, which flaked once on #234's pre-merge run (`failed to parse latest release tag`). The post-merge run on `main` passed, but the seam is non-deterministic. Now the exact toolchain from `proofs/lean/lean-toolchain` is pre-installed in the install step with retry/backoff, then `elan default`-ed — so `lake build` uses an already-resolved toolchain. Editing the workflow means the Dogfood CI runs on this PR and validates the change live. ## Flagged for owner (not changed here) - **Prover-count drift across surfaces**: GitHub repo *description* says "48 prover backends", the wiki says "128", `STATE.a2ml`/echidnabot say "113", `ROADMAP.a2ml` says "105". `docs/PROVER_COUNT.md` is canonical and these are owner-managed (R5a) — left untouched; recommend reconciling, starting with the repo description. - **Stale `estate-standardization-20260607` branch**: no PR, sits behind `main` at the same SHA as `chore/training-infrastructure-cleanups` — looks abandoned. - **`test-gpg-sign` + `test/ci-echidna-hypatia-fix`**: queued for deletion in #238 but the git proxy returns 403 on ref deletes and the GitHub MCP has no delete-branch tool — needs a one-line owner action. Draft until reviewed. https://claude.ai/code/session_01UAqDQaMwpUqWHUSZekGZWv --- _Generated by [Claude Code](https://claude.ai/code/session_01UAqDQaMwpUqWHUSZekGZWv)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 546bd1f commit df71e5f

6 files changed

Lines changed: 76 additions & 8 deletions

File tree

.github/workflows/dogfood-proofs-ci.yml

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,37 @@ jobs:
6868
steps:
6969
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
7070

71-
- name: Install elan + Lean toolchain
71+
- name: Install elan + pinned Lean toolchain
7272
run: |
7373
set -euo pipefail
74-
# The toolchain version is pinned by proofs/lean/lean-toolchain; lake reads
75-
# it and fetches that exact Lean on first invocation.
74+
# elan-init installs the elan shim only (--default-toolchain none). We then
75+
# pre-install the exact toolchain pinned by proofs/lean/lean-toolchain *here*,
76+
# with retry/backoff, rather than letting `lake build` resolve it lazily:
77+
# elan maps the pinned version against the GitHub releases API, which can
78+
# transiently fail ("failed to parse latest release tag" — observed once on
79+
# PR #234's pre-merge run; the post-merge run on main passed). Isolating and
80+
# retrying that one network step keeps the Build step deterministic.
7681
curl -fsSL --retry 3 \
7782
https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh \
7883
-o /tmp/elan-init.sh
7984
sh /tmp/elan-init.sh -y --default-toolchain none
85+
export PATH="$HOME/.elan/bin:$PATH"
8086
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
87+
toolchain="$(tr -d '[:space:]' < proofs/lean/lean-toolchain)"
88+
for attempt in 1 2 3 4 5; do
89+
if elan toolchain install "$toolchain"; then
90+
break
91+
fi
92+
if [ "$attempt" -eq 5 ]; then
93+
echo "elan toolchain install failed after 5 attempts" >&2
94+
exit 1
95+
fi
96+
backoff=$((attempt * 5))
97+
echo "elan toolchain install failed (attempt $attempt); retrying in ${backoff}s" >&2
98+
sleep "$backoff"
99+
done
100+
elan default "$toolchain"
101+
lean --version
81102
82103
- name: Install just
83104
run: |

.machine_readable/6a2/STATE.a2ml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type = "state-file"
99
[metadata]
1010
project = "echidna"
1111
version = "2.3.0"
12-
last-updated = "2026-06-02"
12+
last-updated = "2026-06-13"
1313
status = "active"
1414
release-tag = "v2.3.0"
1515

@@ -18,6 +18,28 @@ name = "echidna"
1818
completion-percentage = 100
1919
phase = "v2.3.0 Released — saturation+typing (#198) + GNN training wiring (#207) + dispatcher all-17-adapters (PR pending SPDX hook) + comprehensive contractile family (#214) + first owner-authorised GNN training run completed (best MRR 0.92)"
2020

21+
[session-2026-06-13-dogfood-proof-ci]
22+
summary = "Proof corpus repaired and gated in CI (PR #234, squash-merged to main 2026-06-06)"
23+
pr = "https://github.com/hyperpolymath/echidna/pull/234"
24+
tracker = "https://github.com/hyperpolymath/echidna/issues/238"
25+
changes = [
26+
"proofs/{coq,lean,agda} + src/idris: every theorem now type-checks against real toolchains (Coq 8.18, Lean v4.13.0, Agda 2.6.3 + stdlib v1.7.3, Idris2 0.8.0)",
27+
"New .github/workflows/dogfood-proofs-ci.yml — Coq + Lean + Agda jobs, each invoking a just proofs-* recipe so CI and local runs share one command surface (RSR-H14)",
28+
"idris2-abi-ci.yml extended to type-check the src/idris validator (src/idris/** added to its triggers)",
29+
"New Justfile recipes: proofs, proofs-coq, proofs-lean, proofs-agda, proofs-idris",
30+
]
31+
latent-bugs-fixed = [
32+
"proofs/lean/lakefile.lean rooted only ECHIDNA, so lake build was silently broken (unknown module prefix); now every module is a root",
33+
"src/idris/Validator.idr had no main though its ipkg declares an executable; added main = testValidation",
34+
]
35+
ci-environment-notes = [
36+
"taiki-e/install-action reproducibly startup_failure'd in the new workflow even though mvp-smoke.yml uses the same pin on main; worked around with plain run: installs (apt + curl tarballs). Allowed-actions policy worth a look.",
37+
"apt --fix-missing silently dropped agda-stdlib (exit 0, library unregistered); Agda now fetches stdlib v1.7.3 from GitHub deterministically.",
38+
"Lean toolchain resolution via elan flaked once on the pre-merge ref ('failed to parse latest release tag', a GitHub releases-API hiccup); the post-merge run on main passed. Hardened by pre-installing the pinned toolchain with retry/backoff.",
39+
]
40+
gap-closed = "Before #234 the corpus had zero CI: agda-meta-checker.yml gated meta-checker/**, idris2-abi-ci.yml gated src/abi/**, and there was no Coq or Lean workflow at all, so a green PR proved nothing about proofs/."
41+
verification = "All proof jobs green end-to-end on PR #234 and on the post-merge push to main (Dogfood Proof Corpus run #11)."
42+
2143
[session-2026-06-02]
2244
description = "Major wave: 20+ PRs across echidna+echidnabot+gitbot-fleet+hyperpolymath"
2345
notable-pr-merges = [

.machine_readable/ROADMAP.a2ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
[metadata]
99
version = "1.0.0"
10-
last-updated = "2026-04-25"
10+
last-updated = "2026-06-13"
1111
status = "Stage 1 active"
1212
maintainer = "Jonathan D.A. Jewell (hyperpolymath)"
13-
next-review = "2026-05-25"
13+
next-review = "2026-07-13"
1414

1515
[vision]
1616
summary = """
@@ -61,7 +61,8 @@ prerequisites = [
6161
"✓ API surfaces: REST, GraphQL, gRPC (done 2026-04-10)",
6262
"✓ Bebop3 serialization (gRPC proto + axum, done 2026-04-15)",
6363
"✓ A2ML conformance (AGENTIC, NEUROSYM, done 2026-04-25)",
64-
"⚠ Container isolation hardening (IN-PROGRESS; blocks production release)"
64+
"⚠ Container isolation hardening (IN-PROGRESS; blocks production release)",
65+
"✓ Dogfood proof corpus CI-gated — proofs/{coq,lean,agda} + src/idris type-check on every PR via dogfood-proofs-ci.yml + idris2-abi-ci.yml (done 2026-06-06, PR #234)"
6566
]
6667

6768
blockers = [

docs/ROADMAP.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ guardrail landed in two halves — R5a (prover-count drift, echidna‑local
1313
at `.github/canonical-references/` after PR #174 migration) and R5b
1414
(estate‑wide `Version: x.y.z` drift, in the standards reusable, consumed
1515
via PR #172). MVP smoke (#167) and the pareto/bare-build governance
16-
harness are green on `main`. None of these change the stage map below;
16+
harness are green on `main`. The dogfood proof corpus (`proofs/{coq,lean,agda}` + `src/idris`) is now
17+
CI-gated by `dogfood-proofs-ci.yml` (Coq/Lean/Agda) and `idris2-abi-ci.yml`
18+
(the `src/idris` validator), each driven by a `just proofs-*` recipe — closing
19+
a gap where the corpus had no CI and a green PR proved nothing about the
20+
proofs (PR #234). None of these change the stage map below;
1721
they are infrastructure around the work, not on the critical path.
1822

1923
This document is the single source of truth for where ECHIDNA is going.

docs/wiki/Getting-Started.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,24 @@ just repl
4141
just verify examples/simple.v
4242
```
4343

44+
## Verify the dogfood proof corpus
45+
46+
ECHIDNA dogfoods formal verification: its own trust-kernel proofs live under
47+
`proofs/` (Coq, Lean 4, Agda) and `src/idris`, and every one type-checks in CI
48+
(`dogfood-proofs-ci.yml` for Coq/Lean/Agda, `idris2-abi-ci.yml` for the Idris2
49+
ABI + validator). Run the same checks locally with the `just` recipes CI calls:
50+
51+
```bash
52+
just proofs # roll-up: Coq + Lean + Agda + Idris2
53+
just proofs-coq # coqc over proofs/coq
54+
just proofs-lean # lake build in proofs/lean (Lean toolchain pinned by lean-toolchain)
55+
just proofs-agda # agda over proofs/agda (needs agda-stdlib registered)
56+
just proofs-idris # idris2 --typecheck the src/idris validator
57+
```
58+
59+
Toolchain versions match CI: Coq 8.18, Lean v4.13.0, Agda 2.6.3 with stdlib
60+
v1.7.3, and Idris2 0.8.0.
61+
4462
## Install prover backends
4563

4664
The 12 core (Tier 1) backends need their binaries on PATH. See

docs/wiki/Home.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,5 @@ The 2026-06-01 **prover/corpus/vocab/synonyms/arbitration saturation campaign**
5252
- [`docs/architecture/VERISIM-ER-SCHEMA.md`](https://github.com/hyperpolymath/echidna/blob/main/docs/architecture/VERISIM-ER-SCHEMA.md) — VeriSim ↔ ECHIDNA E-R schema (12 entities + 7 relationships, each with Rust struct + VeriSimDB table + Cap'n Proto schema + PK/FK).
5353
- [`docs/decisions/2026-06-01-saturation-campaign.md`](https://github.com/hyperpolymath/echidna/blob/main/docs/decisions/2026-06-01-saturation-campaign.md) — ADR documenting the ordered marginal-benefit hierarchy and the decision to execute levers (1)–(6) and defer (7) GNN-training.
5454
- [`docs/handover/PROVER-CORPUS-SATURATION-LANE.md`](https://github.com/hyperpolymath/echidna/blob/main/docs/handover/PROVER-CORPUS-SATURATION-LANE.md) — saturation lane handover with sibling-branch collision avoidance.
55+
56+
The **dogfood proof corpus is now CI-gated**: every theorem under `proofs/{coq,lean,agda}` and the `src/idris` validator type-checks on each PR (`dogfood-proofs-ci.yml` + `idris2-abi-ci.yml`), each driven by a `just proofs-*` recipe — closing a gap where the corpus had no CI. Run it locally via `just proofs`; see [Getting Started](Getting-Started).

0 commit comments

Comments
 (0)