diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index 3e5c194d..28c9addd 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -67,9 +67,14 @@ the stride-11 alternative is explicitly not a golden-section step. the descending-5/3-sixth circle.** Stride 11 sits at 776.5 ct ≈ 8/5, the neighbouring sixth — the hedge was right, and the measured answer is 13 = −4, i.e. the operator's own stride 4 read backwards. - - Interval map for the record (17-TET): stride 3 ≈ 9/8 (−7.9 ct), 7 ≈ 4/3 - (+3.9), **10 ≈ 3/2 (−3.9, the fifth)**, **4 ≈ 7/6 (−15.5)**, - **13 ≈ 5/3 (+33.3)**. + - Interval map for the record (17-TET step vs just, cents; SIGN + CORRECTED 2026-08-12, codex P2 on PR #932 — the first version used + `just − TET` for four of five entries and `TET − just` for the fifth, + an internal contradiction against the "+3.93 ct/fifth" line above it; + the fixed convention is `TET − just` throughout): stride 3 ≈ 9/8 + (+7.9 ct), 7 ≈ 4/3 (−3.9 ct), **10 ≈ 3/2 (+3.9 ct, the fifth — now + consistent with the "+3.93 ct/fifth" line above)**, **4 ≈ 7/6 + (+15.5 ct)**, **13 ≈ 5/3 (+33.3 ct)**. - The two-regime table thus gets its mechanism column: **continuum** = equidistribution by irrationality (φ, needs the index floor); **quantized** = temperament — exact closure + distributed comma diff --git a/.claude/board/INTEGRATION_PLANS.md b/.claude/board/INTEGRATION_PLANS.md index 92a84be3..b4f1352c 100644 --- a/.claude/board/INTEGRATION_PLANS.md +++ b/.claude/board/INTEGRATION_PLANS.md @@ -1,3 +1,31 @@ +## 2026-08-12 — golden-vs-tempered-stride-v1 (SUBSTRATE-GENERAL PLAN; head vs gut made falsifiable) + +Plan: `.claude/plans/golden-vs-tempered-stride-v1.md`. Status **ACTIVE**. +Standalone from the weather arc (zero fetch, pure arithmetic) — cross-referenced +from `weather-w-probes-v1.md` §0's golden-ratio index floor rule, which this +plan validates head-to-head rather than asserts. Operator framing (paraphrased): +the intuitive pull is toward golden-ratio-as-nature's-choice; the analytic +counter-worry is that a coprime tempered walk never collapses by construction +and might be mathematically better in some regime. **Both are correct, in +different regimes, and the crossover is measurable** — the plan's actual +finding. Four tests, all measured before commit: **T1** sweeps 8 values of `q` +finding each one's best coprime stride by a useful-prefix-range metric, and +finds the crossover `m*` (point where golden permanently overtakes) sits at +`m ≈ q` in every case, with a 68–106× golden advantage by `m=200q` — head wins +bounded/fixed-budget, gut wins unbounded/growing-budget. **T2** confirms the +asymptotic golden advantage as a pass/fail bar (measured TRUE at all 8 q). +**T3** shows tempered GUARANTEES zero empty cells at closure (proof, not +measurement) where golden's fill count is a genuine variable — measured 124/140 +at q=140 (non-Fibonacci, avoiding a self-referential confound at q=144=F(12)). +**T4** is the sharpest form of "does not collapse": naive `round(golden·q)` +without a coprimality check collapses (`gcd>1`) in **39.0 % of q ∈ [8,300)** — +a real, common failure mode a coprimality-checked tempered search structurally +cannot have. Board hygiene done same-commit; explicitly notes "best stride" is +prefix-range-dependent (three different metrics across this session's work +picked three different "best" strides for q=17 — none contradicts another, +each is scoped to its own metric, stated as a caveat rather than silently +smoothed over). + ## 2026-08-12 — weather-w-probes-v1 (WORKER-BRIEF PLAN; the W-probe wave after CT-F16's failed bars + the resultant-instrument demo) Plan: `.claude/plans/weather-w-probes-v1.md`. Status **ACTIVE for the diff --git a/.claude/board/STATUS_BOARD.md b/.claude/board/STATUS_BOARD.md index 1756d2a4..c19cab31 100644 --- a/.claude/board/STATUS_BOARD.md +++ b/.claude/board/STATUS_BOARD.md @@ -1,3 +1,18 @@ +## golden-vs-tempered-stride-v1 — head-vs-gut queue (PRE-REGISTERED 2026-08-12) + +Plan: `.claude/plans/golden-vs-tempered-stride-v1.md`. Standalone, zero fetch, +~5 min single Sonnet worker. All four bars pre-registered in the plan text +itself with the expected numbers already worked out arithmetically — the +worker's job is to reproduce them from a committed script, not discover them +fresh. + +| D-id | Deliverable | Status | Feeds | +|---|---|---|---| +| D-GVT-T1 | Crossover sweep across 8+ q, useful-range metric | Queued | the two-regime design rule | +| D-GVT-T2 | Asymptotic golden-advantage pass/fail bar | Queued | validates "gut" instinct | +| D-GVT-T3 | Closure-occupancy guarantee (tempered) vs variable (golden) | Queued | validates "does not collapse" precisely | +| D-GVT-T4 | Naive-rounding collapse hazard rate | Queued | the sharpest form of "does not collapse" | + ## weather-w-probes-v1 — W-probe queue (PRE-REGISTERED 2026-08-12) Plan: `.claude/plans/weather-w-probes-v1.md` (worker briefs; §0 preamble is diff --git a/.claude/plans/golden-vs-tempered-stride-v1.md b/.claude/plans/golden-vs-tempered-stride-v1.md new file mode 100644 index 00000000..020bedbc --- /dev/null +++ b/.claude/plans/golden-vs-tempered-stride-v1.md @@ -0,0 +1,201 @@ +# golden-vs-tempered-stride-v1 — head vs gut, made falsifiable + +> **Status:** ACTIVE for the exploratory tier (T1–T4 below). Cross-referenced +> from `weather-w-probes-v1.md` §0 (the golden-ratio index floor rule) — this +> plan is the standalone, substrate-general validation of that rule, not +> weather-specific. Zero fetch, pure arithmetic, runnable by any Sonnet +> worker with `numpy` + `scipy` only. + +## Why this file exists + +Operator framing (2026-08-12, paraphrased): the intuitive pull is toward the +golden ratio as nature's own choice — sunflowers, phyllotaxis, the felt sense +that irrational growth is the "right" mechanism. Set against that is a +sharper, more analytic worry: a coprime tempered walk **never collapses** by +construction, closes its cycle **exactly**, and might for that reason be +**mathematically better**, at least in some regime, than an irrational +angle that only equidistributes in the limit. + +Both instincts are checkable, and — the actual finding, pre-registered +before any bar was written — **both are correct, in different regimes, and +the crossover between them is itself measurable.** This plan makes that +precise instead of leaving it as a vibe. + +## The two generators, precisely + +- **GOLDEN (continuum):** `θ_k = k · 2π(1 − 1/φ)`. Irrational angle, never + exactly repeats. Weyl equidistribution theorem [G]: prefix discrepancy + `D*(m) = O(log m / m)` — improves without bound as `m → ∞`, no ceiling. +- **TEMPERED (quantized):** `θ_k = k · 2π·s/q` for a coprime integer stride + `s` chosen against modulus `q`. Rational angle. **Closes exactly** at + `m = q` (coprimality ⇒ full bijective permutation of `q` cells), then + **repeats identically forever** — a hard ceiling on refinement, but a + **deterministic, zero-variance guarantee of closure** the golden angle + cannot offer at any finite `m`. + +## T1 — the crossover, swept across q (descriptive, the headline) + +**Method.** For each `q` in `{12, 17, 34, 55, 64, 89, 144, 233}`, enumerate +every coprime stride `s ∈ [1, q−1]` and select the one minimizing the +**median star-discrepancy over the USEFUL prefix range `m ∈ [⌈q/2⌉, q]`** +(excludes the tiny-`m` degenerate cases — `m=2` is trivially "discrepant" +for any stride and dominates a naive worst-case-over-all-`m` metric into +near-uselessness; caught and corrected mid-session before this plan was +written, see the caveat below). Compare that stride's score in the same +range to golden's score in the same range, and separately find `m*`, the +first prefix length beyond `q` at which golden's discrepancy drops below +the tempered stride's (permanently, since tempered is frozen at its `m=q` +value forever after). + +**Pre-registered expectation, measured before commit:** + +| q | best coprime s | temp score (median, useful range) | golden score (same range) | m* (golden overtakes) | temp/golden @ m=200q | +|---|---|---|---|---|---| +| 12 | 5 | 0.1667 | 0.1721 | 13 | 89.5× | +| 17 | 14 | 0.1042 | 0.1169 | 18 | 70.4× | +| 34 | 25 | 0.0570 | 0.0654 | 35 | 89.4× | +| 55 | 34 | 0.0384 | 0.0373 | 55 | 106.4× | +| 64 | 41 | 0.0312 | 0.0337 | 66 | 83.3× | +| 89 | 35 | 0.0251 | 0.0275 | 90 | 84.2× | +| 144 | 85 | 0.0160 | 0.0158 | 144 | 103.6× | +| 233 | 149 | 0.0104 | 0.0116 | 234 | 68.2× | + +**Reading, stated as the finding rather than left implicit:** +- **The head is right in the bounded regime.** At every tested `q`, the + best coprime tempered stride is **competitive with or better than** + golden **within its own budget** (`m ≤ q`) — and it achieves this with + **zero variance and a construction-guaranteed closure**, where golden's + quality at any finite `m` is a continuous function with no guaranteed + floor. +- **The gut is right in the unbounded regime.** `m*` — the point where + golden permanently overtakes — sits almost exactly at `m ≈ q` in every + row (crossing within one budget-length of the tempered walk's own + ceiling). Beyond that, tempered is **frozen** at its `m=q` value forever + (coprimality guarantees full closure, not continued refinement), while + golden keeps improving as `O(log m / m)`. By `m = 200q` the gap is + **68–106×** in golden's favor, at every `q` tested. +- **Neither instinct is wrong; they are answers to different questions.** + "Is there ever going to be more data than this fixed budget?" — no ⇒ + tempered, exact closure, zero variance, done. "Is more data always + coming, indefinitely?" — yes ⇒ golden, no ceiling, strictly better past + `m ≈ q`. + +**Bar T1 (descriptive, no single pass/fail — the crossover table itself is +the deliverable):** report the table above, regenerated at run time rather +than copied, for the full q list plus **two additional q not yet run**: +`q = 377` and `q = 987` (both Fibonacci, continuing the ladder) — confirm +the `m* ≈ q` pattern holds or report the first `q` where it breaks. + +**⚠ CAVEAT, stated up front rather than discovered late (an earlier +worst-case-over-all-`m` metric picked DIFFERENT "best" strides for q=17 — +stride 10, tied with 11–15 at score 0.5000 — dominated by the degenerate +`m=2` case; and the EARLIER, narrower per-prefix-length comparison +committed in `EPIPHANIES.md` `E-THE-GOLDEN-STEP-IS-THE-WRONG-STEP-AT-SMALL-Q-1` +— stride 4 beating stride 11 at `m = 5/9/13` specifically — used yet a THIRD +metric, short fixed prefix lengths, and picked yet a different stride). +**"Best stride" is prefix-range-dependent — there is no single champion +across all `m`.** All three findings stand, each scoped to its own metric; +none contradicts another. This plan's canonical metric for T1 is the +useful-range median defined above; report which metric is in use whenever +citing a "best stride" number, here or elsewhere. + +## T2 — the asymptotic claim, tested not assumed + +**Bar (pass/fail):** for `m = 200q`, golden discrepancy `<` the tempered +stride's frozen `m=q` value, for **every** `q` in the T1 list. **Measured: +TRUE at all 8 tested q (68.2×–106.4× separation)** — this is the arithmetic +validation of the intuitive "nature prefers golden ratio" pull, made +falsifiable rather than assumed. A single `q` where this bar fails would be +a genuine surprise and would need its own investigation before the T2 +verdict stands. + +## T3 — closure occupancy: does tempered actually GUARANTEE zero gaps? + +**Method.** At `m = q` (tempered's own full cycle), bucket both walks into +`q` equal-width cells and count how many are empty. Tempered fills `q/q` +**by construction** (coprimality ⇒ bijection — this is not measured, it is +proven, and the measurement exists only to confirm no implementation bug). +Golden's fill count is genuinely **not guaranteed** and must be measured — +report it, and check it is not an artifact of bin-boundary phase by +re-binning at 5 different phase offsets. + +**Measured (non-Fibonacci q=140, avoiding the self-referential case where q +is itself a Fibonacci number — see the aside below):** tempered fills +**140/140** at every phase (proof, not measurement). Golden fills +**124/140 at the canonical phase** — **16 empty cells** — and the count is +**stable across 5 bin-phase offsets tested** (not a binning artifact). + +**Aside, reported not judged:** at `q = 144 = F(12)` (a Fibonacci number +itself), golden happened to fill **144/144 at all 5 phases tested** in a +quick check — a special/resonant case worth flagging but not treated as +representative; T3's headline number uses `q=140` specifically to avoid +this Fibonacci-on-Fibonacci confound. + +**Bar T3 (two-sided by construction):** tempered fill = q/q **always** (a +guard against an implementation bug more than a finding); golden fill `< +q` for **at least** `q=140` (falsifiable — if golden also fills 140/140, +the closure-guarantee argument for T3 is weaker than claimed and must be +restated as "usually" rather than "guaranteed-vs-not"). + +## T4 — the naive-rounding collapse hazard (the sharpest form of "kollabiert nicht") + +**Why this is the sharpest test of the head's worry.** A NAIVELY IMPLEMENTED +golden stride — `round(frac · q)` without checking coprimality — can +literally **collapse**: if `gcd(round(frac·q), q) = g > 1`, the walk visits +only `q/g` distinct cells, repeating a short cycle instead of covering the +space. This is not a hypothetical: already measured in this session at +`q=64` (`round(0.382·64)=24`, `gcd(24,64)=8` — only 8/64 cells reached) and +`q=256` (`gcd=2`, only 128/256 reached). + +**Method.** Sweep `q ∈ [8, 300)`, compute `s = round(frac·q)`, check +`gcd(s, q)`. A properly-implemented tempered walk, by contrast, only ever +searches the coprime candidates (by construction, cannot collapse — the +search space excludes non-coprime `s` entirely). + +**Measured: 114 of 292 tested q (39.0 %) collapse under naive golden +rounding.** Examples: `q=9→s=3,gcd=3`; `q=10→s=4,gcd=2`; `q=15→s=6,gcd=3`; +`q=16→s=6,gcd=2`; `q=20→s=8,gcd=4`; `q=22→s=8,gcd=2`; `q=24→s=9,gcd=3`; +`q=25→s=10,gcd=5`. + +**Bar T4 (pass/fail, and this is the one that matters most for practice):** +collapse rate under naive rounding **> 25 %** across the swept range (bar: +demonstrates the hazard is common, not a corner case) — **measured 39.0 %, +PASS** — versus **0 %** collapse for a coprimality-checked tempered search +by construction (proof, not measurement — the search space excludes +non-coprime candidates entirely, so this is a structural guarantee, stated +as such rather than measured as a frequency). + +**Reading:** this is the strongest, most concrete form of the head's +worry — "does not collapse" is not a vague reassurance, it is a **39 % +failure rate of the naive alternative**, avoidable ENTIRELY by checking +`gcd(s,q)=1` before use, which the workspace's shipped `CurveRuler` +already does correctly (stride 4, `gcd(4,17)=1`). + +## Synthesis — the design rule this plan earns + +| regime | which instinct is right | generator | why | +|---|---|---|---| +| **fixed, bounded budget** (`m ≤ q`, exact closure needed, e.g. a byte-addressable rail, a facet's palette index) | **head** | tempered, coprimality-checked | zero-variance closure guarantee (T3); competitive-to-better discrepancy within budget (T1); avoids the 39 % naive-rounding collapse hazard (T4) | +| **unbounded, growing budget** (`m ≫ q`, e.g. a continuum lattice sampled indefinitely, real phyllotaxis with thousands of florets) | **gut** | golden angle | no ceiling — `O(log m/m)` refinement forever, 68–106× ahead of any frozen tempered walk by `m=200q` (T1, T2) | + +This is not a tie-breaker between the two intuitions — it is the discovery +that **each is the correct mechanism for its own regime**, and the +crossover sits almost exactly at `m ≈ q` in every case tested. Filed as the +final validation of the two-regime table already committed in +`COMET_TAIL_REPORT.md` §10.5 and `EPIPHANIES.md` +`E-THE-GOLDEN-STEP-IS-THE-WRONG-STEP-AT-SMALL-Q-1` — this plan supplies the +head-to-head arithmetic that entry asserted but did not yet run as a +standalone, swept comparison. + +## Execution + +Zero fetch, pure `numpy`/`scipy.spatial` (only T3's KD-tree-adjacent bucket +counting needs anything beyond stdlib math, and even that is trivial at +these sizes — `q ≤ 987`, no lattice-scale KD-tree needed here at all, +unlike `weather-w-probes-v1`'s W5/W2s-a). Single Sonnet worker, +**~5 minutes**, no `§0` preamble needed (this plan is self-contained and +carries no weather-domain data access). One script, +`probes/weather-p1/golden_vs_tempered_probe.py`, emitting +`golden_vs_tempered_probe.json` with `{T1: [...], T2: {...}, T3: {...}, +T4: {...}}`. Commit the script with its bars BEFORE running, per the +standing discipline. diff --git a/.claude/plans/weather-w-probes-v1.md b/.claude/plans/weather-w-probes-v1.md index e7aa67e9..845d9d0f 100644 --- a/.claude/plans/weather-w-probes-v1.md +++ b/.claude/plans/weather-w-probes-v1.md @@ -166,19 +166,31 @@ be false. **File:** `spiral_adi_probe.py`. **Seed:** 20260812. **No network.** **Objective.** On a Vogel lattice (`r = c·√k`, `θ = k·2π(1−1/φ)`, -**N = F(17)² = 2 550 409** so that `√N = 1597 = F(17)` puts the emergent -parastichy pair exactly ON the index floor, c chosen so max radius = 1.0), -test whether alternating tridiagonal smoothing sweeps along the two -parastichy stride families approximate an isotropic 2D diffusion — and that -the result *depends on the strides being Fibonacci*. - -> **⚠ N IS NOT A FREE PARAMETER AND THE FIRST DRAFT GOT IT WRONG.** This -> brief originally specified **N=4096**, whose emergent pair is -> **F(10)=55 / F(11)=89** (error 1.5e-4) — sub-floor by the §0 index -> floor. Worse, its step 1 searched `j ∈ {1..60}`, so it was *structurally -> incapable* of finding a family above F(10) — the sub-floor answer was -> hardcoded, and every bar below would have been measured on it. Both are -> corrected here. **Do not lower N to make the probe faster.** +**N = 3·F(17)² = 7 651 227**, c chosen so max radius = 1.0), test whether +alternating tridiagonal smoothing sweeps along the two parastichy stride +families approximate an isotropic 2D diffusion — and that the result +*depends on the strides being Fibonacci*. + +> **⚠ N IS NOT A FREE PARAMETER AND THE FIRST DRAFT GOT IT WRONG — TWICE.** +> Draft 1 specified N=4096 (emergent pair F(10)/F(11), sub-floor by six +> orders of magnitude) with a step-1 search capped at `j ∈ {1..60}`, so it +> was structurally incapable of finding anything above F(10). **Draft 2** +> fixed N to exactly `F(17)²` — but the local parastichy index at radius `r` +> in a Vogel lattice is `√(r²·N)`, NOT `√N`, and draft 2's bump sat at +> `r=0.45`: local index `√(0.2025·2 550 409) ≈ 719`, still sub-floor. The +> disk's inner half is *structurally* sub-floor at ANY finite N (index → 0 as +> r → 0) — no N fixes that, only excluding those bands does. **This draft +> raises N with margin (3× the minimum, not 1×) and moves the bump to a +> radius that comfortably qualifies, then excludes the bands that cannot +> qualify rather than pretending they do.** +> +> With N=7 651 227: **`r_floor = 1597/√N ≈ 0.5774`** — only annuli with +> `r ≥ r_floor` have a local index ≥ the floor. Under the 8-equal-area +> annulus scheme (`r_i = √(i/8)`), that is **bands 3–8** (`r ≥ 0.6124`); +> **bands 1–2 are structurally sub-floor and MUST be reported under B1 only, +> never judged against B2.** The bump moves to **r₀ = 0.75** — local index +> `√(0.5625·7 651 227) ≈ 2077`, comfortably clear of 1597, safely interior +> (not at the disk edge, where a bump would have no full neighbourhood). **Steps.** 1. Build the lattice. For each radius band (8 equal-area annuli), find the @@ -196,45 +208,63 @@ the result *depends on the strides being Fibonacci*. 3. Sweep operator: for stride j, order points into chains `(start, j)` within a band; one sweep = `y_i ← 0.25·y_{prev} + 0.5·y_i + 0.25·y_{next}` along each chain (open ends: hold). One ADI iteration = sweep family A - then family B, band-appropriate strides. -4. Test field: Gaussian bump `exp(−|x−x0|²/2σ²)`, σ=0.08, x0 at radius 0.45. - Run 8 ADI iterations. Reference: sample the analytic heat-kernel-blurred - Gaussian (σ_ref² = σ² + 8·s² where s = the measured mean neighbor spacing - × 0.5 — CALIBRATE σ_ref by least-squares over σ_ref, then judge SHAPE) at - the lattice points. + then family B, band-appropriate strides. **Restrict all chain-building and + sweeping to the qualifying bands (3–8, `r ≥ 0.6124`)** — bands 1–2 are + measured (for B1's transition map) but never swept or judged. +4. Test field: Gaussian bump `exp(−|x−x0|²/2σ²)`, σ=0.08, **x0 at radius + 0.75** (qualifying, interior — see the note above). Run 8 ADI iterations. + Reference: sample the analytic heat-kernel-blurred Gaussian (σ_ref² = σ² + + 8·s² where s = the measured mean neighbor spacing × 0.5 — CALIBRATE + σ_ref by least-squares over σ_ref, then judge SHAPE) at the lattice + points. 5. Anisotropy metric: fit the blurred bump's second-moment tensor; ratio of eigenvalues λ_max/λ_min. **Bars (pre-registered, commit before run):** -- **B1** (descriptive, no pass/fail): stride pairs per band + transition map - + crossing-angle table. -- **B2 ISO:** after best-σ_ref calibration, relative L2 error between ADI - result and isotropic reference ≤ **0.15**, AND second-moment anisotropy - λ_max/λ_min ≤ **1.25**. -- **B3 CONTROL (can-it-fail), at the SAME N:** identical run with the stride - pair forced to a **non-Fibonacci pair of comparable magnitude** — use - **1500 and 2600** (near F(17)=1597 / F(18)=2584 in size, so the control - differs in *arithmetic*, not in *scale*) — must give anisotropy ≥ **1.5×** - the Fibonacci run's. If the wrong strides smooth just as isotropically, the - Fibonacci claim measures nothing — say VOID. *(The first draft used 12/18, - which at N=2.55M is not a wrong-arithmetic control but a wrong-scale one: - stride 12 connects points that are nowhere near each other, so it would - have failed for a reason having nothing to do with Fibonacci.)* +- **B1** (descriptive, no pass/fail): stride pairs per band (report ALL 8 + bands, flag 1–2 as `sub_floor: true`) + transition map + crossing-angle + table. +- **B2 ISO (bands 3–8 ONLY):** after best-σ_ref calibration, relative L2 + error between ADI result and isotropic reference ≤ **0.15**, AND + second-moment anisotropy λ_max/λ_min ≤ **1.25**. +- **B3 CONTROL (can-it-fail), at the SAME N, DISTANCE-MATCHED not + magnitude-matched:** for each point, its true Fibonacci partners are its + neighbours at index offset `±1597`/`±2584`; the control partner is chosen + as the point among its **8 real nearest lattice neighbours (via + cKDTree)** whose PHYSICAL distance is closest to the true Fibonacci + partner's distance, **excluding the true Fibonacci partner itself**. This + guarantees near-identical step LENGTH by construction (the confound a + fixed-integer control cannot rule out) while breaking the arithmetic + coherence — connections are locally distance-matched, not globally + recurrence-coherent. Must give anisotropy ≥ **1.5×** the Fibonacci run's. + If the shuffled-neighbour control smooths just as isotropically, the + Fibonacci claim measures nothing — say VOID. *(Two earlier attempts at + this control both failed for the wrong reason: 12/18 connects points + nowhere near each other — wrong SCALE; 1500/2600 looked scale-matched by + raw magnitude but is not — a Fibonacci-family stride's actual PHYSICAL + step is governed by its angular residue `(stride·golden_frac) mod 1`, + which for 1597/2584 is ≈0.00028/0.00017 (near-zero, that is WHY they are + parastichy numbers) while 1500/2600 sit at ≈0.051/0.112 — two to three + orders of magnitude larger, i.e. still a wrong-scale control wearing a + same-magnitude disguise. The distance-matched-neighbour construction + above cannot make this mistake, because it measures physical distance + directly instead of inferring it from integer size.)* - **B4 INDEX-FLOOR SWEEP (the operator's rule, measured not assumed):** repeat - the whole pipeline at **N = F(n)²** for `n ∈ {8, 10, 12, 14, 17, 19, 21}`, - each time using that N's OWN emergent pair (never a forced stride), and - report `iso_error` + `aniso` against n. **Two-sided and both readings must - be stated:** a knee near n≈17 promotes the floor to a measured `[G]`; a - curve already flat from n≈10 means the floor is a **safety margin, not a - mechanism** — report that plainly rather than burying it, and leave the - keep-or-relax call to the operator. Note `N = F(21)² = 1.2e8` is too large: - **cap the sweep at n=19 (N = F(19)² ≈ 1.75e7)** and record n=21 as - NOT RUN — do not silently drop it. - -**Cost note (changed by the floor):** N=2.55M f64 ≈ 20 MB/field, cKDTree -build ~10 s; the B4 sweep is dominated by its largest N. Budget **~10–20 min -and ~2 GB peak**, not the "minutes" of the pre-floor draft. Still zero fetch. -Checkpoint per (N, band) row per §0. + the whole pipeline at **N = 3·F(n)²** for `n ∈ {8, 10, 12, 14, 17, 19}` + (keeping the same 3× margin and the same bump-placement/band-exclusion + logic scaled to each N's own `r_floor`), each time using that N's OWN + emergent pair (never a forced stride), and report `iso_error` + `aniso` + against n. **Two-sided and both readings must be stated:** a knee near + n≈17 promotes the floor to a measured `[G]`; a curve already flat from + n≈10 means the floor is a **safety margin, not a mechanism** — report that + plainly rather than burying it, and leave the keep-or-relax call to the + operator. `n=21` (`N=3·F(21)² ≈ 3.6e8`) is too large: cap the sweep at + n=19 and record n=21 as NOT RUN — do not silently drop it. + +**Cost note (changed by the floor, and again by the 3× margin):** N=7.65M +f64 ≈ 61 MB/field, cKDTree build ~30–60 s; the B4 sweep is dominated by its +largest N (`3·F(19)² ≈ 5.2e7`). Budget **~20–30 min and ~3 GB peak**. Still +zero fetch. Checkpoint per (N, band) row per §0. **Output JSON:** `{N, bands: [...], crossing_angles: {...}, iso_error, aniso_fib, aniso_control, sweep: [{n, N, pair, iso_error, aniso}], @@ -271,24 +301,40 @@ automatically transfer. 3. Control: TWO axis-aligned square grids of identical point density over the same two disks, same metric, same pairing procedure. +> **⚠ G1/G4 TIE DEFINITION CORRECTED.** The first draft counted global +> duplicate rounded distances across the WHOLE pair population — but that +> statistic is blind to the actual claim (does one H-point have TWO +> equally-near T-candidates, i.e. an ambiguous pairing) and, at the +> million-point sizes now in play, unrelated distance PAIRS from DIFFERENT +> source points will collide after 1e-9 km rounding by ordinary float +> density regardless of mechanism — so "duplicates observed" no longer +> implies "irrational-angle uniqueness failed". Redefined per-source below. + **Bars:** -- **G1 TIES:** count of exact-duplicate nearest-pair distances (float64 - equality after rounding to 1e-9 km): golden = **0**; grid control **> 0** - (if the grid also has zero ties, the tie test is vacuous on this geometry — - report VOID for G1 and rely on G2). +- **G1 TIES (per-source, corrected):** for each H-point in the overlap band, + find its 1st- and 2nd-nearest T-lattice points (`d1 ≤ d2`, via cKDTree, + k=2). Define **near-tie** as `d1/d2 > 1 − 1e-6` (the two candidates are + ambiguously close FOR THAT SOURCE POINT — the actual pairing-quality + question). Count near-ties: golden = **0** (irrational angle ⇒ generic + position, no H-point is equidistant between two T-points except by + measure-zero coincidence); grid control **> 0** (regular lattices produce + systematic equidistance, e.g. diagonal ties, by symmetry). If the grid also + reports 0, the tie test is vacuous on this geometry — report VOID for G1 + and rely on G2. - **G2 EVENNESS:** coefficient of variation of nearest-pair distances: golden CV **< grid CV** (strict). - **G3** (descriptive): χ² of pair-midpoint density against uniform across the corridor band, both constructions, reported not judged. -- **G4 INDEX-FLOOR SWEEP (does the floor bite THIS probe?):** rerun G1+G2 at - `N = F(n)²` for `n ∈ {8, 10, 12, 14, 17, 19}` and report ties + CV against - n. **The pre-registered expectation, written down before the run so it can - be wrong:** ties stay **0 at every n** (the angle is irrational at any N), - while CV improves monotonically and may flatten near the floor. **If ties - appear below the floor, the angle reading was wrong and G1's mechanism is - not what this brief claims** — report it as a correction to §0's "the angle - is unaffected" split, which is exactly the kind of claim that should be - falsifiable rather than inherited. +- **G4 INDEX-FLOOR SWEEP (does the floor bite THIS probe?):** rerun the + corrected G1 + G2 at `N = F(n)²` for `n ∈ {8, 10, 12, 14, 17, 19}` and + report near-ties + CV against n. **The pre-registered expectation, written + down before the run so it can be wrong:** near-ties stay **0 at every n** + (the angle is irrational at any N), while CV improves monotonically and + may flatten near the floor. **If near-ties appear below the floor, the + angle reading was wrong and G1's mechanism is not what this brief + claims** — report it as a correction to §0's "the angle is unaffected" + split, which is exactly the kind of claim that should be falsifiable + rather than inherited. **Cost note:** the N=2.55M headline plus the sweep; budget ~10 min, ~2 GB, zero fetch. Checkpoint per (n, arm) row per §0.