Skip to content

fix(ci+missions): close the verification-gate holes found in the 2026-09-18 audit - #569

Merged
DrMurphyIsIn merged 5 commits into
mainfrom
fix/verification-gates
Sep 19, 2026
Merged

DrMurphyIsIn merged 5 commits into
mainfrom
fix/verification-gates

Conversation

@DrMurphyIsIn

Copy link
Copy Markdown
Owner

The 2026-09-17/18 RH critical-path mathematics held up under adversarial audit. The machinery around it did not. This closes seven gate holes and records three more with reasons for leaving them.

Full findings: telperion/docs/VERIFICATION_GATES_AUDIT_2026-09-18.md.

Headline: two nodes were proved against Lean nothing ever compiled

ZeroFreePolylog.lean and ZeroFreeElementary.lean are terminal on the li_positivity island. Nothing imports them, they are not in defaultTargets, and they sat outside the axiom guard's import closure. Their oleans are absent from all three independently built worktrees while their neighbours are present. The nodes are RH_zero_free_gamma5 and RH_zero_free_polylog.

Importing ZeroFreePolylog into AxiomGuardLiPositivity.lean, which is a defaultTargets lean_lib, puts both modules under lake build and prints their axioms. If they do not compile, li-positivity-compiles now goes red. That is the intended outcome.

The rest

  • Axiom guards for rvm_bridge and li_positivity failed only on sorryAx, so a new upstream axiom would have passed. Both now require every printed axiom line to be exactly the three standard axioms, run under set -euo pipefail because lake env lean | tee masked a crashed run, and fail if fewer lines printed than the guard has anchors. The idiom comes from telperion-production.yml, which already had it right.
  • No CI job ran the missions battery. mission verify now runs inside the required unit job, covering all four campaigns in seconds.
  • The grant gate proved nothing. It checked that an artifact contains a statement, never that it proves it, and normalize_lean strips a trailing := by sorry before comparing, so a stub matched more easily. Gate and battery now reject sorry/admit/native_decide in Lean code, comments and strings stripped first. Three tests. All campaigns still verify clean, so nothing currently proved was resting on a stub.
  • proof-lean has been red on main since 2026-09-12. Cache restore missed, the cold rebuild was killed near 104 minutes, and the cache post step was skipped because the build failed, so the next run started cold too. Restore and save are now split, with the save on if: always(). This is the BG layer, not RH.
  • mirrormere's manifest still described the pre-feat(rh): T=8000 via the height chain (7,830 zeros) + the 10^6 campaign orchestrator #506 state.

Left open on purpose

