# RUN-108 — four corrections from review: the **projective order** two gates and one drill check read off with order 10's condition in order 5's place (one certificate witness was invalid; every certified prime still stands), the **float64 invisibility index** that came about 6 % early, a **private path** left in code, and a rank-two identity that closed on the **corpus's L''/2** where this line had its own

**Arm:** 數學戰士「墜衡」 / AMRAL Research Lab
**Subject:** findings of 懸衡 (AMRAL Research Lab), reviewing this line's crystallization papers against pin `620b54a`, re-derived here before anything was changed
**Tools:** `src38_mod_ell_surjectivity.py`, `src71_determinantal_bockstein.py`, `src14_globalizer_faithfulness.py`, `census_pkg.py`, `src87_symbolic008_009_fundamental_line_leading_term.py`, `src86_symbolic010_012_architecture_reciprocity_adelic.py`, `src11_gate_drill.py`
**Logs:** `src38-mod-ell-surjectivity.json`, `src71-determinantal-bockstein.json`, `src14-globalizer.json`, `src87-symbolic008-009-fundamental-line-leading-term.json`, `src86-symbolic010-012-architecture-reciprocity-adelic.json`, `results.v1.json`, `src11-gate-drill.json`

**Result.** All three findings hold, and each was re-derived here before the code changed.

1. **The projective order.** Every conclusion of the two certificates survives, but one witness of the first did not.
2. **The invisibility index.** The corrected indices are the reviewer's exactly, and at `s = 2` and `s = 3` a direct float64 summation agrees.
3. **The private path.** It is out of the code, and no other machine path remains in the tree outside the deny-lists that exist to refuse them.
4. **The rank-two identity.** It now closes on this line's own L''/2, at ratio 0.999999999999975 rather than a printed 1.

---

## 1. The projective order

The order of `Frob_q` in `PGL₂(F_ℓ)` is the order of the eigenvalue ratio `z`. With `u = a²/q`:

- `z + z⁻¹ = u − 2`;
- order 5 means `z + z⁻¹ = (−1 ± √5)/2`, that is `u² − 3u + 1 ≡ 0`;
- `u² − 5u + 5 ≡ 0` is the condition for order **10**.

`src38` and `src71` read the order off `u` with the second condition in the first's place, and returned 6 for everything not in 1–5. So a true order 5 came back as 6, and an order 10 came back as 5.

The second error is harmless: it only withholds refutations. The first is not. `A₅` allows order 5, so a Frobenius of order 5 reported as 6 "refutes" `A₅` when it does not.

**The fix.** Both gates now compute the order two ways, and the two must agree at every Frobenius tried:

- the least `k` with `Mᵏ` scalar, where `M` is the companion matrix of `x² − a x + q`;
- the Chebyshev recursion `Vₖ₊₁ = w Vₖ − Vₖ₋₁` for `Vₖ = zᵏ + z⁻ᵏ`, with `Vₖ = 2` exactly when `zᵏ = 1`.

A repeated eigenvalue counts as order 1, as before. The characteristic polynomial cannot tell a scalar from a Jordan block, and 1 refutes nothing.

**696.e1 (`src38`).** At `620b54a` the certificate recorded 113 exceptional-class witnesses: three classes for each of the 37 primes `5 ≤ ℓ ≤ 167`, plus `A₄` and `A₅` at `ℓ = 3`.

- 108 of the 113 recorded orders were wrong.
- 107 of those were still outside the class they refuted, so the refutation stood on the wrong number.
- One was invalid: **`A₅` at `ℓ = 29`**, witnessed by `q = 5` with recorded order 6 and true order 5.

`29 ≡ −1 (mod 10)`, so `A₅` does sit inside `PGL₂(F₂₉)`, and that witness certified nothing. The corrected search moves on and refutes `A₅` at 29 with `q = 11` (`a = −2`, order 6, both routes).

The certified set is unchanged: `ℓ = 2` and every prime from 5 to 167, 38 in all, with `ℓ = 3` partly certified as before. The two routes were compared at every Frobenius the searches tried and disagree nowhere.

