teal-sea / zeta-labstate of record · compiled 14 Aug 2026 · revision 9ebdea0 · source

Library · HANDOFF.md

HANDOFF — session records and continuation state

10,867 words · 1,245 lines · source

Concise records: what was believed, what invalidated it, what now catches the problem, what conclusion is currently justified. Decisions live in ROADMAP.md; this file is the between-session state. Last snapshot: 2026-08-14 (the public surface, corrected and widened). The 2026-08-12 token-constraint record below is still the fullest statement of continuation state for the mathematics.


Record: the start page carried a retracted number, in public, for eleven

hours (2026-08-14)

Record: the fast tier was on a midnight timer, and nobody had noticed

(2026-08-14)

State (2026-08-14)

main = 5c254cf, clean, everything pushed. Fast tier: 2426 passed, 1 skipped, 3 xfailed. scripts/make_context.py --check exit 0. Preflight backend is python-flint with both backends present, so the cross-check that licenses the reserved word actually ran.

The public surface changed in three ways beyond the correction above, all in scripts/72_site.py and all landed:

Repository housekeeping, since it was empty and is the first thing a visitor reads: the GitHub About description and topics are now set. That is a GitHub setting rather than a tree artifact, so unlike every page of the site it can drift without anything noticing.

Live threads at this snapshot, none touched, all another session's work: claude/zeta-constant-improvement-xxnm9a (14 ahead), claude/harness-gate (11), claude/o9-first-build (4), hunt/gate5-p6-a / -b / -c (4/3/4), hunt/r-0339c1 (2), claude/lab-rejection-philosophy-sgvdxr (2), deploy/site (1). Report them; do not merge them.


Record: session handoff under a token constraint (2026-08-12)

Written because the operator is funding this out of pocket and frontier-model tokens are exhausted until further notice. The next session is likely a cheaper model. This record is the state, the queue sorted by what a cheaper model can actually do, and the one thing it should not attempt.

State

main = a311a6f, clean, everything pushed. lake build: 8739 jobs, zero sorrys. Fast tier: 2217 passed, 1 skipped (platform-conditional test_rigor.py:136, benign), 3 xfailed. scripts/make_context.py --check clean. Preflight (scripts/science_preflight.py) exits 0 with rigor.BACKEND = python-flint and both backends present.

Doc numbering, with a live hazard. The preflight reports 26 as next free, and on main that is correct — but the unmerged branch worktree-lab-direction-decision already carries a document numbered 26 (26-the-adopted-builds.md, written without its directory prefix here so this paragraph does not itself become a dangling reference). Taking 26 would collide the moment that branch lands. Take 27, or run git log --all --name-only -- 'docs/*' first. The preflight cannot see this because it reads the working tree, not other branches; that is a real gap in the instrument and is worth closing.

Five other threads are live and must not be touched: claude/math-genius-repo-f082zw (5 ahead), claude/post-formalization-automation-f3vqc6, claude/v-cell-certificate-decimal-4b57mi, claude/zeta-constants-discrepancy-8zm0qs, and worktree-lab-direction-decision (14 ahead, the largest). They are the operator's parallel runs, some proving their own Lean. Report them; never merge them. Only fast-forward main, only rebase your own branch.

worktree-lab-direction-decision was local-only until 2026-08-12 — 14 commits on one disk with no backup, carrying an Aristotle proof-agent adapter wired to the real SDK and authenticated live, a zbMATH Open backend, a literature scout with OEIS content checks, four Sturm-track lemmas kernel-checked in that tree, and its own document numbered 26. It is now pushed as a backup only; it is still unmerged and still another session's work. It also lives in a locked worktree at .claude/worktrees/lab-direction-decision, so a session may be active there. Do not merge, do not rebase it, do not delete the worktree.

Where the off-repo material lives

Two classes of artifact are deliberately not in this repository, and both are now backed up so neither depends on one disk:

If a session needs the futures map's conclusions without reading it: the verification asymmetry it rests on is now stated in hunts/higher_xi/HPRIME-ROUTES.md §0 and in meta/asymmetry-experiment.md, both in-repo.

The economics, which change what to work on

