|
| 1 | +## 2026-08-11 — lance-graph #923 (MERGED) — the evaluation plan (KNOWN vs TO TEST), `DistanceLut::circular()`, and the two verdict inversions that reshaped both |
| 2 | + |
| 3 | +- **Added.** `.claude/plans/weather-substrate-evaluation-v1.md` — the arc's known-vs-test ledger: **§1 KNOWN K-1..K-25** each with `file:line` and an honest grade (`[G]` / `[G-session]` probe-source-committed-fixture-fetched / `[H]` measured-but-no-committed-reproducer / `[G-absence]`), **§2** the honesty split naming the only two `[H]` rows, **§3 EV-1..EV-10** in three waves, **§4** wave gating, **§5** the D-1..D-6 operator decision register. `DistanceLut::circular()` + 3 tests (`crates/helix/src/distance.rs`). Knowledge-doc §12.14–§12.17. Three EPIPHANIES entries. |
| 4 | +- **Locked.** **Topology selects the TABLE FORMULA; it never decides whether a quantity belongs in the palette domain.** `circular()` = `min(|a−b|, 256−|a−b|)`, the cycle-graph geodesic on `Z_256`, proven a metric **exhaustively — 0 violations over all 256³ = 16 777 216 triples** (not stride-sampled), wrap falsifier `d_circ(255,0)=1` vs `d_linear(255,0)=255`. So `distance.rs:8-10`'s *"raw-azimuth is NOT a metric (the 2π wrap)"* is a statement about the **formula**, not about angles. **The LUT is the `[a,b]` AMORTIZATION POINT** — `quantize()` normalizes once per element at ingest, `from_floor()` folds the SAME normalization into the table; afterwards comparisons are pure lookups in **unit-free** units (which is what licenses cross-variable comparison), O(256²) once instead of O(N²). **Judge a normalized representation by what its FIELD does, not by what one element decodes to** — a per-element accuracy number is the round-trip metric wearing a different hat. **A doctrine written for one domain is not automatically right for the next one that reuses it.** **Before writing a frame, grep the workspace for the frame.** |
| 5 | +- **Measured `[G]`.** Bearing encodes at N=65536: nearest-`n` **0.972°** mean vs direct `(polar,azimuth)` **0.097°** — but at field scale nearest-`n` collapses direction to ONE palette index (2 × `DistanceLut` u8 lookups, L1 metric, CAKES-safe, `U8x64`, feeds `int8_gemm_amx_tiled(a_u8, b_i8, …)` directly) while raw u16 azimuth is circular and tileless. **u8-palette azimuth under `circular()` = 0.352° mean** — beats nearest-`n` AND keeps the field ergonomics. Morton motion is **O(1) in pixels** (`dx=7 dy=5 bit_exact=1 motion_bytes=2 sprite_px=576`, interior residual 0, `disocc_frac=0.1215`); comma fence `three_gap_distinct=3`, `coprime_full_perm=1`. `64×64 = 4096 cells = 4096 bit = 512 B = 64×u64` = **the CANON node stride** — a node's bits ARE a bitboard, `masked_popcount_batch(words, mask)` IS `popcount(attacks & targets)`. |
| 6 | +- **⊘ Corrections this PR carries (three verdict changes on ONE question).** §12.13 ranked the bearing encodes by angular **reconstruction** error — the metric §12.10 rules out — and was inverted by §12.14 on field ergonomics; §12.14 was then itself **too strong**, and §12.15 resolved it: the fix was never "abandon the direct path", it was **give the wrapping lane its own table**. **`crates/perturbation-sim::rolling_floor::RollingFloor` already IS the "corrected evaluation frame"** of §12.10/§12.11 — `threshold()` = *"the confidence-interval floor"* `mu+k·σ`, `z()` = *"the Jirak-honest noise-floor units; significance via n^(p/2−1), not IID"*, `band()`, `preheat()`, rolling `observe()` — **and I re-derived it in Python.** It is the **fourth** instance of one frame (`ndarray::Cascade::expose`, `perturbation-sim`, `helix::RollingFloor`, `domino`'s 3σ top-K). |
| 7 | +- **Deferred.** The plan ships **DRAFT-pending-audit** by its own header — a 13-agent verify/attack pass folds in as §8 and flips it ACTIVE. No public `from_bearing` minted (D-3). EV-1..EV-10 all **Queued**, none run. D-1..D-6 open. Filed-not-fixed: the `Signed360::sign()` dormant-lane defect (pinned by a defect test that a fix must break deliberately). |
| 8 | +- **Docs.** `weather-substrate-evaluation-v1.md`; knowledge §12.14–§12.17; EPIPHANIES `E-JUDGE-THE-FIELD-NOT-THE-ELEMENT-1`, `E-TOPOLOGY-PICKS-THE-TABLE-NOT-THE-DOMAIN-1`, `E-THE-FRAME-WAS-ALREADY-SHIPPED-FOUR-TIMES-1`; INTEGRATION_PLANS + STATUS_BOARD (11 EV rows). |
| 9 | + |
| 10 | +**Confidence (2026-08-11):** merged. `circular()` is `[G]` on an exhaustive proof. The plan's K-ledger is graded per-row and **its audit had not completed at merge** — treat any `[H]` row as unconfirmed until §8 lands. `helix` is root-workspace-excluded and in **no CI workflow** `[G-absence]`, so every helix test here runs **only by hand**. Two PRE-EXISTING clippy findings (`walk_spectrum.rs:81`, `probe_mantissa_fill.rs:174`, new 1.97 lints) were deliberately **left alone** rather than sweeping files outside this change's scope. |
| 11 | +**Process note — the merge race.** #922 merged mid-push, leaving five commits stacked on merged history; they were rebased onto main and reopened as #923, and #922's description was **restored** to describe only what it merged (two post-merge edits had wrongly attributed later content to it). A merged PR is finished — it cannot absorb follow-up work. |
| 12 | + |
1 | 13 | ## 2026-08-11 — lance-graph #921 (MERGED) — the reuse IS the process: the wind bearing-encode measured, and the doctrine that does not fit it |
2 | 14 |
|
3 | 15 | - **Added.** `crates/helix/tests/bearing_encode_paths.rs` — a committed measurement of the two candidate `bearing → Signed360` encodes at N=65536. `.claude/knowledge/weather-normalized-substrate.md` §12.13. Board hygiene for #920 (its own arc + `LATEST_STATE` entries, plus the `Correction`/`Confidence` pair on #917). |
|
0 commit comments