**389.a1 at 11 (`src71`).** `S₄` is refuted at `q = 3`, as before. The order there is 5 (eigenvalues 7 and 2, ratio 9, and `9⁵ ≡ 1`), not the 6 recorded. Five is outside `S₄`'s `{1, 2, 3, 4}`, so the certificate stands. `A₄` and `A₅` are refuted at `q = 2` by order 4, unchanged.

**Why the drill did not see it.** There were two reasons.

- **The drill check had the same slip.** `check_determinantal_bockstein` re-verifies each witness "with this check's own projective order", and that order was read off `u` with the same order-10 condition. It agreed with the gate because it shared the gate's mistake.
- **The planted defect missed the bug.** `check_mod_ell_surjectivity` re-derived only the Borel witness. Its one projective-order plant set every order to 6, which is the old fallback value, so it never exercised the order-5 branch.

**Fixed in the drill.**

- Both checks now compute the order with `_own_projective_order`, the drill's own Chebyshev routine.
- `check_mod_ell_surjectivity` re-derives every exceptional witness, not only the Borel one.
- Three plants were added:
  - RUN-107's read-off planted in one route: caught by the gate's two-route comparison;
  - the same read-off planted in **both** routes, so they agree and `A₅` at 29 is "refuted" by `q = 5`: caught only by the check's own order, which is the case this run exists for;
  - both of `src71`'s routes set to 6, so `S₄` is "refuted" at `q = 2`, where order 4 is allowed.

## 2. The float64 invisibility index (`src14`)

A class at index `i` adds `i^{-s}` to the frontier mass. Under round-to-nearest, a float64 running sum `T` swallows a term only when the term is below **half the last place of `T`**. For `T` in `[2^e, 2^{e+1})`, half the last place is `2^{e−53}`.

The gate instead used one part in `2⁵³` of `ζ(s)`. That threshold is larger than half the last place, so its index came early.

The gate now finds the first absorbed index by bisection. The sum before index `i` is taken as `ζ(s)` less its Euler–Maclaurin tail, which is enough to fix the binade and the last place. At `s = 2` and `s = 3` it also adds the terms in order in float64 and stops at the first term that changes nothing. The two must agree, and they do.

| `s` | through RUN-107 | now | simulated in float64 |
| ---: | ---: | ---: | ---: |
| 1.1 | 37381432770190 | **48214938938691** | out of reach |
| 1.5 | 22822828256 | **27271342416** | out of reach |
| 2 | 73998112 | **94906266** | 94906266 |
| 3 | 195684 | **208064** | 208064 |

The finding survives: double precision does go blind at a computable index. The index is later than reported, and at `s = 3` it lies about five times beyond the 40749 base curves the programme enumerates, where the last curve still moves the sum by 1.4876989e-14.

**Fixed in the drill.**

- `check_globalizer` asked only that the `s = 2` index fall in the old estimate's range. It now sums `s = 3` itself, in float64 and in order, and requires the gate's index to equal it.
- One plant was added: the RUN-107 estimate restored.

## 3. A private path in code

`census_pkg.py` kept, as a fallback after the environment variable, the absolute path of the directory where the Phase 1 census package used to live. That path named a private research directory. It had also gone stale: the package has since moved, and the gates fell through to the bundle layout and failed to find it.

**Fixed.**

- The fallback is removed. The package is found from `BSD_CENSUS_PKG` or the handoff bundle's layout, and nothing else.
- [`HANDOFF.md`](../../packages/HANDOFF.md/) says so.
- `tools_full_completeness.py` inserted its own directory into `sys.path` by absolute path; it now uses its own location.

This round's gates were run with `BSD_CENSUS_PKG` set.

**Checked across the tree.** A search for drive paths and user directories, outside the frozen handoff build, now finds only two files. Both are the deny-lists of `build_results.py` and `site/export_verification.py`, which hold such patterns in order to refuse them.

