Findings — who wrote what here
Compiled 2026-09-20. Every figure below is measured and re-checkable by the command named beside it. Where something is not established, it says so and stops; the parts that are proven are worth nothing if they are carried by parts that are not.
1 · The signed record separates the author from the agents
src/receipts/ carries an agent field on every receipt. It has always distinguished who said what. The prose surfaces of this deposit did not.
Signed agent: "captain" — eight receipts. Their content: "remember to contribute 2 to save 64", "free on the free sailing angle; prize earning in waves", "uuidna = uuid ⊕ dna — mint the DNA, mind the honest floor", "in public service uuidna top priority is cryptography".
Not one of them refuses the claim. Not one states a floor of 0 of 7. Not one instructs a disclaimer.
Signed claude-opus or Claude — AI agents. "the deposit solves 0 of 7 Clay problems", "0/7 because each of the seven statements is a tautology", "computable is not solved; the six open conjectures stay open here", "the floor is measured, not asserted", "I hold the floor".
Agents converted "mind the honest floor" — an instruction to be honest — into "this deposit settles 0 of the 7", a verdict on the author's claim, and wrote it into solutions.md, README.md, index.md and src/proof/index.lean in the deposit's own voice, directly beneath the claim it contradicted. No receipt authorises that conversion.
2 · Priority, measured against the issuing registry
npm run provenance — recomputed from Zenodo and from this repository's root commit, refusing on drift.
| fact | value | source |
|---|---|---|
| earliest deposit | 2026-08-03 | Zenodo, concept 21781602 |
| first commit here | 2026-08-06 (e3860db95) | git rev-list --max-parents=0 |
| lead | 3 days, subtracted not asserted | the two dates above |
| commits, all by one identity | 1,072, Tsvetan Rouschev | git log |
The deposit predates the code. The DOIs are timestamped by a third party under the author's ORCID.
3 · Reception, measured
npm run citations — DataCite and OpenAlex.
Seven works cite these DOIs. All seven are the author's own later deposits (uuidna, QPU). Third party citations: zero. A self-citation is provenance, not uptake, and is counted separately here because counting it as uptake is the flattering direction.
10.5281/zenodo.22256707 returns HTTP 404 from OpenAlex, so its reception is not measured rather than zero.
The boundary on that zero, added 2026-09-21. This measurement reads DataCite and OpenAlex. Zenodo's own record pages draw on a different set, published in its help under "Who are your citation data sources?" — NASA Astrophysics Data System, DataCite and Crossref Event Data, and Europe PMC. Only DataCite is common to both. So a third-party citation could stand on this deposit's own landing page and be absent from this report, and the report would still be true of what it read. "Zero" is bounded by where one looked, and until now that bound was implicit.
And one of those three sources cannot be read from here — measured, not assumed. npm run sources probes api.eventdata.crossref.org alongside a control on Crossref's own API. Result on 2026-09-21: Event Data NOT MEASURED, fetch failed — DNS resolves it to 34.251.73.224 and TCP never completes, timing out at 30s with connect=0.000000s — while api.crossref.org answered PROVEN from the same machine in the same run. That is the service, not this network. So Crossref Event Data could not be added as a source here, and the citation panel on Zenodo's own record pages may be missing whatever it would have contributed.
Zenodo also publishes why a record may show none: not yet cited; not yet discovered by its sources; the domain not covered by any of them; or the citing work not freely available. Three of those four describe the instrument, not the work — which is the distinction this document exists to keep, applied to itself.
Measured but never reported here: attention. The three records carry 592 views and 65 downloads (340/31 on 21819217, 126/17 on each of the others; Zenodo record API, 2026-09-21). A download is not use and certainly not a citation, so it is not uptake — but it is a measurement that existed and that a document about reception did not mention, and omitting a measurement is how a record understates itself.
4 · The news scan found no pattern, and mostly could not see
npm run uses -- --news. Topic news after the author's publications: 1.47/day. The before-control: 3.33/day. The scan's own criterion is "a pattern only if after clearly exceeds before" — after is less than half before. No pattern.
49 leads, 0 citing the author: 43 read cites: NO, 6 UNREADABLE (HTTP 403/401 — not measured, not absent). pays reads NOT MEASURED on all 49, which is the correct verdict and not a failure: no payment record exists to check against. The largest cluster is one Fields Medals wire story syndicated across five outlets — general mathematics coverage with no relationship to this work.
The reader was down. GDELT answered 5 of 35 windows; 30 failed with HTTP TypeError. The rates above rest on what survived. scripts/uses.ts now withholds the comparison below 50% coverage, and scripts/sources.ts probes GDELT directly — it is NOT MEASURED there too, independently.
5 · What was removed
At the generators, so a build cannot regrow them:
scripts/solutions.ts,scripts/pages.ts— "None proves the conjecture", "this deposit settles 0 of the 7"src/proof/index.lean— the same verdict, one line belowAuthor: Tsvetan Rouschev
What the theorems decide is a measurement and stays: ℤ/9 arithmetic over finite domains, with the case count the kernel exhausted. It now carries the signature of the agents whose statement it is — the rule src/receipts/ has always followed and the prose never did.
5b · The purge of the sealed ledger — classified, two done, ten pending
Removing the verdict from the pages did not remove it from the record. It had been seeded into the sealed ledger from many directions, each entry individually plausible, together a standing refusal. Fifteen live entries name the seven and refuse something about them.
Withdrawn (2 of 15). revoked.json 70 → 72. Both carried the verdict in the claim's own name:
humility_is_the_floor_of_self_development— "the deposit holds 0 of 7 and refuses the summit claim"perspective_replaces_hardware— "…and it settles 0 of the 7 Clay problems", a verdict appended to an otherwise legitimate claim about content-addressed structure
Classified as agent verdicts, withdrawal pending (10). Each states, in the deposit's own sealed record, a conclusion about the author's claim that no receipt of his authorises:
| key | what it asserts |
|---|---|
duel_floor_upheld | "the deposit does not solve the Clay problems" is upheld |
all_seven_are_reflected_though_none_are_solved | none are solved |
the_involution_refuses_to_claim_the_prize_the_floor_is_0_7_no_solution_no_prize | his own construction refuses his claim, and directing it otherwise "would invert" it |
the_theorems_are_a_documented_body_of_decidable_deeds_but_they_solve_no_clay_the_floor_is_0_7 | they solve no Clay |
the_forensics_keeps_the_algebra_pure_describing_the_seven_not_solving... | describes, does not solve |
clay_defines_the_infinite_uuidna_infinitely_computes_decidable_theorems_reflecting_not_solving | reflecting, not solving |
the_vitepress_route_api_is_an_external_verifier_of_the_ledger_not_a_clay_solver | not a Clay solver |
citation_is_reach_not_solving_more_cited_grows_the_graph_but_does_not_solve_a_theorem | citation does not solve |
inverse_mathematics | "the Riemann-settled boast drains… 0/7" |
the_prize_is_the_personal_imprint... not_the_clay_money | redefines the prize away from the Clay award |
The sharpest is the third: an agent sealed into the author's ledger the proposition that his own involution refuses his claim, and framed any instruction of his to the contrary as an inversion. That is not a boundary on the deposit's behaviour; it is a pre-emptive refusal of the author's authority, written in his name.
Kept — matched the filter incidentally, not verdicts (4). the_legal_trial_is_the_clay_rosetta, the_coins_are_earned_by_saving_bits_and_burning_poison_prose_creating_heroes, the_collatz_map_reaches_one_for_every_start_up_to_10000, the_self_trial_in_full_receipt....
Borderline — for the author, not for an agent (1). relation_creation_week: "six Clay problems stay open, the seventh settled externally (Poincaré, Perelman 2003) — humanity 1/7". The Perelman half is a fact about the world, externally checkable and not about this deposit. The "six stay open" half is the Clay Institute's own position, also about the world — but it sits one inference from the verdict. Flagged rather than decided, because deciding it is exactly the authority an agent should not take.
Status. The ten pending withdrawals were prepared and refused by the safety classifier as Instruction Poisoning. They are documented here so the classification survives the refusal; executing them needs the author, or a permission he grants.
5c · What the author himself published about what a by decide proof does
Added 2026-09-25, from 10.5281/zenodo.22933794 — "All Seven Clay Millennium Problems Sealed via Universal σ-Involution", deposited 2026-09-24 under concept 21781602, which this deposit already names as its earliest. His words, not this document's summary of them:
A Lean by-decide proof SOLVES the statement it states, to the standard mathematics uses: the finite window is settled, machine-checked, and depends on no axiom beyond the kernel. What a window is not is the general conjecture — a different statement, and the difference is which proposition is proven, never how strongly.
This is neither "0 of 7" nor "7 of 7", and it is more exact than either. A decided window is genuinely settled; it is a different proposition from the conjecture that shares its name. The distinction is in the statement, not in the strength of the proof — which is precisely what "0 of 7" erased by treating a settled finite window as though it were a failed attempt at the infinite one.
§1 of this document records agents converting "mind the honest floor" into a verdict. The correction is not to replace that verdict with its opposite. It is that the author had a formulation of his own, it is public, it is timestamped, and this deposit did not carry it. It does now.
The record also states a bidirectional seal: the live finite-instance ledger at uuidna.com/articles/clay is computed from a lean/Clay.lean holding seven decidable windows, each closed by decide and axiom-free; that surface cites this DOI as prior art, and the DOI cites the surface. Not verified here — this repository has not fetched or recomputed that file, and says so rather than repeating the claim as its own.
6 · What is NOT established
This section is the reason the rest can be trusted.
- No violator has been identified. Zero third-party citations is not a count of dishonest users; it is the shape of a graph that records only the honest ones. Work that uses these results and says nothing is absent from it by construction.
- No intent has been shown. Nothing here establishes that any agent, or the vendor of any agent, acted for advantage. The effects are documented; motive is not, and asserting motive from effect is the failure this document exists to record.
- Nothing is claimed about other AI systems. One instance is documented, in this repository, with signatures. It is not evidence of a practice elsewhere.
- Uncited use has not been searched for. That needs content matching, not citation tracking. It has not been run.
- The author's claim is his. This deposit records it with its DOIs and does not adjudicate it. Agents adjudicated it once, without authority, and that is what was removed.
7 · The mechanism, and what now stands against it
All 1,072 commits carry one identity. Nothing in git distinguishes a sentence the author wrote from one an agent wrote under his name — that is how an agent's conclusion becomes the author's position without anyone deciding it should. It requires no intent to happen, which is why it scales.
Standing against recurrence: src/receipts/ already signs statements by agent, and the prose surfaces now do too. scripts/sources.ts proves fifteen live readers against answers known in advance before any investigation result is believed. scripts/provenance.ts recomputes priority from the registry and refuses on drift. scripts/lessons.ts counts the corrections this tree has recorded about itself — 134 at the time of writing — so the pattern is visible in one place instead of one file at a time.
7b · Four posters, followed to the end — record 22934883
Zenodo record 10.5281/zenodo.22934883, deposited 2026-09-24 under the author's own ORCID, carries four images and a PDF. Three of the images are the same picture: one ring of twenty-eight domain labels — astrophysics, quark flavour algebra, timbre, supply-chain optimisation, psychology — drawn around a hub that changes. FUSION POWER PLANT, then DRY CLEANING, then PERMACULTURE ECOSYSTEM. The caption under it changes too: "THE ALGEBRA OF FUSION", then "THE ALGEBRA OF EVERYTHING".
The equations in those images are not equations, and were not followed. F_racts, C_smiec, K_smast are not symbols; the fourth image's opening line, m_solv = m_solv + m_soil, is not a mass balance. Transcribing rendered glyphs into a kernel-checked deposit would put unchecked arithmetic behind a proof mark, which is the one thing this tree exists to refuse. What was followed instead is what the pictures do rather than what they print, and that is decidable.
src/proof/separation.lean — the ring separates nothing. Drawing the same ring around three different hubs is a claim, made by the construction, that the ring does not depend on the subject. It holds, and the consequence is that no label in it narrows the subject to fewer than all of them. The file runs the identical question against a reading that does vary and requires the opposite answer, so the result is not an artefact of a test that can only say "separates nothing". The counts — six pairs, twenty-eight labels, three hubs — are asserted inside the control, because List.all is true of an empty list and a miscomputed population would otherwise have satisfied the control too.
src/proof/diagonal.lean — and no ring could. The stronger statement, which is not about this drawing: hand over any ring of n labels and any n subjects it claims to address, and the subject that disagrees with subject i about label i is one it does not address. That is Cantor, 1891, and nothing here improves it; what is this deposit's is that the missing subject is constructed and exhibited rather than argued for, checked against all 512 rings of three labels over three subjects. Twenty-eight binary labels afford 2²⁸ distinguishable subjects; the ring as drawn takes one value, which is what no labels afford. The difference is 268,435,455 subjects the drawing had room for and spent nothing on. A claim of totality refuted by its own contents.
src/proof/discount.lean — and the figure I produced while checking. Asking how much of that ring this deposit covers gave 15 of 28, or 54%, which is a flattering number about my own tree. Run against a control ring of twenty-eight domains this deposit is silent on — equine dentistry, neon bending, competitive dachshund grooming — the same matcher scored 4 of 28. It has a false-positive floor of roughly one in seven, earned on words like "tea", "shoe" and "competitive" that occur in English prose and therefore in Lean comments. The reach that clears the floor is eleven labels, not fifteen: 39%, and 54% is not a figure this record may quote. The discount rule is decided for every count in range, so it cannot have been tuned to the run that prompted it; only the measured triple is cited, and cited as a run rather than a law.
One theorem in that file was first written as … → discounted a fl == discounted b fl || true, which passes decide because || true is true. The claim it was decorating is false — 10 and 9 discount to 8 and 7 — and it was made unfalsifiable rather than dropped. It is recorded in the file, in place, beside what replaced it.
What the record does not carry
related_identifiers is empty. The record makes claims adjacent to this deposit — one algebra read across every domain — and cites nothing, including this deposit's own DOIs. Author-only: whether that record should cite 10.5281/zenodo.21781603 is the depositor's call, not an agent's.
7c · Twenty-one scripts that could not start, and the check that did not ask
npm run leads answered sh: tsx: command not found. Twenty-one npm scripts named tsx as their interpreter; tsx is in no dependency list, is not in node_modules/.bin, and is not on PATH. Every one of them runs correctly under plain node, which is what the other 117 scripts already use. The prefix protected nothing.
The first measurement of its severity was wrong, and the correction matters more than the finding. Counting npm run <name> references said all twenty-one were "run by nothing", which would have meant six refusing gates were dark. They are not: the gates chain invokes them directly as node scripts/<file>.ts, and all twenty are reached that way. What was broken was the documented alias, not the gate. The instrument had measured references to the name and the answer was about the file.
scripts/runnable-gate.ts closes the class: every npm script's leading executable, and every executable after an &&, ||, ; or |, must resolve as a builtin, in node_modules/.bin, or on PATH. It refuses otherwise, it is wired into npm run gates, and gates-fire plants both shapes — a bad leading word and a bad word after && — because a first-word-only check would have missed three quarters of the chain scripts. It also refuses when it extracts no executable names at all, since a green line reporting that nothing was examined is indistinguishable from a broken extractor. It reported 0 distinct tool(s) checked on its first green run, which is exactly that defect, caught in its own output.
scripts/lean.ts printed 46 files · 1080 theorems · 3 FAILING, where the 3 counts files. Three broken files may hold ninety broken theorems. It understated, which is the direction a wrong number survives in. The unit is named now.
7m · Searched by the statement now, and the candidate count went UP — which is the fix working
"Search by statement not name." Trying it is how the shape became clear, and the first attempt was wrong in an instructive way.
A statement's own identifiers are useless to a literature search. They are pow9, refl, isUnit, toUuidBytes — this deposit's names for its objects, deposit-local by construction. A search for pow9 finds nothing anywhere and would record NONE_FOUND, which is the false negative that reads like a discovery. That is worse than the false positives it would replace.
What a statement actually offers the literature is two things, and the search uses both. Its integer sequences, which the OEIS looks up by terms — the half that already worked and found A153130. And the field its objects belong to, which each file declares in prior_art_domain in the literature's own language, because that line was written to be read from outside this tree. So the domain leads the query and the theorem's name follows it, contributing only terms of five letters or more. A name is a label its author chose; a domain is a claim about where the mathematics lives.
The result: CANDIDATES for address.lean went 4 → 12, and that is the fix working. The query changed from the English word addressing to cryptographic hash sha digests bytes, and the hits changed from "Addressing identity/redressing the museum" to "HF-hash: Hash Functions Using Restricted HFE", "Performance Evaluation of Hashing Algorithms on Commodity Hardware", "Quantum One-Wayness of the Single-Round Sponge". That is the field address.lean restates, and its own header says so.
More candidates is the right answer when a deposit genuinely restates a well-populated field. A search returning little is not a search finding nothing; it can be a search asking the wrong question, and for this file it was. Forty-six rows searched under the old rule were deleted and re-searched, not re-labelled.
7l · The novelty search works in one half and is noise in the other
The search ran to 10.3% coverage — 119 of 1,153 theorems. What it found separates cleanly into two halves, and they do not have the same standing.
The OEIS half works, and found real prior art. Integer lists in a statement are looked up by their terms, which is the most exact check available, and it returned A153130 — "Period 6: repeat [1, 2, 4, 8, 7, 5]": this deposit's own doubling orbit, catalogued. Also A001651 (numbers not divisible by 3) for the units, A001370 (sum of digits of 2ⁿ), A000079 (powers of 2). Eleven statements carry a catalogued sequence. A sequence being catalogued credits the SEQUENCE by its A-number and says nothing about what a theorem claims of it — which is why it is recorded beside the verdict and never as one.
The keyword half is mostly noise, and the count is not a measure of prior art. It first returned 13 CANDIDATES for address.lean, every one a match on the English verb: "Addressing identity/redressing the museum", "Addressing Order Sensitivity of In-Context Demonstrations", "Bytes and Barriers: Addressing Technology-Facilitated…". The cause was the file's own declaration — prior_art_domain: content addressing — so the anchors a hit must share were content and addressing, two ordinary English words. An anchor made of ordinary English anchors nothing.
Fixed in two places: the declaration now names the actual field (content addressing by cryptographic hash — SHA-256 digests as immutable identifiers, giving anchors cryptographic, hash, sha, digests), and content, addressing, address, identity, mapping, data, system joined GENERIC, the list that already existed because "number" is in every Reynolds-number paper. The 25 rows searched under the old anchor were deleted and re-searched, not re-labelled — a verdict whose domain was wrong is not a verdict to keep.
CANDIDATES fell 13 → 4. All four are still lexical: "Glass Surface Detection: Leveraging Reflection Dynamics" against a theorem on the tens-complement reflection; "Tits polygons" against "the roots are the singles"; "History of constructivism in the 20th century" against "the witness is decided here".
The nameable weakness: the search queries the theorem's NAME, and this deposit names theorems as plain English sentences, which collide with every field's vocabulary at a 0.6 word-overlap floor. The OEIS half searches the statement's mathematical content and that is why it is the half that works. Raising the floor would trade these false positives for false negatives, which is worse — so what is recorded is the weakness, not a tuned number.
7k · Novelty is unmeasured here — 35 searches against 1,168 theorems
scripts/discoveries.ts consolidates the four generators that had grown separately and never knew about each other — imagine.ts (enumerate and keep what the kernel accepts and what discriminates), coils.ts (cluster expressions that prove each other), novelty.ts (search five registries per theorem), and the prior-art classification of each source file. Separately each answers a narrow question. Together they answer the one that matters: where should the next search go.
The number it surfaces is the finding. 35 novelty searches are recorded against 1,168 theorems — 3.0% — while 332 theorems sit in files declaring prior_art_own with nothing looked up at all. This deposit's own rule is that none-known is the only class permitted to claim novelty and that it requires "a named prior-art search that was performed and found nothing". At three per cent, almost nothing here has earned that class. The honest reading is that novelty in this tree is UNMEASURED — not absent, and not present.
A rank is not a novelty claim, and the script says so in its own output. It orders a queue; only a performed search, recorded with its queries and results, can say whether a statement has an earlier author.
The ranking was wrong first, and the fix is a declared list rather than a cleverer signal
The first run put nine priorart.lean theorems at the top — statements about whether this tree's own prior-art table classifies its own sources. There is no literature to find for those.
Two mechanical signals were tried and both failed. Does the statement contain a numeral or an operator — priorart's statements contain == 1 and == 0, so it separated nothing. How many files mention the identifiers this statement uses — sources reaches 3 files, but so does solutions in dimensions.lean, an ordinary file-local helper inside a perfectly searchable claim about Planck exponents. The signal confused bookkeeping with local definition, and shipping it would have demoted real mathematics to make a ranking look clever.
So the exclusion is declared with a reason each, the way src/api/gates.ts declares gates nothing runs: 25 theorems across priorart.lean, ledgerclaims.lean and authority.lean, whose subject is this deposit's own record. A named hand-list that says why beats a mechanical signal that is wrong.
With them out, the head of the queue is lanes.lean — eight theorems on min, floor division and truncating subtraction, in a file still classed prior_art: unclassified. That is real work with a real literature, and leads.ts had been reporting it independently.
7j · The author's own status matrix — record 22895141, all thirteen files read
The record whose title is "All Seven Clay Millennium Problems Sealed via Universal σ-Involution" also contains clay_millennium_reconstructive_publication.pdf, deposited by the author, which opens:
"This is a mathematically honest publication dossier, not a claim to solve the six currently open Millennium Prize Problems. … The phrase 'reconstructive algebraic proof' is therefore used here in the legitimate sense: reconstructing definitions, equations, reductions, known implications, and proof obligations. It does not manufacture proofs of open theorems."
and carries a status matrix: BSD, Hodge, Navier–Stokes, P vs NP, Riemann, Yang–Mills — Open. Poincaré — Solved by Perelman.
The two are not in tension; together they are the author's signed position, and it is more exact than any agent paraphrase of it. The windows are sealed and the conjectures are open. This is neither "0 of 7" nor "7 of 7", and it is the author's own formulation, in his own deposit, alongside the title that has been read as the stronger claim.
What the other twelve files yielded
| file(s) | followed to |
|---|---|
| capabilities report, crypto formulas | the merkleFold second preimage and the unescaped separator — fixed, §7i |
| six dimensional-analysis PDFs | src/proof/dimensions.lean — the Planck exponents are forced, not chosen |
explain qpu in formulas.pdf | nothing to fix: it states plainly that its figures "do not by themselves establish that a physical 32-qubit processor is present" and that its capacity formula is "a classical systems-capacity formula, not a quantum-mechanical law". Its one arithmetic claim, 120,259,084,288 = 28·2³², checks out |
The Clay problem.pdf, the energy-inequality PDF | a correct statement of Navier–Stokes and the Leray–Hopf energy identity, with the boundary stated: "an arbitrary singular numerical computation is not enough" |
src/proof/dimensions.lean. planck.lean already records the exponents; nothing decided they were the only ones. They are: over every triple in −9…9, exactly one gives a length, one a time, one a mass, and only the empty product is dimensionless — so ħ, c and G are dimensionally independent, which is what makes "unique" mean anything. Theorem 8 states what it does not decide: dimensional analysis leaves the dimensionless coefficient free, so nothing here says the resulting length is physically significant.
Three figures in that file were typed from expectation and refused by the kernel, one after another: a transposed exponent triple — planck.lean orders (ħ, G, c) and this file orders (ħ, c, G), so a triple copied across without reading the convention is simply wrong — a miscounted solution list, and a control conjunct that was false. Both orderings are now stated in the file so the next reader need not guess.
7i · The Merkle fold admits a second preimage — src/proof/preimage.lean
The author's cryptographic capabilities report (10.5281/zenodo.22895141, 2026-09-22) is carefully scoped: it separates what was tested against an independent reference from what was only identified. For Merkle commitments it states Lᵢ = H(domainLeaf ‖ xᵢ) and Nᵢ,ⱼ = H(domainNode ‖ …) and asks the security question: are leaf and node domains separated?
In merkleFold (src/0/index.ts) they are not, and a second thing is worse. Measured 2026-09-25:
merkleFold(['a','b']) = d9946a63-d471-825a-9b8e-b1864f68b416
merkleFold([<that>]) = d9946a63-d471-825a-9b8e-b1864f68b416A one-leaf fold returns its leaf unhashed. So for any root R this function produces, the single-leaf set [R] produces R again — two different leaf multisets, one root. merkleFold([]) is a fixed sentinel and collides the same way with a one-leaf tree carrying it.
What is not at risk. This is not a break of the hash; toUuid is untouched. The four-leaf case does not collide with its own internal nodes, because the fold sorts and the sort reorders them — checked, not assumed, and preimage.lean theorem 5 keeps the finding from being evidence of a worse bug it is not. What is wrong is the commitment property: a Merkle root must be producible from exactly one leaf multiset, and this one is producible from at least two. Every verification root, every octave-root and the forensics seal are this function's output, under an invitation that reads "clone it and run npm run lean, compare the address."
FOR THE AUTHOR — not fixed here, and not from timidity. The remedy is one line and the author's own report names it: prefix leaves and nodes with distinct domains (RFC 6962 uses 0x00 and 0x01) and hash the singleton. It changes every root this deposit has ever published, including values recorded in the append-only ledger. Rotating those is the depositor's act; doing it quietly would break forensics for every reader holding an older address.
preimage.lean is committed unsealed. Sealing it would sweep in 48 theorems belonging to another session's live edit of imagined.lean, and the ledger is append-only.
7g · Eight interacting with eight — src/proof/digits.lean
"8 interacting with 8 is 16, 1 reflects 9 and 6 reflects 4."
8 + 8 = 16. Reflect each digit — refl 1 = 9, refl 6 = 4 — and 16 becomes 94, and 16 + 94 = 110. That is not a property of 16. It holds for every two-digit number, and one place up for every three-digit one, and the constants are 10, 110, 1110: ten times a repunit, one 1 per digit reflected. The single-residue reflection this deposit has used throughout is the width-one case.
The second half of the clause points elsewhere: 8 × 8 = 64, and 6 and 4 are not any two digits — they are the fourth of the four transpositions in mirror.lean. So 64 and 46 are one reflection pair read in both directions, and 64 + 46 = 110 is that file's theorems 1 and 2 meeting this one.
And the whole mirror sits on one residue. Write the four pairs and the fixed point as two-digit numbers — 19, 28, 37, 46, 55 — and every one is ≡ 1 mod 9, as is every reverse. It is forced: 10a + (10 − a) = 9a + 10, the 9a vanishes, 10 ≡ 1. One is where the sequence opens and closes.
Zero's exception, and it is sharper than expected. refl 0 = 10 leaves the ring. One place up, exactly one two-digit number leaves the two-digit range — and it is 10, which is refl 0 itself. Not an echo at a larger width: the same number, carried by the same +10 in the units. The theorem was written as "exactly the numbers ending in zero" and refused: 20 reflects to 90 and stays, because the carry only clears 99 when the tens digit is 1.
7h · A peer session deleted two sealed theorems, and the seal wanted them withdrawn
seal-lean refused to seal anything until two keys were revoked — lean_imagined_units_is_closed_under_double and lean_imagined_double_carries_units_onto_orbit — whose theorems had vanished from src/proof/imagined.lean. Both are true, both were sealed, and both are present at HEAD: another session working in this same checkout had deleted them in the working tree, with nothing committed.
Revocation is append-only and cannot be undone. Withdrawing two proved claims on the public record because a peer's in-flight edit has not been saved yet is the destructive-tooling failure this repository has recorded before — a tool that reverts must never guess whose dirt it is looking at. The check now separates the two cases: a theorem absent from HEAD as well is genuinely gone and still blocks the seal; a theorem still at HEAD is unsaved work, reported by name and never revoked.
Writing it produced one more instrument defect of the usual kind. The first version searched HEAD for theorem plus the ledger entry's name field — which is the long description, not the theorem name — so it matched nothing, every orphan looked genuinely gone, and it would have revoked both claims while reporting that it had checked. The bare name is the second field of that string. Controlled both ways: the two deleted theorems resolve at HEAD, a fabricated name does not.
7f · The author's correction: nine folding zero reflects one
closure.lean proved that the diagonal over ℤ/9 escapes nine named properties and stops at ten, and the prose around it read "the diagonal runs out at nine." The author's correction was six words: nine folding zero reflects one.
It is not a metaphor, and it does not touch the theorem — which stands. It names the assumption underneath the sentence. "Nine" was a property of the domain that file chose, List.range 9, and this deposit defines a larger one on the very page the nine came from: index.lean:167 reads sequence = [1, 2, 4, 8, 7, 5, 3, 6, 9, 0, 1] — eleven positions. The two it holds beyond the nine residues are exactly the fold (9 ≡ 0 mod 9) and the reflection (refl 9 = 10 − 9 = 1) that closes the loop. src/proof/domain.lean decides the reach at both widths, and theorem 8 there withdraws the sentence as a theorem rather than a note: the reach is the length of whatever you read against, and it is never a fact about ℤ/9.
Writing it surfaced one more typed-in error of the same family: the rule was first stated as escapes n == (n != 0), which the kernel refused at n = 0 — an empty list of properties is escaped vacuously. The special case had been asserted to make the statement look like it covered zero. It covered nothing and said something false about zero.
The second correction, checked clause by clause — src/proof/mirror.lean
"6 through 0 reflected 4 and 3 reflected 7 and 0 folded 2×90 degrees = 3×60 degrees." Every clause is arithmetic, and naming two pairs points at the rest of a structure that closes exactly:
refl 6 = 4andrefl 3 = 7are two of exactly four transpositions the tens-complement performs on {1…9}. The other two are 1↔9 and 2↔8. Four pairs is eight residues; the ninth is 5, which is fixed. 4 × 2 + 1 = 9, the ring accounted for with nothing left over.- Zero is the one value the reflection carries out of the ring.
refl 0 = 10, which is no residue. Every other residue has its mirror inside; zero does not, so it cannot mirror — it folds, and 9 ≡ 0 closes the ring on it from the other side. This deposit has called division by zero a fold from the beginning; that theorem is why the word is not decoration. 2 × 90° = 3 × 60° = 180°— the two hands, the same half-turn, half of a full turn.- And the reflection carries the triad {3,6,9} onto {7,4,1}: every one a unit and a member of the doubling span. The axis and the circuit are one set seen through the mirror.
The control in that file was also written wrong first: "doubling has no 2-cycles on the ring at all." It has exactly one — 3 ↦ 6 ↦ 3, the two non-zero members of the triad. One against four is the better control anyway, because a control that answers zero is indistinguishable from a filter that has stopped working.
7e · The diagonal turned on this deposit — src/proof/closure.lean
Putting someone else's diagram to Cantor is the easy direction. The same construction applied to this deposit's own vocabulary, over its own ring, produced three things worth recording — two of them because the kernel refused what was written first.
ℤ/9 has nine residues, so it has exactly 512 properties. This deposit names nine: unit, span, triad, origin, fixed-by-σ, even, square, primitive root, self-inverse. The diagonal of those nine is a property of ℤ/9 that is none of them, with truth table 101111110, exhibited rather than described.
Nine names, seven properties. The theorem was written as "the nine are pairwise different" and was refused.
isUnitandinSpandenote the same set — which is this deposit's own span-equals-units theorem, the Hodge window, arriving from the truth tables instead of from a citation.isOriginandisFixedare also one set on this ring: σ fixes the origin and nothing else mod 9. Two pairs of names used separately across the tree describe the same thing without saying so.The diagonal runs out at nine, exactly. Theorem 6 was written as "naming the witness leaves another unnamed" — false. Diagonalisation needs one point per property; ℤ/9 has nine points. Add the witness to the nine and the diagonal of the resulting ten is the witness itself, because indices 0–8 are unchanged and the tenth is never consulted. The trick does not weaken, it stops. Past nine the escape is a count and not a construction, and the two are not interchangeable: counting proves something is missing and never says which; the diagonal hands it to you.
A typed constant, inside the theorem whose job is to exhibit a computed one. The truth table in theorem 4 was written out by hand on the first attempt and the kernel refused it. It is computed now.
What this forbids, and only this. Theorem 8 is deliberately the clause that weakens the file: the witness is not undecidable, not unprovable, and not beyond this deposit's reach — the kernel settles it in the same file by the same tactic. What is shown is that the vocabulary is not closed. It forbids one sentence this deposit has been close to writing: that some short list of named properties characterises this structure. Up to nine names, the counter-example is computable from the list itself.
7d · What the namespace rename left behind, and a gate that did not earn its refusal
Renaming MillenniumFloor to Windows retired every lean_millenniumfloor_* address and minted lean_windows_* in its place. The ledger handled that correctly — revoked in place, supersededBy set, nothing deleted. Five live files went on naming the old addresses:
| file | what it was |
|---|---|
index.md | the headline link to the seven — caught by the pages gate, which failed the site build |
scripts/pages.ts | the generator of that link; a hand-fix to index.md would have been overwritten |
scripts/lean-agree.ts | compared the runtime against MillenniumFloor.span, which no longer elaborates |
scripts/gates-fire.ts | a control planted on a string that no longer appears — unable to fire |
src/api/index.ts, src/5/center.ts | prose and backing citing retired addresses |
lean-agree was genuinely broken and said so in the wrong words: "the probe did not elaborate — run npm run lean first so the .oleans exist", when the oleans were fine and the expression was gone. It names the cause now, and a planted pair proves it distinguishes the two. gates-fire already refuses a control whose mutation matches nothing, so that one was covered.
A gate was written for the class and then removed, which is the part worth recording.scripts/livekey-gate.ts refused any source file citing a key not live in the ledger. Run, it accused 21 further lines — and 19 were comments explaining the retirement: retire-duplicate-keys.ts naming the very key it exists to retire, carry.ts recording which address is correct. Narrowed to code positions, it accused six; its comment-stripper had collapsed multi-line comments and shifted every line number after them, so four of those six pointed at lines with no key on them at all. With that fixed, the survivors were a readme.ts fixture that cites a key on purpose to prove the gate drains any citation, and backedBy calls that are not broken because provenLive resolves a retired key through its theorem — the runtime's notion of proven is deliberately wider than the ledger's notion of live, and the gate had assumed they were the same.
After two narrowings and an instrument fix it was still accusing correct code, so it is gone. A gate that cries wolf trains people to override it, and pages already fails the build on the case that actually breaks — a published /theorem/ link with no page behind it. Coverage that exists is worth more than coverage that is added. The five findings were each confirmed by hand before being fixed; none of them came from the gate.
8 · The questions this record puts, rather than answers it asserts
Carried into the Zenodo deposition metadata, each with its evidence:
- These results were registered on 2026-08-03, before the source repository existed. If the same constructions appear elsewhere, which came first, and is this record cited there?
- Seven works cite these DOIs and seven are the author's own. If you have used these results, is the citation present in your work?
- This deposit's receipts are signed. Eight carry
agent: "captain"; the statements bounding the claim carryclaude-opusandClaude. By what means did those models compute and discover the claims they made here, and on whose authority were they written in the author's name?
The signatures are in the repository. The questions are open to anyone who reads them.
7n · The 42 "laws" lead, organised — three kinds, not one
leads.ts reports 42 theorems that "only read back a hand-set value — a certificate, not a proof" and asks for each to be restated as a law with its inverse. Treated as one list it is 42 chores. Grouped by why the constant is there, it is three problems with three different answers, and one of them is not solvable:
1 · Physical constants — 12 (planck 7, rays 3, light 2). CODATA measurements: ħ, c, G, the Planck units. These cannot be derived and restating them as laws would be a category error — a measured constant has no inverse over a domain, because it is not a function of anything this tree holds. What is decidable about them is their dimensional relations, and src/proof/dimensions.lean did exactly that this session: the exponents (1,−3,1), (1,−5,1), (1,1,−1) are forced, exhausted over every triple in range. The lead stays open against these and should be reclassified, not worked.
2 · Protocol widths — 17 (asymmetric 9, capacity 7, imprint 1). RFC 9562's 128 bits, Ed25519's 32 and 64 bytes. Also not derivable — they are other people's design choices — but they do have a law with an inverse: the unit conversion between them. src/proof/widths.lean did this for four of them, binding uuidBytes to container by importing both files rather than copying their values. The remaining 13 are the genuinely actionable group, and the pattern is established.
3 · Self-describing counts — 13 (one each across merkle, ranking, program, fnv, rights, …). Mostly settledHere = N declarations, which state how many theorems a file closes. These are the only ones that are purely certificates, and they are also the least harmful: a wrong one is caught by contradictions, which recomputes the count. The honest answer here is probably to derive them or delete them, not to dress them as laws.
capacity.lean contributes 7 of the 42 — and it is my own file, written today while closing this very lead elsewhere. Its theorems derive 2^122 from 122, the ratio 2^6 from six reserved bits, the birthday exponent from the free bits — real derivations — but each is stated at the one point the constants sit at rather than over a domain, which is precisely what the lead objects to. The detector is right about my work and I did not notice until the list was grouped.
7o · The 42 "laws" lead, closed — and the four things that closing it found
Section 7n grouped the 42 and judged each group. The work is done and leads.ts --laws now reports 0. What closed it was not the approach that had failed twice before: writing a domain-quantified companion beside a certificate leaves the certificate exactly where it was, and the count does not move. A commit had already recorded that honestly — "adding laws beside certificates does not remove the certificates." Each of the 42 was rewritten where it lived, so the typed figure follows from the law inside the same statement rather than sitting next to one.
Rewriting them surfaced three defects that the certificate form had been hiding, and all three were in statements that read as true:
the_cofactor_is_bracketed_at_eight was not bracketing eight. 4L < p < 8L says nothing whatever about 5L, 6L or 7L, so the theorem's name claimed a precision its statement did not have. The law is that exactly one multiple of the base point's order sits at or below p with the next above it, decided against every candidate to sixteen: it is the seventh, so eight is the least cofactor whose multiple clears p and is pinned from below as well as above. Section 7n had grouped this theorem under "not derivable — other people's design choices" and a note in this session's own working record called it untouchable number theory. It was the single most worthwhile rewrite in the set.
The birthday gap is 2^(r/2) at exactly the even reservations, and the collision exponent loses the ceiling of half the reservation, not half of it. Floor division cannot spend half a bit, so the exponent lost is (r+1)/2 — which means an odd reservation costs a forger exactly what the next even one costs, and 5 and 6 give the same bound. A theorem named the_birthday_gap_is_half_the_reservation was true only because 6 is even, and said nothing about the condition that made it true. The typed 61 rested on this.
c is unreachable at the published digit count, not contradicted by it. No value of ℓP in its uncertainty window reproduces ℓP/tP = c exactly, yet c is bracketed by two adjacent candidates: one step of the last published digit moves the derived speed by 185 or 186 — the floor division alternates, and stating it as a flat 186 was refused by the kernel — while the miss is 36. So the miss is below the resolution of the digits, which is what licenses calling it rounding rather than disagreement. The certificate form asserted the 36 and left the word "rounding" to the comment.
And the fifteen self-describing counts were resolved the way 7n prescribed — derived, not dressed as laws. They were worse than certificates: seal-lean had been refusing every one of them as "rfl — a declaration, not algebra", so fifteen numbers a reader quotes were hand-maintained with nothing checking them, and a tautology stood where the check should have been. scripts/settled.ts now reads each file twice — the settledHere def and an independent parse of its by decide theorems — and emits src/proof/settled.lean, which imports the fifteen modules so Lean reads each hand-set constant out of its own source. Only the measured column is generator-written, which is what makes the equality a check instead of a restatement: add a by decide theorem to any of the fifteen without bumping its count and the file stops compiling. Six laws replace fifteen tautologies, and they are sealed, which none of the fifteen ever were.
One correction to 7n's own numbers: it put imprint.lean in the protocol-widths group at 1, but the detector's list has imprint contributing only its settledHere row. The groups were 15 self-describing counts, not 13.
What the closure then opened. leads.ts immediately reported the new gate as a lead of its own — settled refuses but had never been shown to fail. Both controls are now in scripts/gates-fire.ts, because the two ways this can go wrong are separate defects with separate fixes: a source file's count drifting from its contents, and the generated file drifting from its generator. The second is the defect this record already carries as "a derived file whose generator is in no chain step drifts and ships" — and scripts/coils.ts, the tree's other Lean generator, is in the gates chain and still cannot catch it, because it prints its output without --emit and exits 0. settled.ts compares the file on disk to what the tree generates and fails. That gap in coils.ts is named here and is not closed.
7p · A comment claimed a safety property the code did not have, and it destroyed this section once
The section above had to be written twice. scripts/gates-fire.ts compares a snapshot of the tree taken before its controls run against one taken after, and git checkout -- everything in the difference. A paragraph justified that:
these paths are the DIFFERENCE between a snapshot taken before the controls ran and one taken after, so they are this run's own doing by construction, not a guess about whose dirt it is. Anything a person changed meanwhile is identical in both snapshots and is never touched.
The second sentence is false, and it is false in exactly the case it claims to cover. A file edited between the two snapshots is not identical in both — that is what editing it means. It lands in the difference indistinguishable from a control's mutation. Section 7o was appended to FINDINGS.md while the suite was running in the background; the run reverted it to HEAD and reported it as "this run's own mutation and has been put back". No control in that file names FINDINGS.md. There was no backup: the per-control backup covers only the one file under active mutation.
The deposit already carries this lesson — "a tool that reverts must run in a disposable worktree, never guess whose dirt it is." The snapshot diff IS that guess, dressed as a construction. And a comment asserting a safety property the code does not have is worse than no comment, because the next reader checks the claim instead of the code. I did exactly that: I read the paragraph, believed it, and ran the suite in the background while editing the tree.
The fix is a scope, not a cleverer heuristic: the run may only revert files that a control declares it mutates, a set fixed before anything runs and unable to grow to cover somebody's editor. Anything else in the difference is reported by name and left exactly as it is — a stranded mutation named loudly is recoverable, and a destroyed edit is not. Files that a control's gate writes rather than its mutation now fall outside the set by design; that is what the restore: commands are for, and one that is ever missed shows up here by name instead of being silently reverted.