Verification in this laboratory costs wall-clock, not tokens: lake build is 8739 kernel jobs and the fast tier is 2200 tests, and neither consumes model output. Judgment costs tokens. So under a token constraint the correct strategy inverts the usual one: run things instead of reasoning about them, and prefer tasks whose correctness is decided by a machine rather than by argument. The repo is unusually well suited to this — the mirror-before-kernel pattern (scripts/61_rung3_mirror.py) prices an expensive formal computation in Python seconds, and hunts/frontier_math records nine defects in two days caught by cheap mechanical checks.

Do not attempt on a cheap model

The hdom formalization. It is the mathematical frontier (see hunts/higher_xi/LEAN-FRONTIER.md item 20) and it needs an Abel comparison against ∫₀^V t e^t g(t) dt plus the Fubini-on-a-triangle identity ∫₀^V t e^t E_j(V−t) dt = E_{j+1}(V). Mathlib's intervalIntegral and measure theory API is where weaker models burn the most tokens for the least progress. The paper argument is complete and numerically verified at X = 250 and X = 5000; route A (D = log 16 ≈ 2.7726) is the one to formalise. Wait for frontier tokens. Leaving this undone costs nothing; a half-formalisation with a sorry in it costs the arm its meaning.

Queue, cheapest and highest-value first

  1. Operator decisions, 2026-08-12 — these override the ordering below. The hdom hold is now the operator's call, not a recommendation: do not spend remaining frontier budget on it. And the Mathlib route is to be approached differently — the operator's read is that its review culture is hostile to AI-assisted contributions. That read has substance, but the friction is mostly a slop-volume problem rather than an ideological one: maintainers were flooded with unreviewed PRs whose authors could not answer review questions. A 15-line elementary lemma the library demonstrably lacks, submitted by a named human who can defend it, is the opposite of that. So:
  1. Upstream the powerful-number decomposition to Mathlib — not theta_sq_le. Checked 2026-08-12: Mathlib has no powerful-number machinery at all. No IsPowerful predicate, no powerfulPart, no squarefreePart as a definition, zero files mentioning any of them. And lean/ZetaLean/PowerfulDecomposition.lean is already kernel-checked with the classical structure theorem plus a full API: exists_powerful_coprime_squarefree_decomposition (every nonzero natural is (powerful)·(squarefree) with the parts coprime), the two factorization_ lemmas, both dvd lemmas, and the nonzero lemmas.

It beats the Chebyshev bound as a submission for three reasons: it is a named textbook structure theorem with an API rather than a one-off inequality, so "why would we want this" is not a question anyone asks; it is how the powerful-number counting asymptotic is proved, so it is obviously wanted; and nothing about it looks agent-shaped. Its numeric check before landing was also stronger than the file asserts — uniqueness of the decomposition holds by full divisor enumeration for n ≤ 2000, which is a free extra theorem if anyone wants it.

Not candidates, checked: the four Sturm modules. Mathlib has the general intermediate value theorem and coprime-derivative separability machinery (FieldDivision.lean, Separable.lean); ours are local specializations, and submitting them would be exactly the low-value PR that earned agent contributors their reputation.

  1. theta_sq_le / theta_pow_succ_le — the second candidate, still real. Confirmed absent from the pinned checkout (grep for log p ^ 2 in Mathlib/NumberTheory/Chebyshev.lean returns nothing), while Chebyshev.theta and theta_le_log4_mul_x are both there. The proof is ~15 lines in ZetaLean/ChebyshevBounds.lean, is elementary, compiles, and is exactly the kind of small gap Mathlib accepts. Why this is first: docs/reviews' futures analysis and ROADMAP.md's known gaps both make one external acceptance the milestone that gates every institutional hypothesis, and this is the cheapest available shot at it. The mathematics is done; what remains is PR mechanics and Mathlib style, which is mechanical work a cheaper model does well. Take theta_pow_succ_le along as the general form.
  2. Finish the rung-3 215-site margin sweep. Named open item, interrupted at 60/215 (see the 2026-08-11 director-run record and docs/25 §4.3). Pure Python against the already-written mirror; no Lean, no new mathematics. The question it answers is whether the re-plan at measured constants clears every site or only most of them — currently 30 of 59 evaluated grid sites fail, all within ±2% of threshold, so the answer decides whether rung 3 needs a re-plan or a headroom bump.
  3. meta/ E1 continuation. Append interventions to meta/interventions.jsonl as they occur during whatever work happens. Costs nothing, and the baseline (14 interventions, architecture caught 3 of
  4. needs 20–30 sessions before its numbers mean anything. Read meta/README.md first; the instrument refuses an automated claim without a named artifact, and it is meant to be hard to flatter.
  5. Documentation consistency. scripts/make_context.py --check, tests/test_docs_numbering.py, tests/test_claim_attribution.py — all cheap, all mechanical, all catch real defects (the last one exists because an outside reader found a citation defect 2135 tests had walked past).

The prompt for the next session

You are picking up Zeta Lab (at your local checkout) mid-project. Read, in order:
CLAUDE.md (binding operating rules), the top two records of HANDOFF.md, and
hunts/higher_xi/LEAN-FRONTIER.md item 20.

Hard constraints for this session:
- Frontier-model tokens are exhausted; the operator funds this personally.
  Prefer tasks a machine decides over tasks an argument decides. Running the
  test suite and lake build costs wall-clock, not tokens: use them freely.
- Five branches ahead of main are the operator's parallel runs (four claude/*
  plus worktree-lab-direction-decision, which also holds a locked worktree).
  Report them, never merge them. Only fast-forward main; only rebase your own
  branch. Check `git fetch` before landing anything.
