Repository navigation
ci: verify UOR Atlas as the parts of one run (#131) - #152
Conversation
The examples leg was 178 minutes on main, 156 of them UOR Atlas, whose import chain through Census and CensusCert4 bounds any single-runner schedule at about 65 minutes. Atlas is now verified as the shards of a committed plan (.github/verify-shards.json, checked by `cargo xtask ci-shards` against the import graph of the committed build) and a join, each a job of its own clean checkout in ci.yml, every process run exactly once per run and nothing crossing runs; the examples leg verifies every other example. The verifier runs as one part through `Engine::verify_part` (verify::partition): a shard elaborates, replays, and audits the modules of its plan with the oleans of the shards it needs and writes its records; the join reads every shard's records, judges each as its stage does, and publishes through the same policy, attestation, and publication as the whole verification. VR-23: the join of shards of peano-arithmetic equals its whole verification byte for byte with the same attestation identity, and three plans that cannot run are refused. RP-14 reads ci.yml against the plan. SPEC.md §9.4 and §22.11, the register (382 IDs), CHANGELOG, VERIFICATION.md with plants. The Atlas jobs do not run while a pull request is a draft. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…points, and the VR range ends at VR-23 CL-13 counts the seven public entry points of Engine (§24.1); verify_part is now a free function, lexlean::verify_part, used by xtask and VR-23. RP-11: the README's verification range ends at the register's last VR ID. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The runtime modules of #144 are shipped data: every part elaborates them before its own modules, the part that publishes replays and audits them, and its records lead the attestation as on main. The register has 387 IDs.
|
Merged as What the run measured (the numbers this PR promised to post):
The gate is now the Review. Read and sound: I changed the description's Generated by Claude Code |
The register has 388 rows; SL-01 stays the last row, and RT-04 keeps the wording of #156. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…to issue-30-language-model Conflicts resolved with main's text where both sides edited one statement (RT-04), both CHANGELOG entries kept, and the register count recomputed from model/ids.toml in its four places: 387 on main plus LM-01..LM-03 and LM-13 is 391. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n list Main (#152) now gathers the runtime modules' records in runtime_lean_records and builds process_records once the parts have run; the text-laws loop still pushed into the old vector, so the merged tree did not compile. The loop now collects into text_laws_records, extended into process_records before the runtime records: the order the branch attested before the merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #131: steps 2 and 3 of the order agreed there, for UOR Atlas. #131 stays open for the
bddcertificates partition (the second PR, as said on #131) and for step 1, slimmingCensus/CensusCert4.Step 2 of the order agreed on #131, for UOR Atlas, with step 3: the
examplesleg verifies every example but Atlas, and Atlas is verified as the parts of one run, from a committed plan, with every process still run exactly once and the join publishing what the whole verification publishes.§9.4's sentence on caches is unchanged, and no attestation or proof result crosses a run.What changes
crates/lexlean/src/verify/partition.rs,verify::run_part,lexlean::verify_part): a verification runs asPart::Whole(unchanged),Part::Shard(the plan's elaborations, replays, and audit members, with the.oleanfiles of the shards it needs, written to an output directory, nothing published), orPart::Join(its own plan, every other part's records judged as their stages judge their own, then policy, the attestation over the records in the canonical order of §22.11, publication). A module without a record from any part, a record no module owns, a duplicate.oleanor record, and a shard whose plan elaborates a module before its imports are refused. Defined for projects without production roots and without PDF..github/verify-shards.json,cargo xtask ci-shards,repo_conformance::shards): fourteen shards and a join over Atlas's import graph, read from the committed generated Lean (public importlines). Checked: every module elaborated by exactly one shard and replayed by exactly one; every import of a module a shard elaborates or replays is elaborated by that shard or one it needs;joinneeds every other shard.cargo xtask verify-examplesruns the partLEXLEAN_EXAMPLES_PARTnames (without:<example>,shard:<example>:<shard>,join:<example>; unset, the recipe is unchanged), exchanging parts throughLEXLEAN_EXAMPLES_PARTS.ci.yml: the examples leg atwithout:uor-atlas; Atlas jobsatlas-prefix→atlas-l1(cert4, census-a..d) →atlas-closure,atlas-cert4-replay→atlas-l3(orbit, pairs-a..d) →atlas-join, each a clean checkout onubuntu-24.04at the examples profile. Theprefixjob builds the gate's executable once; the other jobs take it and the shards' output from the run (pattern: atlas-*, never arun-id). The Atlas jobs run after their needs and not while a pull request is a draft;ready_for_reviewreruns them.RP-14rewritten;VR-23new (the join of shards ofpeano-arithmeticequals its whole verification byte for byte with the same attestation ID, and the three refusals). Register 381 → 382. CHANGELOG, VERIFICATION.md (narrative and plants).What does not change
just vv, its twelve recipes and their order,release.yml(runsjust vvwhole, Atlas at width 1), the verifier's behaviour asPart::Whole, every example'sexpected/verify, the compiler-semantics IDs.Measured on this PR's first run (38870906361, head df2f6bb)
prefixstart tojoinendexamplesleg (every example but Atlas)restlegmainat 514e95a,examplesleg, for comparisonCritical path as run:
prefix22 min →cert428 →closure6 →pairs-*≤ 14 →join2.5, withcert4-replay(31 min) the branch the join waited on. The join published Atlas and found its 267 normalized records equal toexpected/verify. Therestleg is now the longer side;bdd's certificates partition is the next PR. That run'srestand host legs failed on two cases of this PR, fixed in the follow-up commits (CL-13:verify_partleft the Engine impl;RP-11: the README's VR range).Expected effect, before the measurement
On
mainat514e95adthe examples leg took 178 min (Atlas 156). The critical path of the partition isprefix(23 min of elaboration) →cert4(22) →closure(3) →pairs-*(11) →join(2) plus per-job set-up (Lean toolchain; the Rust build once), estimated at 80 to 90 minutes for the Atlas side, after which therestleg (76 min) is the longer one. Runner-minutes rise (14 Atlas jobs). This PR's own CI run is the measurement; the numbers will be posted here when it lands.Local verification (WSL, pinned toolchains)
cargo test -p lexlean --lib,cargo fmt --check,cargo clippy -D warnings,cargo xtask validate-model,validate-spec-links,check-test-inventory,ci-shards,cargo test -p repo-conformance --test bdd, andconformance_rp_14,conformance_rp_05,conformance_vr_21..23pass; an end-to-end run ofverify-examplesas two shards and a join ofpeano-arithmeticthrough the plan file publishes records equal to the committedexpected/verify.Not done here: the
bddcertificates partition (second PR, as said on #131) and step 1 (slimmingCensus/CensusCert4).🤖 Generated with Claude Code
Generated by Claude Code