Island jobs are still not required checks. The lean workflow is path-filtered on telperion/**, so making them required would leave every docs-only PR permanently unmergeable, which this repo has already hit. Adding mission verify to the already-required unit job raises the floor where it can be raised today.

The registry DAG's depends_on edges are documentary rather than mechanical: no bridge imports another, so the critical path is three independent theorems, not a chain. The generated statement files are hash-locked, so this is recorded in the audit doc instead of hand-edited.

This PR does not run the grant pass. After #506 all 15 linked-but-ungranted artifacts are on main, so it is unblocked, but granting is ceremonial here and is left to the owner.

conjecture1_proved = False.

🤖 Generated with Claude Code

Dr. Murphy and others added 3 commits September 18, 2026 15:01
…-09-18 audit

The 2026-09-17/18 RH critical-path mathematics held up under adversarial audit. The
machinery around it did not. Seven fixes, one headline.

HEADLINE: two rh nodes were `proved` against Lean nothing ever compiled.
ZeroFreePolylog.lean and ZeroFreeElementary.lean are terminal on the li_positivity
island -- imported by nothing, absent from defaultTargets, outside the axiom guard's
import closure. Their oleans are absent from all three independently built worktrees
while their neighbours are present. The nodes are RH_zero_free_gamma5 and
RH_zero_free_polylog. Importing ZeroFreePolylog into AxiomGuardLiPositivity (a
defaultTargets lean_lib) puts both under `lake build` and prints their axioms.
If they do not compile this job now goes red, which is the point.

- Axiom guards (rvm_bridge, li_positivity) asserted only the absence of `sorryAx`, so a
  new upstream `axiom` would have passed. Both now require every printed axiom line to be
  exactly [propext, Classical.choice, Quot.sound], run under `set -euo pipefail` (the old
  `lake env lean | tee` masked a crashed run), and fail if fewer lines printed than the
  guard has anchors -- the check that catches a guard which silently did not run.
  The idiom is lifted from telperion-production.yml, which already had it right.

- Nothing in CI ran the missions invariant battery. `mission verify` now runs inside the
  REQUIRED `unit` job: schema, acyclicity, artifact existence, statement containment,
  closure coherence and regen drift, across all four campaigns. Pure Python, seconds.

- The grant gate proved nothing. `grant_status` checked that an artifact CONTAINS a
  node's statement, never that it PROVES it, and `normalize_lean` strips a trailing
  `:= by sorry` before comparing, so a stub matched MORE easily. Both the gate and the
  read-only battery now reject artifacts carrying sorry/admit/native_decide in Lean code,
  with comments and strings stripped so docstring prose is not a false positive. Three
  tests. Every existing campaign still verifies clean: nothing proved rested on a stub.

- proof-lean, the daily no-`sorry` re-verification of the R3Cert layer, failed every day
  from 2026-09-12. The cache restore missed (0s), the cold ~2575-theorem rebuild was
  killed near 104 min, and because the build failed the cache POST step was skipped, so
  nothing was saved and the next run started cold: self-perpetuating. Split restore from
  save and save with `if: always()`, so partial builds accumulate. (BG layer, not RH.)

- mirrormere's manifest still said no node enters as proved and grants are deferred to
  the branch reconcile. #506 merged; one node is proved and nine await the grant pass.

Recorded but deliberately not changed, with reasons, in
telperion/docs/VERIFICATION_GATES_AUDIT_2026-09-18.md: the registry DAG's dependency
edges are documentary (no bridge imports another, so the critical path is three
independent theorems, not a chain); `proved` covers research-grade, conditional and
bookkeeping nodes without distinction; and island jobs are still not required checks,
because the lean workflow is path-filtered and making them required would render every
docs-only PR unmergeable.

conjecture1_proved = False.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… + build target

CI proved the point of the previous commit, then rejected its mechanism.

GOOD NEWS: ZeroFreePolylog and ZeroFreeElementary DO compile (run 35383833607:
"Built ZeroFreePolylog (9.5s)", warnings only). The two zero-free-region node
artifacts were sound Lean that no build had ever elaborated.

WHY THE FIRST ATTEMPT FAILED:
  error: import ZeroFreeElementary failed, environment already contains
         'ZeroFreeBridge.zeta_sphere_bound' from DlvpZetaDisk
ZeroFreeBridge.zeta_sphere_bound is declared in THREE modules on this island --
DlvpZetaDisk, DlvpZetaCountStrip and ZeroFreeElementary. Nothing ever imported
ZeroFreeElementary alongside the others, so the duplication was invisible. That
duplication is worth collapsing, but it must not block getting these artifacts
under the kernel, so it is recorded as a follow-up rather than fixed here.

THIS COMMIT: a second, minimal guard AxiomGuardZeroFree.lean whose closure is
exactly ZeroFreePolylog -> ZeroFreeElementary -> StripBound plus ZetaLogBound.
Declared a lean_lib in defaultTargets, so `lake build` compiles both artifacts;
a new CI step runs the same exact-axiom assertion over it (min 2 lines).
AxiomGuardLiPositivity keeps the three anchors that were already in its closure
(zeta_repr_R1, zeta_fract_repr, norm_deriv_le_of_re_le); its threshold drops
165 -> 163 accordingly.

conjecture1_proved = False.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The drift check imports the telperion package, which pulls sympy, but the job never
installed it. On any branch whose generate.py reaches that import the step dies with
ModuleNotFoundError in 7s, before checking a single statement -- currently blocking #567.
A drift check that cannot start cannot fail on drift, which is the worst failure mode
for a gate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dr. Murphy and others added 2 commits September 18, 2026 23:22
…s too

The stricter guard counts lines matching 'depends on axioms' and compares against the number
of #print axioms anchors. LiPositivity.liLowerBounds_pos depends on NO axioms, so Lean prints
'does not depend on any axioms', which the pattern missed: 162 counted against 163 anchors and
li-positivity-compiles went red on a proof that is strictly stronger than the three-axiom set.
Count both phrasings. The exactly-three-axioms check is unaffected, since it still greps only
the 'depends on axioms' lines. Same fix applied to the rvm_bridge counter.
conjecture1_proved = False.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… axiom lists across lines

rvm-bridge-compiles went red on RvMBridge.zeta_ordinates_not_uniformlyDiscrete_of_unbounded_density,
whose axioms ARE the standard three: the declaration name is long enough that Lean wrapped the
list, so the line-based grep saw 'depends on axioms: [propext,' and called it an unexpected axiom.
Join lines first, extract each complete 'depends on axioms: [...]' group, then require it to be
exactly the three. Verified both ways on fixtures: a wrapped clean list is ACCEPTED, a list
carrying sorryAx is REJECTED. Applied to all three guard blocks (li_positivity axioms.out and
zerofree.out, rvm_bridge axioms.out). conjecture1_proved = False.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@DrMurphyIsIn
DrMurphyIsIn merged commit 8fc867c into main Sep 19, 2026
93 of 95 checks passed
DrMurphyIsIn added a commit that referenced this pull request Sep 19, 2026
docs(missions): wall backlog map -- 25 unproved nodes mapped, and the grant-gate hole that #569 closes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant