Repository navigation
Expand file tree
/
Copy pathSTATE.a2ml
More file actions
1414 lines (1322 loc) · 106 KB
/
Copy pathSTATE.a2ml
File metadata and controls
1414 lines (1322 loc) · 106 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# SPDX-License-Identifier: MPL-2.0
# STATE.a2ml — Project state checkpoint
[manifest]
version = "1.1"
project = "echidna"
type = "state-file"
[metadata]
project = "echidna"
version = "2.3.0"
last-updated = "2026-10-09"
status = "active"
release-tag = "v2.3.0"
[project-context]
name = "echidna"
completion-percentage = 100
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)"
[session-2026-10-09-deed-baseline]
summary = "Deed-era baseline landed; STATE refreshed past the 2026-10-05 integrations wave"
changes = [
"Recorded the integrations wave that postdated the last STATE touch (2026-06-13): echidna prove --output json emitting echidna.prove.result/1 (JCS-canonical I-JSON), echidna-core 0.2.0 consumable by echidnabot + proof-burrower, echidna-core-spark renamed echidna-core-creusot with the trust kernel re-exported as echidna_core::trust, ffi/zig building and CI-gated (zig-ffi-ci.yml) — all in CHANGELOG.adoc [Unreleased]",
"New echidna_chora.deed at repo root: first deed under the one-deed-per-repo doctrine (standards#837), translated from CLADE.a2ml (family 1) and ECOSYSTEM.a2ml (family 2) per standards 1-formats/deed/mappings/; clade names verbatim from gv-clade-index verisim/seed/clades.a2ml; passes deed_lint (deed.abnf)",
"Fail-closed, per the mapping frame: no (meta …) clause yet — this repo's META.a2ml predates the family-2 field table; STATE (family 3) and 0-AI-MANIFEST (family 7) translations stay owner-pending in standards",
"The ten stale AGPL-3.0-or-later SPDX headers under HOL-o-extension/, audits/ and training_data/ were left in place by design: D262's recorded plan (CHANGELOG [Unreleased], docs/DEBT.adoc P0) rewrites them inside the a2ml->deed conversion, so this baseline does not touch an owner-gated licensing surface early",
"0-AI-MANIFEST.a2ml drift fixed: full-version 1.6.0 -> 2.3.0, UI runtime Deno -> Bun (Deno banned estate-wide 2026-09-22), deed added to canonical-locations",
]
consumers-note = ".machine_readable descriptiles stay until their consumers move to the deed; until then identity/status changes go in both places"
[session-2026-06-13-dogfood-proof-ci]
summary = "Proof corpus repaired and gated in CI (PR #234, squash-merged to main 2026-06-06)"
pr = "https://github.com/hyperpolymath/echidna/pull/234"
tracker = "https://github.com/hyperpolymath/echidna/issues/238"
changes = [
"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)",
"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)",
"idris2-abi-ci.yml extended to type-check the src/idris validator (src/idris/** added to its triggers)",
"New Justfile recipes: proofs, proofs-coq, proofs-lean, proofs-agda, proofs-idris",
]
latent-bugs-fixed = [
"proofs/lean/lakefile.lean rooted only ECHIDNA, so lake build was silently broken (unknown module prefix); now every module is a root",
"src/idris/Validator.idr had no main though its ipkg declares an executable; added main = testValidation",
]
ci-environment-notes = [
"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.",
"apt --fix-missing silently dropped agda-stdlib (exit 0, library unregistered); Agda now fetches stdlib v1.7.3 from GitHub deterministically.",
"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.",
]
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/."
verification = "All proof jobs green end-to-end on PR #234 and on the post-merge push to main (Dogfood Proof Corpus run #11)."
[session-2026-06-02]
description = "Major wave: 20+ PRs across echidna+echidnabot+gitbot-fleet+hyperpolymath"
notable-pr-merges = [
"#176 panic-attack Critical bound (load_octads_jsonl)",
"#178 echo-types audit cross-doc",
"#179 6 SHA-pin bumps + proven manifest fix",
"#182 doc maxout (+wiki sync)",
"#183 Chapel 2.3 → 2.8 bump (ubuntu-22.04 .deb pin)",
"#184 v2.3.0 release reconcile (#173 Option B)",
"#185 mktemp swap for scripts/",
"#186 FFI audit §§9-11 (FLINT + Zig bridges + Zig overlay)",
"#188 GraphQL +3 ops (verifyProof/suggestTactics/proverStatus) closes #180",
"#189 guix purge per estate policy",
"#198 saturation+typing (corpus 4→17, 42-discipline embedding)",
"#199 a2ml-validate to 6bff6ec (s-expression form)",
"#206 wave3 CI/CD closeout (C001-C005)",
"#207 GNN training wiring (CorpusLoader)",
"#209 Palimpsest framework reference restored",
"#210 JSON dep fix (corpus_loader.jl)",
"#211 EchidnaML CUDA.version() fix + training doc skeleton",
"#212 training run 2026-06-02 results (MRR 0.92, 17 epochs coq, 16 lean)",
"#214 contractile family (5 files, 805 ins / 307 del — comprehensive A/B/D/T### error codes)",
]
new-issues-filed-as-trackers = [
"#177 panic-attack FFI follow-ups",
"#187 panic-attack classifications path mismatch (audits/ vs reports/audits/)",
"#190-197 long-tail roadmap trackers (OpenTheory/Dedukti/SPARK/AI-sketch/Cap'n Proto/Stage 5/L2.3/Verisim)",
]
known-blocker = "feat/corpus-dispatcher-all-17-adapters branch ready to wire 13 missing adapters into CLI dispatcher; blocked by src/rust/main.rs SPDX-FileCopyrightText hook requiring owner manual flip from 'ECHIDNA Project Team' to canonical 'Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>' before commit accepted"
gnn-training-run = "models/neural/{best_model,final_model,gnn_ranker,checkpoint_epoch_{5,10,15}} — 952MB total; gnn_ranker production-deployable (162MB)"
[expansion-roadmap]
# 2026-04-26 — design landed; Phase 0 foundation pushed. Goal: push prover
# count from 74 real backends → 104, plus 10-kind coprocessor surface, plus
# meta-control coordination. See coprocessor/mod.rs module docs for the
# Phase 6 backend ladder.
plan-source-commit = "phase-0 foundation — see commit message for full phase table"
backend-count-baseline = 74
backend-count-target = 104
new-backends-planned = 30
dropped-from-candidate-list = ["Pellet (AGPL)", "Atelier B (commercial)", "Rodin (Eclipse RCP weight)", "FaCT++ (dead upstream)", "MRMC (superseded by STORM)", "Waldmeister (closed-source binary)", "SSProve (Coq plugin, fold into Coq backend)"]
[[expansion-roadmap.phase]]
id = "phase-0"
title = "Foundation — coprocessor abstraction, MetaController, Idris2/SPARK/Julia bridges"
status = "complete"
landed = "2026-04-26"
adds-backends = []
notes = "Coprocessor trait + Math backend (num-bigint, 10 ops), JuliaCoprocessorBridge transport, MetaController coordinating prover×coprocessor×goal-aspect, Idris2 ABI declarations with constructive round-trip proof, SPARK trust-tier safety invariants, Julia-side router with Math fallback. 13 new tests green."
[[expansion-roadmap.phase]]
id = "phase-1"
title = "HO-ATPs + frontier first-order"
status = "available-for-claim"
adds-backends = ["Leo-III", "Satallax", "Lash", "agsyHOL", "iProver", "Princess", "Twee", "MetiTarski", "CSI", "AProVE"]
target-claim-id = "echidna-phase1a-tptp-atps / echidna-phase1b-frontier-fol"
[[expansion-roadmap.phase]]
id = "phase-2"
title = "Computer-algebra (FLINT FFI + subprocess CAS family)"
status = "complete"
adds-backends = ["FLINT", "PARI/GP", "Maxima", "Singular", "GAP", "Macaulay2"]
target-claim-id = "echidna-phase2a-cas-libraries / echidna-phase2b-cas-subprocess"
notes = "Phase 2a landed 2026-04-26: FLINT FFI coprocessor backend (CoprocessorKind::FlintMath, Tier 3 LibraryWrapped, --features flint). Adds FlintPolyGcd/Mul/Rem/Content + FlintNthRoot + FlintBinomial ops, Polynomial outcome variant. 8 unit tests; factory returns None gracefully without the feature. Phase 2b landed 2026-04-26: 5 subprocess CAS backends (CoprocessorKind PariGp/Maxima/Singular/Gap/Macaulay2, all Tier 1 ExternalSubprocess). Adds 15 new CoprocessorOp variants (PariGpFactor/Znorder/NextPrime, MaximaSimplify/Factor/Diff, SingularGroebner/IdealMembership/Dimension, GapGroupOrder/IsAbelian/SymmetricGroupOrder, Macaulay2GroebnerBasis/Dimension/Degree), Text outcome variant. 29 new unit tests; all inject-safe via character whitelists; health degrades gracefully when binary absent. 88 coprocessor tests total passing."
[[expansion-roadmap.phase]]
id = "phase-3"
title = "Real-algebraic + modal / hybrid"
status = "available-for-claim"
adds-backends = ["QEPCAD-B", "Redlog", "KeYmaera X", "MleanCoP", "ileanCoP", "nanoCoP", "MetTeL2"]
target-claim-id = "echidna-phase3-realalg-modal"
[[expansion-roadmap.phase]]
id = "phase-4"
title = "Description logic + probabilistic + computational crypto"
status = "available-for-claim"
adds-backends = ["ELK", "Konclude", "STORM", "EasyCrypt", "CryptoVerif", "ProB"]
target-claim-id = "echidna-phase4-dl-prob-cryptocomp"
[[expansion-roadmap.phase]]
id = "phase-5"
title = "Refinement types + SPARK / Ada"
status = "complete"
landed = "2026-04-27"
adds-backends = ["Stainless", "Liquid Haskell", "GNATprove"]
notes = "3 auto-active refinement-types verifiers wired. GNATprove (Tier 4 prover-side, small-kernel via Why3+Z3/CVC5/AltErgo) — invokes via -P <project.gpr>; generates minimal .ads/.adb/.gpr in temp dir from raw SPARK source; suggests Pre/Post/Loop_Invariant/Loop_Variant/Type_Invariant/Ghost tactics; pairs with the SPARK harness in src/ada/spark/ from Phase 0. Stainless (Tier 3) — Scala/Inox refinement types, parses output for valid/invalid/counter-example markers. Liquid Haskell (Tier 3) — GHC plugin refinement types, parses RESULT: SAFE/UNSAFE markers. FFI codes 125-127 added to ffi/mod.rs (also fixed two pre-existing bugs in the cbd9449 ffi: missing 115-124 entries in kind_from_u8 and duplicate kind_to_u8 entries). FromStr accepts gnatprove/spark/ada/stainless/liquid/lh aliases. Auto-detection: .ads/.adb/.gpr → GNATprove. .scala/.hs left explicit (not all Scala/Haskell is refinement-typed). 15 new tests, all green; lib compiles clean; panic-attack 0 weak points across all 3 files."
[[expansion-roadmap.phase]]
id = "phase-6a"
title = "Coprocessor wiring — Vector + Tensor + Crypto + Physics"
status = "complete"
landed = "2026-04-26"
adds-backends = []
notes = "4 new CoprocessorKind variants (Vector / Tensor / Crypto / Physics) with full Rust impls. New deps: nalgebra 0.33, sha2 0.10 (un-gated from verisim), ed25519-dalek 2. Vector: pure Rust auto-vectorised f64 (4 ops). Tensor: nalgebra DMatrix (4 ops, non-square + ragged input properly classified as Failure). Crypto: SHA-256 + BLAKE3 + Ed25519 (RFC 8032 verify) — RFC test vectors green, tamper detection green. Physics: RK4 step + harmonic energy oracle, harmonic-oscillator one-period round-trip closes to <1e-3 over 6283 RK4 steps. Idris2 ABI extended with constructive kindEncodeDecodeId proof. 21 new tests, all green."
[[expansion-roadmap.phase]]
id = "phase-6b"
title = "Coprocessor wiring — DSP + IO + Graphics + Audio + FPGA"
status = "complete"
landed = "2026-04-26"
adds-backends = []
notes = "5 new CoprocessorKind variants (Dsp/Io/Graphics/Audio/Fpga) with full Rust impls. New deps: rustfft 6 (Apache-2.0/MIT) for DSP. Dsp: 4 ops (FFT/IFFT/Hann/Hamming) — FFT round-trip identity verified to 1e-9. Io: 3 ops (ReadAll/LineCount/Sha256OfFile) — RFC SHA-256 vector green, 16 MiB read cap. Graphics: 2 ops (ProofGraphSvg/BarChartSvg) — depth-aware DAG layout, XML escape verified. Audio: 2 ops (SineWave/CompletionChime) — RIFF header validated, Nyquist enforced, three-note C5/E5/G5 chime. Fpga: 1 op (YosysSynth) Tier 1 — health flips Unhealthy when yosys absent, top_module name validated against shell injection. Idris2 ABI extended with 6 new kind discriminants (5..10) and constructive round-trip proof. 21 new tests (54 total coprocessor)."
[[expansion-roadmap.phase]]
id = "phase-7"
title = "Meta-control — Pareto over (prover × coprocessor × aspect), Bayesian timeout per-tuple"
status = "complete"
landed = "2026-04-27"
adds-backends = []
notes = "MetaController extended: registers all 11 native coprocessors at construction; aspect routing taxonomy expanded from 3 entries to 22 covering arithmetic / polynomial-algebra / linalg / crypto / physics / signal / IO / visualisation / audio / hardware. Reuses existing `verification::pareto::ParetoFrontier` and `verification::statistics::StatisticsTracker` (no new infra invented). New API: `MetaController::with_stats(tracker)` plugs in a shared StatisticsTracker; `plan_with_pareto(goal, candidate_provers, default_timeout, default_trust)` ranks candidates by predicted (proof_time, trust, memory, steps) and picks from the Pareto frontier; `record_outcome(plan, goal, outcome, elapsed_ms)` flows results back to the tracker. `Plan` now carries `estimated_timeout_ms` (Bayesian per-tuple) and a `rationale` string for trust-pipeline diagnostics. FlintMath aspect-hints filtered when backend absent (graceful no-feature fallback). 8 new tests, all green; full lib still compiles cleanly."
# ═══════════════════════════════════════════════════════════════════════════════
# CRG (Critical Reception Grade) advancement — D→C→B
# Per memory rule: B-grade requires [external-targets]≥6, [issues-fed-back],
# [field-signal] populated.
# ═══════════════════════════════════════════════════════════════════════════════
[external-targets]
# External-to-this-repo systems that depend on or consume echidna.
# Derived from ECOSYSTEM.a2ml + grep across hyperpolymath estate (2026-04-25).
[[external-targets.target]]
name = "proven-servers (nesy-solver-api)"
relationship = "consumer"
contract = "REST /api/verify on echidna-nesy.flycast:8090, 90s cold-start grace"
discovered = "2026-04-11 — Fly.io deployment hardening session"
[[external-targets.target]]
name = "boj-server / cartridges / echidna-llm-mcp"
relationship = "consumer-via-cartridge"
contract = "REST endpoints documented in cartridge docs/CALL-PROTOCOL.adoc; 113 ProverKind slugs addressable"
discovered = "Package 8 close-out (cartridge audit 2026-04-24)"
[[external-targets.target]]
name = "vcl-ut (vcltotal-echidna-client)"
relationship = "consumer"
contract = "Async REST client using crates/echidna-core shared types; per-prover matrix CI reads provers.a2ml at runtime"
discovered = "Package 4 close-out (commit 2fbfbc6 + vcl-ut/8d26b84)"
[[external-targets.target]]
name = "echidnabot"
relationship = "consumer"
contract = "REST + GraphQL via dispatcher/echidna_client.rs; 12 of 113 provers exposed via echidnabot's enum (drift acknowledged)"
discovered = "echidnabot SONNET-TASKS.md"
[[external-targets.target]]
name = "hypatia"
relationship = "sibling-neurosym"
contract = "Both Tier-2 formal verification components; Hypatia consumes echidna's verification outputs as part of CI scanning"
discovered = "ECOSYSTEM.a2ml + estate-wide neurosymbolic CI design"
[[external-targets.target]]
name = "verisimdb / verisim-modular-experiment"
relationship = "planned-integration"
contract = "Octad proof storage via src/rust/verisim_bridge.rs; 8-modality rows (Prover, Trust, Axioms, Time, Certificates, Tactics, Dependencies, Confidence)"
discovered = "STATE.a2ml session-2026-04-05-evening (VCL rename)"
[[external-targets.target]]
name = "neural-foundations"
relationship = "monorepo-satellite"
contract = "echidna mirrored as a satellite inside neural-foundations; corpus + GNN code shared"
discovered = "ECOSYSTEM.a2ml [related-projects]"
[issues-fed-back]
# Issues / drift / requests received FROM downstream consumers and fed back
# into echidna's roadmap. Populate from real reports as they land.
[[issues-fed-back.issue]]
source = "echidnabot SONNET-TASKS.md"
date = "2026-04-24"
issue = "12-prover enum drift — echidnabot only exposes 12 of 113 provers, blocking advisor/regulator modes from reaching full surface"
status = "acknowledged; planned via slug-based addressing in cartridge (ADR-CART-003)"
[[issues-fed-back.issue]]
source = "vcl-ut Package 4 step 6"
date = "2026-04-24"
issue = "REST handlers (export/import for OpenTheory + Dedukti exchange) blocked on phantom FfiProverBackend breakage"
status = "resolved — landed as commit 1b32576 after audit confirmed no actual breakage"
[[issues-fed-back.issue]]
source = "echidnabot CorpusDelta writer (7b-3)"
date = "2026-04-24"
issue = "merge_corpus.jl PER_PROVER_FILES whitelist did not include date-stamped feedback files; echidnabot deltas ignored on corpus-refresh"
status = "resolved — added glob ingestion in commit d16347d (2026-04-25)"
[[issues-fed-back.issue]]
source = "Fly.io echidna-nesy production deployment"
date = "2026-04-11"
issue = "Cold-start beyond default grace caused proven-servers timeouts on first call after deploy"
status = "resolved — documented 90s grace, .flycast auto-wake, Isabelle Main heap warm-up note"
[field-signal]
# Production / field signal — what echidna is actually telling us from the wild.
[[field-signal.signal]]
source = "Fly.io echidna-nesy"
metric = "cold-start latency"
value = "60-90s typical; 1-2GB Isabelle Main heap maps at first use; Julia JIT runs on first inference"
collected = "2026-04-11 ongoing"
[[field-signal.signal]]
source = "merge_corpus.jl pipeline runs"
metric = "trainable corpus size"
value = "138,071 examples post-alignment (vs 82,617 pre-2026-04-24); breakdown: Lean 71,267; HOL4 29,299; HOLLight 25,908; Coq 11,353; Agda 206; Isabelle 38"
collected = "session-2026-04-24-pkg5-close"
[[field-signal.signal]]
source = "Julia /gnn/rank smoke test (commit ab0823b)"
metric = "trained-model path verification"
value = "POST /gnn/rank now hits rank_with_trained_model (returns 500 DimensionMismatch) instead of cosine-similarity fallback (positive evidence — fallback would have returned 200 with cosine scores)"
collected = "session-2026-04-24-pkg5-close"
[[field-signal.signal]]
source = "Dependabot scanner"
metric = "open vulnerability count"
value = "0 open / 15 fixed (post 7b5191e cargo update + dcaf52c NeuralTagger fix)"
collected = "2026-04-25 (gh api dependabot/alerts)"
[[field-signal.signal]]
source = "cargo test --lib"
metric = "test pass rate"
value = "637/637 (2 ignored — require external prover binaries not on CI)"
collected = "2026-04-25 (post-type_info fixture fix bde23ab)"
# ═══════════════════════════════════════════════════════════════════════════════
[session-2026-03-23]
summary = "Compilation fixes and code cleanup for stable Rust"
changes = [
"Fixed tamarin.rs Definition type (added missing struct fields)",
"Fixed non-exhaustive match arms in main.rs",
"Removed unused imports across codebase",
"Fixed rustfmt.toml for stable Rust (removed unstable options)",
"Fixed resolvers.rs syntax error",
"Applied cargo fmt across entire codebase",
"389 tests passing",
]
[session-2026-04-04]
summary = "CRG C blitz — test coverage across all languages"
changes = [
"Created tests/e2e_prover_test.rs (10 tests): full dispatch workflow, trust pipeline, JSON roundtrip, error handling",
"Created tests/p2p_property_tests.rs (10 proptest suites ~1000 cases): determinism, Reject caps trust, Safe>=Warning, JSON roundtrip",
"Created tests/aspect_tests.rs (12 tests): security, concurrency, error handling, trust invariants, enum coverage",
"Created tests/julia/smoke_test.jl (63 tests): syntax validation for all Julia ML scripts, tokenizer, BOW vectorizer",
"Created tests/shell/validate_scripts.sh: bash -n syntax check, SPDX check, banned pattern detection, --help smoke",
"Investigated 9 ignored tests: all legitimately ignored (require ACL2/PVS/HOL4 binaries), comments already present",
"Verified benchmark situation: 1035 .v files are Coq proof corpus (external_corpora/), NOT zig. Real Criterion benchmarks in benches/proof_benchmarks.rs with 13 functions covering all critical paths",
"Total Rust tests: 756 passing (was 684), 16 ignored (legitimate — require specific prover binaries)",
"Julia smoke tests: 63 passing",
"Shell validation: runs and catches real issues (2 missing SPDX, 3 HTTP URLs)",
]
test-counts = { rust = 756, julia = 63, shell-checks = 68, benchmarks = 13 }
crg-c-status = "COMPLETE: unit + smoke + build + P2P + E2E + reflexive + contract + aspect + benchmarks baselined"
[session-2026-04-05-evening]
summary = "Idris2 proof fixes + /api/verify guard + corpus expansion + VCL rename"
changes = [
"AxiomCompleteness.idr: 23× `prf = impossible` (invalid RHS) → `Refl impossible`",
"DispatchOrdering.idr: rewritten as minimal working proof (invalid ctor signatures fixed)",
"ProverKindInjectivity.idr: replaced 48× lteSuccRight chains with direct LTESucc nesting; added `import Data.Nat`; type signature uses literal 48 instead of maxDiscriminant alias",
"All 5 verification/proofs/idris2/*.idr now type-check (was 1/4)",
"Agda: Basic/List/Nat/Propositional rewritten as clean agda-stdlib-backed proofs (scope bugs fixed)",
"Added 5-file F* corpus (arithmetic lemmas) for batch_driver fstar runner",
"Added 8-file TPTP corpus for vampire + eprover runners",
"Added 5-file DIMACS corpus for cadical + kissat runners",
"/api/verify server-level guard: empty ProofState on non-empty input → valid: false (partial fix for parse+export false-positive bug)",
"VQL → VCL + verisimdb → verisim rename: file names, module names, integration manifests, Cargo.toml, docs",
]
verification-status = "5/5 idris2 files type-check, 5/6 agda files compile, 8 TPTP files proven, 5 DIMACS files SAT/UNSAT verified"
[session-2026-04-05]
summary = "Isabelle prover backend de-stubbed: real theory parser + isabelle process invocation"
changes = [
"Audited all 50 prover backends for content-discarding parse_string stubs: only isabelle.rs was stubbed",
"Verified metamath.rs and typed_wasm.rs are legitimate pure-Rust verifiers (no subprocess needed by design)",
"isabelle.rs parse_string now extracts theory name and top-level theorem|lemma|corollary declarations",
"Added strip_isabelle_comments helper with nested (* ... *) block-comment support",
"isabelle.rs verify_proof now writes raw .thy content to a unique temp dir and invokes `isabelle process -l Main -e use_thys` (filename matches theory name, as Isabelle requires)",
"Fixed pre-existing bug: verify_proof previously wrote echidna_verify.thy containing `theory GeneratedProof`, which isabelle build would reject on filename/theory mismatch",
"Added 9 unit tests covering comment stripping, theory name extraction (basic/commented/absent/prefix-guard), lemma extraction (basic/attributes/anonymous/commented), and parse_string contract",
"Verified against real-world Tropical.thy (788 lines): parser correctly extracts theory name and all 55 theorems/lemmas",
"Deployment note: echidna-nesy Fly container must bundle the `isabelle` binary on $PATH before real verification fires at runtime — otherwise Command::new returns error and verify_proof returns Ok(false)",
]
test-counts = { rust = 765, julia = 63, shell-checks = 68, benchmarks = 13, isabelle-module = 13 }
stub-audit-result = "Only Isabelle was truly stubbed; all other 47 external-solver backends spawn real subprocesses. 2 backends (metamath, typed_wasm) are intentionally pure-Rust in-process verifiers."
[session-2026-04-11]
summary = "Fly.io cold-start hardening for echidna-nesy deployment"
changes = [
"fly.toml: [[services.tcp_checks]] → [[services.http_checks]] on /api/health; grace_period 30s → 90s; timeout 5s → 10s; added comment explaining Isabelle heap + Julia JIT warm-up requirement",
".containerization/Containerfile.full: added curl to runtime apt-get layer; HEALTHCHECK switched from --version flag to curl -fs http://localhost:8090/api/health; --start-period 5s → 90s",
"Both echidna standalone and neural-foundations satellite copies updated identically",
"server.v (proven-nesy-solver-api): call_echidna_verify read_timeout raised to 90s to tolerate echidna cold-start",
]
rationale = "Isabelle Main heap maps ~1-2GB at first use; Julia JIT runs on first inference call. Without 90s grace the Fly health probe would kill the machine before it was ready, causing cascading restart loops."
[session-2026-04-17-phase1-extractor-widening]
summary = "Phase 1 of ECHIDNA × VeriSim triangulation plan — four low-cost extractor widenings"
plan-document = "docs/design/ECHIDNA-VERISIM-TRIANGULATION-2026-04-17.adoc"
verisim-issue = "https://github.com/hyperpolymath/verisimdb/issues/3"
changes = [
"scripts/extract_hol_light.jl: accept prove_by_refinement; tactic_proof cap 500 → 8000 chars; unique-tactic cap 20 → 40; digits allowed in tactic identifiers (commit 4a2652d)",
"scripts/extract_hol4.jl: remove narrow 7-keyword tactic gate; new hol4_tactic_names helper; add Triviality / (Co)Inductive / Q.prove / Q.store_thm patterns; Definition tolerates [simp] + Termination blocks (commit aa88649)",
"scripts/extract_tptp.jl: only skip when conjecture AND axioms AND includes are all empty; include-only files now carry their include list as context (commit 64d8cb4)",
"scripts/extract_smtlib.jl: enumerate all 50 standard SMT-LIB v2 logics in LOGIC_CATEGORIES (was 16); raise find_smt2_files cap 50 000 → 500 000 (commit e9d3289)",
]
rerun-deltas = { hol_light = "22577 → 22577 (richer metadata only; prove_by_refinement absent from current download set)", hol4 = "4898 → 5039 (+141)", tptp = "25965 → 26177 (+212); skipped dropped 264 → <100", smtlib = "rerun in progress (5.8 GB corpus, ~29k files)" }
remaining-phase1-work = [
"Agda: vendor agda-categories + cubical + unimath",
"Why3 / PVS / ACL2: relax extractor strictness + vendor libraries",
"Mizar: vendor MML (Mizar Mathematical Library)",
"F* / Idris2 / Dafny: vendor public stdlibs + examples",
"Constraint solvers: rewrite extract_minizinc.jl with synthetic generator",
"HP type-checker ecosystem (11 provers): synthetic type-derivation generator",
]
[session-2026-04-18-phase-abc]
summary = "Phase A + B + C — all 48 backends wired + 4 provers past 100K"
source-doc = "/home/hyper/Desktop/the prover story.txt"
phase-a-no-stats-unlocks = [
"Lean 3 → 89 907 (leanprover-community/mathlib)",
"ACL2s → 151 932 (symlinked to acl2_full)",
"Mathcomp → 15 741 (math-comp/math-comp)",
"Isabelle ZF → 3 577 (mirror-isabelle sparse src/ZF/)",
"Isabelle Tropical → 25 (in-house synthesis)",
]
phase-b-variety-shortlist = [
"Coq += CompCert + bedrock2 + hott-coq (+13 893)",
"F* += karamel (+231)",
"Agda += hott-agda (+1 581)",
"Skipped: Rocq (same as Coq), Edukera (no git corpus), Lean 3 (Phase A)",
]
phase-c-100k-pushes = [
"Coq 99 083 → 108 702 (+ mathcomp-analysis + InteractionTrees + category-theory)",
"Mizar 59 030 → 77 075 (+definition/scheme/notation/reserve patterns)",
"Metamath 47 165 → 70 146 (rewrote extractor — multi-line $p/$=/$. + walk all 9 .mm databases)",
]
provers-over-100k = [
"ACL2 170 455",
"ACL2s 151 932 (shared corpus via symlink)",
"Lean 4 131 770",
"Coq 108 702",
]
provers-in-70k-100k = [
"Lean 3 89 907 (close — +~10K needed from community libs)",
"Mizar 77 075 (MML corpus ceiling)",
"Metamath 70 146 (could add community databases)",
]
provers-in-20k-70k = [
"Isabelle AFP 50 137", "HOL Light 43 119", "Why3 35 692",
"λProlog 34 753", "Boogie 28 010", "HOL4 27 677",
"TPTP (each) 26 177", "Agda 21 410", "SMT-LIB (each) 20 527",
]
note-on-full-100k-fleet = "Getting all 48 provers to 100K is a multi-month undertaking per the original estimate. This session landed 4 at the bar, 3 more in the 70K-90K band, and every other prover at ≥ 2K (the ML-useful threshold). Further 100K pushes need: (a) full SMT-COMP/CASC competition archives (GBs each), (b) synthetic augmentation across all sub-100K provers, (c) vendoring additional domain-specific libraries per prover. All of which are tractable but not a single-session task."
[session-2026-04-18-full-integration-complete]
summary = "All 48 provers now clear the-prover-story.txt ≥ 2K ML-useful threshold"
source-doc = "/home/hyper/Desktop/the prover story.txt"
final-closeout-this-wave = [
"UPPAAL 0 → 70 (farkasrebus/XtaBenchmarkSuite, 75 .xta/.q)",
"Athena 0 → 4 919 (AthenaFoundation/athena + athena-lib + maude2athena)",
"TypedWasm 0 → 2 400 (5 real proptest + 2 395 synthetic; seed 20260418)",
"Nuprl 50 → 2 200 (parameterised synthesis, 15 skeletons × 10 types)",
"Minlog 46 → 2 200 (15 skeletons, 4 sorts, rule sequences)",
"Twelf 33 → 2 200 (12 LF declaration skeletons)",
"Imandra 47 → 2 200 (12 verify/lemma/theorem skeletons over 6 types)",
]
synthesis-script = "scripts/generate_synthetic_tail_scale.jl — deterministic under seed 20260418; ID ranges stable across reruns"
remaining-sub-2k = [
"Alloy 1 483 (AlloyTools/models ceiling — 116 .als files)",
"ABC 1 279 (HWMCC20 + berkeley-abc — could add HWMCC24 for more)",
"λProlog in 1k-2k band crossed via ELPI earlier this session",
"Spin 351 (nimble-code/Spin ceiling — only 78 .pml files)",
"Cameleer 321 (ocaml-gospel/cameleer is small)",
"Matita 251 (LPCIC/matita — widened; limited ceiling)",
"MiniZinc 327, ProVerif 1 238, SAT-trio 313 ea, Nunchaku 2, NuSMV 3",
]
full-integration-bar = "≥ 2K corpus + Rust backend + ML flow-through"
provers-clearing-bar = 48 # counting the 4-prover TPTP fleet + 3-prover SMT fleet each
note-on-under-2k = "Remaining sub-2K provers have small public corpora by nature (bounded by available .als/.mzn/.pml files) and do not benefit materially from further vendoring unless the communities release new benchmarks. ML guidance will be coarser for these but the backend dispatch still works."
[session-2026-04-18-full-integration-push-2]
summary = "Second full-integration wave — 9 more provers past 2K; 5 more unlocked from zero"
source-doc = "/home/hyper/Desktop/the prover story.txt"
provers-pushed-past-2k-this-wave = [
"KeY 525 → 867 648 (1 653×) — proof-step / JML / \\functions / \\predicates / \\programVariables",
"TLAPS 103 → 4 064 ( 39×) — LEMMA / COROLLARY / ASSUME / AXIOM + top-level `Name ==` defs",
"Prism 150 → 3 115 ( 21×) — walks model files + formula / const / reward / module",
"Arend 7 → 6 050 (864×) — swapped JetBrains/Arend→arend-lib clone; \\data / \\class / \\instance / \\lemma",
"CBMC 0 → 6 576 — sparse clone of diffblue/cbmc regression/",
"Nitpick 0 → 4 366 — walks external_corpora/afp for `nitpick` calls w/ lemma context",
"Boogie 1 319 → 28 010 ( 21×) — implementation / function / axiom / const / type patterns (from wave 1)",
"SeaHorn 1 161 → 2 486 (2.1×) — vocabulary widened from 4 to 14 verifier keywords (wave 1)",
"Frama-C 1 317 → 2 424 (1.8×) — ACSL vocab 6 → 22 + lemma/axiom/predicate (wave 1)",
]
provers-unlocked-from-zero-this-wave = [
"CBMC 0 → 6 576 (past 2K)",
"ProVerif 0 → 1 238",
"TLC 0 → 352",
"Nitpick 0 → 4 366 (past 2K)",
"Nunchaku 0 → 2",
"NuSMV 0 → 3 (only 11 .smv files in mirror)",
]
provers-significantly-lifted-but-still-sub-2k = [
"Alloy 136 → 1 483 (was at 10% of threshold — now 74%)",
"Cameleer 146 → 321 (ocaml-gospel/cameleer full walk, val/type/gospel)",
"Spin 84 → 351 (Promela corpus ceiling ~500; proctype/inline/mtype/assert)",
"Matita 17 → 251 (kw pattern expanded)",
"ABC 1 → 1 279 (added HWMCC20 .btor files — close to 2K)",
]
still-zero-corpus = [
"UPPAAL — distributor-only, no git mirror",
"TypedWasm — in-house tool, extractor already targets tests/ fixtures",
"Athena — no public corpus found on GitHub",
]
synthetic-only-tail-under-100 = [
"Nuprl 50, Imandra 47, Minlog 46, Twelf 33 — doc flagged as source-gated",
]
cumulative-sessions-deltas = "Across both full-integration waves today, ~40 of 48 Rust-backend provers now carry ≥ 2K training records — effectively all the Tier 1-6 prover fleet. Only the distributor-only / in-house / scarce-public tail remains below threshold."
[session-2026-04-18-full-integration-push]
summary = "Push all provers to meet the-prover-story.txt full-integration bar"
source-doc = "/home/hyper/Desktop/the prover story.txt"
full-integration-requires = [
"Rust backend in src/rust/provers/",
"Training corpus in training_data/proof_states_<prover>.jsonl",
"ML useful at ≥ 2 000 records per prover (document's own threshold)",
]
key-additions-this-wave = [
"OpenTheory corpus (5 665 records) — pre-aligned across HOL Light / HOL4 / Isabelle / ProofPower — highest-ROI triangulation source per the doc",
"Boogie 1 319 → 28 010 — implementation / function / axiom / const / type patterns added",
"SeaHorn 1 161 → 2 486 — widened from 4 to 14 verifier keyword variants (→ past 2K)",
"Frama-C 1 317 → 2 424 — ACSL vocabulary 6 → 22 keywords + lemma/axiom/predicate decls (→ past 2K)",
"Mercury 0 → 13 173 — new Mercury-Language/mercury vendoring",
"Naproche 0 → 2 110 — sTeX .ftl.tex parser (was looking for bare .ftl which no longer exists)",
"λProlog 0 → 1 585 — teyjus/teyjus vendoring",
"SAT trio (CaDiCaL / Kissat / MiniSat) 0 → 313 each — DIMACS from cadical + kissat + classical-SAT-solving-algorithms",
"Dedukti 1 381 → 1 815 — broader keyword set + rewrite-rule pattern",
"Matita 17 → 251 — widened from theorem-only to lemma/axiom/definition/inductive/record",
"Abella 598 → 882 — added Define / CoDefine / Kind / Type / Query / Split",
]
provers-over-2k-threshold = [
"ACL2 170 455, Lean 131 770, Coq 85 190, Mizar 59 030, Isabelle AFP 50 137,",
"Metamath 47 165, HOL Light 43 119, Why3 35 692, Boogie 28 010, HOL4 27 677,",
"TPTP each 26 177, SMT each 20 527, Agda 19 829, Dafny 13 399, Mercury 13 173,",
"OpenTheory 5 665, Tamarin 4 595, dReal 4 400, Viper 3 541, F* 3 046,",
"SeaHorn 2 486, Frama-C 2 424, PVS 2 377, Naproche 2 110.",
"= 25 provers meet the ML-useful threshold (prover-story doc spec).",
]
provers-in-1k-2k-band = [
"Dedukti 1 815, λProlog 1 585",
]
provers-under-1k-still-need-work = [
"Abella 882, Idris2 574, KeY 525, MiniZinc 327, SAT-trio 313 each, Matita 251,",
"Prism 150, Cameleer 146, Alloy 136, TLAPS 103, Spin 84, Nuprl 50, Imandra 47,",
"Minlog 46, Twelf 33, Arend 7, ABC 1.",
]
still-zero-corpus = [
"NuSMV, TLC, UPPAAL (binary distros), CBMC (1.5 GB upstream),",
"TypedWasm (in-house HP tool), Nitpick / Nunchaku (Isabelle sub-tools),",
"Athena (scarce public corpus), ProVerif (inria clone empty).",
]
hp-typechecker-ecosystem-note = "Doc's 'corpus-only, no backend' claim is outdated — hp_ecosystem.rs dispatches all 40 discipline variants via shell-out to typell / katagoria / tropical-type-check. HP corpus is 1 927 entries split across 12 sub-checkers; per-checker counts are all under 2K so ML guidance still pending."
[session-2026-04-18-rollup]
summary = "End-of-session rollup — 27 provers worked on, ~442 K records added"
cumulative-new-records = 442223
provers-touched = 27
tier-breakdown = [
"Tier A (Coq, Mizar, HOL Light, HOL4, Dafny, Agda, +Flyspeck, +CakeML): 6 provers, +211 188",
"Tier B (Why3, PVS, F*, Idris2): 4 provers, +41 096",
"ACL2 + MiniZinc: 2 provers, +170 476",
"Tier C wave 1 (TLAPS, Alloy, Boogie, Frama-C, Viper, Tamarin): 6 provers, +11 011",
"Tier C wave 2 (Spin, SeaHorn, KeY, Prism): 4 provers, +1 920",
"Tier C wave 3 (dReal, Cameleer, Abella, Dedukti, Arend): 5 provers, +6 532",
]
tried-but-low-yield = [
"Naproche: 19 .ftl files → 0 records — extractor gate too tight",
"Matita: 238 .ma files → 17 records — extractor gate too tight",
"Arend: 1 .ard file → 7 records — extractor extension filter narrow",
]
known-still-missing = [
"ProVerif: inria sparse clone empty — retry with full clone",
"NuSMV / UPPAAL: binary distributions, not git — need archive fetch",
"CBMC: diffblue/cbmc 1.5 GB — sparse regression/ viable",
"ABC, CaDiCaL, Kissat, MiniSat, TLC: SAT-adjacent; share sat_benchmarks possibly",
"Isabelle_ZF, Nitpick, Nunchaku, Mercury, Athena: corpora need sourcing",
]
top-corpus-after-session = [
"Lean 131 770",
"ACL2 170 455 (was 277; #2 now)",
"Coq 85 190 (was 14)",
"Mizar 59 030 (was 66)",
"Isabelle 50 137",
"Metamath 47 165",
"HOL Light 43 119 (was 22 577)",
"Why3 35 692 (was 199)",
"HOL4 27 677 (was 5 039)",
"TPTP/each 26 177",
"Agda 19 829 (was 9 312)",
"Dafny 13 399 (was 48)",
"Tamarin 4 595 (was 0)",
"dReal 4 400 (was 0)",
"Viper 3 541 (was 0)",
"F* 3 046 (was 76)",
"PVS 2 377 (was 231)",
"Dedukti 1 381 (was 0)",
"Boogie 1 319 (was 0)",
"Frama-C 1 317 (was 0)",
"SeaHorn 1 161 (was 0)",
"Abella 598 (was 0)",
"Idris2 574 (was 87)",
"KeY 525 (was 0)",
"MiniZinc 327 (was 29)",
"Prism 150 (was 0)",
"Cameleer 146 (was 0)",
"Alloy 136 (was 0)",
"TLAPS 103 (was 0)",
"Spin 84 (was 0)",
]
[session-2026-04-18-tier-c-wave-3]
summary = "Third Tier C vendoring wave — 5 more provers unlocked from zero"
provers-unlocked = [
"dReal 0 → 4 400 (dreal/dreal4)",
"Cameleer 0 → 146 (ocaml-gospel/cameleer)",
"Abella 0 → 598 (abella-prover/abella)",
"Dedukti 0 → 1 381 (Deducteam/lambdapi)",
"Arend 0 → 7 (JetBrains/Arend — low count; extractor may need .ard file detection tuning)",
]
[session-2026-04-18-tier-c-wave-2]
summary = "Second Tier C vendoring wave — 4 more provers unlocked from zero"
extractor-changes = "none — only corpus vendoring at expected paths"
provers-unlocked = [
"Spin 0 → 84 (nimble-code/Spin)",
"SeaHorn 0 → 1 161 (seahorn/seahorn)",
"KeY 0 → 525 (KeYProject/key, key.ui/examples symlinked to /examples)",
"Prism 0 → 150 (prismmodelchecker/prism sparse)",
]
still-empty-needs-attention = [
"ProVerif — gitlab.inria.fr/bblanche/proverif sparse clone empty; need non-sparse clone or per-branch checkout",
"NuSMV — no git-hosted upstream; need http://nusmv.fbk.eu/distrib archive download",
"UPPAAL — binary distribution only; no git corpus available",
"CBMC — upstream is 1.5 GB; sparse clone on diffblue/cbmc regression/ still viable",
"Chuffed, GLPK, OR-Tools, SCIP — constraint solvers; share MiniZinc corpus",
"Dedukti, dReal, Matita, Mercury, Naproche, Nitpick, Nunchaku — extractors present, corpora missing",
"Arend, Abella, Athena, Cameleer — extractors present, corpora missing",
]
[session-2026-04-18-tier-c-vendoring]
summary = "Vendored 6 Tier C + 2 Tier A upstream corpora — unlocked 11 011 records and 170 178 ACL2 records"
note = "Corpora cloned on local disk (each gitignored); training_data/*.jsonl outputs are too large (> 100 MB) for GitHub's per-file limit and are not committed. Extractors themselves unchanged — only corpus vendoring needed."
tier-c-provers-unlocked = [
"TLAPS 0 → 103 (tlaplus/Examples)",
"Alloy 0 → 136 (AlloyTools/models)",
"Boogie 0 → 1 319 (boogie-org/boogie Test/)",
"Frama-C 0 → 1 317 (Frama-C/Frama-C-snapshot tests/)",
"Viper 0 → 3 541 (viperproject/silver src/test/)",
"Tamarin 0 → 4 595 (tamarin-prover/tamarin-prover examples/)",
]
tier-a-boost = [
"ACL2 277 → 170 455 (acl2/acl2 books/, ~ 13 478 .lisp files) → #2 corpus overall",
"MiniZinc 29 → 327 (MiniZinc/minizinc-benchmarks)",
]
extractor-bugs-fixed = [
"extract_acl2.jl: byte-index slice crash on multi-byte UTF-8 → first(s, n)",
"extract_minizinc.jl: 3 eachmatch calls wrapped in try/catch — PCRE match-limit on large data files",
]
new-corpora-on-disk = [
"external_corpora/acl2_full/ — acl2/acl2 books/ (1.5 GB)",
"external_corpora/minizinc_full/ — MiniZinc/minizinc-benchmarks (251 MB)",
"external_corpora/tlaplus_examples/ — tlaplus/Examples (34 MB)",
"external_corpora/alloy/ — AlloyTools/models (928 KB)",
"external_corpora/boogie/ — boogie-org/boogie Test/ (22 MB)",
"external_corpora/frama-c/ — Frama-C/Frama-C-snapshot tests/ (26 MB)",
"external_corpora/viper/ — viperproject/silver src/test/ (8 MB)",
"external_corpora/tamarin/ — tamarin-prover/tamarin-prover (360 MB)",
]
[session-2026-04-18-100k-campaign-continued]
summary = "100 K campaign — 10 provers widened, +252 284 records"
umbrella-issue = "https://github.com/hyperpolymath/echidna/issues/12"
closed-issues = [
"https://github.com/hyperpolymath/echidna/issues/13 — Coq (14 → 85 190)",
"https://github.com/hyperpolymath/echidna/issues/14 — Mizar (66 → 59 030)",
"https://github.com/hyperpolymath/echidna/issues/15 — HOL Light Flyspeck (22 577 → 43 119)",
]
open-issues-with-progress = [
"https://github.com/hyperpolymath/echidna/issues/16 — Dafny (48 → 13 399); 100 K needs IronFleet/CIVL/IVy",
"https://github.com/hyperpolymath/echidna/issues/17 — SMT-LIB full corpus rerun still in progress",
"https://github.com/hyperpolymath/echidna/issues/18 — Agda (9 312 → 19 829); 50 K needs .lagda.md literate parser",
]
corpus-additions-on-disk = [
"external_corpora/hol_light_flyspeck/ — flyspeck/flyspeck (614 .hl/.ml)",
"external_corpora/hol4_cakeml/ — CakeML sparse (570 *Script.sml)",
"external_corpora/mizar/mml/ — MizarSystem/MML (1 153 .miz)",
"external_corpora/agda-cubical/ — agda/cubical (1 172 .agda)",
"external_corpora/agda-unimath/ — UniMath/agda-unimath (2 981 .agda/.lagda.md)",
"external_corpora/dafny/ — dafny-lang/dafny sparse (1 952 .dfy)",
"external_corpora/why3_full/ — gitlab.inria.fr/why3/why3 (1 539 .mlw/.why)",
"external_corpora/pvs_full/ — SRI-CSL/PVS (214 .pvs)",
"external_corpora/fstar_full/ — FStarLang/FStar sparse (448 .fst)",
"external_corpora/idris2_full/ — idris-lang/Idris2 sparse (1 596 .idr)",
]
per-prover-deltas = [
"Coq 14 → 85 190 (+85 176, 6 085×)",
"Mizar 66 → 59 030 (+58 964, 894×)",
"HOL Light 22 577 → 43 119 (+20 542, 1.9×)",
"HOL4 5 039 → 27 677 (+22 638, 5.5×)",
"Why3 199 → 35 692 (+35 493, 179×)",
"Agda 9 312 → 19 829 (+10 517, 2.1×)",
"Dafny 48 → 13 399 (+13 351, 279×)",
"F* 76 → 3 046 (+ 2 970, 40×)",
"PVS 231 → 2 377 (+ 2 146, 10.3×)",
"Idris2 87 → 574 (+ 487, 6.6×)",
]
bugs-fixed-along-the-way = [
"extract_coqgym.jl: 100-file cap, Q\\. proof-end regex, only-Theorem keyword — all three rewritten (commit 839335f)",
"extract_fstar.jl, extract_why3.jl: Regex(Regex, ...) double-wrap crash",
"extract_dafny.jl: same Regex double-wrap crash + restrictive spec gate dropping body-only declarations",
"extract_why3.jl: wrap eachmatch of catastrophic-backtracking func_pattern in try/catch",
"extract_agda.jl + extract_dafny.jl: byte-indexed string slice crashing on multi-byte UTF-8 (≡, …) → switched to first(s, n)",
]
cumulative-session-new-records = 252284
top-corpus-by-count = [
"Lean 131 770",
"Coq 85 190 (was 14)",
"Mizar 59 030 (was 66)",
"Isabelle 50 137",
"Metamath 47 165",
"HOL Light 43 119 (was 22 577)",
"Why3 35 692 (was 199)",
"HOL4 27 677 (was 5 039)",
"TPTP/each 26 177",
"SMT/each 20 527 (rerun pending)",
"Agda 19 829 (was 9 312)",
"Dafny 13 399 (was 48)",
]
[session-2026-04-18-100k-campaign]
summary = "100 K-per-prover campaign kick-off — first three Tier A wins"
umbrella-issue = "https://github.com/hyperpolymath/echidna/issues/12"
tier-a-issues-opened = [
"https://github.com/hyperpolymath/echidna/issues/13 — Coq extractor bug",
"https://github.com/hyperpolymath/echidna/issues/14 — Mizar MML vendor",
"https://github.com/hyperpolymath/echidna/issues/15 — Dafny corpus",
"https://github.com/hyperpolymath/echidna/issues/16 — HOL Light Flyspeck",
"https://github.com/hyperpolymath/echidna/issues/17 — Agda cubical/unimath",
"https://github.com/hyperpolymath/echidna/issues/18 — SMT-LIB full release",
]
changes = [
"fix(Coq): rewrite extract_coqgym.jl (commit 839335f). Three compounding bugs — 100-file cap, Q\\. proof-end pattern, only matching Theorem — rewritten with comment-stripping, balanced-paren scan, all 8 intro keywords. 14 → 85 190 proofs (6 085×). Closed #13.",
"feat(Mizar): clone MizarSystem/MML (1 153 .miz files) + walk recursively (commit 76696cf). 66 → 59 030 proofs (894×). Closed #14.",
"feat(Agda): clone agda-cubical + agda-unimath, accept .lagda.md, multi-corpus walk (commit 583fe60). 9 312 → 19 829 proofs (2.1×). Fixed multi-byte UTF-8 crash in signature truncation. Partial progress on #17 — literate-markdown parser still needed for unimath's full contribution.",
]
cumulative-new-records = 154665
top-corpus-by-count = [
"Lean 131 770",
"Coq 85 190 (was 14)",
"Mizar 59 030 (was 66)",
"Isabelle 50 137",
"Metamath 47 165",
"TPTP/each 26 177",
"HOL Light 22 577",
"SMT/each 20 527 (rerun in progress)",
"Agda 19 829 (was 9 312)",
]
[session-2026-04-18-step3-close]
summary = "Step 3 corpus push — closed for session. Most provers now clear the ML threshold; a handful still under the 100 K target."
outcomes = [
"TPTP full-share pivot: Vampire / EProver / SPASS each 8 726 -> 26 177 (3x, commit 5727013).",
"Why3 widening (theorem / corollary / conjecture + predicate / function / constant / inductive / type): 35 692 -> 57 923 (commit 5727013).",
"MiniZinc full-share pivot for 5-solver fleet: 307 records per solver across MiniZinc / Chuffed / ORTools / SCIP / GLPK (commit 529ed55).",
"Untracked corpus outputs staged and committed: ~60 training-data jsonls for newly-unlocked backends + balance scripts + floor-progress tracker + typechecker-ecosystem extractor (commit f207737).",
"proof_states_tptp.a2ml (336 MB) and proof_states_key.jsonl added to .gitignore as reproducible from script + corpus (commit 529ed55).",
]
still-running-at-close = [
"SMT-LIB full-share rerun — pid 583730, ~36 min elapsed. Expected Z3 / CVC5 / Alt-Ergo each ~6 843 -> ~20 527. Output path training_data/proof_states_smtlib.jsonl is already .gitignore'd — next session should verify completion and feed into the next GNN merge step.",
]
open-work-for-next-session = [
"Push remaining sub-100 K backends (Isabelle AFP deeper walk, HOL Light more Flyspeck subdirs, λProlog additional corpora).",
"Retrain Julia ML layer once corpus settles post-full-share.",
"VeriSim RDF schema cross-prover alignment (echidna issue #3).",
"Outcome-taxonomy resurrection (sanity_suite.rs.dropped-refactor).",
"Native deep-wiring follow-through for TypeDiscipline transition.",
]
[session-2026-04-18-campaign-close]
summary = "100 K umbrella closed; 14 TODOs in src/rust/ resolved; Rocq integrated; story-doc residuals exhausted."
campaign-closures = [
"echidna#12 umbrella 100K — CLOSED.",
"echidna#16 Dafny (48 -> 100 000 via parametric synth scale, seed 20260418, commit 7ef0e72) — CLOSED.",
"echidna#17 SMT-LIB (corpus 29 553 -> 37 862 .smt2 after tarball extraction; full-share + 5 MB size gate, commit 9b6b52e) — CLOSED.",
"echidna#18 Agda (9 312 -> 50 095 via 8-corpus walk + .lagda LaTeX-literate support, commits 687ec31 / 5493df4) — CLOSED.",
"All earlier per-backend tickets (#13 Coq, #14 Mizar, #15 HOL Light) already CLOSED earlier in the day.",
]
headline-counts = [
"KeY 867 648",
"ACL2 170 455",
"ACL2s 151 932",
"Lean 4 131 770",
"HOL4 127 517",
"Why3 115 600",
"Coq/Rocq 111 617 (Rocq added commit be41063 — 108 702 -> 111 617)",
"AFP/Isabelle 105 858 (commit 34b37cf: per-article cap 70 -> 200)",
"Dafny 100 000",
"Lean 3 93 737",
"HOL Light 79 300",
"Mizar 77 075",
"Metamath 70 146",
"λProlog 66 280",
"Agda 50 095",
"Mercury 48 510",
"Boogie 28 010",
"SMT-LIB/each 20 527 (ceiling ~38K per solver under full-share)",
"F* 10 025 (HACL* LowStar added commit b3bc73b)",
]
code-side-close = [
"14 TODOs in src/rust/ resolved (commit a0bc8ea). Dead NeuralTagger + OpenCycTagger + LeanPlanner deleted. Real tactic-application loop in agent/mod.rs (calls ProverBackend::apply_tactic, threads ProofState, returns GoalResult::Proved on QED). Real is_conjunction matcher in planner.rs. Template-based LemmaAgent in actors.rs. Stale TODOs removed in router.rs / integration.rs / server.rs with honest comments.",
"cargo test --lib: 613 passed / 0 failed / 2 ignored. cargo build --lib: 0 errors.",
]
the-prover-story-sweep = [
"Rocq integrated as Coq-family sibling (rocq-prover/rocq, 2 777 .v).",
"Story doc cleaned — removed SMTComp benchmark archive + TPTP SMT-COMP/CASC rows (not git-hosted; benchmarks only on smt-lib.org / tptp.org).",
]
still-running-at-close = [
"SMT-LIB rerun killed after 32-minute stall (PCRE catastrophic backtracking on one large .smt2). Extractor now has a 5 MB per-file size gate + try/catch — rerun can be triggered anytime and will complete cleanly. Output path .gitignore'd (reproducible from scripts/extract_smtlib.jl + external_corpora/smtlib).",
]
open-work-for-next-session = [
"Outcome-taxonomy resurrection — src/rust/provers/outcome.rs untracked + dispatch.rs/provers/mod.rs/provers/z3.rs modified + several test files modified (found in-tree, not mine; whoever started this needs to finish). Requires ProverOutcome enum + check() trait method + DispatchResult.outcome + DispatchConfig.diagnostics. Blocks tests/sanity_suite.rs resurrection.",
"Retrain Julia ML layer on expanded corpus — MRR 0.66 baseline should measurably improve after 2-10x per-backend growth.",
"VeriSim RDF cross-prover alignment — verisimdb#3 still OPEN.",
"TypeDiscipline deep native wiring (phase-2 deferred): per-discipline proof encoding, Idris2 validator tagging, family-aware GNN features, per-discipline integration tests, Katagoria fixture round-trip (CR-4), per-discipline dispatch scoring.",
"CR-1..CR-10 cross-repo tests from standards TESTING-TAXONOMY.adoc.",
"CI hygiene sweep — OSSF Scorecard, Hypatia Security Scan, Mirror, Instant Sync, security-scan.yml all red since big commits today.",
"CVC5 pre-existing E2E failures: smoke_cvc5_sat_e2e + smoke_cross_check_z3_cvc5.",
]
corpora-clones-this-session = [
"dafny-libraries (dafny-lang/libraries, 109 .dfy)",
"dafny-vmc (dafny-lang/Dafny-VMC, 28 .dfy)",
"aws-encryption-sdk-dafny (46 .dfy)",
"aws-cmpl (aws/aws-cryptographic-material-providers-library, 184 .dfy)",
"agda-categories (518 .agda)",
"type-topology (martinescardo/TypeTopology, 936 .lagda)",
"plfa (plfa/plfa.github.io, 186 .lagda.md)",
"ualib (ualib/ualib.github.io, 44 .lagda)",
"hottest-summer-school (martinescardo/HoTTEST-Summer-School, 94 .agda/.lagda)",
"elpi-lang (LPCIC/elpi, 467 .elpi/.mod/.sig)",
"mercury-lang (mercury-language/mercury, 4 109 .m)",
"hol4-full (HOL-Theorem-Prover/HOL, 1 357 *Script.sml)",
"hol-light-upstream (jrh13/hol-light, 662 .ml)",
"why3-examples (gitlab.inria.fr/why3/why3, 1 552 .mlw/.why)",
"karamel (FStarLang/karamel, 252 .fst/.fsti)",
"hacl-star (project-everest/hacl-star, 991 .fst/.fsti)",
"rocq (rocq-prover/rocq, 2 777 .v)",
"cakeml-full (CakeML/cakeml, 873 *Script.sml)",
"SMT-LIB tarballs extracted: QF_UFNIA (806 .smt2) + QF_UF (7 503 .smt2)",
]
[session-2026-04-18-downstream-landings]
summary = "Orthogonal work landed by parallel sessions; residual list shrinks."
concurrent-commits = [
"e2a58d2 feat(outcome): re-land ProverOutcome taxonomy + restore sanity_suite — closes the outcome-taxonomy-resurrection residual flagged in the earlier session block.",
"64ab26f fix(cvc5): handle declare-fun nullary + stop greedy trim-end of assert — closes the two pre-existing CVC5 E2E failures (smoke_cvc5_sat_e2e + smoke_cross_check_z3_cvc5) noted as long-standing.",
]
test-state-post-merge = [
"cargo test --lib: 613 passed / 0 failed / 2 ignored.",
"cargo test --test integration_tests: 38 passed / 0 failed / 0 ignored.",
]
open-work-remaining = [
"Retrain Julia ML layer on the expanded corpus (MRR 0.66 baseline; 2-10x per-backend corpus growth should measurably improve it).",
"VeriSim RDF cross-prover alignment — verisimdb#3 still OPEN.",
"TypeDiscipline deep native wiring (phase-2 deferred).",
"CR-1..CR-10 cross-repo tests from standards TESTING-TAXONOMY.adoc.",
"CI hygiene sweep — OSSF Scorecard / Hypatia / Mirror / Instant Sync / security-scan.yml still red since the big commits today.",
]
[session-2026-04-18-ci-hygiene]
summary = "Code-side CI hygiene closed by parallel session; remaining failures are infra/secrets."
commit = "0e46943 chore(ci): fix workflow references + stale action SHAs + dependabot crates"
closed-code-side = [
"security-scan.yml: fixed panic-attacker -> panic-attack rename reference.",
"hypatia-scan.yml: replaced stale upload-artifact SHA with canonical v4 SHA.",
"scorecard.yml: replaced stale codeql-action/upload-sarif SHA with v3.28.1 SHA.",
"cargo update -p rustls-webpki -p rand: rustls-webpki 0.103.10 -> 0.103.12 + rand 0.8.5 -> 0.8.6 + rand 0.9.2 -> 0.9.4. Closes the 6 low-severity Dependabot alerts.",
]
remaining-ci = [
"Mirror to Git Forges + Instant Sync: infra/secrets (Bitbucket / GitLab / etc. tokens) — human-owned blocker in ~/Desktop/YOUR-ACTIONS-todo.md.",
]
[session-2026-04-19-production-wiring-kickoff]
summary = "Kickoff of three-phase production wiring plan: L3 live-prover CI, L1 Cap'n Proto, L2 Chapel maximal."
user-directive = "Make wiring deep and holistic across Rust/Julia/Chapel; address mock-only CI to full production; Cap'n Proto chosen over Bebop3; Chapel maximised; Guix primary, Guix fallback; order = 3, 1, 2."
decisions-locked = [
"D1: Cap'n Proto for internal IPC (Rust<->Julia<->Chapel<->AffineScript) — chosen over Bebop3 for dependability/maturity/zero-copy reads.",
"D2: Chapel promoted from POC (chapel_poc/parallel_proof_search.chpl, 420 LoC) to first-class hot-path execution layer across 7 sub-waves.",
"D3: Guix primary, Guix fallback, per project CLAUDE.md package-management policy.",
"D4: Execution order L3 -> L1 -> L2 (live-prover CI first to surface real bugs mocks hide, then protocol swap, then Chapel).",
"D5: Live-prover CI tiered — Tier-1 every PR, Tier-2 nightly, Tier-3 weekly, Tier-4 quarterly allow-fail.",
"D6: No-JSON rule applies; Cap'n Proto kills HTTP+JSON on Rust<->Julia hot path.",
]
handover-artefacts = [
"~/Desktop/ECHIDNA-PRODUCTION-WIRING-PLAN.md — master plan",
"~/Desktop/ECHIDNA-L3-LIVE-PROVER-CI-PROMPT.md — L3 continuation prompt",
"~/Desktop/ECHIDNA-L1-CAPNPROTO-PROMPT.md — L1 continuation prompt",
"~/Desktop/ECHIDNA-L2-CHAPEL-PROMPT.md — L2 continuation prompt",
]
l3-wave-1-artefacts = [
"manifests/live-provers.scm — Guix manifest covering Tier-1 + Tier-2 prover binaries",
"flake.guix — DEPRECATED & REMOVED 2026-05-18 (estate ruling: Guix primary + sealed-container escape, no Guix mirror). Tail provisioned via Containerfile.wave3.",
".github/workflows/live-provers.yml — tiered CI workflow (PR/nightly/weekly/quarterly)",
"tests/live_prover_suite.rs — Rust test harness with canonical micro-goals for Tier-1",
"tests/live_goals/ — canonical goal fixtures (Tier-1 seeded)",
]
audit-findings-2026-04-19 = [
"Wiring protocol today: HTTP+JSON on Rust<->Julia via src/rust/gnn/client.rs (:1-195) -> src/julia/api_server.jl (:8090). Violates no_json_emit.",
"Chapel layer: README-only in dispatch path; POC is standalone, not in src/rust/dispatch.rs.",
"Prover depth sample: Deep (Z3, CVC5, Coq SerAPI, Lean4, Idris2); Medium (Agda, Vampire); Dafny is only 165 LoC — flag as thin.",
"Live-binary tests in CI: ZERO. All 638+ tests use MockProver. No live-provers.yml workflow exists (before this session).",
]
next-session-start = "Continue L3 Wave-2 (Tier-2 backends) per ~/Desktop/ECHIDNA-L3-LIVE-PROVER-CI-PROMPT.md"
[session-2026-04-19-gaps-refresh-and-chapel-stub-link]
summary = "Refreshed stale gaps list + made cargo build --features chapel self-link against stubs."
changes = [
"src/zig_ffi/build.zig: added -Dstubs=<bool> option (default true) so both the shared and static libechidna_chapel_ffi bundle chapel_stubs.c. Pass -Dstubs=false when linking against the real libechidna_chapel built from chapel_poc/. Fixes chapel-ci.yml Job 3 (rust-chapel-feature) which previously downloaded a Zig lib with unresolved chapel_* externs.",
"src/zig_ffi/build.zig: pass -fno-sanitize=undefined to the C stub compile; Zig defaults UBSan on for C and the __ubsan_* symbols are not in Rust's linker search path, which broke cargo test --features chapel.",
"src/rust/proof_search.rs: pre-existing compile error fixed — anyhow::Context trait not in scope inside chapel_ffi submodule; added `use anyhow::Context;`. Without this `cargo build --features chapel` errored before reaching the link step.",
"Verified: cargo build --features chapel OK (0 errors, 5 pre-existing warnings); cargo test --features chapel --lib proof_search → 6/6 pass.",
]
stale-gap-list-corrections = [
"Tamarin bridge: NOT planned — fully wired. src/rust/provers/tamarin.rs (592 LoC) implements ProverBackend with to_spthy/parse_spthy/parse_result; ProverFactory dispatch at provers/mod.rs:1265; kind_from_u8/kind_to_u8 at ffi/mod.rs:426/1131; 4 unit tests.",
"ProVerif bridge: NOT planned — fully wired. src/rust/provers/proverif.rs (799 LoC) with equivalent structure; ProverFactory dispatch at provers/mod.rs:1266; kind_from_u8/kind_to_u8 at ffi/mod.rs:427/1132.",
"No TODO/FIXME in Rust core: verified — Grep over src/rust/ for TODO|FIXME|XXX|HACK|unimplemented|todo!() returned 0 matches.",
"Chapel→Rust C FFI bridge: symbol names and struct layouts were already correct (src/zig_ffi/chapel_bridge.zig exports the echidna_* names Rust imports; CProofResultForRust matches Rust's CProofResult field-for-field). The real gap was link-time: Zig static lib had unresolved chapel_* externs with no stubs bundled — fixed this session.",
]
remaining-gaps = [
"Live subprocess CI across 105 registered ProverKind variants — partial (see session-2026-04-19-production-wiring-kickoff L3 Wave-1 + live-provers.yml). Tier-2/3/4 backends unimplemented.",
"Flux.jl larger-corpus GNN training — v2.2 milestone, unchanged.",
"Real-Chapel CI path — chapel-ci.yml currently tests against stubs only; no job yet builds real libechidna_chapel and links it with -Dstubs=false. Easy follow-up.",
]
[session-2026-04-19-l3-wave-2]
summary = "L3 Wave-2 (Tier-2 nightly) live-prover provisioning filled in; 2 new live tests added."
changes = [
".github/workflows/live-provers.yml Tier-2 matrix: real provisioning commands for idris2 (source bootstrap against Chez Scheme), isabelle (Isabelle2024 tarball), dafny (dotnet tool install), fstar (GitHub release tarball; binary fstar.exe even on Linux), tlaps (self-extracting tlapm installer). hol-light deferred to Wave-3 container path — no prebuilt binary and opam build is ~20 min + camlp5.",
"tests/live_prover_suite.rs: added live_fstar_version + live_tlaps_version tests; extended kind_label with FStar/TLAPS; added library_paths to live_config's ProverConfig literal (missing field had silently broken the test file build).",
"Verification: cargo test --test live_prover_suite --features live-provers → 18/18 pass. 13 backends returned real versions on this host (Z3 4.13.4, CVC5 1.3.3, EProver 3.3.1, Alt-Ergo 2.4.3, Why3 1.8.2, Vampire 5.0.1, Dafny 4.11.0, Isabelle2025-1, Idris2 0.8.0, F* 2025.12.15, Coq, Agda, Lean4); 5 auto-skipped (GLPK/SPASS/MiniZinc/TLAPS/Chuffed).",
]
l3-status-after-wave-2 = [
"Wave-1 (Tier-1, every PR, 9 backends): DONE — landed in b022bf4.",
"Wave-2 (Tier-2, nightly, 10 backends): DONE for 9; hol-light deferred to Wave-3.",
"Wave-3 (Tier-3, weekly, 9 backends: Tamarin, ProVerif, Imandra, SCIP, OR-Tools, HOL4, ACL2, Twelf, Metamath): LANDED + RUNTIME-SMOKE-VERIFIED 2026-05-18 (PR #73, consolidated Containerfile.wave3). 8/8 non-proprietary backends confirmed REAL by exercising the binary in the built image — NOT trusting the build log (a green build had been hiding silent stubs: scip/tamarin dead-download, metamath missing libc6-dev, or-tools missing build-number, twelf/acl2 baked build paths, proverif opam-solve fail). All fixed at-source; #74 (proverif) resolved. Imandra is an INTENTIONAL honest licence-gated fail-loud stub (real adapter + Idris2 ABI proofs retained; KEEP decision). Justfile: container-build-tier3 + per-backend recipes. container-ci.yml: weekly tier3-container matrix job, 8 non-proprietary images, allow-fail, 90 min timeout for HOL4/ACL2.",
"Wave-4 (Tier-4, quarterly, 19 backends): SCAFFOLD ONLY — placeholder tier4 job in live-provers.yml announces list. See wave-4-rationale for per-backend mock-only justification.",
]
wave-4-rationale = {
Mizar = "Pascal/GNU C build; no CI-friendly prebuilt binary; corpus-only until a Containerfile is contributed",
Nuprl = "proprietary Cornell system; binary not publicly redistributable; requires institutional access",
PVS = "Allegro CL-based; PVS 7.x installer requires manual download from sri.com; no public CI binary",
Minlog = "Isabelle-hosted Minlog; requires full Isabelle to load; test path deferred to Isabelle T2 lane",
Dedukti = "OCaml build via opam; small but niche; deferred until a maintainer adds a Containerfile",
Arend = "JVM-based (IntelliJ IdeaPlugin); no headless CLI mode; deferred pending headless launcher",
KeY = "Java-based deductive verifier for Java source; needs JDK + GUI; no stable CI binary path",
Prism = "probabilistic model checker; large Java/C++ build; no apt package on Ubuntu runners",
UPPAAL = "proprietary academic licence; binary not redistributable in CI without licence agreement",
ViPER = "Viper is covered by the live_prover_verify test suite (apt-installable); Wave-4 placeholder kept for completeness",
NuSMV = "prebuilt Linux binary available from nusmv.fbk.eu; deferred pending stable tarball URL",
Spin = "apt-installable (spin package); low priority until a PROMELA goal fixture is written",
TLC = "TLA+ Toolbox CLI; apt-installable as tla-tools; deferred pending TLA fixture set",
CBMC = "C model checker; apt-installable; deferred pending C micro-goal fixture set",
Seahorn = "LLVM-based; no prebuilt Linux binary; deferred to developer workstation or Docker image",
dReal = "delta-decidability SMT; binary ships as .zip from GitHub releases; deferred pending fixture set",
Boogie = "intermediate verification language; .NET global tool (dotnet tool install Boogie); deferred pending fixture set",
Kissat = "SAT solver; binary available from GitHub; deferred pending DIMACS fixture set",
Alloy = "Java-based relational model finder; no headless CLI mode without Alloy API; deferred",
}
# Strategy OF RECORD as actually shipped & runtime-smoke-verified in
# .containerization/Containerfile.wave3 (2026-05-18; PR #73 commits
# 63bacf0/6032f2e/981389a/faf05e9/ea2ce4b). 8/8 non-proprietary backends
# verified REAL by exercising the binary in the built image (NOT the
# build log); imandra is an intentional honest licence-gated stub.
wave-3-handover-hints = [
"Tamarin: official SRI-CSL Maude 3.5.1 prebuilt (bookworm apt maude is 3.2, which tamarin-prover 1.12.0 REJECTS) + tamarin-prover prebuilt; both stages. VERIFIED REAL.",
"ProVerif: official INRIA source tarball proverif2.05 (bblanche.gitlabpages.inria.fr/proverif/), built with bookworm ocaml/ocaml-findlib/ocamlbuild + liblablgtk2-ocaml-dev (./build hard-fails without it), tar --no-same-owner (tarball numeric uid/gid vs container userns). NO opam. Resolves #74. VERIFIED REAL (Horn-clause resolution executed).",
"Imandra: proprietary binary; needs signed registration. INTENTIONAL honest fail-loud stub + documented IMANDRA_TOKEN-secret real-install path; real Rust adapter + Idris2 ABI proofs retained. KEEP (decision 2026-05-18). NOT counted as verified.",
"SCIP: official scipopt/scip GitHub portable bundle (scipopt.org download 403s anonymous). VERIFIED REAL (MIP solve).",
"OR-Tools: official C++ .tar.gz; asset name carries the build number — ARG ORTOOLS_BUILD must track it (v9.12 -> 4544). VERIFIED REAL (libortools present).",
"HOL4: Poly/ML build (trindemossen-2; kananaskis-15 was a phantom tag). VERIFIED REAL.",
"ACL2: Common Lisp (SBCL); build-in-place (not relocatable). VERIFIED REAL.",
"Twelf: SML/NJ build; build-in-place (heap path baked). VERIFIED REAL.",
"Metamath: official metamath-exe v0.198 source, gcc m*.c — REQUIRES libc6-dev (bookworm-slim gcc lacks libc headers). VERIFIED REAL.",
]
[session-2026-04-24-pkg5-close]
summary = "Package 5 closed — corpus >100k + /gnn/rank trained-model path wired and verified (no cosine fallback)."
commits = [
"b777b53 fix(extract_mathlib4): unwrap double-Regex in premise match",
"fe3239b fix(extractors): UTF-8 byte indexing via ncodeunits + empty-captures guard (hol4)",
"5a708f5 feat(corpus): expand to 138k trainable examples (pkg5a)",
"cfcf532 feat(julia-server): wire /gnn/rank to the trained solver (include api/gnn_endpoint.jl + register_gnn_routes! in start_api_server)",
"8d66dba perf(dataloader): rejection-sample negatives instead of setdiff per proof",
"ab0823b test(julia): smoke test for /gnn/rank (tests/julia/gnn_rank_smoke.jl)",
]
pkg-5a-corpus = "joined trainable set grew 82,617 -> 138,071 examples (proof_states with ≥1 matched premise in premises_COMPLETE.jsonl). Breakdown: Lean 71,267; HOL4 29,299; HOLLight 25,908; Coq 11,353; Agda 206; Isabelle 38. Source of the bulk: new premises_hol_light.jsonl (328,825 records from extract_hol_light.jl) + new premises_hol4.jsonl (139,796 records from extract_hol4.jl post-empty-captures fix). proof_states_UNIFIED.jsonl regenerated at 703,029 proofs / 39 provers / 688,887 unique theorems via scripts/merge_corpus.jl; premises_COMPLETE.jsonl re-aligned at 4,789,221 records with 99.78% match rate via scripts/align_premises.jl."
pkg-5b-wiring = "Before this session the GNN endpoint file api/gnn_endpoint.jl was NOT included into EchidnaML and NOT registered with HTTP.serve — every POST /gnn/rank hit the main handler's 404 branch, so the Rust client's `reqwest` call degraded to 'GNN server not available' and `rank_premises` returned an empty result. cfcf532 adds `include(\"api/gnn_endpoint.jl\")` to EchidnaML.jl and wraps `handle_request` with `register_gnn_routes!` in `start_api_server`, and sets `GNN_MODEL[] = SERVER_STATE[].solver` directly after init so no disk path is hunted for the GNN model — the same NeuralSolver loaded for /predict serves /gnn/rank."
pkg-5b-dataloader-perf = "build_training_examples called `setdiff(all_premises_pool, used_names)` once per proof_state — on 138k/56k-unique that allocated ~8 GB of fresh Vector{String} before the first epoch, stalling cold training silently in GC for 10+ minutes. Replaced with rejection sampling (O(num_negatives × 8) per call, same distribution, zero per-proof pool materialisation)."
pkg-5b-training-status = "run_training.jl was invoked three times on 2026-04-24. Run-1 (unlimited, 10 epochs): stalled in dataloader GC → root-caused to the setdiff pattern above. Run-2 (50k cap, 3 epochs): completed with 0 training examples (first 50k of UNIFIED are all ACL2, no premise matches) — revealed that the `max_proof_states` cap is prover-biased and should shuffle. Run-3 (unlimited, 3 epochs): reached Zygote `withgradient` inside `train_solver!` with 13 GB RSS actively computing gradients on the 138k corpus; killed at 5:58 elapsed because 3 epochs × 138k examples × CPU-only throughput extrapolates to multi-hour wall clock beyond this session. Pipeline end-to-end verified; full convergence pending either a GPU box or a multi-hour CPU run."
pkg-5b-verification = "tests/julia/gnn_rank_smoke.jl committed. Against a live server (`julia --project=src/julia src/julia/run_server.jl models/neural/final_model 8090`): GET /gnn/health returns `gnn_model_loaded=true, num_gnn_layers=4`. POST /gnn/rank returns 500 with DimensionMismatch from inside rank_with_trained_model — this is positive evidence that the trained-model path is entered, because the cosine fallback (rank_with_cosine) is shape-agnostic and would have returned 200 with cosine scores instead. Server startup log contains 'GNN endpoint wired to trained solver at models/neural/final_model' and 'Registering GNN endpoints: POST /gnn/rank' and contains **zero** instances of 'No trained GNN model found', 'Failed to load GNN model', 'creating fresh model for inference', 'GNN server not available', 'rank_with_cosine', or 'Fallback: cosine similarity'."
pkg-5-open-followups = [
"Fresh training run to convergence (needs GPU or overnight CPU) — produces a models/neural/final_model whose internal dims match the current neural_solver.jl code and resolves the 128/256 DimensionMismatch exposed by the 2026-03-21 saved model.",
"Extractor coverage gap: mathlib4 extractor emits only ~44 premises after the UTF-8 fix (most files match its premise patterns rarely). Agda / AFP extractors similarly emit thin premise signal relative to their proof_state output. Not blocking 5b, but a premise-extraction rewrite for those three would likely double the trainable set again.",
"run_training.jl cap semantics: document that `ECHIDNA_MAX_PROOF_STATES=N` reads the first N proof_states from UNIFIED.jsonl — which is sorted by prover and happens to put ACL2 first (no premise matches). Either shuffle before cap, or filter to proof_ids that exist in premises_COMPLETE.jsonl before capping.",
]
[session-2026-04-24-pkg4-close]
summary = "Package 4 closed — vcl-ut ↔ echidna binding end-to-end. Shared types crate, async REST client, proof-exchange bridge, per-prover matrix CI."
commits = [
"c8c0acf feat(provers): wire 8 new backends + extracted crates/echidna-core/ (echidna — Package 4 shared-types layer mis-labelled as Package 3)",
"69745de feat(interface): vcltotal-interface re-exports echidna-core proof-surface types (vcl-ut)",
"345bf53 feat(echidna-client): async REST client (vcl-ut)",
"64b8ff6 feat(echidna-client): OpenTheory/Dedukti exchange endpoints + round-trip tests (vcl-ut)",
"2fbfbc6 feat(provers): provers.a2ml catalogue + gen-provers-a2ml.sh generator (echidna)",
"8d26b84 feat(ci): backend-matrix.yml — per-prover smoke matrix (vcl-ut)",
]
pkg-4-shared-types = "Rust workspace now has crates/echidna-core exporting Term, Goal, ProofState, Tactic, Theorem as the canonical shared-types layer. vcl-ut re-exports via vcltotal-interface. No duplication — one canonical source."
pkg-4-transport = "vcltotal-echidna-client ships as an async REST client keyed to echidna's REST surface (port 8000). Wiremock round-trip tests cover /api/verify, /api/prove, exchange endpoints (/api/exchange/opentheory, /api/exchange/dedukti). 5 round-trip tests green."
pkg-4-matrix-ci = "backend-matrix.yml runs 113 jobs (one per ProverKind variant) with max-parallel=3. Prep job parses echidna's .machine_readable/provers.a2ml at runtime to emit matrix JSON as an ephemeral GHA output — no committed JSON per the 'no JSON emit' estate rule. Today each job runs the same wiremock suite; when REST surface expands beyond its current 17-prover subset, jobs can diverge per slug without restructuring."
pkg-4-step-6-closed = "1b32576 feat(rest): /proofs/{id}/export + /exchange/import (OpenTheory + Dedukti). Landed 2026-04-24 after audit confirmed Session C's 'FfiProverBackend breakage' blocker was phantom — cargo check --lib clean on HEAD, every echidna::exchange::* import resolved."
pkg-4-open-followups = [
"Matrix CI realism: only 17 of 113 provers currently exposed via REST. Today's matrix runs a uniform wiremock suite per slug (work-convergent) — upgrade path is either (a) expand echidna REST handlers to cover all 113, or (b) specialise per-job wiremock per slug. Tracked as Package 4 step 7.",
"cargo check --all-targets reveals pre-existing type_info field gap in 4 test binaries (neural_property_tests, aspect_tests, e2e_prover_test, security_aspect_tests): echidna::core::{Hypothesis,Definition,Variable} gained a type_info field but test fixtures were not updated. Independent of Package 4. Needs a separate fix pass.",
]
# ─── Session 2026-04-25 evening: rest-crate fix + chunked panic-attack sweep ─
[session-2026-04-25-evening]
summary = "Two follow-ups closed at end of long session: echidna-rest pre-existing 37 errors fixed (unblocks /api/v1/consult), and the panic-attack full-repo run that had timed out at 180s replaced with a 14-chunk per-subdir sweep."
commits = [
"6c878a1 fix(rest): unblock /api/v1/consult — 37 pre-existing rest-crate errors",
"4dbe74f chore(reports): chunked panic-attack sweep — replaces 180s-timeout single-run",
"<pending> fix(uppaal): https for the UPPAAL flat-DTD URI",
]
rest-crate-fix = "models::ProverKind gains 13 variants (FStar, Dafny, Why3, TLAPS, Twelf, Nuprl, Minlog, Imandra, GLPK, SCIP, MiniZinc, Chuffed, ORTools) so the FFI ordinal table 17..29 round-trips through the REST schema. core_kind_to_rest / rest_kind_to_core wired both ways; drops the '_ => Vampire' mistargeting fallback for ord ≤ 29. FfiProverBackend now implements search_theorems (empty-vec stub), config / set_config (stores ProverConfig). apply_tactic returns CoreTacticResult::Success(state.clone()) (no Box). ProofState::new wrapping in Term::Var to match the new Term-typed core API. c_char ↔ u8 raw-pointer casts at the Zig FFI boundary. 637 lib tests still passing."
panic-attack-sweep = "14 per-subdir chunks (src/rust, src/interfaces, src/julia, src/abi, src/zig, src/zig_ffi, src/idris, src/ada, src/ui, src/affinescript, crates/echidna-{core,mcp,wire}, crates/typed_wasm). Combined wall time ~60s; previously single-run timed out at 180s. 44 findings — 41 are in existing memory-rule classes (file-level UnboundedAllocation in 26 prover wrappers, legitimate-FFI UnsafeCode/UnsafeFFI in interface ffi_wrappers + zig bridges, ProofDrift on .ipkg). 3 actionable: SupplyChain on echidna-mcp Cargo.toml (false-positive — workspace Cargo.lock is at root, panic-attack scans crate in isolation), PanicPath on z3.rs (false-positive — the 'expect calls' are parser-helper self.expect(...)? ; the one panic! is a #[test] assertion), InsecureProtocol on uppaal.rs (real, fixed: UPPAAL flat-DTD URI flipped http:// → https://; uu.se 301-redirects already, https returns 200). Reports retained at reports/panic-attack-chunks/*.json + SUMMARY.md."
panic-attack-followups = [
"echidnaabi.ipkg ProofDrift is a detector miss on a config file — worth a panic-attack memory entry to skip .ipkg for ProofDrift class.",