missions: close the statement-package import hole (15 never-elaborated statements; verify now gates the root import list) - #617
Merged
Conversation
…borates fails verify) The `mission-statements-compile` job runs `lake build` in missions/<campaign>/lean, which compiles exactly the import closure of the root Statements.lean. `write_statement` wrote the module file but nothing appended the import line, so fifteen registered statements (eleven rh, four mirrormere, most of them status=proved) had never been elaborated by any CI job; one (MM_weil_positivity_window_tenth) has no `import` at all. The design invariant "a statement that does not elaborate cannot enter the graph" (MISSIONS_DESIGN section 2) was not enforced for them. - statements.py: root_imports / ensure_root_import / missing_root_imports / import_header_error / regenerate_statement. write_statement now appends the module to the root, so `mission add` (which did not touch the root) wires new nodes. - regen_diff reports a statement whose module the root does not import, so every staleness caller sees it, not only verify. - verify_campaign: fails on an un-imported statement (via regen_diff), on a stray Statements/*.lean no root names, on a root import with no file, and on a statement lacking the standard header (Mathlib or a campaign *Defs module). - tests/test_missions_root_imports.py: 21 tests, negatives for each case, plus `mission add` wiring the root. On this commit the live rh and mirrormere campaigns FAIL the battery (the fifteen); the next commit repairs them. No status changes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
…nts from the package roots
Regenerated each through `regenerate_statement` (write_statement path, so the provenance
sha256 stays honest) and appended the import to the campaign root Statements.lean:
rh (11): RH_bl_closed_form_five_nonneg, RH_dbn_H0_zero_strip, RH_li_ladder_height,
RH_li_ladder_height_sharp, RH_li_ladder_liLimit, RH_li_ladder_liLimit_sharp,
RH_li_rungs_lt_five, RH_li_rungs_of_height_4000, RH_li_rungs_of_height_4000_sharp,
RH_zeta_zero_confined, RH_zeta_zero_im_ge
mirrormere (4): MM_gaussian_positivity_small_lam_3e3, MM_leakage_composite_zero,
MM_satake_degree_two_rejects_delta, MM_weil_positivity_window_tenth
Fourteen regenerations are byte-identical (hash unchanged). MM_weil_positivity_window_tenth
had no `import` line at all; regenerated with `import Mathlib` + `import Statements.MMDefs`
prepended, hash 7b32a808ac3e6c1c -> 453fc3f023904fb0, theorem text unchanged, recorded in
the node file (same convention as #606). No vocabulary mirror was needed: every statement
elaborates against the existing RHDefs / MMDefs.
lake build: rh 8765 jobs (was 8754), mirrormere 8700 jobs (was 8696), both green, the
only warnings are `declaration uses sorry` on the statements themselves. `mission verify`
OK on all four campaigns; the live-campaign root-import test is added here.
No status changes. conjecture1_proved = False.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
… coherence `mission verify` exits 1 on a node whose statement the package root does not import (current hash, well-formed file: the exact state of the fifteen), and prints the regen_diff line naming the module; `scaffold_package` (the generate.py --check idiom, root regenerated from disk) and `missing_root_imports` (the verify-side check) agree. Run on all four live campaigns: OK. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
…teen, 2026-09-24) `mission add` appends the root import and `mission verify` enforces the import list (§6 row, §7 item 5, new §11 naming the fifteen nodes and the date). conjecture1_proved = False. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
…mission add`) Parallel branches add nodes to the same root Statements.lean, so `ensure_root_import` now inserts in sorted position (appends, and leaves the file as found, when the root is already unsorted), `sort_root_imports` re-sorts, and the four live roots are sorted here (same import sets, verified; anduril/mirrormere/rh reordered, bg was already sorted). Order is not a gate condition: `verify_campaign` only WARNS on an unsorted root, so a held branch that appended by hand still passes. Conflicts in a root are resolved by re-sorting, never by union-merge. lake build after the re-sort: rh 8765, mirrormere 8700, anduril 8671 jobs, all green. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
DrMurphyIsIn
marked this pull request as ready for review
September 24, 2026 13:30
DrMurphyIsIn
enabled auto-merge
September 24, 2026 13:56
DrMurphyIsIn
pushed a commit
that referenced
this pull request
Sep 24, 2026
…grant-provenance Two test-side reconciliations, no gate weakened: - tests/test_missions_root_imports.py (#617): `mission add` now records [author] from `git config user.email` + $CLAUDE_SESSION_ID, which a CI runner lacks, so the test names --identity/--session explicitly (the documented fallback order is unchanged). - tests/test_missions_provenance.py: #617's battery requires every statement file to open with an `import` line; the fixtures wrote bare declarations. They now write `import Mathlib` first, as the live registry does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
DrMurphyIsIn
pushed a commit
that referenced
this pull request
Sep 24, 2026
…st labels) + judge bundle - merge main (#607, #617); re-sort anduril root imports (sort_root_imports) - read-back relabeled: auditors were same-session subagents of the author, so independence = "unverified" (provenance-migrate) and the '(independent' label removed - status reopened and re-granted via `mission grant` -> [grant] artifact/statement sha256, gate 2026-09-23.1 (owner ruling 2026-09-24: grant with honest labels, Comparator-judged) - zeta_reflection judge bundle regenerated (--check OK, 10 challenges incl. h1000) conjecture1_proved = False. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LMeoWeTz2Q3iSeLfqxfYo6
DrMurphyIsIn
pushed a commit
that referenced
this pull request
Sep 24, 2026
…a warning; daily bot rebuild - build.py derives each readback's independence label from the registry (missions PR #607): "self-attested" for independence "" / "unverified", "judge-verified" when a Comparator record exists; each card carries the grant digest, judge run and required-CI record. Identities and session ids are never published. - test_explorer_build: the hard-coded "every readback is self-attested" check becomes "labels equal what the registry records"; the committed-build staleness check is a WARNING, because a hard gate forced rebuild pushes onto grant PRs that cancelled their running judge and ladder jobs (2026-09-24). - .github/workflows/explorer-rebuild.yml: daily + on registry pushes to main, rebuilds and opens/updates a bot PR when stale. - Rebuilt against main at a8bcca0 (post #607/#617): 347 KB registry.json, 475 KB page. conjecture1_proved = False. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The hole
MISSIONS_DESIGN §2: "CI builds each statement package: a statement that does not elaborate cannot enter the graph." The
mission-statements-compilejob runslake buildinmissions/<campaign>/lean, which compiles the import closure of the rootStatements.leanand nothing else.mission addwrote the node file andStatements/<Slug>.leanbut never touched the root, and nothing checked. Fifteen registered modules, thirteen of themstatus = "proved", had current provenance hashes and had never been elaborated by any job. One had noimportline at all.No status changes, no grants, no audits.
conjecture1_proved = False.The fifteen
Hash change, why: the window-tenth file was written with no
importline. It was regenerated throughregenerate_statement(thewrite_statementpath) withimport Mathlib+import Statements.MMDefsprepended; the theorem text is byte-identical. Recorded as a comment block in the node file, the way #606 recorded its re-specification hash. The other fourteen regenerate byte-identically.Vocabulary mirrors needed: none. Every one of the fifteen elaborates against the existing RHDefs / MMDefs (
archSide/finiteSidevia theRvMBridge15.BombieriLagariasre-export,DBN.H,LiCriterion.taylorCoeff/riemannXi,RvMBridge15.liLimit,Zeta23.IsNontrivialZero,RvMBridge6.zeroSide/gaussTest,WeilExplicit.*). The mirror drift test is untouched and green.Commits (one per deliverable)
Gate (
69cb4fe):statements.pygainsroot_imports/ensure_root_import/missing_root_imports/import_header_error/regenerate_statement;write_statementappends the module to the root, somission add(which did not do this) now wires new nodes;regen_diffreports a statement the root does not import alongside a stale hash;verify_campaignfails on an un-imported node statement, a strayStatements/*.leanno root names, a root import with no file, and a statement without the standard header (Mathlibor a campaign*Defsimport). On this commit alone the live rh and mirrormere campaigns fail the battery, which is the point.Fix (
7d54bfe): the fifteen regenerated and imported from both roots; live-campaign root-import test added.Staleness at the CLI (
c46410b):mission verifyexits 1 on a well-formed, current-hash statement the root does not name;scaffold_package(root regenerated from disk) andmissing_root_importsagree.Docs (
41115a2): MISSIONS_DESIGN §6 row foradd, §7 item 5, new §11 naming the fifteen and the date.Sorted roots, merge discipline (
93c8a34, after the team lead's heads-up on anduril: all zeta zeros to height 1000 on the critical line, kernel-checked with NO hypotheses (AND_ladder_h1000_kernel PROVED) #613/Route C: M1 PROVED (parametric de Bruijn, up-set, RH <=> all H_t real for t >= 0); P15 criterion wired; M6 gaps; M5 bricks + P15 eq (76) erratum #614/mirrormere: the full prime-free window (2L <= log 2) proved kernel-native, hypothesis-free, no Arb seam (draft; includes #606; grant after #607) #615):ensure_root_importinserts in sorted position,sort_root_importsre-sorts, and the four live roots are sorted (same import sets, verified).mission verifyonly WARNS on an unsorted root, so a held branch that appended by hand still passes.MERGE NOTE for anyone touching
lean/Statements.leanHeld PRs #613 (anduril), #614 (rh, 3 M1 nodes) and #615 (mirrormere) add root imports by hand and WILL conflict with this PR on the root files. Resolve by re-sorting the import list (one
importper line, alphabetical), never by union-merge:After resolving,
mission verifymust say OK for the campaign with no "not sorted" warning, andlake buildin the package must be green.Builds and tests
lake buildrh statement packagelake buildmirrormere statement packagemission verify(anduril, bg, mirrormere, rh)pytest tests/test_missions_*.pylake buildanduril after re-sortBuilds were run locally on reflinked Mathlib caches at the campaigns' pinned toolchains (rh v4.34.0-rc1, mirrormere v4.32.0); the
mission-statements-compilematrix on this PR is the CI confirmation.Not done / caveats
import Mathlibalone (23 live statements are self-contained that way); it does not require the campaign Defs module.🤖 Generated with Claude Code
https://claude.ai/code/session_017icTazCuXLgRx61VNRAZWU