Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
cb7e50e
Generate fail-closed Comparator workspaces
williamjblair Aug 17, 2026
fc7583b
docs: align comparator adapter with LeanEval 4.33 architecture
williamjblair Aug 19, 2026
b06bdbb
test: add Lean 4.33 Comparator integration pilot
williamjblair Aug 19, 2026
9044c9a
ci: pin Lean 4.33 exporter commit
williamjblair Aug 19, 2026
3311503
docs: record exact Comparator verifier pins
williamjblair Aug 19, 2026
92e97ea
docs: list exact Lean 4.33 verifier pins
williamjblair Aug 19, 2026
10ea6d0
ci: pin Comparator to its final Lean 4.33 commit
williamjblair Aug 19, 2026
3a94f9b
docs: record final Lean 4.33 Comparator commit
williamjblair Aug 19, 2026
1c2a1a8
docs: identify the final Lean 4.33 Comparator revision
williamjblair Aug 19, 2026
7fbcac0
Generate Mathlib-only Challenges
williamjblair Aug 19, 2026
8eab377
Split the FC importer from the workspace generator
williamjblair Aug 19, 2026
be2f92f
Generate the Lean 4.33 evidence instead of vendoring it
williamjblair Aug 20, 2026
84386db
Record the formalization.yaml overlap in the manifest question
williamjblair Aug 20, 2026
fc450fa
Read the source citation from Formal Conjectures instead of copying it
williamjblair Aug 20, 2026
6406bea
Let the consumer supply its own pins instead of asserting them here
williamjblair Aug 20, 2026
824f86b
Drop the checkout credentials the Comparator job never uses
williamjblair Aug 20, 2026
a101a9c
Keep the generated-workspace job clean under the Actions scan
williamjblair Aug 20, 2026
acab94d
Decode guillemet module components without splitting their dots
williamjblair Aug 20, 2026
17dba44
Default workspace ids to the qualified name and resolve qualified req…
williamjblair Aug 20, 2026
85556c6
Read the category tag from the environment and map it to a lean-eval …
williamjblair Aug 20, 2026
906e30e
Consume the pinned lean-eval-generator through its v1 JSON contract
williamjblair Aug 20, 2026
2fc99fb
Add whole-set batch import with a per-declaration report and known-fa…
williamjblair Aug 20, 2026
67ee361
Rewrite the seam documentation around the pinned v1 contract
williamjblair Aug 20, 2026
7d894df
Flatten dotted declaration names for the generator's single-identifie…
williamjblair Aug 20, 2026
1c035d5
Fix the eleven whole-set source-extraction failures
williamjblair Aug 20, 2026
bc5a211
Run the whole-set audit in CI and gate it on the recorded failures
williamjblair Aug 20, 2026
8f8a0b1
Let the whole-set audit run on the pull request that configures it
williamjblair Aug 20, 2026
65796e6
Give the Comparator job the pinned generator and the qualified worksp…
williamjblair Aug 20, 2026
ab4c49d
Ignore whole-set audit output directories
williamjblair Aug 20, 2026
bd9b214
Let the frozen set decide the display group, with the category as a tag
williamjblair Aug 20, 2026
18bd529
Trim what the migration left behind
williamjblair Aug 20, 2026
b66328c
Keep generated context single-copy and complete across reconstruction
williamjblair Aug 20, 2026
e6c45e9
State the context-directory layout once
williamjblair Aug 20, 2026
615a0ad
Give the LeanEval adapter one home under comparator/
williamjblair Aug 20, 2026
54abfe5
Separate the adapter's code from its configuration
williamjblair Aug 20, 2026
cef0204
Make the provenance sidecar strict, deterministic and digested
williamjblair Aug 21, 2026
0bfb9f7
fix(comparator): preserve declaration binder boundaries
kim-em Aug 21, 2026
7c24bef
Record how each recorded failure retires
williamjblair Aug 21, 2026
7a101bf
Say each shared thing once
williamjblair Aug 21, 2026
66dcc61
Separate reading Formal Conjectures from assembling a workspace
williamjblair Aug 21, 2026
58c3851
Stop counting arrows inside binder-notation bodies as parameters
williamjblair Aug 22, 2026
2654e42
Name the generator contract by its schema version
williamjblair Aug 22, 2026
37fd9ab
Advance the generator pin to 77373a53 and retire the Erdos125 entry
williamjblair Aug 22, 2026
e51535a
Write import_problem as a pipeline of named stages
williamjblair Aug 22, 2026
50dd1f4
Merge remote-tracking branch 'origin/main' into comparator-workspaces
williamjblair Aug 24, 2026
29d04d6
Retire the toolchain-drift ledger on the 4.33.1 bump
williamjblair Aug 24, 2026
e99ba04
Merge remote-tracking branch 'origin/main' into comparator-workspaces
williamjblair Aug 24, 2026
3445ed6
Retire dead code the review found
williamjblair Aug 24, 2026
a12b0d2
One ledger loader and one build-failure predicate for both gates
williamjblair Aug 24, 2026
5f5af05
Read *References:* too, and say when a citation is missing
williamjblair Aug 24, 2026
a603147
Say each rule once, and scan the tree once
williamjblair Aug 24, 2026
d75f2f9
Stop triggering the comparator job on a file it refuses to import
williamjblair Aug 24, 2026
ee62fce
Read statements the way Lean does, not the way the corpus happens to be
williamjblair Aug 24, 2026
ca4839e
Pay the Mathlib import once per set
williamjblair Aug 24, 2026
1b4b05a
Qualify notation commands by their distinctive tokens
williamjblair Aug 24, 2026
c674e02
Hold the extractor payload to the wire format
williamjblair Aug 24, 2026
bd28228
Give the ledger loader its own module; split tests by module
williamjblair Aug 24, 2026
b68dc53
Hold every read file to the source pin; record what was copied and by…
williamjblair Aug 24, 2026
ee9ccf9
One request serialisation, piped and emitted and digested alike
williamjblair Aug 24, 2026
d7c23fd
Fail closed on everything the response could get wrong
williamjblair Aug 24, 2026
58e51ff
State the intake policy explicitly; check the recorded axiom policy
williamjblair Aug 24, 2026
9b7c8aa
JSON lines for the batch seam; a strict ledger; timeouts everywhere t…
williamjblair Aug 24, 2026
7bd576a
A lock entry nothing reads is confidence without control; delete five
williamjblair Aug 24, 2026
9466e40
Run the audit when what it measures changes; upload what produced the…
williamjblair Aug 24, 2026
20e3051
Say what the guarantees are now that they hold
williamjblair Aug 24, 2026
9d2cb79
Do not hold the environment to the source pin
williamjblair Aug 25, 2026
60bc734
Put the adapter's checks where the adapter changes
williamjblair Aug 25, 2026
2010a9f
Fail closed where the fallback was the reassuring answer
williamjblair Aug 25, 2026
9e189f4
Say each rule once, and bound everything that waits
williamjblair Aug 25, 2026
43a36f5
Let CI ask where the workspace went instead of respelling the rule
williamjblair Aug 25, 2026
e9392d0
Key every cache on the root it read
williamjblair Aug 25, 2026
aae0e3d
Split the audit along the line where its cost is
williamjblair Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/actions/build-lean-eval-generator/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Copyright 2026 The Formal Conjectures Authors.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# https://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Build the pinned lean-eval-generator
description: >-
Clone and build leanprover/lean-eval-generator at the revision
comparator/tools.toml pins under [generator], and export
LEAN_EVAL_GENERATOR_BIN. The package depends on nothing, so this is a
small Lean build, not a Mathlib one. Requires elan on PATH and a
checked-out Formal Conjectures tree.

