Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
326 commits
Select commit Hold shift + click to select a range
72990d7
feat(pv): `pv discharge gen-axioms | check` -- axiom subset pins, esc…
noahgift Sep 24, 2026
9f5fbcc
feat(pv discharge): the label ratchet per the amended spec (infra#992…
noahgift Sep 24, 2026
b75088a
fix(guard): an unreadable tracked guard is refused too; --dry-run fai…
noahgift Sep 24, 2026
d720624
chore(roadmap): register PMAT-4139 (EV-6a) for the quorum kind-gate
noahgift Sep 24, 2026
3913e2f
audit(PMAT-4076): quorum receipt — AGREED 3/3 PASS (claude-sonnet-5, …
noahgift Sep 24, 2026
c9314e0
PMAT-4076: ONT-7 follow-up — Σ names valid_under_gate as a reader of …
noahgift Sep 24, 2026
d54f979
test(pv discharge): lib tests for the command module -- CI mutates wi…
noahgift Sep 24, 2026
95dfb46
PMAT-4102: a run's target dir is deleted by its LAST job out, never t…
noahgift Sep 24, 2026
820e852
test(pv discharge): on-disk lib tests; generate() returns what it rea…
noahgift Sep 24, 2026
c2ba8e5
ci(data): wire pvl_discharge_check through ci/explicit-test-commands.…
noahgift Sep 24, 2026
4928b67
PLANT #4102: a deliberately failing guard-cargo step, to prove the al…
noahgift Sep 24, 2026
4841bf1
refactor(pv discharge): owner() via partition_point -- no equivalent …
noahgift Sep 24, 2026
0f01502
ci: fold pushes to release/** run guard-tree + guard-cargo, and only …
noahgift Sep 24, 2026
590bf08
chore(roadmap): file PMAT-4112 (kind:code; refs #4112) and regenerate…
noahgift Sep 24, 2026
75f243a
docs(audit): PMAT-4112 implementation receipt
noahgift Sep 24, 2026
a251634
Revert the #4102 PLANT: the always() release was proven on a failing …
noahgift Sep 24, 2026
47daf2a
PMAT-4102: register is FATAL — a job with no marker is invisible to a…
noahgift Sep 24, 2026
77dd522
PMAT-4102: the last release unlinks the lock too — inode-checked so a…
noahgift Sep 24, 2026
2b4eba7
audit(PMAT-4076): foldable receipts — 2 gemini + 1 haiku-4-5, AGREED …
noahgift Sep 24, 2026
d1dc6c3
PMAT-4102: a release on an already-gone tree unlinks the lock it just…
noahgift Sep 24, 2026
a639f44
fix(release): the milestone cut blocks on must-carry issues only, and…
noahgift Sep 24, 2026
9e96066
docs(audit): PMAT-4108 quorum 3/3 at b75088a2e (2 agy + 1 haiku)
noahgift Sep 24, 2026
54518f3
PMAT-4102: quorum receipt — round 4 PASS 3/3 (2 agy + haiku) at c9ac0…
noahgift Sep 24, 2026
c6aed99
Merge remote-tracking branch 'origin/main' into fix/4102-ci-run-targe…
noahgift Sep 24, 2026
a3c2169
PMAT-4102: receipt — cop rulings on the config stanzas and the quorum…
noahgift Sep 24, 2026
66c7794
docs(audit): PMAT-4108 ph round lane 1 voided by cop ruling — 2/3, no…
noahgift Sep 24, 2026
bbdfb65
evidence(PMAT-4112): quorum 3/3 PASS at 75f243a97 — 2 agy (measured) …
noahgift Sep 24, 2026
b536fd6
test(pv discharge): kill the lex/name_lit/judge_labels survivors; bla…
noahgift Sep 24, 2026
9a6bc00
docs(audit): PMAT-3459 part 2 receipt — the scope (issue body defect …
noahgift Sep 24, 2026
5c3e35b
evidence(quorum): PMAT-3459 part 2 — 3/3 PASS at 9a6bc003a (gemini-3.…
noahgift Sep 24, 2026
02567b5
PMAT-4166: PVL-001 EV-11 — pv lint ratchets: theorem-pairing + depend…
noahgift Sep 24, 2026
78f3c65
feat(contracts): ONE shared in-tree helper — skip by name out of tree…
noahgift Sep 24, 2026
3ff2773
test(contracts): a same-named crates/<dir> that is not this crate rea…
noahgift Sep 24, 2026
c10aad1
fix(deps): aprender-contracts is a versioned dev-dep of core/train/se…
noahgift Sep 24, 2026
64f80fe
chore(roadmap): GH-4175 fragment (kind:code)
noahgift Sep 24, 2026
1c28b4c
PMAT-4166: gate contract in Σ glyphs; drop a registry clause kind() a…
noahgift Sep 24, 2026
375e9f1
docs(audit): GH-4175 helper receipt — the one umbrella criterion this…
noahgift Sep 24, 2026
cfc55e4
evidence(quorum): GH-4175 helper — 3/3 PASS at 375e9f157 (gemini-3.1-…
noahgift Sep 24, 2026
9a56c6b
fix(guard): --dry-run fails on an empty plan; a short subset listing …
noahgift Sep 24, 2026
b91760c
docs(audit): PMAT-4108 round at the prior head recorded — superseded …
noahgift Sep 24, 2026
708d2ae
PMAT-4166: surface audit — pv lint rows cite the Lint variant (cli.rs…
noahgift Sep 24, 2026
58fb5a0
ci(workspace-test): shards wait on guard-tree, so a RED guard stops b…
noahgift Sep 24, 2026
78a57fc
fix(orchestrate): resolve_project_root's fallback test no longer read…
noahgift Sep 24, 2026
b038b6d
Merge remote-tracking branch 'origin/main' into PMAT-4080-pvl-2-ghost…
noahgift Sep 24, 2026
1bd5798
chore(roadmap): regenerate the aggregate so PMAT-4080 is in roadmap.y…
noahgift Sep 24, 2026
53d72fc
docs(roadmap): GH-4191 work entry
noahgift Sep 24, 2026
b4b8759
audit(G2.1): re-derive the 76 pv rows citing cli.rs — 54 were already…
noahgift Sep 24, 2026
42f84fb
GH-4197: kani_assume — per-file kani::assume counter over proc_macro2…
noahgift Sep 24, 2026
6b33499
GH-4197: ticket title inventories the diff (223 chars); acceptance cr…
noahgift Sep 24, 2026
6fa49b1
feat(pv discharge): check --leanchecker -- non-fresh kernel re-check;…
noahgift Sep 24, 2026
55b09c0
docs(PMAT-4166): EV-11 receipt — quorum sonnet-5 + gemini-3.1-pro-hig…
noahgift Sep 24, 2026
48cf987
chore(GH-4191): the roadmap entry carries kind: code (the kind-gate r…
noahgift Sep 24, 2026
4cb4dff
feat(pv): EV-6b records raw lake/leanchecker exits (None = never ran)…
noahgift Sep 24, 2026
2e4685d
PMAT-4080: quorum receipt round 3 — 3/3 PASS, degraded same-family (s…
noahgift Sep 24, 2026
4a351a3
roadmap: PMAT-4201 PVL-001 EV-7b comparator (in_progress, aprender-98)
noahgift Sep 24, 2026
83df38c
feat(pv discharge): EV-7b comparator — judge Challenge rows by sha256…
noahgift Sep 24, 2026
4a96570
GH-4197: quorum artifact — degraded same-family 3/3 PASS (sonnet-5, s…
noahgift Sep 24, 2026
71f5077
feat(pv): discharge check --comparator — a solution must prove EXACTL…
noahgift Sep 24, 2026
868d0fe
fix(contracts): lint tests read the shared /tmp as their project root…
noahgift Sep 24, 2026
38076d1
docs(audit): PMAT-4108 ph10 quorum: 3/3 PASS at b91760c5a (degraded: …
noahgift Sep 24, 2026
ce4dcba
fix(contracts): a_failing_armed_gate_rejects_at_exit_1 through the ne…
noahgift Sep 24, 2026
2be44b4
feat(pvl): EV-7a pv challenge gen/check — pin each contract-bound sta…
noahgift Sep 24, 2026
9615f7a
chore(GH-4191): regenerate roadmap.yaml from its fragments (make road…
noahgift Sep 24, 2026
b4ef7f3
docs(audit): PMAT-4207 quorum round 1 — the finding, and the mutant t…
noahgift Sep 24, 2026
ff44809
docs(pvl): EV-6b probe amended as A-7b.1 — the .d wiring, not a ci.ym…
noahgift Sep 24, 2026
0d53ca3
GH-4198: pv obligations [ROOT] --gate — PVL-001 EV-10, byte-identical…
noahgift Sep 24, 2026
8506831
fix(pv discharge): a comparator row with a solution but no axioms lis…
noahgift Sep 24, 2026
c3a8101
Merge remote-tracking branch 'origin/main' into fix/4108-guard-tree-z…
noahgift Sep 24, 2026
eb89fd9
docs(audit): PMAT-4207 quorum round 2 — 3/3 PASS (degraded: same-fami…
noahgift Sep 24, 2026
0c5ff2f
docs(audit): PMAT-3177 receipt — live red-guard demo: shards skipped,…
noahgift Sep 24, 2026
c1cec94
WIP ONT-5: ont-consistency gate, witness checker, pv-sat reasoner (Re…
noahgift Sep 24, 2026
ef131f1
docs(PMAT-4201): EV-7b receipt — degraded quorum 3/3 PASS on 85068313…
noahgift Sep 24, 2026
de2d9ff
GH-4198: obligations follows PyYAML and Python truthiness as the scri…
noahgift Sep 24, 2026
c9276c4
test(pvl): the challenge-fresh comment said skipped; on the real corp…
noahgift Sep 24, 2026
e4577f7
ONT-5: CLI integration test, the repo witness, gate-17 bookkeeping (R…
noahgift Sep 24, 2026
2fd04e3
feat(release): serve-parity gate verdict + release receipt check (#42…
noahgift Sep 24, 2026
54a27e0
PMAT-4198: a document serde_yaml refuses and PyYAML reads (duplicate …
noahgift Sep 24, 2026
8374886
fix(PMAT-4201): comparator prints the failed import, not its echo
noahgift Sep 24, 2026
ec0eaae
fix(gate): bind the control to its model and comparator, bind the dis…
noahgift Sep 24, 2026
054c84d
PMAT-4198: quorum artifact — degraded same-family 3/3 PASS (sonnet-5,…
noahgift Sep 24, 2026
0b52e67
test(discharge): a string ends at its closing quote past escaped quot…
noahgift Sep 24, 2026
763ce18
fix(gate): NaN and bool cannot pass a one-sided bound; refuse duplica…
noahgift Sep 24, 2026
0dc6de3
fix(gate): a receipt with two c=1 bands is RED, not judged on the first
noahgift Sep 24, 2026
0f13c6e
ONT-5: ont-consistency contract, make contracts runs pv-sat + re-chec…
noahgift Sep 24, 2026
988e626
fix(gate): a negative gap or rank is corrupt, not a near-tie; a malfo…
noahgift Sep 24, 2026
a9dcc5f
fix(gate): rank floor is 1, not 2 — a disagreement tied on the logit …
noahgift Sep 24, 2026
ea228fc
test(gate): bool gap row — the 'gap NaN-blind' mutant was not equivalent
noahgift Sep 24, 2026
80b7626
docs(audit): quorum receipt PMAT-4218 — 4 rounds, degraded same-famil…
noahgift Sep 24, 2026
32e0b9d
feat(PMAT-4201): MATCH = sha equal OR isDefEq at .instances — the sha…
noahgift Sep 24, 2026
88ae4d3
test(PMAT-4201): self-test pins the .instances transparency and fails…
noahgift Sep 24, 2026
edea5d3
Merge remote-tracking branch 'origin/PMAT-4201-pvl-7b-comparator' int…
noahgift Sep 24, 2026
1184ae1
Merge remote-tracking branch 'origin/feat/4200-pvl-7a-challenge' into…
noahgift Sep 24, 2026
f4f9745
feat(pv): EV-8a — `pv discharge run` writes discharge-summary.json; p…
noahgift Sep 24, 2026
21eebdc
fix(discharge): the lexer's scanners cannot hang under a mutation; ev…
noahgift Sep 24, 2026
76356a8
GH-4198: quorum artifact — round 4 degraded same-family 3/3 PASS at 5…
noahgift Sep 24, 2026
538e4ab
Merge remote-tracking branch 'origin/feat/4122-pvl-5a-mathlib-pin' in…
noahgift Sep 24, 2026
c043571
Merge remote-tracking branch 'origin/PMAT-4070-ont-4d-subsumption' in…
noahgift Sep 24, 2026
ec281f0
ONT-4e: requires/ensures as first-class clauses; the Liskov rule on r…
noahgift Sep 24, 2026
0dcf9d6
ONT-4e: regenerate contract artifacts (make contracts, pass 1)
noahgift Sep 24, 2026
9e18e88
ONT-4e: regenerate contract artifacts (make contracts, pass 2)
noahgift Sep 24, 2026
5992328
ONT-4e: split the Liskov certificate checker below the complexity cei…
noahgift Sep 24, 2026
899790b
evidence(pv): first real discharge-summary.json — RED: 7 allowlist en…
noahgift Sep 24, 2026
c8ca2b4
ONT-4e: commit the fresh extraction; make contracts now stops on a fa…
noahgift Sep 24, 2026
db9b393
ONT-4e: session receipt with R-23 dogfood block (aprender + rmedia)
noahgift Sep 24, 2026
5b63abb
fix(pv discharge): write the summary before building the log — a fail…
noahgift Sep 24, 2026
c1c4746
ci: re-run PR-body guards after adding ont-delta (no content change)
noahgift Sep 24, 2026
7c7d654
Merge branch 'main' into PMAT-4081-pvl-3-one-definition-l4-l5
noahgift Sep 24, 2026
0791144
fold #4204 (fix/4191-project-root-ceiling) into B3
noahgift Sep 24, 2026
5a21949
fold #4227 (PMAT-4207-lint-hermetic) into B3
noahgift Sep 24, 2026
2e6e949
fold #4121 (fix/4108-guard-tree-zero-checks) into B3
noahgift Sep 24, 2026
278eebf
fold #4150 (fix/4102-ci-run-target-release) into B3
noahgift Sep 24, 2026
5fec39b
fold #4163 (fix/4112-ci-guards-on-release-push) into B3
noahgift Sep 24, 2026
7e4d315
GH-4198: tree_reader registry names the two new obligation readers; s…
noahgift Sep 24, 2026
2b815d3
fold #4196 (fix/3177-workspace-test-waits-on-guards) into B3
noahgift Sep 24, 2026
1aebbc0
fold #4177 (fix/3459-must-carry-universe) into B3
noahgift Sep 24, 2026
b055046
fold #4183 (fix/4175-in-tree-helper) into B3
noahgift Sep 24, 2026
370cac2
fold #4216 (PMAT-4197-pvl-6c-kani-assume-baseline) into B3
noahgift Sep 24, 2026
9eb65be
fold #4243 (feat/4218-serve-parity-gate) into B3
noahgift Sep 24, 2026
b2baf45
fold #4092 (PMAT-4081-pvl-3-one-definition-l4-l5) into B3
noahgift Sep 24, 2026
981af6e
Merge branch 'PMAT-4080-pvl-2-ghost-binding-reject' into fold/b3-cont…
noahgift Sep 24, 2026
6862300
Merge branch 'PMAT-4071-ont-2c-owl-writer' into fold/b3-contracts-ont…
noahgift Sep 24, 2026
72338df
fold #4230 (PMAT-4198-pvl-10-obligations-gate) into B3
noahgift Sep 24, 2026
bdc0cfa
fold #4248 (PMAT-4074-ont5-pv-sat) into B3
noahgift Sep 24, 2026
55e87a0
Merge branch 'feat/4122-pvl-5a-mathlib-pin' into fold/b3-contracts-on…
noahgift Sep 24, 2026
58a9aec
fold #4137 (PMAT-4070-ont-4d-subsumption) into B3
noahgift Sep 24, 2026
bf86152
fold #4301 (PMAT-4075-ont4e) into B3
noahgift Sep 24, 2026
32f1b16
fold #4289 (feat/4139-pvl-6a-discharge) into B3
noahgift Sep 24, 2026
cf062a0
fold #4003 (PMAT-3997-debt-ratchet-plan) into B3
noahgift Sep 24, 2026
edbeeef
fold #4009 (PMAT-4002-epic-plan) into B3
noahgift Sep 24, 2026
b150020
fold #4011 (PMAT-3994-epic-plan) into B3
noahgift Sep 24, 2026
b7e4ecc
fold #4012 (PMAT-4000-epic-plan) into B3
noahgift Sep 24, 2026
a6b0a6e
fold #4013 (PMAT-3999-epic-plan) into B3
noahgift Sep 24, 2026
07d5f51
fold #4014 (PMAT-4001-epic-plan) into B3
noahgift Sep 24, 2026
96e3143
fold #4237 (PMAT-4201-pvl-7b-comparator) into B3
noahgift Sep 24, 2026
648f456
fold #4281 (PMAT-4202-pvl-8a-derived-summary) into B3
noahgift Sep 24, 2026
86f7a54
batch: regenerate the generated set once (batch_fold.sh --regen)
noahgift Sep 24, 2026
7b05a3d
batch: regenerate the pv-sat consistency witness for the folded Σ
noahgift Sep 24, 2026
fc1e010
batch: regenerate tree_reader_tests.txt
noahgift Sep 24, 2026
25b6abe
audit(G2.1): re-derive the pv rows citing cli.rs after the B3 fold — …
noahgift Sep 24, 2026
bb9ec2d
batch: rustfmt the union of the lint gate modules
noahgift Sep 24, 2026
214eca0
park #4243 (feat/4218-serve-parity-gate): revert its fold — red on it…
noahgift Sep 24, 2026
c39f361
batch: regenerate the generated set once (batch_fold.sh --regen)
noahgift Sep 24, 2026
46aa55d
batch: restamp the pv-sat witness after parking #4243
noahgift Sep 24, 2026
77340b6
WIP ONT-3a: resolver splices include!(), resolves Type::method, non-f…
noahgift Sep 24, 2026
8b8e29d
ONT-3a: `bindings` gate — every implemented/partial binding resolves …
noahgift Sep 24, 2026
0ad0de0
roadmap: PMAT-4072 (ONT-3a) — kind:code, in progress, acceptance crit…
noahgift Sep 24, 2026
3ddc66d
bindings gate: say why the allowlist is keyed by path (quorum minor)
noahgift Sep 24, 2026
5bc092b
fix(b3): drop the PMAT-4218 leftover row; model the release-push skip…
noahgift Sep 24, 2026
9ac3ec7
refactor(discharge): split statement() and judge_rows() under the com…
noahgift Sep 24, 2026
5dbd1d1
fix(pv discharge): comparator rows are cross-checked against the Chal…
noahgift Sep 24, 2026
69ed3ac
feat(pv): PVL-8b — L4 credit comes from discharge-summary.json, not t…
noahgift Sep 24, 2026
5f9f8d9
feat(pv): PVL-8b — formalization.yaml in the v0.4 shape, measured by …
noahgift Sep 24, 2026
c3153e5
fix(b3): crates/facades/Cargo.lock gains blake3 + proc-macro2 for apr…
noahgift Sep 24, 2026
dab9b56
fix(pvl): every lake call in pv discharge is bounded — a hang is RED,…
noahgift Sep 24, 2026
5f4c2f9
fix(pvl): gate Comparator.lean --self-test before any comparator row …
noahgift Sep 24, 2026
79da4b9
docs(0.73): every measured ratio in the parity plan cites its evidenc…
noahgift Sep 24, 2026
1edb2fd
fix(ci): B3's folded PVL test fragments shared ordinals 460/470/480 w…
noahgift Sep 24, 2026
6871ab1
ONT-9: the ontology has a contract on itself — ont-self-v1, ont_plant…
noahgift Sep 24, 2026
ef10d48
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 24, 2026
872cc38
refactor(pvl): split Lake::run so B3's complexity ratchet goes green …
noahgift Sep 24, 2026
b23fa8d
ONT-4f: GitHub repos, issues, pull requests and milestones are focus …
noahgift Sep 24, 2026
aca2d47
Merge fold/b3-contracts-ont-docs (872cc38e7) into ONT-4f-github-entities
noahgift Sep 24, 2026
3a80944
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 24, 2026
09380bf
fix(pvl): levels test reads the ladder docs from disk — include_str! …
noahgift Sep 24, 2026
0c72b19
Merge pull request #4321 from paiml/ONT-3a-bindings-gate
noahgift Sep 24, 2026
f5e35a0
Merge remote-tracking branch 'origin/feat/4199-pvl-6b-leanchecker' in…
noahgift Sep 24, 2026
7713817
Merge remote-tracking branch 'origin/PMAT-4082-pvl-8b-l4-from-summary…
noahgift Sep 24, 2026
2e4db6b
fold(B3): ONT-9-ontology-contract
noahgift Sep 24, 2026
8f212df
fold(B3): ONT-4f-github-entities
noahgift Sep 24, 2026
e355e98
fix(ont): two doc comments in extract/code.rs spelled a literal inclu…
noahgift Sep 24, 2026
b15ed07
refactor(ont): split three ONT-3a resolver functions under the comple…
noahgift Sep 24, 2026
5c46173
feat(ont): #3560 R1 — extract:example, every cargo example is an ont:…
noahgift Sep 24, 2026
c8c494f
merge fold/b3-contracts-ont-docs into #3560 R1
noahgift Sep 24, 2026
6da2eb9
batch: regenerate the generated set once (batch_fold.sh --regen)
noahgift Sep 24, 2026
5eff6d3
fold(B3): tree_reader_tests.txt re-derived (ONT-9, ONT-4f test target…
noahgift Sep 24, 2026
092ccdb
fold(B3): pv-sat witness re-derived for the merged corpus (ONT-9 + ON…
noahgift Sep 24, 2026
d30e8f0
merge origin/fold/b3-contracts-ont-docs (#3560 R1) into the ONT-9/ONT…
noahgift Sep 24, 2026
65e1023
batch: regenerate the generated set once (batch_fold.sh --regen)
noahgift Sep 24, 2026
43d7820
regen: OWL/tbox export and pv-sat witness after the #3560 R1 merge
noahgift Sep 24, 2026
75fe3e0
Merge remote-tracking branch 'origin/PMAT-4240-pvl-rows-vs-roots' int…
noahgift Sep 24, 2026
d989391
test(ont): shapes_n ratchet 22 -> 23 — #3560 R1's examples-well-forme…
noahgift Sep 24, 2026
04b4229
fix(pv discharge): the discharge fixtures declare the roots their row…
noahgift Sep 24, 2026
3b0b406
fix(pv test): pvl_comparator's stub lake answers the comparator --sel…
noahgift Sep 24, 2026
d7119df
Merge remote-tracking branch 'origin/prep/4084-pvl12' into fold/59-b3
noahgift Sep 24, 2026
93353c3
batch: regenerate the generated set once (batch_fold.sh --regen)
noahgift Sep 24, 2026
c8ab21a
test(ont6): not_armed lists ONT-3a's bindings gate (#4321) — was red …
noahgift Sep 24, 2026
5bcc3fa
feat(ont): #3560 R4 — example model currency: shrink-only stale pin +…
noahgift Sep 24, 2026
4a870da
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 24, 2026
2ef4540
fix(B3): split github.rs check/extract_files and witness_planted adve…
noahgift Sep 24, 2026
9456dc5
fix(B3): restamp the ONT ratchet — ONT-9's ont-self-v1 is the 9th anc…
noahgift Sep 24, 2026
1500661
evidence(pv): discharge-summary.json regenerated at the current lean …
noahgift Sep 24, 2026
19274be
fix(bindings): #4319 — 21 ghost bindings rebound to the item that imp…
noahgift Sep 24, 2026
701442b
fold: #4083 discharge summary fresh (fix/4083-discharge-summary-fresh…
noahgift Sep 24, 2026
637229b
fix(test): kani_assume baseline key check is order-independent — the …
noahgift Sep 24, 2026
73a46e0
fix(contract): declare pv discharge/challenge/ontology/obligations — …
noahgift Sep 25, 2026
12efd8d
fix(ONT-9): the spec probe read "not tracked" in CI — git refused a c…
noahgift Sep 25, 2026
575cbc8
feat(ont): ONT-3b — a Lean module earns L4 only through a resolving m…
noahgift Sep 24, 2026
fdb9963
fold: ONT-3b #4073 ported to B3 Discharged API (GH-4082-ev8b-ont3b-b3…
noahgift Sep 25, 2026
adca1e5
regen: tree_reader_tests registry gains aprender-contracts proof_stat…
noahgift Sep 25, 2026
3c0a116
test(ont): ONT-3b — pin the refine() call site in proof-status ground…
noahgift Sep 25, 2026
2cc8d6e
fix(#3560 R1): an honest zero is not vacuity — ont4b2's code-bound fi…
noahgift Sep 25, 2026
7af7cc1
fold: GH-4073-refine-callsite-test @3c0a1163c
noahgift Sep 25, 2026
d480704
fix(pvl): EV-6c -- import all 59 orphaned Lean modules; pv discharge …
noahgift Sep 25, 2026
c2cc20e
chore(pr-review): #4317 receipt at 7af7cc17b — DEGRADED (mutation unr…
noahgift Sep 25, 2026
4d4c1e6
chore(pr-review): sign this PR's receipt (PR-REVIEW-SKILL-002 v2 §4.3…
claude Sep 25, 2026
da5a29c
chore(pr-review): retrigger present on the signed #4317 receipt (sign…
noahgift Sep 25, 2026
d39f321
fix(pvl): prove the NF4 codebook facts and the f16 bound; 4 escape ax…
noahgift Sep 25, 2026
43654ec
feat(pvl): prove the three DPO axioms — sigmoid_bounded, loss→0, grad…
noahgift Sep 25, 2026
fb66e81
test(pvl): EV-6c -- an orphaned bound root is RED by name, not the ze…
noahgift Sep 25, 2026
a8dcda9
test(pvl): the real-tree probe pins PENDING (3) -- #4347 discharged N…
noahgift Sep 25, 2026
d205f98
Merge branch 'fix/4244-lean-orphan-modules' into fix/4347-prove-nf4-f16
noahgift Sep 25, 2026
c2efb7f
fix(pvl): leanchecker capped by default -- <=8 threads in a 24G/800% …
noahgift Sep 25, 2026
30ec9f3
ONT-10: release-readiness check for aprender-contracts-cli — records …
noahgift Sep 25, 2026
757659a
Merge remote-tracking branch 'origin/fix/4347-prove-nf4-f16' into GH-…
noahgift Sep 25, 2026
1498cf9
fix(guard): check_leanchecker_scoped judged its own case table once t…
noahgift Sep 25, 2026
67bb6f9
Merge fix/4347-prove-nf4-f16 (guard self-exclusion, #4348) into GH-43…
noahgift Sep 25, 2026
cb11afb
PMAT-4077: ONT-8 evidence — one block, PROV-O names, one L-enum, ever…
noahgift Sep 24, 2026
ec1c784
audit(PMAT-4077): ONT-8 implementation receipt — probe, verification,…
noahgift Sep 24, 2026
eff7153
merge origin/main (v0.69.3 merge-back #4338) into B3 — 7 conflicts re…
noahgift Sep 25, 2026
b3478af
ONT-8 on B3: regenerate census/nt/witness/README after the evidence g…
noahgift Sep 24, 2026
c2f55c4
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 25, 2026
fe0acaf
ONT-8 on B3: regenerate after the v0.69.3 merge-back reached B3
noahgift Sep 25, 2026
0a79b45
fix(pvl): the leanchecker caps are ceilings -- threads/MemoryMax/CPUQ…
noahgift Sep 25, 2026
9018366
Merge fix/4347-prove-nf4-f16 (leanchecker caps are ceilings, #4348) i…
noahgift Sep 25, 2026
8906bc6
evidence(pr-review): #4317 delta quorum receipt at eff71538d — merge-…
noahgift Sep 25, 2026
6b0bd36
chore(pr-review): sign this PR's receipt (PR-REVIEW-SKILL-002 v2 §4.3…
claude Sep 25, 2026
9a8694b
fix(b3): five silent truncations the merged-back guard now refuses (#…
noahgift Sep 25, 2026
41488ee
fold(B3): #4347 NF4+f16+DPO proofs, #4348 leanchecker caps, #4244 orp…
noahgift Sep 25, 2026
e4b1a46
feat(pvl): con-leche independent re-check of ProvableContracts, with …
noahgift Sep 25, 2026
c0ffd92
ci(pvl): conleche-nightly -- advisory daily con-leche re-check of the…
noahgift Sep 25, 2026
eb4f0ff
fix(pvl): conleche.sh -- negative control must fail for the planted r…
noahgift Sep 25, 2026
68ede7a
evidence(pr-review): #4317 quorum receipt for the ONT-8 range at fe0a…
noahgift Sep 25, 2026
fd06d80
fix(pvl): conleche.sh -- ACCEPT needs more decls than the core librar…
noahgift Sep 25, 2026
9ef6d39
merge feat/3142-conleche-recheck into B3 — PVL-F7 advisory con-leche …
noahgift Sep 25, 2026
6898608
docs(ONT-2c): re-quorum at 9fad260dc — 3/3 PASS (agy gemini x3); inde…
noahgift Sep 24, 2026
2930a59
docs(ONT-2c): record the cop's ruling on the re-quorum and its ref at…
noahgift Sep 24, 2026
5f0ae10
REX-00: PROMETHEUS pre-registration lock (rex-prereg-v1) — Refs #4355
noahgift Sep 25, 2026
e89dd67
evidence(pr-review): #4317 delta receipt at 41488ee33 — pmat consulte…
noahgift Sep 25, 2026
8043764
REX-01: executor issues filed (infra#1088, paiml-implement#411) — Ref…
noahgift Sep 25, 2026
2325318
fix(ci): B3 fold left three shared ordinals in explicit-test-commands.d
noahgift Sep 25, 2026
8185ad1
REX-02: review corpus v1 (150 items, sealed test manifest) + contamin…
noahgift Sep 25, 2026
0ab6ce7
REX-03: review harness + scorer + review-experiment-receipt-v1 (FALSI…
noahgift Sep 25, 2026
f49dda2
chore(pr-review): sign this PR's receipt (PR-REVIEW-SKILL-002 v2 §4.3…
claude Sep 25, 2026
72079dd
feat(ladder): the cells[] producer — nothing wrote the rows the judge…
noahgift Sep 25, 2026
6ef3995
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 25, 2026
6143c49
ci(pr-review): re-trigger after the CI signer's f49dda268
noahgift Sep 25, 2026
7114a51
Merge remote-tracking branch 'origin/fold/b3-contracts-ont-docs' into…
noahgift Sep 25, 2026
066d43a
REX-04: per-cell admission (rex-cell-admission-v1, FALSIFY-RCA-001..0…
noahgift Sep 25, 2026
7afa087
fold: merge rex/001 (PROMETHEUS REX-00..04, epic #4354) into B3 — cop…
noahgift Sep 25, 2026
8888574
fold: regenerate the ont-consistency witness for the folded rex contr…
noahgift Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
106 changes: 100 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ name: CI

on:
push:
branches: [main, master]
# #4112 (operator-approved option B, 2026-09-24): batching folds each author branch into a
# release/** branch by a direct PUSH, and no PR is opened, so guard-tree and guard-cargo first
# ran on the release->main integration PR: drift was caught at release time, not at the fold
# that caused it. A push to release/** now runs THOSE TWO jobs and nothing else. Every other job
# carries `if: !(push && refs/heads/release/*)`, and the rest were already pull_request-only.
# A push runs the ci.yml in the pushed tree, so this covers release branches cut after it lands.
branches: [main, master, 'release/**']
# #3676: sovereign-ci's `coverage_on: tag` (below) runs coverage only on a push of a
# v* tag, and its gate REQUIRES it to succeed there. A push filtered to branches never
# fires for a tag, so this is the reusable's second required edit.
Expand Down Expand Up @@ -67,6 +73,8 @@ jobs:
# 23916c00d adds an OPTIONAL `runs_on` input whose default is the label set
# this repo already gets, and 70e51ec04 swaps the digest on every job. No
# input this repo passes changes meaning.
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
uses: paiml/.github/.github/workflows/sovereign-ci.yml@f713290c86fcd70d6f26a0faab14e67e6713586f
with:
repo: ${{ github.event.repository.name }}
Expand Down Expand Up @@ -159,8 +167,22 @@ jobs:
# The check-run every consumer reads -- branch protection, `gate`, the BSE-17
# reuse lookup by check_name -- is the fan-in job `workspace-test` below, which
# fails unless every shard passed.
#
# #3177: the shards WAIT ON guard-tree. A merge group whose guard-tree was
# already red kept all three shards running to the end, and `gate` could only
# report the red after them: 2.8 h of clean-room time over the last 20 red
# merge groups (aprender-dd, 2026-09-24). With `needs: [guard-tree]` and no
# `if:`, a failed or cancelled guard-tree SKIPS every shard before it takes a
# runner, and the fan-in `workspace-test` below still reports -- red, naming
# guard-tree -- so the required check is never missing from a merge group.
# Green-path cost, measured on the last 10 successful runs per event (job
# start->end, queue excluded): merge_group +73 s median (+196 mean, +1048
# worst), push to main +432 s median, because the shards now start after
# guard-tree instead of beside it. Case table:
# scripts/check_workspace_test_waits_on_guard_tree.sh.
workspace-test-shard:
name: workspace-test-shard (${{ matrix.shard }}/${{ matrix.shards }})
needs: [guard-tree]
strategy:
fail-fast: false
matrix:
Expand All @@ -173,6 +195,8 @@ jobs:
# The four aarch64-only reds that pin found are fixed in the same PR (an x86
# example, a shared-B GEMM defect, a wall-clock ratio moved to bench-gates, a
# lane-count tolerance). pr-review-receipt keeps X64 until #3132.
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
runs-on: [self-hosted, Linux, clean-room]
# 100, not 85. The step below sets `timeout-minutes: 75`, but "Set up runner"
# (image pull) has measured at 20 minutes, so 20 + 75 = 95 > 85 and the JOB
Expand Down Expand Up @@ -276,6 +300,9 @@ jobs:
# row 2a requires a genuinely orphaned dir to still be reclaimed. A
# blanket skip passes row 1 and fails row 2.
run: bash scripts/ci_reclaim_target_dirs.sh --self-test
- name: Target-dir release must still turn RED (case table, #4102)
# Includes the must-RED race: two jobs finishing together delete exactly once, never zero, never twice.
run: bash scripts/ci_run_target_release.sh --self-test
- name: Reclaim orphaned per-RUN target dirs (never a live sibling)
# WHAT THIS REPLACED, and why (#2825).
#
Expand Down Expand Up @@ -391,6 +418,15 @@ jobs:
heal_path /mnt/nvme-raid0/targets/aprender-ci "${parent}/run-${GITHUB_RUN_ID}"
heal_path /mnt/nvme-raid0/cargo-ci/registry "$reg"
ls -ld "$parent" "${parent}/run-${GITHUB_RUN_ID}" "$reg"
- name: Register this job on the run's target dir (last-one-out, #4102)
# A marker under <run dir>/.live/, taken under a flock on the host-local sibling <run dir>.lock. The
# always() step at the end of this job releases it, and deletes the tree only if no other job's marker
# remains. FATAL on purpose: a job with no marker is invisible to a sibling's release, which would then
# delete this job's tree while it builds. A job that cannot register must not build on a shared tree.
run: |
bash scripts/ci_run_target_release.sh register \
"/mnt/nvme-raid0/targets/aprender-ci/${PR_OR_REF}/run-${GITHUB_RUN_ID}" \
"${GITHUB_JOB}-s${SHARD}-a${GITHUB_RUN_ATTEMPT}"
- name: Pre-build chown — fix per-RUN root ownership
# Root cause (five-whys):
# 1. Why do fresh runs sometimes fail with "failed to create
Expand Down Expand Up @@ -898,27 +934,48 @@ jobs:
-v "/mnt/nvme-raid0/targets/aprender-ci/${PR_OR_REF}/run-${GITHUB_RUN_ID}:/workspace/target" \
"$IMAGE" \
bash -c 'chown -R 1000:1000 /workspace || true; chown -R 1000:1000 /usr/local/cargo/registry || true; chown -R 1000:1000 /workspace/target || true'
- name: Release this run's target dir — the last job out deletes it (#4102)
# #4102: one #4046 shard left 64G here on gx10. Pass, fail or cancel, this job drops its marker; the tree is
# deleted only when no other job of this run still holds one (scripts/ci_run_target_release.sh). A job
# killed before this step keeps the tree, and the next run's start-of-job reclaim is the backstop. The
# delete runs in the build image because the tree holds root-owned files. A cleanup never fails the build.
if: always()
run: |
set -uo pipefail
dir="/mnt/nvme-raid0/targets/aprender-ci/${PR_OR_REF}/run-${GITHUB_RUN_ID}"
before=$(du -sh "$dir" 2> /dev/null | cut -f1)
bash scripts/ci_run_target_release.sh release "$dir" "${GITHUB_JOB}-s${SHARD}-a${GITHUB_RUN_ATTEMPT}" -- \
bash -c 'docker run --rm -v "$(dirname "$0"):/p" "$IMAGE" rm -rf -- "/p/$(basename "$0")"'
rc=$?
echo "target dir ${dir}: before ${before:-absent}, after $(du -sh "$dir" 2> /dev/null | cut -f1 || true)"
[ "$rc" -eq 0 ] || echo "::warning::target-dir release exited ${rc}; the start-of-job reclaim is the backstop"
exit 0

# PACK-001: the check-run named `workspace-test`. Branch protection requires
# this context, `gate` needs it, and the BSE-17 reuse lookup reads it by
# check_name on the PR head -- so the name stays on ONE job that fans the
# shards in. `if: always()` so a failed shard still produces a red check here
# instead of a skipped one (a skipped required check blocks nothing and says
# nothing). Every non-success matrix result is named.
# nothing). Every non-success matrix result is named. #3177: it also needs
# guard-tree, only to NAME it -- the shards wait on guard-tree, so when they
# were skipped the red here says which guard verdict skipped them.
workspace-test:
needs: [workspace-test-shard]
if: always()
needs: [guard-tree, workspace-test-shard]
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ always() && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
runs-on: [self-hosted, Linux, clean-room]
timeout-minutes: 10
steps:
- name: Every shard passed
env:
SHARD_RESULT: ${{ needs.workspace-test-shard.result }}
GUARD_RESULT: ${{ needs.guard-tree.result }}
run: |
set -euo pipefail
printf 'workspace-test-shard matrix result: %s\n' "$SHARD_RESULT"
printf 'workspace-test-shard matrix result: %s (guard-tree: %s)\n' "$SHARD_RESULT" "$GUARD_RESULT"
case "$SHARD_RESULT" in
success) echo "workspace-test: all shards green" ;;
skipped) echo "::error::workspace-test: shards skipped because guard-tree was '$GUARD_RESULT' (#3177: the shards wait on guard-tree; fix the guard first)"; exit 1 ;;
*) echo "::error::workspace-test: shard matrix result is '$SHARD_RESULT' (a cancelled or skipped shard is not a pass)"; exit 1 ;;
esac

Expand All @@ -932,6 +989,8 @@ jobs:
# the runner's own persistent target dir is used and nothing is bind-mounted.
# Not in `gate`'s needs yet: first-green proof on a real PR before it may block.
mac-check:
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
runs-on: [self-hosted, macOS, ARM64, apple-silicon, m4, mini]
timeout-minutes: 60
env:
Expand Down Expand Up @@ -1048,6 +1107,13 @@ jobs:
# its FIRST PARENT (scripts/lib/resolve_base.sh: HEAD vs HEAD would pass vacuously, the
# G-10 quorum's finding), and a depth-1 checkout has not fetched that parent. Deepen by one.
if [ "${GITHUB_EVENT_NAME:-}" = push ]; then git fetch --no-tags --deepen=1 origin +refs/heads/main:refs/remotes/origin/main; fi
# #4112: a fold push to release/** is NOT on origin/main, and a depth-1 checkout cannot name the
# merge-base, so scripts/lib/resolve_base.sh refuses a single-parent fold outright. The full
# history is ~11 s / 159 MB (measured 2026-09-24), so fetch it and let the ratchets judge the
# fold against merge-base(origin/main, HEAD), as the integration PR would.
case "${GITHUB_EVENT_NAME:-}:${GITHUB_REF:-}" in
push:refs/heads/release/*) git fetch --no-tags --unshallow origin +refs/heads/main:refs/remotes/origin/main ;;
esac
# aprender#2822. Case table FIRST, per the convention above: the probe
# below is only worth its 0.15s if the classifier it feeds can still turn
# RED. Seven rows over a throwaway tree - no cargo, no network, no host.
Expand Down Expand Up @@ -1585,6 +1651,13 @@ jobs:
# its FIRST PARENT (scripts/lib/resolve_base.sh: HEAD vs HEAD would pass vacuously, the
# G-10 quorum's finding), and a depth-1 checkout has not fetched that parent. Deepen by one.
if [ "${GITHUB_EVENT_NAME:-}" = push ]; then git fetch --no-tags --deepen=1 origin +refs/heads/main:refs/remotes/origin/main; fi
# #4112: a fold push to release/** is NOT on origin/main, and a depth-1 checkout cannot name the
# merge-base, so scripts/lib/resolve_base.sh refuses a single-parent fold outright. The full
# history is ~11 s / 159 MB (measured 2026-09-24), so fetch it and let the ratchets judge the
# fold against merge-base(origin/main, HEAD), as the integration PR would.
case "${GITHUB_EVENT_NAME:-}:${GITHUB_REF:-}" in
push:refs/heads/release/*) git fetch --no-tags --unshallow origin +refs/heads/main:refs/remotes/origin/main ;;
esac
# DOCKER CREATES A MISSING BIND SOURCE AS root:root, AND `--user` ALONE
# THEN EACCESs ON IT. The per-RUN target path is fresh every run, so a
# container that mounts it and drops to the runner's uid cannot write
Expand Down Expand Up @@ -1622,6 +1695,9 @@ jobs:
}
heal_path /mnt/nvme-raid0/targets/aprender-ci "$GUARD_TARGET_DIR"
heal_path /mnt/nvme-raid0/cargo-ci/home "$GUARD_CARGO_HOME/registry"
# #4102: last-one-out marker; the always() step at the end of this job releases it. FATAL on purpose:
# without a marker a sibling's release could delete this job's live tree.
bash scripts/ci_run_target_release.sh register "$GUARD_TARGET_DIR" "${GITHUB_JOB}-a${GITHUB_RUN_ATTEMPT}"
printf 'target dir: %s\n' "$GUARD_TARGET_DIR"
printf 'cargo home: %s (registry/ .package-cache .package-cache-mutate travel together)\n' "$GUARD_CARGO_HOME"
# Poka-yoke: a beat that no workflow executes reads as enforcement, is
Expand Down Expand Up @@ -2407,6 +2483,17 @@ jobs:
-e CARGO_NET_OFFLINE=1 \
"$IMAGE" \
bash scripts/check_nextest_config_keys.sh --self-test
- name: Release this run's guard target dir — the last job out deletes it (#4102)
if: always()
run: |
set -uo pipefail
before=$(du -sh "$GUARD_TARGET_DIR" 2> /dev/null | cut -f1)
bash scripts/ci_run_target_release.sh release "$GUARD_TARGET_DIR" "${GITHUB_JOB}-a${GITHUB_RUN_ATTEMPT}" -- \
bash -c 'docker run --rm -v "$(dirname "$0"):/p" "$IMAGE" rm -rf -- "/p/$(basename "$0")"'
rc=$?
echo "guard target dir ${GUARD_TARGET_DIR}: before ${before:-absent}, after $(du -sh "$GUARD_TARGET_DIR" 2> /dev/null | cut -f1 || true)"
[ "$rc" -eq 0 ] || echo "::warning::target-dir release exited ${rc}; the start-of-job reclaim is the backstop"
exit 0

# Top-level gate: satisfies org ruleset "Green Main" which requires check named "gate".
# The reusable workflow produces "ci / gate" but rulesets need exact match on "gate".
Expand Down Expand Up @@ -2440,6 +2527,8 @@ jobs:
# Both are non-zero: an unmeasured gate is not a passing gate. The distinct
# code is so a broken box is never read as a broken tree.
vendored-schemas:
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
runs-on: [self-hosted, Linux, clean-room] # arch-neutral: intel, yoga or gx10 (#3100)
timeout-minutes: 15
steps:
Expand Down Expand Up @@ -3074,6 +3163,8 @@ jobs:
fail-fast: false # if one arch fails we still want the other's receipt to compare against
matrix:
arch: [X64, ARM64]
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
runs-on: [self-hosted, Linux, clean-room, "${{ matrix.arch }}"]
# 45: NO history — this job is new, so the BSE-05 formula has nothing to fit. basis=[U].
# The cold build pulls resvg + skrifa, which no other job in this workflow builds; 45 is the
Expand Down Expand Up @@ -3152,6 +3243,8 @@ jobs:
# from one side would be asserting the thing under test.
determinism-compare:
name: determinism (compare)
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
needs: [determinism]
runs-on: [self-hosted, Linux, clean-room]
timeout-minutes: 15 # downloads two small files and runs jq. basis=[U], floor of BSE-05.
Expand Down Expand Up @@ -3216,7 +3309,8 @@ jobs:
# slow runner is never the thing that fails a required check.
timeout-minutes: 22
needs: [ci, workspace-test, mutants, guard-tree, guard-cargo, determinism-compare]
if: always()
# #4112: a fold push to release/** runs only guard-tree and guard-cargo.
if: ${{ always() && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/')) }}
steps:
- name: Check required jobs
run: |
Expand Down
79 changes: 79 additions & 0 deletions .github/workflows/conleche-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# conleche-nightly.yml -- PVL-F7 (#3142): an independent kernel re-checks the Lean tree once a day. ADVISORY.
#
# Every other verdict on crates/aprender-contracts-staging/lean comes from Lean's own C++ kernel (lake build,
# leanchecker via `pv discharge check`). con-leche is a second checker that shares no code with it or with pv,
# and it rejects every axiom beyond propext / Classical.choice / Quot.sound -- so it also re-proves that the
# escape allowlist is empty (#4347). The whole procedure, its pins and its controls live in conleche.sh; this
# file only provisions elan and runs it.
#
# ADVISORY. Nothing requires this job; a red run blocks no PR and no release. It is a finding to file, not a
# gate: exit 1 = RED (a rejected declaration or an escape axiom), exit 2 = NOT A VERDICT (unsupported feature,
# OOM, unpinned toolchain, or a control that failed). Both turn the run red, with an annotation naming which --
# "not a verdict" is never shown green.
#
# Measured on lambda 2026-09-25 at 9018366cf (warm pins): controls ok, 402163 declarations accepted, 7:11 wall,
# 5.7 GB max RSS. Cold adds the con-leche build (395 s) and two toolchain downloads.
#
# RUNNER. [self-hosted, Linux, X64, clean-room] -- the sovereign-ci pool, never a hosted runner (operator rule,
# 2026-09-10). elan is not part of the pool image, so the job installs a PINNED, sha256-checked elan into its
# own directory and touches nothing else on the host. Toolchains, pins and the Mathlib cache persist there
# between runs; the concurrency group keeps two runs from sharing them at once.
name: conleche-nightly

on:
schedule:
# 21:23 UTC -> lands ~02:23 UTC. GitHub dispatches schedules ~5h late on this account (#3292); the slot is
# free and clear of guards-nightly (21:47) and cuda-nightly (20:30).
- cron: '23 21 * * *'
workflow_dispatch:

concurrency:
group: conleche-nightly
cancel-in-progress: false

permissions:
contents: read

jobs:
conleche:
runs-on: [self-hosted, Linux, X64, clean-room]
# 90: BSE-05 T = max(15, ceil(1.5*p99), p99+20) with p99 taken as a cold ~45 min (no history yet: con-leche
# build 6.6 min, toolchains + Mathlib cache, a from-scratch ProvableContracts build, export 4 min, check
# 2.6 min) -> T = max(15, 68, 65) = 68, rounded up for a shared host. The first three runs replace this basis.
timeout-minutes: 90
env:
CI_CACHE: /mnt/nvme-raid0/ci-cache/pvl-conleche
ELAN_VERSION: v4.2.4
ELAN_SHA256: 42b94d4244e8353142c456ec0e4ca6528fd898a6c604d4059f494e706e431f63
LEAN_NUM_THREADS: '8'
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 1
- name: Verdict case table (the classifier this job trusts)
run: bash crates/aprender-contracts-staging/lean/conleche.sh --self-test
- name: Pinned elan in the job's own directory (sha256-checked, never a host install)
run: |
set -euo pipefail
export ELAN_HOME="$CI_CACHE/elan"
mkdir -p "$CI_CACHE"
if [ ! -x "$ELAN_HOME/bin/elan" ] || ! "$ELAN_HOME/bin/elan" --version | grep -q "${ELAN_VERSION#v}"; then
tgz="$RUNNER_TEMP/elan.tgz"
curl -fsSL -o "$tgz" "https://github.com/leanprover/elan/releases/download/$ELAN_VERSION/elan-x86_64-unknown-linux-gnu.tar.gz"
echo "$ELAN_SHA256 $tgz" | sha256sum -c -
tar xzf "$tgz" -C "$RUNNER_TEMP"
"$RUNNER_TEMP/elan-init" -y --no-modify-path --default-toolchain none
fi
echo "ELAN_HOME=$ELAN_HOME" >> "$GITHUB_ENV"
echo "$ELAN_HOME/bin" >> "$GITHUB_PATH"
- name: con-leche re-check (advisory)
run: |
set -uo pipefail
rc=0
PVL_CONLECHE_CACHE="$CI_CACHE/pins" bash crates/aprender-contracts-staging/lean/conleche.sh || rc=$?
case "$rc" in
0) ;;
1) echo "::error title=con-leche RED::a declaration was rejected or an escape axiom is present -- file it against #3142" ;;
*) echo "::warning title=con-leche NOT A VERDICT::exit $rc -- the tree was not checked (see the log above); not a pass" ;;
esac
exit "$rc"
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,7 @@ docs/roadmaps/*.lock
# The VERDICT artifact (quorum-*.json) is committed; its .lanes/ working
# directory is transient and a lane review correctly refused a PR carrying it.
docs/audits/quorum-*.json.lanes/

# PVL-001 EV-8a (#4202): `pv discharge run`'s full log. The tracked summary is its sibling
# crates/aprender-contracts-staging/discharge-summary.json, outside the tree it hashes.
crates/aprender-contracts-staging/lean/discharge.json
Loading
Loading