# The fitted spin filter (Copilot follow-up): verification, predictions with σ, and the light question

2 November 2026, isla session, for Doug Westmoreland. Source: ~/aspden-review-gpt/review/github-copilot/FOLLOWUP.md and FOLLOWUP_LOCK.md (GitHub Copilot, after its review). My code: sim/lepton/filter_check.py (§§1–5; numpy only, nothing reused from Copilot), filter_check_dressed.py (§7) and nested_filter.py (§8), with their _out.txt files. Labels: [A] Aspden's own, [D] derived, [M] modelling choice, [P] proposed. Independently checked (sim/lepton/lepton_check7/REPORT.md, finished 06:35 EST); the corrections it found are folded in below and listed in §6, each marked with the report's finding number.

## 1. What Copilot built, in plain words

- Brannen's three slots (x, y, z spin directions) hand the spin over with amplitude ⟨y|x⟩: size √½, phase from the octant, π/4 in all. That phase makes the electron massless (δ = 15°). Model L2 tried to bend the trip to change the phase while keeping the size. Copilot's point: in the bare-projection picture the three-slot matrix is the Gram matrix of three spinors, which always has a zero eigenvalue: **the electron is massless for any three directions**, so no lean of the trip alone can give it mass. (Confirmed: 200 random triples, smallest eigenvalue 10⁻¹⁵.)
- Its **positive control**: put a "filter" (a rank-one projector onto a spin axis m, and its two cyclic copies) between each pair of slots. The link becomes ⟨y|m⟩⟨m|x⟩. Choosing m with |⟨y|m⟩⟨m|x⟩| = √½ keeps Koide's Q = 2/3 exactly; its phase is set by the thin triangle x–m–y. One axis does both.
- **Fitted, not predicted.** m is computed from the measured μ/e. Copilot says so plainly: the axis "is chosen from the measured target and is therefore a fit, not a prediction", and the construction is "explicitly NOT a discovered mechanism, an independent prediction or an Aspden attribution" (FOLLOWUP.md; the first version of this page quoted a phrase that is not in that file, check #21).

## 2. Verification [D]

| Quantity | Copilot | This check (own code) |
|---|---|---|
| Needed loop phase | −0.6666661412 rad | −0.6666661412 (3 × L1's δ = 0.2222220471) |
| Filter axis m | (0.9968627482, 0.0015710904, 0.0791340189) | the same, and its mirror (0.00157, 0.99686, 0.07913): the departure-side and arrival-side solutions. **No others exist** (144 starting points; and in closed form, check #4: with a = (Φ + π/4)/3 the conditions are m_z = 2 sin a and m_x + m_y = 2 cos a − 1, which give exactly two real axes for the fitted loop phase and none for the opposite sign of the phase, which would give the same spectrum; filter_check_dressed.py reproduces this) |
| Angle from the start axis | 4.53968716° | 4.53968716° (89.91° from the next axis; tilted toward the third axis z) |
| Link size and pass probabilities | √½; probability ½ per link | 0.7071068; |⟨m|x⟩|² = 0.99843, |⟨y|m⟩|² = 0.50079, product 0.50000 |
| Mass roots | | 0.0403501, 0.5802117, 2.3794382 (L1's lever arms) |
| μ/e, Q | 206.7682827, 2/3 | 206.7682827, 0.6666666667 |
| m_τ | 1776.96902723 MeV | 1776.96903 MeV |
| Unitary transport along the fitted legs: the fraction of the leg's rotation allowed by Q (3σ) | [−3.37, +2.52] × 10⁻⁵, phase ≤ 2.92 × 10⁻⁵ rad, "4,000 times too small" | [−3.37, +2.52] × 10⁻⁵, 2.92 × 10⁻⁵ rad, 4,070 times |

Everything reproduces. The filter's tilt, 4.5397°, is 2.002 times L1's 2.2676° shortfall of the turn from the corner (π/12 − δ). The first version of this page called that a coincidence; the check showed it is an identity (#7): a = π/12 − δ is the shortfall exactly, m_z = 2 sin a, and the tilt is 2a(1 + 5a²/8 + …) = 2a × 1.00098. So the filter's tilt is the shortfall doubled, by construction.

## 3. What the filtered spectrum predicts, with σ against the best measurements [D]

The filter reproduces Koide's spectrum, so its predictions are Koide's and L1's. μ/e is the input.

| Prediction | Value | Best measurement | Pull |
|---|---|---|---|
| m_τ | 1776.96903 MeV | PDG 2025: 1776.93 ± 0.09 | +0.43σ |
| | | Belle II 2023: 1777.09 ± 0.14 | −0.89σ |
| Koide Q | 2/3 exactly | 0.6666645 ± 0.0000051 (PDG τ) | +0.43σ (the tau's own pull, since Q depends on m_τ alone; the first version said +0.42σ from rounded inputs, check #9) |
| Neutrinos, only with an added rule (Brannen's δ_ν = δ_l + π/12, which U46 step 7c reads as the same shift from each symmetric point; the neutrino turn is then 27.73°) [P] | Δm²₂₁/Δm²₃₁ = 0.03084 | NuFIT 6.0: 0.02960 ± 0.00055 (IC19) / 0.02984 ± 0.00053 (IC24) | +2.26σ / +1.86σ |
| | Δm²₂₁ = 7.81 × 10⁻⁵ eV² on the IC19 scale, 7.75 × 10⁻⁵ on the IC24 scale | JUNO 2025: 7.50 ± 0.12 × 10⁻⁵ (arXiv 2511.14593) | +2.6σ / +2.1σ |
| | masses 0.00038, 0.0088, 0.0503 eV; Σ = 0.0596 eV (IC19 scale; sim/lepton_photon/koide_predictions.py) | DESI DR2 + CMB: Σ < 0.064 eV (95%, ΛCDM; arXiv 2503.14738) | allowed |
| | m_β = 0.0089 eV | KATRIN: < 0.45 eV (90% CL; arXiv 2406.13516) | allowed |
| Quarks | none: Q = 0.849 (u, c, t) and 0.731 (d, s, b) (koide_predictions.py, PDG masses in mixed schemes) would need |t| = 0.880 and 0.772 (|t|² = (3Q − 1)/2; the first version said 0.874 and 0.771, check #11), a different filter per sector with two fitted numbers for three masses | | |

The fitted neutrino turn is 27.40 ± 0.15° with the IC19 inputs (27.47 ± 0.14° with IC24), 2.2σ (1.8σ) from Brannen's 27.73°; the next JUNO release decides whether "the same filter for every lepton" survives. (sim/lepton_photon/neutrino_juno.py; the masses and Σ are from koide_predictions.py.) The check verified Belle II, JUNO, DESI DR2, KATRIN and the PDG tau average at source; the NuFIT 6.0 splittings were not reachable and stand as copied into neutrino_juno.py.

## 4. Does light propagate? Two readings

- **As a question about the filter:** it has no content about light. It is a rule for the spin's hand-over, not a model of the medium. The project's criterion for light (the wave must travel at c) applies to Model L and P1 and stands where Model L left it: no particle-lattice route reaches c.
- **As Aspden's own question about the cube [A, applied by us M]:** in *Physics without Einstein* (1969, ch. 4, eq. 4.3; repeated in *Physics Unified* 1980, ch. 5) a photon unit turning at exactly Ω/4 gives "no electromagnetic wave propagation since a little local adjustment of the E frame can contain the disturbance", and at any other rate ω it radiates at 4|ω − Ω/4|/2π. His later statements (PU 1980 eq. 102, Tutorial Note 8 of 1997, POC ch. 6) write the rule with the absolute rate, ν = 4ω/2π, and TU08 names no quiet rate. (The first version of this page cited TU08 for the Ω/4 statement, which TU08 does not make; check #17.) Since ħΩ = m_e c² = 511 keV, the 1969 quantum is E = 4 × 511 keV × |ω/Ω − ¼|; the absolute-rate version gives 4ħω = 4 × 511 keV × ω/Ω. For the cube rates the lepton models use (the lepton-as-cube models are ours [P]; Aspden's electron is not a cube):

| Cube rate | ω/Ω | By the 1969 offset rule | By the absolute-rate rule (1980, 1997) |
|---|---|---|---|
| spin ħ/2 (Model C; corners at 0.292 c) | 0.125 | radiates 256 keV quanta | 256 keV |
| face-axis cube, corners at c/2 (Model F) | 0.2142 | radiates 73 keV | 438 keV |
| the rate a hit would need (face axis) | 0.2095 | radiates 83 keV | 428 keV |
| edge-axis cube, outer corners at c/2 (the 209.7 near-miss) | 0.1749 | radiates 154 keV | 357 keV |
| diagonal-axis cube, corners at c/2 | 0.1855 | radiates 132 keV | 379 keV |
| Aspden's standard photon unit | 0.250 | quiet | 511 keV; quiet only by the separate "local adjustment" argument of 1969 and 1980, which TU08 does not repeat |

  So, by Aspden's 1969 and 1980 rule, **every cube rate that brings the masses within reach radiates, and the only quiet cube (Ω/4, spin ħ) gives μ/e about 455** (455–458 from the F1 face-axis grid evaluated at s = 0.25, check #18; 450 by linear scaling of F1's shift). In Aspden's text the rotating unit *is* the photon in transit, so a cube held at a rate off Ω/4 keeps radiating only because something holds its rate; the c/2 postulate does. Under that postulate a stable electron cannot be such a cube. The tension is between Aspden's photon-unit rule and our lepton-as-cube models [P], not inside his own framework; it is not a problem for the filter itself, which does not say what the slots are made of.

## 5. Reading

- Copilot's construction is right and useful: it shows exactly what a mechanism must deliver, size and phase together, and that a bent trip alone cannot deliver it (the Gram-matrix zero).
- It adds no prediction. The axis is the one free number, and nothing fixes it. Copilot's next step (a dark-state "filter mechanism", FILTER_MECHANISM_LOCK.md) still takes the axis as input.
- Its tests are L1's: the tau (+0.4σ PDG, −0.9σ Belle II) and, with Brannen's rule, the neutrinos (about 2σ off, JUNO will tell).
- For Aspden's lattice, the cube rates that fit the masses are the ones his 1969 and 1980 rule says would radiate (his 1997 version of the rule has no quiet rate at all).

## 7. A reading of the filter axis, tested (ours; 06:15 EST) [P]

**The idea, stated before computing.** The fitted axis tilts from the slot axis x toward z, which is the rotation axis of the x → y leg, and hardly at all toward y. That is where a spin's dressed state points when it precesses about the slot axis at ω₀ while the frame rotates about z at the hand-over rate ω_leg: in the rotating frame the effective field is ω₀ x̂ − ω_leg ẑ, so the dressed state is tilted from x toward ∓z by tan θ = ω_leg/ω₀. If the lattice decoheres the spin into that dressed state at each hand-over (a projection, which is what Copilot's dark-state model supplies generically), the filter axis is derived up to one frequency ratio. Expectation registered: the direction should match for one rotation sense; the ratio needed is tan⁻¹ of the fitted tilt; Koide's Q is the test.

**Result (run inline about 06:15 EST; the check found no script on disk for these numbers (#24), so they are now in sim/lepton/filter_check_dressed.py, written 06:45 EST, which reproduces every number below).**
- Direction: for the leg rotating in the −z sense the dressed axis is (0.9969, 0, +0.0792), tilted 4.54° toward +z: the fitted direction, to the 0.09° lean toward y, which the dressed state does not have.
- The sense (added after check 7c): carrying x to y is a rotation about +z, and in that frame, with the spin precessing in the positive sense about its slot axis (ω₀ > 0), the dressed axis tilts toward −z. That gives a loop phase of −0.904 rad, a negative electron root and Q = 0.634. The fitted +z tilt needs the frame to turn about −z (which carries x to −y) or the spin to precess the other way about its slot axis (ω₀ < 0). A mechanism has to supply that sign.
- Size: the ratio needed is ω₀/ω_leg = 12.59 when the dressed tilt is matched to the axis angle 4.5397° (12.60 when the dressed state's z-component sin θ is matched to m_z; 12.64 if b = m_z is read as tan θ, the convention nested_filter.py uses in §8; the three differ by 0.3%, check 7i). 4π = 12.57 is 0.2% away; 12, the corner passes per turn, 5%. Not used; a coincidence until derived.
- **Koide's Q fails.** The pure dressed axis (in the x–z plane) gives |t| = √½ cos(θ/2) = 0.70655, so Q = 0.66614, 102σ below the measured 0.6666645 ± 0.0000051, and μ/e = 199. The fitted axis restores |t| = √½ exactly only through its 0.09° lean toward y. Two dressed filters per link (departure and arrival) overshoot: Q = 0.66770, +204σ. Choosing the x–z tilt to fit μ/e instead (4.46°) leaves Q at −99σ and the tau at 1768.0 MeV.

**The filter is a one-parameter family [D] (ours, 06:25).** |⟨y|P_m|x⟩|² = (1 + m_x)(1 + m_y)/4 exactly, so keeping the hand-over probability at ½ means (1 + m_x)(1 + m_y) = 2: the fitted axis obeys it to 10⁻⁹, and it forces m_y = m_z²/4 to leading order (0.00157 for m_z = 0.0791). So the two fitted conditions are really one principle and one number: **probability conservation of the hand-over** (which keeps |t| = √½ and so Koide's Q = 2/3 for any tilt) and **the tilt b = m_z toward the leg's rotation axis**, which alone sets the turn, in closed form δ = 15° − arcsin(b/2) (check 7h; equivalently b* = 2 sin(π/12 − δ*)): δ = 15.00° at b = 0, 14.43° at 0.02, 13.57° at 0.05, 12.73° at b* = 0.0791340, 12.13° at 0.10 (filter_check_dressed.py). Koide's relation and the lean separate cleanly: the first is exact for the whole family, the second is one number. A mechanism therefore has two things to supply, a reason the hand-over keeps its probability, and b* = 0.0791 = sin 4.54° (in the dressed-state reading sin θ = b*, so ω_leg/ω₀ = tan θ = 1/12.60).

**Reading.** The dressed state explains why the filter axis points where it does; it does not explain the one thing Koide's precision demands, |t| = √½ to one part in 10⁵. A mechanism must deliver the 0.09° lean toward the arrival axis as well, or deliver the magnitude by a rule of its own. That is a sharper target than before: direction from the hand-over's rotation, magnitude from something that knows about the arrival slot.

## 8. The nested lattice as the source of the frequency ratio (lock part N; nested_filter.py) [P, post hoc]

Doug asked whether U44's nested lattice, combined with the filter, could supply the missing selection of the axis and let light reach gamma-ray energies. Disclosed in the lock before computing: the needed ratio ω₀/ω_leg = 12.6 equals 4s for Aspden's quiet photon-unit clock Ω/4 if ω₀ is the level-1 rhythm sΩ, and U44's body-centred factor is 2 + 2/√3 = 3.155.

| Clock ω_leg | s | Tilt | δ | μ/e |
|---|---|---|---|---|
| **Ω/4 (Aspden's photon unit, the one quiet rate)** | **2 + 2/√3** | 4.53° | 12.729° | **206.11 (−0.32%)** |
| Ω/4 | 3 | 4.76° | 12.612° | 184 |
| Ω/4 | 4 | 3.58° | 13.209° | 347 |
| Ω/8 (spin ħ/2) | 2 + 2/√3 | 2.27° | 13.865° | 920 |
| 0.2142 Ω (corners at c/2) | 2 + 2/√3 | 3.88° | 13.055° | 290 |
| 56 combinations in all (8 clocks × 7 factors) | | | | 1 within 1%; 0.73 expected by luck |

- Q = 2/3 in every row (the one-parameter filter keeps it). The tau is Koide's whatever b is, so it does not test this.
- **The convention matters at the 0.3% level (check 8c).** The lock and nested_filter.py set b = m_z = tan θ = ω_leg/(sΩ). The dressed state's own z-component is sin θ. With m_z = sin θ the Ω/4 row with s = 2 + 2/√3 gives μ/e = 207.55 (+0.38%) and s = π gives 205.65 (−0.54%). The s that would hit exactly with the Ω/4 clock is 3.159 (tan), 3.149 (sin) or 3.149 (axis tilt), so 2 + 2/√3 = 3.1547 is 0.14–0.19% off and π is 0.22–0.56% off, depending on the convention. "Within 1%" holds under every convention, so the count of one in 56 stands; the sign and size of the 0.3% miss, and the preference for 2 + 2/√3 over π, do not. The 0.3% level carries no information.
- The exact b* = 0.079134 needs s = 3.159 for the Ω/4 clock in the lock's convention, 0.14% from 3.1547; π is 0.56% away. A one-in-77-per-trial coincidence seen before the lock, so **not a hit**: by the lock's rule (log-uniform over a factor 2 per trial) the chance of at least one such match in 56 is 52%; counting only the 12 trial values within a factor √2 of b*, 0.16 are expected, about 15% (check 8d). A lead with three things in its favour (no fitted number; Aspden's quiet rate; U44's own geometry) and three against (0.3% is 10⁵σ at the measured precision; the level-1 cube is unstable in the big lattice's field, U44 step 4; the projection and probability conservation are ours). Two of the three supports are themselves weaker than first written: the quiet Ω/4 rate is the 1969 and 1980 rule only (§4), and the dressed-state projection is [P].
- **Process (check 8g).** The times written in lock part N (06:45 to 06:55 EST) were estimates and are wrong: the file system shows nested_filter.py written at 06:24:56 EST, its output at 06:24:57, and the lock and this page saved at 06:25:45, none committed. The pre-registration of part N therefore cannot be shown from the record. The lock's own disclosure already makes the trial post hoc, so the label does not change.
- **What would test it:** it fixes the lepton's hand-over clock at Ω/4 and the nested spacing at d/3.155; both have consequences elsewhere (the photon unit's quietness is one; the level-1 lattice's field on matter is another). It predicts nothing new about the masses themselves.

**Light on the ladder [D].** A photon of a level's own energy E_k = s^k × 511 keV has λ = 4πr_k = 3.81 d_k at every level (kd = 1.65), where the simplest lattice wave is 11% (phase) and 32% (group) slower than its long-wave speed. The GRB bound needs kd < 5 × 10⁻⁹, so every photon would have to ride a level finer than 10⁻⁹ of its wavelength: more than 27 levels of s = 3 for 31 GeV. (The bound, checked at source at 06:58 EST: Abdo et al. 2009, *Nature* 462, 331, Table 2; z = 0.903, the 31 GeV photon at 0.829 s after the trigger; their most conservative choice, |Δt| < 859 ms against the start of the sub-MeV emission, gives M_QG,1 > 1.19 M_Planck, i.e. |Δv/c| < 2 × 10⁻¹⁸ between 0.1 MeV and 28 GeV for a slower high-energy photon; for delays of either sign their limit (e), |Δt| < 10 ms, gives 2 × 10⁻²⁰. With 2 × 10⁻¹⁸ the kd bound is 7 × 10⁻⁹ and the level count 28: the conclusion is unchanged. The first version quoted 10⁻¹⁸ from memory.) The nested lattice does not make lattice waves into light; only its continuum limit does, which is route R1 of Improvement_directions.

## 6. Independent check

sim/lepton/lepton_check7/REPORT.md (a Fable agent with no part in the work; own code in check7.py, s450.py, nested_check.py; sources fetched for Belle II, JUNO, DESI DR2, KATRIN, the PDG tau average, PWE 1969 ch. 4 and Tutorial Note 8). Finished 06:35 EST; folded in here at about 06:50 EST.

- **Every number in §§1–5, 7 and 8 reproduced** to the printed digits, most by two methods (closed form and brute force; analytic solid angle and a Bargmann chain; the project's F1 module and linear scaling).
- **Corrections folded in** (the report's numbering): #7 the 2.002 ratio is an identity, not a coincidence (§2); #9 the Koide Q pull is +0.43σ (§3); #10 the Δm²₂₁ row mixed the IC19 value with the IC24 pull, and the masses come from koide_predictions.py (§3); #11 the quark |t| values are 0.880 and 0.772, not 0.874 and 0.771 (§3); #17 the Ω/4 quiet rate is PWE 1969 and PU 1980, not TU08, which states the rule with the absolute rate and names no quiet rate; the table now gives both versions (§4); #18 "about 450" is 455–458 by direct evaluation (§4); #19, #20 the tension is between Aspden's rule and our cube models, and the cube radiates continuously only because the postulate holds its rate (§4); #21 the Copilot quotation replaced by what FOLLOWUP.md says (§1); #22 Brannen's rule stated as he states it (§3); #24 the §7 numbers now have a script, filter_check_dressed.py (§7); 7c the sign of the rotation sense that the dressed-state reading needs is stated (§7); 7i and 8c the tan/sin convention and its 0.3% effect on the nested near-miss are stated (§§7–8); 8d the second luck count (§8); 8g the wrong times in lock part N (§8).
- **Added by the check and used:** the closed-form solution of the filter (exactly two axes for the whole class), δ = 15° − arcsin(b/2) for the family, and the absolute-rate column of the radiation table.
- **Still unverified at source:** the NuFIT 6.0 splittings; PU 1980's wording (taken from the project's source digest); the "PDG 2025" edition label (pdgLive shows the same average in its 2026 release).