runs:
using: composite
steps:
- name: Clone and build the pinned revision
shell: bash
run: |
read -r GEN_REPO GEN_REV <<< "$(python3 - <<'PY'
import tomllib

with open("comparator/tools.toml", "rb") as handle:
generator = tomllib.load(handle)["generator"]
print(generator["repository"], generator["rev"])
PY
)"
git clone "$GEN_REPO" "$RUNNER_TEMP/lean-eval-generator"
git -C "$RUNNER_TEMP/lean-eval-generator" checkout "$GEN_REV"
(cd "$RUNNER_TEMP/lean-eval-generator" && lake build)
echo "LEAN_EVAL_GENERATOR_BIN=$RUNNER_TEMP/lean-eval-generator/.lake/build/bin/lean-eval-generator" >> "$GITHUB_ENV"
31 changes: 31 additions & 0 deletions .github/actions/install-elan/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright 2026 The Formal Conjectures Authors.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# https://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Install elan
description: >-
Install elan and put it on PATH, with no default toolchain: every job here
builds in a checkout whose `lean-toolchain` decides the version. The elan
release is pinned in one place so two jobs cannot install two different
installers.

runs:
using: composite
steps:
- name: Install elan
shell: bash
run: |
set -o pipefail
curl -sSfL https://github.com/leanprover/elan/releases/download/v1.4.2/elan-x86_64-unknown-linux-gnu.tar.gz | tar xz
./elan-init -y --default-toolchain none
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
44 changes: 44 additions & 0 deletions .github/actions/prepare-extractor/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Copyright 2026 The Formal Conjectures Authors.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# https://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Prepare the comparator extractor
description: >-
Install elan at this repository's toolchain, restore the Mathlib cache,
build the comparator_facts extractor together with the source modules a
job needs elaborated, and run the extractor's self-test. The facts the
importer reads (ranges, binder boundaries, answer-slot types, category
tags) come from an elaborated environment, so every module a job imports
from has to be built first.

inputs:
modules:
description: Space-separated Lake targets to build beside the extractor.
required: false
default: ""

runs:
using: composite
steps:
- name: Install elan
uses: ./.github/actions/install-elan

- name: Build the extractor and the source modules
shell: bash
env:
MODULES: ${{ inputs.modules }}
run: |
lake exe cache get
# shellcheck disable=SC2086
lake build comparator_facts $MODULES
lake exe comparator_facts --self-test
10 changes: 4 additions & 6 deletions .github/workflows/build-and-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ jobs:
python-version: '3.12.9'

- name: Run script tests
run: python3 -m unittest discover -s scripts -p 'test_*.py' -v
run: |
python3 -m unittest discover -s scripts -p 'test_*.py' -v
python3 -m unittest discover -s comparator/adapter -p 'test_*.py' -v

build:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -111,11 +113,7 @@ jobs:

- name: Install elan
if: steps.mode.outputs.website_only != 'true'
run: |
set -o pipefail
curl -sSfL https://github.com/leanprover/elan/releases/download/v1.4.2/elan-x86_64-unknown-linux-gnu.tar.gz | tar xz
./elan-init -y --default-toolchain none
echo "$HOME/.elan/bin" >> $GITHUB_PATH
uses: ./.github/actions/install-elan

- name: Restore ~/.cache/mathlib
if: steps.mode.outputs.website_only != 'true'
Expand Down
Loading
Loading