Skip to content

Commit 373d3b7

Browse files
authored
Merge pull request #923 from AdaWorldAPI/claude/jirak-math-theorems-harvest-rfii13
eval plan (known vs test) + DistanceLut::circular() + field-ergonomics corrections
2 parents 12c13aa + 24f1966 commit 373d3b7

9 files changed

Lines changed: 769 additions & 24 deletions

File tree

‎.claude/board/EPIPHANIES.md‎

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,127 @@
1+
## 2026-08-11 — E-THE-FRAME-WAS-ALREADY-SHIPPED-FOUR-TIMES-1
2+
3+
**Status:** FINDING `[G]` — read in source this session.
4+
5+
**The `mu + kσ` calibrate → band → roll-on-drift frame exists FOUR times in this
6+
workspace, and I hand-wrote a fifth in Python after being corrected into it.**
7+
8+
| instance | metered quantity |
9+
|---|---|
10+
| `ndarray::hpc::cascade::Cascade` — `expose()` → `Band`, `observe`/`recalibrate` | Hamming distance |
11+
| `perturbation_sim::rolling_floor::RollingFloor` — `threshold()` = *"the **confidence-interval** floor"*, `z()` = *"the **Jirak-honest** noise-floor units; significance via `n^(p/2−1)`, not IID"*, `band()` → Stable…Alarm, `preheat()` | mode instability |
12+
| `helix::quantize::RollingFloor` — `quantize`/`bucket_center`/`observe`/`roll` | palette `[a,b]` |
13+
| `thinking-engine::domino` — *"3σ top-K focus"* | table attention |
14+
| **`probes/weather-p1/p1_ci_vs_floor.py` — MINE** | ERA5 bucket CI |
15+
16+
`perturbation_sim::RollingFloor` **is** the "corrected evaluation frame" that
17+
took three correction sections (§12.10–§12.12) and an operator intervention to
18+
reach — including the Jirak citation, in the doc comment.
19+
20+
**Also found in the same sweep, all `[G]`:**
21+
22+
- **`crates/perturbation-sim` is the applied instance of the whole stack** —
23+
`splat.rs` (Gaussian-splat **magnitude** side) + `sketch.rs` (Walsh/XOR **sign**
24+
side) is *literally* OGAR's two-algebra rule; `cascade_key.rs::morton48` is the
25+
OGAR production HHTL address; `hhtl.rs` derives `(HEEL,HIP,TWIG)` by **Cheeger
26+
bisection of the Laplacian**.
27+
- **64×64 "Stockfish ergonomics" is an exact identity:** `64×64 = 4096 cells =
28+
4096 bit = 512 byte = 64 × u64` = **the CANON node stride**. A node's bits ARE a
29+
bitboard; `masked_popcount_batch(words, mask)` IS `popcount(attacks & targets)`;
30+
magic bitboards are the same LUT amortization as the `[a,b]` floor.
31+
- **`symbiont/src/domino.rs` already proves the AMX path** — 4×4 Morton BF16
32+
tiles, **16 SoA boards per AMX 16×16 tile GEMM**, cascade feedback, real
33+
`TDPBF16PS` on Emerald Rapids.
34+
35+
**Rule:** **before writing a frame, grep the workspace for the frame.** The
36+
`Consult, don't guess` ladder (card → knowledge doc → board → source) has no rung
37+
for *"search the sibling crates for the thing you are about to build"* — four
38+
misses in one document say it needs one. A measured number computed twice is not
39+
a wrong number; it is a wasted one, and it hides the fact that the first
40+
implementation already carried the caveats you were about to rediscover.
41+
42+
## 2026-08-11 — E-TOPOLOGY-PICKS-THE-TABLE-NOT-THE-DOMAIN-1
43+
44+
**Status:** FINDING `[G]` — `DistanceLut::circular()` proven a metric
45+
EXHAUSTIVELY over all 256³ = 16 777 216 triples (`distance.rs`, 3 tests).
46+
47+
**Supersedes both `E-THE-REUSE-IS-THE-PROCESS-…-1` and
48+
`E-JUDGE-THE-FIELD-NOT-THE-ELEMENT-1`.** Operator: *"distance.rs is normalized
49+
[a,b] amortizing in LUT."*
50+
51+
**The LUT is the AMORTIZATION POINT, not merely a metric or a cache.**
52+
`quantize()` normalizes `[a,b]` once per element at ingest; `from_floor()` folds
53+
the *same* normalization into the table. Afterwards: no bounds, no division, no
54+
per-element normalization — a pure index lookup, in **unit-free** units, which is
55+
exactly what licenses cross-variable comparison. O(256²) once, not O(N²).
56+
57+
**Consequence:** if the LUT amortizes *any* bounded `[a,b]`, a **circular** range
58+
is just another bounded range with a different formula. Built and proven:
59+
`circular()` = `min(|a−b|, 256−|a−b|)`, the cycle-graph geodesic on `Z_256` —
60+
**0 violations / 16 777 216 triples**, symmetric, identity, positive. Falsifier:
61+
`d_circ(255,0) = 1` vs `d_linear(255,0) = 255`.
62+
63+
**So the crate's *"raw-azimuth is NOT a metric (the 2π wrap)"* is about the
64+
FORMULA, not about angles.** `linear()` is the wrong table for a ring;
65+
`distance_heuristic` uses no table at all. A wrapping quantity in the 256-palette
66+
with the circular table is metric-safe and stays in the index domain.
67+
68+
| azimuth as | resolution | metric? | field shape |
69+
|---|---|---|---|
70+
| u16 raw + `linear()` | 0.0055° | **no** | not tileable |
71+
| **u8 palette + `circular()`** | **0.352° mean** | **yes** | `&[u8]` · 128 KB L1 · `U8x64` · AMX |
72+
| nearest-`n` | 0.972° mean | yes | single index |
73+
74+
The palette azimuth beats nearest-`n` **and** keeps the field ergonomics. The
75+
previous entry was right about the ergonomics and wrong to treat them as
76+
disqualifying: the fix was never "abandon the direct path", it was **give the
77+
wrapping lane its own table**.
78+
79+
**Rule:** **a bounded quantity's TOPOLOGY selects its table formula; it never
80+
decides whether the quantity belongs in the palette domain.** Amortization, L1
81+
residency, `U8x64` lane and AMX plane are identical either way — that is what
82+
makes the substrate general rather than per-quantity.
83+
84+
## 2026-08-11 — E-JUDGE-THE-FIELD-NOT-THE-ELEMENT-1
85+
86+
**Status:** FINDING `[G]` (crate-stated: `distance.rs:8-12`; `ndarray`
87+
`int8_tile_gemm::int8_gemm_amx_tiled(a_u8, b_i8, …) -> [i32]`).
88+
89+
**Corrects `E-THE-REUSE-IS-THE-PROCESS-AND-IT-EXPOSED-A-FIT-PROBLEM-1` (below):
90+
its 10× measurement stands, its VERDICT is inverted.**
91+
92+
**Operator:** *"you didn't factor in that due to normalized values the field has
93+
different ergonomics than the single value — meaning AMX matmul, tile ops etc."*
94+
95+
**A normalized representation must be judged by what its FIELD does, not by what
96+
one element decodes to.** The 10× scored **angular reconstruction error** — the
97+
operation the substrate exists to avoid, and the exact metric this workspace
98+
already ruled out for scoring a one-way address over a retained original. Third
99+
instance of that error in one arc; this one landed three sections after the rule
100+
was written down.
101+
102+
At field scale the ergonomics run the other way:
103+
104+
| | nearest-`n` | direct `(polar, azimuth)` |
105+
|---|---|---|
106+
| direction collapses to | **ONE index**, 256-palette domain | 3 lanes, one 16-bit **circular** |
107+
| compare | 2 × `DistanceLut` u8 lookups — **L1 metric**, CAKES/CLAM-safe | **not a metric** — `distance.rs:8-10`, the 2π wrap "must never feed CAKES bounds" |
108+
| LUT | 128 KB, L1/L2-resident, **`U8x64`-friendly** | 65536² is not a table |
109+
| tile shape | a `&[u8]` plane → `int8_gemm_amx_tiled` **directly** | none |
110+
| decode to compare? | **no** | **yes** |
111+
| per-point error | 0.972° | 0.097° |
112+
113+
**Resolution — split by OPERATION, not a winner.** Compare/search/correlate a
114+
field → the single-index path (this is what *"pay the inbound tax once"* buys,
115+
and why palette256 is the same pattern one rank down). Materialize one bearing →
116+
the direct path, 10× finer, but *"never reconstruct per element when the
117+
representation is normalized"* makes that the rare path, not the design centre.
118+
119+
**Rule:** a per-element accuracy number is the round-trip metric wearing a
120+
different hat. A representation can win it and simultaneously destroy the
121+
index-domain comparison, the metric guarantee, and the tile shape that made the
122+
substrate worth building. **Ask what the field does under the ops you actually
123+
run — LUT, SIMD lane, tile/AMX — before ranking encodes.**
124+
1125
## 2026-08-11 — E-THE-REUSE-IS-THE-PROCESS-AND-IT-EXPOSED-A-FIT-PROBLEM-1
2126