- Doc numbers: the preflight says 26 is free, but an unmerged branch already
  uses 26. Take 27, or run `git log --all --name-only -- 'docs/*'` first.
- Do NOT start the hdom / Abel-Fubini formalization (HANDOFF says why). If you
  find yourself writing measure-theory Lean, stop and say so.
- The Lean arm counts nothing with a sorry. The word "certified" belongs to
  zeta/rigor.py and the Lean arm only. Under hunts/, "verified", "confirmed",
  "definitively" and "proves" are banned lexically, including inside a
  sentence disclaiming them — tests read the bytes.
- Every mathematical claim gets a numerical check or an explicit hedge at the
  point of use. If a computation appears to settle something open, the first
  inference is a bug; climb the certainty ladder in CLAUDE.md rather than
  rounding a rung upward.

First task, unless the operator redirects: do NOT open a PR first. Ask on Zulip
(#mathlib4 > Is there code for X?) whether the powerful-number decomposition is
wanted — lean/ZetaLean/PowerfulDecomposition.lean, kernel-checked, and Mathlib has
no powerful-number machinery at all. Lead with that, not with theta_sq_le. A "yes"
converts a cold PR into an invited one; a "no" saves the whole effort. One
external acceptance is
worth more to this project than another internal result.

Report concretely: what you ran, what it printed, what you changed. Negative
results are first-class here — recording that something does not work, with
the mechanism, is the house's most valued output.

Record: the Codex relay is fully harvested — three modules landed, every

other artifact accounted for (2026-08-12)

The Codex formalization relay (the higher-ξ / RAMS2 / RC2 run that began at the Bian 2008 discrepancy) ran out of tokens mid-sprint, leaving state spread across twelve worktrees under /private/tmp/zeta-*, ten local codex* branches, one unpushed commit on this checkout's main, and two uncommitted orphan files. Every artifact was audited (six independent auditors: per-file duplication against origin, vacuousness, and numeric verification in Python) before disposition. Nothing was landed on trust.

Landed, kernel-checked (8737 jobs, zero sorrys), authorship preserved:

Dropped as superseded, with the audit trail as the record:

The sweep found no other mathematical content unlanded: both result tarballs are the landed proofs, both /private/tmp PR drafts landed (21aeba3, 07ec287), the audit dirs are byte-identical extractions, and four dirs are build junk. One live wire, recorded so nobody trips it: /private/tmp/zeta-rams2-integrate-lake-link symlinks into this repo's lean/.lake — deleting it with a trailing slash would recurse into the live build cache. Remove the link only, never through it.

Also fixed en route: the docs-numbering scanner walked into nested checkouts (.claude/worktrees/, external/) and reported another tree's references as this repository's defects; it now prunes any directory containing a .git entry, with detector power shown in both directions. And the fast tier's one skip is identified and benign: test_rigor.py:136 self-skips where np.longdouble is float64 (Apple Silicon), added by the director run's _exact fix.

Fast tier: 2217 passed, 1 skipped (above), 3 xfailed. The twelve /private/tmp worktrees and ten stale codex* branches are fully harvested and safe to sweep — modulo the symlink warning — but are left in place; they are another agent's infrastructure.


Record: two outside memos triaged; the next three builds are decided

(2026-08-11)

Two outside recommendation documents (a next-phase strategy memo and a 16-programme research portfolio) are landed in docs/reviews/, and the full adopt / already-running / queue / defer / reject decision is in ROADMAP.md ("The outside memos, triaged"). What a next session needs:

1. The next three infrastructure builds, in order: (a) verifier independence made measurable — extend harness/provenance.py's ancestry discipline to computations, first subject rigor.py's own two-backend paths (shared layers already enumerated in the director-run record below); (b) the repository-wide guard offensive — per guard: intended lesion, smallest mutant, does it fire, what nearby lesions it misses; (c) HuntSpec, a machine-readable contract block in new hunts' MISSION.md, on probation under the dossier rule — it earns its place the first time a kill condition fires mechanically. None of these touch live hunt directories.

2. The queue for new mathematics lanes (opened only as live threads finish, each behind a HuntSpec): the general higher-ξ hierarchy first — precondition: the four unmerged agent/* ξ branches land or close — then CUE F_k, the derivative-zero local process, the F₂ identification, the Weil explorer. The moonshot (local-to-global positivity, docs/24 is the entry ledger) stays one long-horizon lane at most.

3. Do not re-litigate: the do-not-fund list in the portfolio memo is adopted wholesale (it matches this file's recorded kills item for item); the 30-agent allocation table is a priority ordering, not a headcount; and nothing in either memo bends the honest-scope rule.

4. The AI-implementation half (added same day): three further adoptions in ROADMAP.md §"The AI-implementation half". (a) Proof-agent adapter with Harmonic's Aristotle as first backend — public API, aristotlelib on PyPI; nothing counts until this repo's lake build shows zero sorrys; first targets are bounded Sturm-track lemmas, not rung 3 (its gap is compute). (b) Evolutionary search (OpenEvolve/CodeEvolve-class) as a hunt instrument, admissible only behind a HuntSpec naming an exact non-model evaluator. (c) The AlphaProof Nexus public results corpus (kernel-checked Erdős/OEIS proofs) queued as a prior-art surface for the eventual literature scout — the system itself is closed, no API. Ecosystem facts were verified against live sources 2026-08-11, not recalled. The nightly rig (automation/, untracked, zero runs so far) is the memo's "targeted autonomous frontier hunt" already built; arming it is the operator's switch, and no proof-adapter work rides on a machine without a Lean toolchain.

5b. The proof-agent loop ran end to end, and four theorems landed — Aristotle batch 1 (four graded Sturm-track lemmas) came back in ~70 minutes, all four passed the full local contract (verbatim statements, refusal scan, lake build on the pinned toolchain despite the service generating against v4.28.0), the full library rebuilt green with them wired in, and they live in lean/ZetaLean/Sturm*.lean with lean/ARISTOTLE-RUNS.md as the ledger. Calibration verdict: bounded single lemmas at these grades are reliable and fast; the next batch can carry real Sturm-chain steps (sign-variation machinery). The operator's own dashboard project (0701719a) remains his.

5a. The second wave landed the rest of the specification — run manifests (hunts/HUNTSPEC.md), the literature scout (ontology/scout.py, no code path to FOUND, corpora searched/missing loud), the standing adversarial review (harness/review.py + ledger: the 0.672529 kill as checkable exemplar, URMS2 0.51 open with both attacks missing), the graveyard (harness/graveyard.py + three transcribed graves), and the research-state view (scripts/70_lab_state.py, static, artifact-derived, with the attention queue). Still unbuilt with reasons: orchestration and steer controls (measure the loop first), the networked scout half. docs/26 §6 is the record. Full fast tier green at the first-wave point (2271 passed); rerun after the second wave before merging.

5. Builds 1–4 landed the same dayharness/independence.py (rigor cross-check declared: radius 3 of 5, agreement is evidence about the ball arithmetic alone), harness/guards.py + the opening five-record ledger, hunts/HUNTSPEC.md + validator, lean/proof_adapter.py (end-to-end once against the real kernel; submission half waits on ARISTOTLE_API_KEY). Record with honest edges: docs/26-the-adopted-builds.md. Alpha ecosystem cloned to external/ with .venv-tools (openevolve, aristotlelib) — machine state, see external/README.md for the two remaining human steps.


Record: frontier math — the 0.672529 candidate is cleanly killed

at its algebraic spine (2026-08-11)

Full record in hunts/frontier_math/CLEAN-KILL-REPORT.md; proof ledger and instruments in the same directory; landscape context in hunts/frontier_map/. The candidates 0.6725124, 0.672529, and 0.6725318 are withdrawn. What a next session must not re-derive:

1. wide_search THREAD 1 is answered at the measure level. The LP over (pair-measure positivity + bandwidth-one data + multiplicity types) reduces identically to 2 − sup D — the type space eliminates with nonnegative coefficients — so it is the Montgomery–Taylor dual and descends to the paper's 0.6725007 on the (X, J, ε) ladder. Measure positivity and integrality buy nothing in-band; the interval (0.6725007, 0.68185) is entirely about configuration realizability (ordered real sequences). Do not re-run measure-level formulations.

2. The constructive residue does not transplant. The old blockpos.py used u u*, but the pinned upstream zero side uses u u^T. An off-line pair is the hyperbolic block 2m(xx^T−yy^T), so its interaction with the on-line part can be negative. The exact Gaussian-integer witness u_x=1, u_z=i, u_conjugate(z)=-i gives tr(P₁Q′)=-2. With five unit on-line labels, the proposed final additive inequality reads 9 ≥ 13. clean_kill.py, a regression test, and ZetaLean/FrontierMathObstruction.lean now pin the failure. Taper, truncation, census, bootstrap, and LP work are moot for this mechanism.

3. Two dead routes, with mechanisms. (a) Sieve upper bounds cannot open bandwidth λ > 1: beyond the band the prime-side pieces are of scale T^{λ−1}·N and cancel only under Hardy–Littlewood; a sieve constant C multiplies the x-scale term, fatal for any C > 1+o(1). (b) The CGdL transplant (RH: 0.6792) reduces to exactly one obstruction: the paper's inertia counting applies only to Gram/autocorrelation kernels, and ĝ ≤ 0 out-of-band is not one; BGSTB 2023 (arXiv:2306.04799 Thm 1) already give the other missing input (F ≥ 0 unconditionally — known; do not re-derive).

4. Two instrument defects are retained as controls. Midpoint bin-to-cell assignment inflated chain counts and briefly produced a conditional 0.6728294 "beating" CG 1993; the bin-width ladder caught it (floor fell under refinement), the claim was withdrawn before shipping, and edges now snap to the bin grid. CG's conditional 0.6727534 stands unbeaten at current search depth. Open items: the grid-locked conditional edge search was interrupted mid-run (re-run gap_lp.py-style with edges on the 0.005 grid if resuming); higher chain levels and laminar cell families are the floor-raising lanes. More importantly, the former block scan had zero power against its transpose/conjugate-transpose bug because it constructed squared moduli by definition. No replacement hunt is open from this record.


Record: the director run — six defects, and rung 3's recorded cause was

wrong (2026-08-11)

Full record in docs/25-the-director-run.md; ledgers in hunts/director_run/. The two things a next session must not re-derive:

1. zeta/rigor.py could return a wrong proof, and the two-backend cross-check could not see it. _exact parsed unrecognised numeric types from their printed decimal, so proven_sign(np.float32(21.02203941345215)) returned -1 where the true Z is +2.56e-7, on both backends — the fault is upstream of the split. Fixed and pinned. Standing consequence: a cross-check bounds only what is actually duplicated, and _exact, the contour policy, the grid policy and the final S(T)/N(T) interval summation are shared.

2. The record immediately below is corrected in two places. Its "the per-term floor is set by nExp, at ~7e-7" is not reproduced: the box width is bit-identical across nExp ∈ {16,20,24,28} and across p, and the floor is the width of the κ enclosure (kappaI, 6e-7, in DHAssembly.lean), confirmed analytically. And its "the centre needs the exp order raised — that trade is the one genuinely unresolved thing in rung 3" is false: the centre could not have passed at any parameters, because normBound(B.inflate r) is max|re| + max|im| + 2r while the plan budgeted r once, and 2·r_c = 7.47e-4 > ε′ = 5e-4. K = 444 (+415 terms) gives margin 1.164.

A third defect the previous session never reached: the boxed-s width constant is ρ_W ≈ 5.9 measured against the plan's 2.6, all 11 sampled big boxes fail, and ρ_W is invariant under every parameter — it is the rectangle representation of a rotating complex value under repeated squaring. The next move is therefore a choice, and it is the run's one genuine question for the operator: re-plan at the measured constants (~130k terms against 79.5k, same literal sizes, margins ≥1.1), or first replace the rectangle enclosure of m^{-s} with a polar or mean-value one, which is worth ~2× on the entire certificate and is mathematics rather than parameters. Measure ρ_W on the low-σ left edge before either: it is the one number the cost estimate leans on that has not been sampled where it matters.

Also: the Lean arm rebuilds from a cold machine (elan + Mathlib installed from nothing, 8715 jobs, zero sorrys), and the flagship W(h) ≈ 8.86e-18 enclosure was reproduced to 43 digits by a blind replicator that was forbidden the package and given only the mathematical statement.

One caveat above is retired by work that landed in parallel. This record's rung-3 measurements carried the caveat that the mirror's bit-exactness is itself an assumption, spot-checked here only two ways (it reproduces the previous session's published digits, and an independent re-derivation of the tail radius from the Lean lemma's hypotheses matches the stored r_c). tests/test_rung3_mirror.py, merged from main at 01f40c6, now pins mirror soundness against an mpmath oracle at dps 40 on a completely different route — which is a stronger check than either of mine and was authored without knowledge of them. The feasibility numbers in docs/25 §4.3 rest on a mirror that a third party has since tested. Its second pinned fact, that boxed-s evaluation can never certify a lower bound, is the same negative result the re-plan already routes around.


Record: rung 3 — plan v2 is infeasible as generated, and the cause is one

constant (2026-08-10, fourth session of the day)

Corrected 2026-08-11 (see the record above and docs/25 §4.3): the two conclusions this record draws about cause — the nExp floor and the centre's Taylor-order trade — are both wrong. Its measurements reproduce exactly; its diagnosis does not.

The blocker was never the evaluation engine. Running the unmodified generator on a grid site asserts before emitting a line:

AssertionError: g_bottom_00: normLower 0.017520903235754424 < beta 0.052147503410769

That is the mirror's exact box evaluation refusing the site, which is the safety net the previous record claimed for it, firing. 11 of 11 sampled grid sites fail their own β, by factors of 2× to 43×. The big boxes and the centre pass (the smallest big box gives normBound 2.374 against M = 2.5499). So the grid — the whole small-frontier half of the certificate — could not have been certified at plan v2's emitted parameters no matter how fast the engine got.

Cause, isolated by measurement. The box width is not coarsening, not squaring, and not the exp remainder. It is Interval.logQ's Taylor truncation at TAYLOR_N = 20. At the worst sampled site (g_left_18, K = 113):

quantityat n=20at n=28at n=32
width of logQ (m=4)7.6e-63.0e-81.9e-9
width of the term box3.0e-37.3e-7
505 terms contribute1.523.7e-4

against a β of ~0.05. Raising kE or the coarsening precision does nothing: at kE = 14, kE = 18 or p = 128 the term width is still 3.0e-3. Only the log order moves it.

The fix, and its measured threshold. On g_left_18 (β = 0.0382898):

confignormLowerverdict
n = 20, tower (as shipped)0.000889FAIL, 43× short
n = 28, tower0.0383896OK, margin ×1.00
n = 32, tower0.0385272OK, margin ×1.01
n = 32, composite chain0.0385252OK, margin ×1.01
n = 40, composite chain0.0385363OK, margin ×1.01

Two things to read off it. The margin saturates at ×1.01, so past n ≈ 28 the residual gap is the inflation radius (r = 0.0134 against β = 0.0383) and the geometry, not the series — there is nothing further to buy by raising the order, and β was planned with ~1% headroom. And the composite chain matches the tower to four significant figures (0.0385252 vs 0.0385272) while running 3.4× faster in the mirror (96 s vs 329 s), so chains cost no usable width. n = 28 is the threshold and is too thin to ship; n = 32 is the choice.

The two orders must be split, and that is now in the build. TAYLOR_N was one constant feeding both series, and they want opposite things: the log sets the width, the exp sets the literal size (expSmall forms powI x i up to i = n, which is where the multi-thousand-bit rationals of the previous record's negative result #2 come from). Measured: the log's own endpoints go from 91 to 158 bits between order 20 and 32 — negligible. So dirichletTermBox2 nLog nExp p kL kE m S and contains_dirichletTermBox2 are kernel-checked in IntervalCExp.lean, with dirichletTermBox2_self proving by rfl that the old definition is the diagonal nLog = nExp case. Target configuration: nLog = 32, nExp = 20, p = 64, kE = 10, composite chains.

Not done. scripts/60_rung3_generate.py still emits one tower per m at the single order 20. It needs: the split orders, per-m pw_ boxes with primes on towers and composites on contains_cpow_mul_coarsen, and term_{sid} as a match over those. Then regenerate and compile. The mirror already has dirichletTermBox2, cpowBox, cpow_plan and term_chain for exactly that shape, so the generator change is codegen, not mathematics.

And the constant is not sufficient — measured. A sweep at the target configuration (nLog = 32, nExp = 20, p = 64, kE = 10, composite chains) got through 60 of the 215 sites before being stopped. Of 59 grid sites:

value
fail30 of 59 (51%)
margin range0.9931 … 1.0065
median margin0.9991
worst failure×0.9931 (0.7% short)
best pass×1.0065 (0.65% over)
within ±2% of the line59 of 59 (100%)

So the grid is not wrong, it is sitting exactly on the line: β was drawn at the achievable bound, the total spread is 1.3%, and which side of it a site lands on is effectively a coin flip. A uniform ~1–2% improvement in box width — or ~1% of slack in β — turns all 30 failures into passes. That is a headroom bug, not a geometry bug.

The centre is a different and real problem: FAIL at ×0.6321, normBound 7.9e-4 against an ε of 5e-4, 37% short. Its budget explains why: the plan gives it r_c = 3.736e-4 out of 5e-4, leaving 1.26e-4 for the box itself, and the box uses 4.2e-4. Raising nLog does not reach it, because with nLog high the per-term floor is set by nExp, at ~7e-7, and the centre sums 1805 terms. So the centre needs the exp order raised too — which is the order that inflates the literals and revives negative result #2. That trade is the one genuinely unresolved thing in rung 3.

What this means for the next session. The remaining work is a re-plan, not codegen: pick nExp and r (equivalently K) with real headroom instead of 0.3%, re-derive β and ε, and only then regenerate. ROADMAP.md's "Open: scale alone … nothing else is missing" is corrected in the same commit — it was written before the mirror could price a site exactly, and it is false.

Caveats. 60 of 215 sites, one machine, and the grid numbers are the 59 evaluated of 104. The centre was evaluated once. Big boxes were not reached in this sweep, though a separate spot check had the smallest one passing (normBound 2.374, later 2.4076 on chains, against M = 2.5499 — also thin).

Record: rung 3 — the composite-chain step is kernel-checked, and its cost

is measured (2026-08-10, third session of the day)

The previous record named composite-chain term evaluation as "next session's first move". The lemma it rests on is now in the build, and the reason to believe the route is now a measurement rather than an estimate.

Record: rung 3 — the certification architecture is proved; the evaluation

engine needs one more stage (2026-08-10, second session of the day)

Record: rung 3 — the steeper tail exponents are kernel-checked (2026-08-10)

Record: rung 3 — the target is forced, and the cost model corrected (2026-08-10)

Record: rung 3 — the pipeline demonstrated end to end (2026-08-10)

Record: rung 3 assembly — machinery built, scale measured (2026-08-10)

Record: rung 3 Phase B — the tail bound is kernel-checked (2026-08-10)

Record: rung 3 Phase B — the term enclosure is kernel-checked (2026-08-10)

Record: full-repo audit on a fresh clone (2026-08-10)

Record: Hunt #2 (factorization-position rigidity) — claim withdrawn

Record: scope wording (4c7e480, then f47a490)

Record: strengthened gates (docs/09 §5.1, c0fa48d)

Weil positivity over the full admissible class is equivalent to RH, so "prove the form is positive" is RH restated, not a strategy. The positive target is factorization: −W(f ∗ f̃) = ‖Φ(f)‖² inside a genuinely positive structure. Requirements A (arithmetic provenance, mechanically checkable), B (exact trace realization — where the analytic difficulty relocates), C (structural positivity; naturality is where the lab's writ ends). §5.1 also records the five-entry pseudo-solution taxonomy and the linear-combination sharpening of gates 3/4 (the gate is eliminative, never probative). Battery default rivals extended to Davenport–Heilbronn plus both discriminant −23 forms; pinned by tests/test_epstein.py.

Record: the Lean arm

Record: the upstream (Mathlib) track (2026-08-06, f5a1cbd)

scripts/mathlib_gaps.pyreferences/mathlib-open-targets.md: 970 of 1179 famous theorems in Mathlib's 1000.yaml carry no decl:. Verified by code and open-PR search: Hardy Z / RS-ϑ / Sturm / critical-line theorem are unclaimed; N(T) is owned by PrimeNumberTheoremAnd — do not duplicate. Two decisions worth not re-deriving:

  1. Build Hardy Z from completedRiemannZeta, not e^{iϑ}ζ — the textbook route needs a continuous log Γ branch Mathlib lacks; the Λ route gets realness from riemannZeta_conj + completedRiemannZeta_one_sub.
  2. Hardy Z precedes Sturm: a multi-thousand-line first PR from a contributor with no merged history does not get reviewed. Impact alone argues the opposite order; that is the trap.

Porting work lives in ../contrib-lab (separate repo; nothing here depends on it). Not done: Lean scoping of either target; Zulip not checked for unannounced claims.

Record: department architecture (2026-08-06, 0bb04c3..499d632)

harness/ landed; rationale in ROADMAP.md, how-to in harness/README.md. Repairs found on the way: make_context.py pointed at the dead discovery/ directory (that CONTEXT.md section had been silently empty; stale name was live in five other files); -n auto hung twice in teardown after all tests passed — -n 4 completes cleanly, and -p no:xdist does not work because -n auto is already in addopts. Open: three zeta/ instruments not wired into the battery (spectral_gate ablations, detectors' Li/Weil planted faults, quasicrystal); factorization_defect cannot referee Epstein (2,1,3) (a₁ = 0; recorded in docs/doors/zeta.md, pinned by tests/test_harness_zeta_department.py). Merged branches five-longshots and worktree-factorization-gate still exist locally; the factorization-gate worktree is on disk and locked.

Record: croniter department + resumption benchmark (2026-08-09)


Continuation checklist

  1. git pull; confirm fast tier green (.venv/bin/python -m pytest -q -m "not slow").
  2. cd lean && PATH="$HOME/.elan/bin:$PATH" lake build — zero sorrys before adding theorems.
  3. Lean stage-3 open items above are the active front.
  4. Regenerate CONTEXT.md after any public API/doc/script change.
  5. Adding a department: battery first, list it in harness/departments/__init__.py, then .venv/bin/python -m pytest -q -o addopts='' tests/test_department_conformance.py. The audit is parametrized over that listing.

Cross-arm note (2026-08-12): higher_xi <-> frontier_math

The higher-xi arm proposed reducing frontier_math's open multi-pair step to a compact 3-parameter problem (hunts/higher_xi/CROSS-ARM-TRANSFER.md), supplying its own kill-switch. frontier_math resolved it and answered NO: the k-dependence changes sign with pair spacing, and the binding family sits ~1.7x outside the proposing scan's window. Reply appended to that file's section 6; full tables in hunts/frontier_math/CROSS-ARM-REPLY.md. Reciprocal correction sent: frontier_math's PairEnergy.lean is prior art (source paper Lemma 3.1 + 3.3, specialisation in its 7.5(a)).

Open request back to higher_xi: bound the k -> infinity tail of the falling branch beyond 2 mean gaps. frontier_math has a fit (+0.0212, no crossing), not a bound. If higher_xi's subset-local charging can bound it, frontier_math's last quantifier closes.

Parallel-session coordination now lives in hunts/frontier_math/ACTIVE-CLAIMS.md (HANDOFF is the serial channel; that file is the live one).