From ac2a0deab8efbf32e36159b113567b507c57d923 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 11 Aug 2026 09:25:40 +0000 Subject: [PATCH] =?UTF-8?q?docs(board):=20record=20#921=20=E2=80=94=20the?= =?UTF-8?q?=20wind=20reuse=20and=20the=20doctrine=20that=20does=20not=20fi?= =?UTF-8?q?t=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #921 merged with neither board file updated. It was a MIXED PR (board hygiene for #920 plus the wind bearing-encode finding), so the termination clause does not apply — per the rule, the non-hygiene half is what the entry is for. The entry records what #921 actually settled: - The invention/reuse line. Invention = asserting structure the code already answers. Reuse = applying the shipped codec to a new domain, which is what a normalized substrate is for. A missing entry point for a designed reuse is a plumbing gap, not a design refusal — correcting #920 §12.12, which declined to build the bearing-encode on the wrong grounds. - The finding the reuse surfaced: the knowledge doc prescribes nearest spherical-Fibonacci (n, sign) for encoding a direction, and it does NOT fit weather. Horizontal bearings measure 1.9-2.7 deg via nearest-n vs 0.000 deg via a direct (polar, azimuth) write; mean over 24 cases 0.972 vs 0.097 — 10x. The golden spiral couples latitude and azimuth through ONE index, so a bearing at the horizon cannot be chosen independently; and the lattice is equal-area on the DISK, so latitude density ~ sin(2*lat) is sparsest exactly at the equator. Normals spread over the sphere and never hit this. - The rule: a doctrine written for one domain is not automatically right for the next one that reuses it. Deferrals carried forward, including that no public from_bearing was minted — the API shape is an operator call and must not be built on before it is made. This commit is hygiene-only, so per the termination clause it generates no further board obligations of its own. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi --- .claude/board/LATEST_STATE.md | 10 ++++++++++ .claude/board/PR_ARC_INVENTORY.md | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index de58fe9b..b1162f39 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -1,3 +1,13 @@ +## 2026-08-11 — lance-graph #921 (MERGED) — the wind reuse, measured: the prescribed bearing-encode is 10× worse than the direct one + +### Current Contract Inventory — no new types (one committed measurement, one doc section, board hygiene) + +- **`crates/helix/tests/bearing_encode_paths.rs`** — the two candidate `bearing → Signed360` encodes, measured at N=65536. Runs **only by hand** (`helix` is root-workspace-excluded and in no CI workflow `[G-absence]`). +- **The invention/reuse line `[G]`:** *invention* = asserting structure the code already answers; *reuse* = applying the shipped codec to a new domain, which is what the normalized substrate exists for. **A missing entry point for a designed reuse is a plumbing gap, not a design refusal.** This corrects #920 §12.12, which declined to build the bearing-encode on the wrong grounds. +- **The finding the reuse surfaced `[G]`:** `helix-cartesian-vs-fisher2z.md` prescribes *nearest spherical-Fibonacci `(n, sign)`* for encoding a direction — **and it does not fit weather.** Horizontal bearings measure **1.9–2.7°** via nearest-`n` vs **0.000°** via a direct `(polar, azimuth)` write (mean over 24 cases: **0.972° vs 0.097°, 10×**). The golden spiral couples latitude and azimuth through ONE index, so a bearing at the horizon cannot be chosen independently; and the lattice is equal-area on the **disk**, giving latitude density ∝ `sin(2·lat)` — sparsest exactly at the equator. Normals spread over the sphere and never hit this; wind always does. +- **Rule locked:** **a doctrine written for one domain is not automatically right for the next one that reuses it.** The doc's prescription is correct *for normals* and should carry its case rather than be read as universal. +- **`[S]` — no public `from_bearing` minted.** The measurement settles which path; the API shape is an operator call and must not be built on before it is made. + ## 2026-08-11 — lance-graph #920 (MERGED) — the probes ran; the doc that queued them was falsified in four places > **⊘ This entry CORRECTS two claims in the #917 entry below it.** (1) **"helix360" is not a symbol** — the type is **`Signed360`**; pickaxe over full history returns 12 blobs, all authored by that session, zero deletions `[G-absence]`. (2) **The "2 × 24-bit hemispheres = wind in/out" reading of the `HelixResidue` lane is WRONG.** Per `.claude/knowledge/helix-cartesian-vs-fisher2z.md` — the doctrine doc with a `READ BY:` header naming exactly that kind of session, which the arc never opened — **one 6-byte `Signed360` is a complete full-sphere direction**: the `polar` sign-partition completes the sphere, so there is no second hemisphere to pair. `ResidueEdge`/`rim` is the **METRIC** carrier (`DistanceLut`, L1); `(polar, azimuth)` is the **render** carrier. The `Pair48` mint is **WITHDRAWN, not deferred**. Nothing below is deleted; it is read through §12.12 of the weather knowledge doc. diff --git a/.claude/board/PR_ARC_INVENTORY.md b/.claude/board/PR_ARC_INVENTORY.md index b779df09..57f523ca 100644 --- a/.claude/board/PR_ARC_INVENTORY.md +++ b/.claude/board/PR_ARC_INVENTORY.md @@ -1,3 +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 + +- **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). +- **Locked.** **The invention/reuse line, drawn properly.** *Invention* = asserting structure the code already answers (a bit budget, a lane reading, `Pair48`, a round-trip API `continuous_field.rs` disclaims). *Reuse* = applying the shipped, proven codec to a new domain — **what a normalized substrate is FOR**. **A missing entry point for a designed reuse is a plumbing gap, not a design refusal**; #920's §12.12 filed the bearing-encode under *invention* and declined to build it, which was an over-correction (generalizing "don't invent structure the code determines" into "don't implement the intended reuse"). **And a doctrine written for one domain is not automatically right for the next one that reuses it** — the rule this PR is really for. +- **Measured `[G]`** (`bearing_encode_paths.rs`, N=65536). `encode_signed` derives **all three** direction-bearing fields from `n` alone (`residue.rs:182-204`). `helix-cartesian-vs-fisher2z.md` prescribes *nearest spherical-Fibonacci `(n, sign)`*; **that prescription does not fit weather.** Horizontal bearings 0°/90°/270°: **1.933° / 2.706° / 1.897°** via nearest-`n` vs **0.000°** each via a direct `(polar, azimuth)` write; mean over 24 bearing×elevation cases **0.972° vs 0.097° — 10×**. *Mechanism:* the golden spiral couples latitude and azimuth through ONE index — reaching `y ≈ 0` needs `n ≈ N−1`, and those few `n` have azimuth already fixed at `n·φ`, so **a bearing at the horizon cannot be chosen independently**; compounding it, the lattice is equal-area on the **disk**, so latitude density ∝ `sin(2·lat)` — sparsest exactly at the equator. Surface normals (the doc's own case) spread over the sphere and never hit this; wind clusters at the horizon and always does. The direct write is licensed by the doc's **own** split (rim = metric carrier, `(polar, azimuth)` = direction, place-independent), at the stated cost that the two halves no longer share one `n`. +- **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. +- **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). + +**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. + ## 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 - **Added.** `probes/weather-p1/` — 8 re-runnable Python probes over real ARCO-ERA5 (`fetch.py`/`fetch_bg.py` chunk retrieval with Zarr-v2 fill semantics, `p1_probe.py`, `p1_ci_vs_floor.py`, `p2_probe.py`, `verify_apparatus.py`, `export_for_jc.py`, `p1_noise_floor.py` [superseded, kept for provenance]) + README + 4 result JSONs + `jc_input.bin`. `crates/jc/examples/weather_substrate_reliability.rs` — Pearson / Spearman / Cronbach α / ICC over the probe export, with header validation and a `--shuffle` negative control. `crates/helix/tests/signed360_claims.rs` — 3 tests, each disable-verified red-then-green. `.claude/knowledge/weather-normalized-substrate.md` §12 (12 correction subsections, ~500 lines).