3127
**Status:** FINDING `[G]` on the measurement (`crates/helix/tests/bearing_encode_paths.rs`,

‎.claude/board/INTEGRATION_PLANS.md‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
1+
## 2026-08-11 — weather-substrate-evaluation-v1 (EVALUATION PLAN; the known-vs-test ledger for the whole #915→#922 arc)
2+
3+
Plan: `.claude/plans/weather-substrate-evaluation-v1.md`. Operator ask: *"create
4+
an evaluation plan with the details known vs what to test."* Two halves. **§1
5+
KNOWN** — 25 claims (K-1..K-25), each with file:line evidence and an honest
6+
grade split `[G]` / `[G-session]` (probe source committed, fixture fetched) /
7+
`[H]` (measured this session, reproducer NOT committed — only K-12/K-13, the
8+
latitude-band and palette-azimuth tables, whose scratch tests were deleted) /
9+
`[G-absence]`. Every K-row was **independently verified against the tree by a
10+
13-agent verify/attack workflow before the plan went ACTIVE** (7 Sonnet
11+
source-verifiers over helix/quantize/probes/perturbation-sim/ndarray/domino/
12+
splat3d/morton-comma; 6 Opus falsifier-auditors attacking the EV specs for
13+
vacuous pass routes, missing silence halves, and inert thresholds — the
14+
session's own recurring failure modes, §12.12–§12.17). **§3 TO TEST** — ten
15+
probes EV-1..EV-10 in three waves: Wave 0 needs no data (EV-9 commits the
16+
K-12/K-13 orphans); Wave 1 needs one `fetch.py` re-fetch (EV-1
17+
advection-as-Morton-shift falsifier · EV-2 wind-lane field-level encode closing
18+
§12.13–§12.15 · EV-3/EV-4 floor & window sweeps feeding operator decisions
19+
D-1/D-2 · EV-5 U-shaped variables, the shape rule's other half · EV-6 harness
20+
re-expression on the SHIPPED `RollingFloor` frame with an exact-number
21+
equivalence gate · EV-8 Jirak effective-n · EV-10 second timestep/season);
22+
Wave 2 is the operator-named 16k×16k 3DGS top-k scale run (EV-7a) + the
23+
comma anti-moiré falsifier (EV-7b, two-sided: the regular-stride control MUST
24+
alias or the fixture cannot falsify). **§5 decision register** D-1..D-6 keeps
25+
the operator calls (noise floor, window, `from_bearing` API, dormant-lane fix,
26+
helix CI, harness-of-record) separate from the tests that feed them. Binding
27+
frame rules restated: bucket-CI vs noise floor never round-trip; Jirak
28+
significance; *grep the workspace for the frame before writing one*. Doc-only.
29+
130
## 2026-08-10 — weather-substrate-poc-v2 (PLAN; supersedes v1/#914)
231

332
Plan: `.claude/plans/weather-substrate-poc-v2.md`. **Supersedes `weather-substrate-poc-v1.md` (#914).** Restructured to the operator's three-phase gate: **A** representation reliability (`jc` battery) → **B** hardware acceleration (`ndarray` parity/throughput) → **C** prediction correctness (`jc` battery). A and C are the SAME instrument on different pairs (`corr(code_dist, field_dist)` vs `corr(predicted, observed)`), so C costs no new statistical machinery; B sits between because a Phase-C number measured on a silently-scalar path would be dishonest about the substrate. **Four corrections to v1 + this plan's own first draft:** (1) **GRIB2 is GONE** — WeatherBench2 publishes `era5/…1440x721.zarr` (= the 1,038,240 grid) on public GCS, so ingest is Zarr→numpy→f32 slab, no eccodes/gribberish, and v1 §6.3 is moot rather than solved; history sizing 58k→**570k** states (65 yr hourly). (2) `ecmwf-opendata` is **Phase C** (live IFS/AIFS), not Phase A (ERA5 reanalysis). (3) **Versioning is CONSUMED, not built** (operator: "lance 900..913++ should have introduced the necessary versioning") — `VersionedGraph::{at_version, current_version, commit_encounter_round}`, `GraphDiff`, `LanceCycleWriter` (#913 +1030), `temporal::{QueryReference::at(v,rung), deinterlace, LanceVersion}` are all shipped and pinned by two existing tests (`a_whole_cycle_of_casts_is_one_wal_write_one_version`, `p4a_drains_…`); **any weather deliverable re-implementing a version writer is the defect.** (4) **S3 is the hydration path, NEVER the store** (#901 doctrine) — the earlier "slabs land on S3, read them back" framing collapsed two layers; object store hydrates, local mmap-capable dir stores, `RAILWAY_VOL` only sets hydration frequency; the network-mount-looks-local trap is called out. **Ingest split** disposable Stage-A (static ERA5, thrown away) vs permanent Stage-C (recurring), sharing the 512 B stride + `soa:*` metadata so Stage-A slabs stay readable. **One dataset, versions are cycles** (operator ruling) — forecast+analysis in the same dataset, joined by version-range read. **All 3 comparison lanes** (forecast-vs-analysis · model-vs-model · encoder-drift; the third guards the substrate claim). **New repos: ZERO** — `crates/weather-poc` workspace-EXCLUDED on the perturbation-sim template; weatherbench2/arco-era5/ecmwf-opendata forks cloned, graphcast zipball-on-demand (under the 3-reads bar). Pins verified against the tree: rust 1.97.1 · lance/lance-encoding/lance-linalg 9.0.0 · lancedb 0.33.0 · arrow 58.3.0 · datafusion 53. Gate D-WXA-5: ρ ≥ 0.98 for ≥1 arm **AND** the shuffled-codebook control must FAIL. Doc-only.

‎.claude/board/PR_ARC_INVENTORY.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
- **Deferred.** **No public `from_bearing` was minted** — deliberately. The measurement says which path is right; the API shape (does the bearing write go through `ResidueEncoder`? where does `rim`'s `n` come from?) is an operator call, `[S]`. Also still open: the saturation-window widening; a citable per-variable noise floor; the U-shaped-variable falsifier. Filed-not-fixed: the `Signed360::sign()` dormant-lane defect.
77
- **Docs.** §12.13; EPIPHANIES `E-THE-REUSE-IS-THE-PROCESS-AND-IT-EXPOSED-A-FIT-PROBLEM-1`, which corrects `E-THE-DOCTRINE-DOC-EXISTED-AND-I-NEVER-READ-IT-1`'s "deliberately not built" framing while keeping its three surviving findings (`Signed360`-is-complete, the `Pair48` withdrawal, the mandatory `READ BY:` rule).
88

9-
**Confidence (2026-08-11):** merged. The 10× is `[G]` — a committed, re-runnable test, not a one-off. `helix` is excluded from the root workspace and in no CI workflow `[G-absence]`, so it runs **only by hand**. The API shape is `[S]` and must not be built on before an operator decides it.
9+
**Correction (2026-08-11, same session — operator):** *"you didn't factor in that due to normalized values the FIELD has different ergonomics than the single value — AMX matmul, tile ops etc."* **Correct, and it inverts the verdict.** The 10× scored **angular reconstruction error** — the one operation `§12.10` rules out and the substrate exists to avoid. At FIELD scale the ergonomics run the other way: Path A collapses direction to **one index in the 256-palette domain**, so comparison is `rim.distance_adaptive` = two `DistanceLut` u8 lookups — an **L1 metric**, CAKES/CLAM-safe, `U8x64`-friendly (`distance.rs:12`), and a `&[u8]` plane that feeds `ndarray`'s `int8_gemm_amx_tiled(a_u8, b_i8, …)` directly. Path B's azimuth is **16-bit and circular**, which `distance.rs:8-10` names explicitly as **NOT a metric** ("must never feed CAKES bounds") — no 256×256 LUT, no tile plane, and comparison would require decoding. **So: Path A for compare/search/correlate over a field (the substrate's reason-for-being); Path B only where a single bearing must actually be materialized.** The measurement stands; what was wrong was treating it as the deciding metric.
10+
11+
**Confidence (2026-08-11):** merged. The 10× is `[G]` — a committed, re-runnable test, not a one-off — **but it is not the deciding number; see the Correction above.** `helix` is excluded from the root workspace and in no CI workflow `[G-absence]`, so it runs **only by hand**. The API shape is `[S]` and must not be built on before an operator decides it.
1012

1113
## 2026-08-11 — lance-graph #920 (MERGED) — the probes RAN, and they falsified the doc that queued them: evaluation frame, Fisher-Z economics, and the helix regrade
1214

‎.claude/board/STATUS_BOARD.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
## weather-substrate-evaluation-v1 — EV queue (PRE-REGISTERED 2026-08-11)
2+
3+
Plan: `.claude/plans/weather-substrate-evaluation-v1.md` (known-vs-test ledger;
4+
verify/attack-audited before ACTIVE). Waves: 0 = no data · 1 = one fixture
5+
re-fetch · 2 = scale.
6+
7+
| D-id | Deliverable | Wave | Status | Feeds |
8+
|---|---|---|---|---|
9+
| EV-1 | Advection-as-Morton-shift falsifier (wind (dx,dy) tile shift vs persistence, calm-tile silence half) | 1 | Queued | §12.16 [S] regrade |
10+
| EV-2 | Wind-lane encode at FIELD level (nearest-n vs u8-palette-circular vs u16-linear; wrap-corruption can-fire + 90°-sector silence) | 1 | Queued | D-3 |
11+
| EV-3 | Floor-sensitivity sweep [0.1..2.0] K → per-variable flip-points | 1 | Queued | D-1 |
12+
| EV-4 | Saturation-window sweep → sat% vs interior-CI tradeoff curve | 1 | Queued | D-2 |
13+
| EV-5 | U-shaped variables (total_cloud_cover, sea_ice_cover) — the shape rule's OTHER half, two-sided by construction | 1 | Queued | E-TRANSFORM-SHAPE promotion/refutation |
14+
| EV-6 | P1/P2 harness re-expressed on the SHIPPED RollingFloor frame; equivalence gate 0.848/0.820/95.65 + 0.9997/0.999556 to 1e-4 rel | 1 | Queued | D-6 |
15+
| EV-7a | 16k×16k 3DGS top-k scale run (1 048 576 tiles; heel-reject ∉ {0%,100%}) | 2 | Queued | operator-named capability |
16+
| EV-7b | Comma anti-moiré falsifier at tile scale (regular stride MUST alias; comma must not) | 2 | Queued | D-QUANTGATE evidence |
17+
| EV-8 | Jirak effective-n for the P2 correlations (spatial autocorrelation → n_eff) | 1 | Queued | P5 |
18+
| EV-9 | Commit the K-12/K-13 orphan measurements as disable-verified helix tests | 0 | Queued | honesty-split closure |
19+
| EV-10 | Second timestep + season for P1 ([H]→promotion or timestep-conditional regrade) | 1 | Queued | K-9 robustness |
20+
121
## oracle-funnel-probe v1 — PROBE-ORACLE-FUNNEL staged (PRE-REGISTERED 2026-08-05)
222

323
Plan: `.claude/plans/oracle-funnel-probe-v1.md`. Consumes OGAR #241/#244

0 commit comments

Comments
 (0)