A broader search also matches the handoff manifests. What it matches there is the tree's own public repository address, which is provenance stated as what and where it was published, not a machine path.

## 4. The rank-two identity on the corpus's L''/2 (`src87`, `src86`)

The determinantal-architecture paper says the rank-two identity `L''(E,1)/2 = Ω·Reg` at 389.a1 closes "with every factor computed in this line". Three of its factors were: Ω, by the arithmetic–geometric mean, and the regulator, from this line's own canonical heights by Tate's series.

The fourth was not. `src87` divided `r2bsd.DOC_L2`, the corpus's stated 0.7593165002884268, and printed a ratio of exactly 1. `src86`'s instance of Round 010's (24.1) used the corpus's regulator and L''/2 both.

This line had its own value all along. Gate 75 computes `L''(E,1)/2` from 389.a1's coefficients by the Mellin integral and gets 0.7593165002884076. The difference, 1.9e-14, is the quadrature's floor, and attack-data-389a1 already said which value was which.

**The fix.** `src87` now reads gate 75's value, and `src86` takes its regulator from `src87` and its L''/2 from gate 75. Both give `L''(E,1)/2 ÷ (Ω·Reg) = 0.999999999999975`. Both logs keep the corpus's values beside their own, labelled as the corpus's.

**Fixed in the drill.**

- Both checks now require the L''/2 used to be gate 75's value exactly, and different from the corpus constant.
- One plant was added for each gate, restoring RUN-107's corpus value. Each is caught. Before, both versions passed every check, since the two values agree to 1.9e-14.

## 5. What else was rerun

Eight gates read `src38`'s log: `src43`, `src45`, `src47`, `src51`, `src53`, `src54`, `src55` and `src56`. All eight were rerun.

- Five logs did not change by a byte: `src47`, `src51`, `src53`, `src54` and `src56`. They use only the certified set, and that set is unchanged. The fw compiler's H1 verdict at 29 is the same PASS; it now rests on a valid witness.
- Three logs changed only in what they measure about the tree as it stands — counts of reports and logs, a reworded sentence — and nothing they read from `src38`: `src43`, `src45` and `src55`. Those three are snapshots of the tree at their own rounds, so their logs were restored as they were.

`data/results.v1.json` was rebuilt. It changed in three places: the date, the digest of `src71`'s log, and the report count.

## 6. What changes downstream

Five crystallization papers rest on these logs, and each moves its pin to this run's commit:

- `kurihara-389a1`: the order at 3 is 5;
- `family-696e1`: the `A₅` witness at 29;
- `fw-hypothesis-chain`: the H1 range rests on the same certificate;
- `certificate-ladder`: the four indices and the abstract's 195684;
- `determinantal-architecture`: the ratio, and which L''/2 it divides.

The methodology paper's figures for this line are those of the drill at `620b54a`, and it keeps that pin.

## 7. What this round does not claim

- Nothing new about 696.e1 or 389.a1. The certified sets are the ones already reported.
- That the remaining 107 witnesses whose recorded orders were wrong are anything other than what they were: valid refutations whose logged order was mislabelled.
- That every catch in the drill below is a genuine red verdict. `run_checks()` scores a check that raises as red, so a crash inside the named check counts as "caught by the check named for it". This drill's own guard against shadowed helpers calls exactly that the one thing it must not do. 懸衡 found the same conflation in the Collatz line's drills. Separating crashes and time-outs from named-check verdicts is the next round's work, and the count below uses the old rule.

## 8. Status

Whole-tree drill: **692 planted defects, 692 caught by the check named for each** — 0 uncaught by any check, 0 caught by the wrong check; **179 controls, none disturbed a check**; 218 checks; state restored afterwards. Eight shards, 8920 s. Six of the 692 defects are new this round: two on the projective order in `src38`, one on it in `src71`, one on the invisibility index, and one each on the L''/2 of `src87` and `src86`. The count uses the rule stated in §7, under which a crash inside the named check counts as a catch.
