Skip to content

docs(board): post-merge hygiene for #920, and correct #917's falsified helix claims - #921

Merged
AdaWorldAPI merged 2 commits into
mainfrom
claude/jirak-math-theorems-harvest-rfii13
Aug 11, 2026
Merged

docs(board): post-merge hygiene for #920, and correct #917's falsified helix claims#921
AdaWorldAPI merged 2 commits into
mainfrom
claude/jirak-math-theorems-harvest-rfii13

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Aug 11, 2026

Copy link
Copy Markdown
Owner

Post-merge board hygiene for #920, which merged with neither board file updated — zero references to it in PR_ARC_INVENTORY.md or LATEST_STATE.md.

This is the retroactive-hygiene pattern CLAUDE.md names as an anti-pattern. It is unavoidable once the PR is merged, and leaving the board stale is the worse outcome — the rule exists precisely because #223/#224/#225 merged with no entries at all.

What this does

Why #917 needed correcting

It locked two claims #920 falsified, and left unannotated they are exactly the rediscovery tax the arc file exists to prevent:

  1. "helix360" names nothing. The type is Signed360; pickaxe over full history returns 12 blobs, all authored by that session, zero deletions [G-absence].
  2. The HelixResidue lane does not read as "2 × 24-bit hemispheres = wind in/out". One 6-byte Signed360 is already a complete full-sphere direction — the polar sign-partition completes the sphere. ResidueEdge/rim is the metric carrier; (polar, azimuth) is the render carrier. The Pair48 mint is WITHDRAWN, not deferred.

What survives from #917 unchanged: the Signed360 polar sign-partition being load-bearing (codex P2 #498) — #920 added the sweep test proving the partitions fill [128,255] / [0,127] exactly.

Also recorded — a measurement made after the merge

In answer to an operator question about polar vs equatorial error rates. Signed360 angular error by latitude, N=65536:

|lat| mean max
0–5° (equator) 0.112° 0.226°
45–60° 0.186° 0.448°
85–90° (pole) 3.332° 4.998°

~30× spread, best at the rim — the equatorial ordering is confirmed. But the premise that signing buys accuracy does not survive: there is no resolution gain at equal bit budget. 7-bit |y| + sign vs 8-bit over [-1,1] measures 0.99–1.02× in every band (step 1/127 vs 2/255 = 0.996×). The 256-sample codebook figures implying a √2 gain (full-sphere cap 7.17° vs hemisphere 5.07°) spend an extra bit; at equal budget 128-on-hemisphere is 7.17°, identical.

What the partition buys at the rim is sign EXACTNESS, not precision — and that is exactly where weather lives, since a wind bearing is near-horizontal (y ≈ 0), the regime where a centred-at-128 round loses the hemisphere (#498).

Scope

Two board files, 26 insertions, 1 deletion (the updated Confidence line). No code, no types, no plans. Per the termination clause, this hygiene-only PR generates no further board obligations of its own.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi

Summary by CodeRabbit

  • Documentation

    • Added guidance on encoding wind directions using direct bearing and elevation values.
    • Documented measured accuracy differences between available wind-direction encoding approaches.
    • Clarified direction type semantics and distinctions between metric and rendering representations.
    • Updated project records with corrected findings, evaluation criteria, and withdrawn proposals.
  • Tests

    • Added coverage comparing wind-bearing encoding accuracy across representative cases.

…d claims

#920 merged with neither board file updated (0 references to it in either).
This is the retroactive-hygiene pattern CLAUDE.md names as an anti-pattern —
unavoidable once the PR is merged, and leaving the board stale is the worse
outcome (the rule exists because #223/#224/#225 merged with no entries).

PR_ARC_INVENTORY: prepends the #920 entry (Added / Locked / Deferred+WITHDRAWN
/ Docs / Confidence), and applies the file's own rules 3-4 to #917 — an
appended Correction line plus an updated Confidence line, never an edit to its
immutable Locked text. #917 had locked two claims #920 falsifies: that
"helix360" names something (it does not — the type is Signed360, 12 blobs all
from that session, zero deletions) and that the HelixResidue lane reads as
2x24 hemispheres = wind in/out (it does not — one Signed360 is already a
complete full-sphere direction; rim is the metric carrier, (polar, azimuth)
the render carrier).

LATEST_STATE: prepends the #920 entry with the same correction as a leading
supersession note.

Also records a measurement made after the merge, in answer to an operator
question about polar vs equatorial error rates. Signed360 angular error by
latitude, N=65536: equator 0.112 deg mean / 0.226 max; pole 3.332 / 4.998 —
a ~30x spread, best at the rim. And a correction to the premise: there is NO
resolution gain from the sign split at equal bit budget — 7-bit |y| + sign vs
8-bit over [-1,1] measures 0.99-1.02x in every band (step 1/127 vs 2/255 =
0.996x). The 256-sample codebook figures that imply a sqrt(2) gain (full
sphere cap 7.17 deg vs hemisphere 5.07) spend an EXTRA bit; at equal budget
128-on-hemisphere is 7.17, identical. What the partition buys at the rim is
sign EXACTNESS, not precision — and that is exactly where weather lives, since
a wind bearing is near-horizontal (y = 0), the regime where a centred-at-128
round loses the hemisphere (#498).

Per the termination clause, this hygiene-only commit generates no further
board obligations of its own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
@cursor

cursor Bot commented Aug 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_a07d6074-eb1a-47d8-bba0-2ee163c686f3)

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This change adds a bearing-encoding measurement test and documents its results. It corrects Signed360 terminology and records direct (polar, azimuth) writing as the preferred wind representation without adding a public API.

Changes

Wind-bearing evaluation

Layer / File(s) Summary
Bearing encoding measurement
crates/helix/tests/bearing_encode_paths.rs
Adds helpers and a measurement test for spherical-Fibonacci selection and direct polar/azimuth encoding across 24 wind cases.
Corrected semantics and evaluation records
.claude/knowledge/weather-normalized-substrate.md, .claude/board/EPIPHANIES.md, .claude/board/PR_ARC_INVENTORY.md, .claude/board/LATEST_STATE.md
Records Signed360 as a full-sphere direction codec, separates metric and render carriers, withdraws Pair48, and documents the measured encoding results.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested reviewers: claude

Poem

I’m a rabbit with bearings to test,
Signed360 points through east and west.
Polar and azimuth hop into line,
While golden spirals measure the sign.
The docs now record what the probes found.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the board-hygiene updates and corrections to the previously recorded #917 claims.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…ne does not fit

Operator: "the reuse of the above for the wind was always part of the process
(what you call invention)." Correct, and §12.12 drew the line wrong in both
directions. INVENTION is asserting structure the code already answers (the
48-bit budget, the 2x24 reading, Pair48, a round-trip API the crate disclaims).
REUSE is applying the shipped codec to a new domain — which is what a
normalized substrate is FOR. Filing the missing bearing-encode under
"invention" and declining to build it was an over-correction: a missing entry
point for a designed reuse is a plumbing gap, not a design refusal.

And the reuse earned its keep immediately. encode_signed derives all three
direction-bearing fields from n alone (residue.rs:182-204). The knowledge doc
prescribes nearest spherical-Fibonacci (n, sign) for encoding a direction.
Measured at N=65536, that prescription does NOT fit weather:

  horizontal bearing   nearest-n      direct (polar, azimuth)
  0 / 90 / 270 deg     1.933 / 2.706 / 1.897     0.000 each
  mean, 24 cases       0.972 deg                 0.097 deg   (10x)

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*phi — a bearing at the horizon cannot be chosen independently. The lattice is
equal-area on the DISK, so latitude density is ~ sin(2*lat): sparsest exactly at
the equator. Surface normals spread over the sphere and never hit this; wind
clusters at the horizon and always does.

Rule extracted: a doctrine written for one domain is not automatically right
for the next one that reuses it.

Deliberately does NOT mint a public from_bearing — the API shape is an operator
call. This lands the measurement and the tradeoff.

Note: this makes the branch's PR mixed rather than hygiene-only, so the
termination clause no longer applies to it and the arc entry is warranted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
@cursor

cursor Bot commented Aug 11, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_813cefeb-64a3-4a06-9a15-bae421242258)

@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review August 11, 2026 09:10

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f4fc6912fb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +66 to +67
let mut s = enc.encode_signed(0x1234, rim_n, if y>=0.0 {Sign::Pos} else {Sign::Neg});
s.polar = polar; s.azimuth = azimuth; s

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve bearing information in the metric fields

For horizontal bearings at the fixed place and N used here, the nearest indices all fall in the saturated tail: the sampled 0°, 90°, and 270° cases each produce ResidueEdge { start_idx: 21, end_idx: 255, ... }. Consequently distance_adaptive reports zero between these distinct bearings even though the overwritten (polar, azimuth) fields render differently. Because the codec's stated purpose is metric-safe comparison of orientations, checking only ang(decode(...)) does not establish that Path B fits weather; the metric behavior must be preserved and measured before recommending this encoding.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
crates/helix/tests/bearing_encode_paths.rs (2)

34-38: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Round-trip Signed360 before decoding it.

decode reads polar and azimuth directly. It bypasses the six-byte serialization path. A byte-order or field-layout regression can therefore leave this test green. Use Signed360::to_bytes and Signed360::from_bytes before applying the local direction math, as the existing crates/helix/examples/hevc_headtohead.rs, Lines [398-454], does for representation checks.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/helix/tests/bearing_encode_paths.rs` around lines 34 - 38, Update the
decode helper around Signed360 to serialize the input with Signed360::to_bytes
and reconstruct it with Signed360::from_bytes before reading polar and azimuth.
Apply the existing direction-math calculations to the reconstructed value,
preserving the current return behavior.

64-65: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Use one azimuth quantization policy.

encode_signed truncates the scaled azimuth in crates/helix/src/residue.rs, Lines [182-204]. Path B rounds before conversion. The reported comparison therefore changes both field independence and quantization policy. Use the canonical truncation for a like-for-like measurement, or record rounding as a separate variable.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/helix/tests/bearing_encode_paths.rs` around lines 64 - 65, Update the
azimuth calculation in the path-B test around target.0.atan2 so it uses the same
truncation policy as encode_signed in residue.rs instead of rounding before
conversion. Keep the comparison focused on field independence by matching the
canonical quantization behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/board/PR_ARC_INVENTORY.md:
- Around line 53-54: Remove the appended Correction block from the merged `#917`
record in the board ledger, leaving its original text intact except for
permitted Confidence or Status updates. Preserve the correction in the prepended
`#920` entry and ensure the historical `#917` content matches the unchanged record
in LATEST_STATE.md.

In @.claude/knowledge/weather-normalized-substrate.md:
- Around line 1106-1109: The architectural record in
.claude/knowledge/weather-normalized-substrate.md at lines 1106-1109 must state
that encode_signed derives rim from (place, n), polar from (n, sign), and
azimuth from n; update the discussion of both candidate bearing encodes
accordingly. Align the module documentation in
crates/helix/tests/bearing_encode_paths.rs at lines 4-5 with the same corrected
dependencies.

In `@crates/helix/tests/bearing_encode_paths.rs`:
- Around line 74-76: Add negative elevation coverage to the bearing test loop
around dir, exercising the Sign::Neg and 127 - mag branches; if expanding the
grid, update the documented case count and expected means accordingly.
- Around line 84-85: Update the measurement test around the mean-reporting
println to compute the Path A and Path B means once, reuse those values for
output, and add assertions enforcing broad documented upper bounds for both
paths. Keep the existing ratio reporting while making regressions that worsen
either path fail the test.

---

Nitpick comments:
In `@crates/helix/tests/bearing_encode_paths.rs`:
- Around line 34-38: Update the decode helper around Signed360 to serialize the
input with Signed360::to_bytes and reconstruct it with Signed360::from_bytes
before reading polar and azimuth. Apply the existing direction-math calculations
to the reconstructed value, preserving the current return behavior.
- Around line 64-65: Update the azimuth calculation in the path-B test around
target.0.atan2 so it uses the same truncation policy as encode_signed in
residue.rs instead of rounding before conversion. Keep the comparison focused on
field independence by matching the canonical quantization behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9e50b629-0a0f-42b4-a29d-e19927367b27

📥 Commits

Reviewing files that changed from the base of the PR and between 04faf08 and f4fc691.

📒 Files selected for processing (5)
  • .claude/board/EPIPHANIES.md
  • .claude/board/LATEST_STATE.md
  • .claude/board/PR_ARC_INVENTORY.md
  • .claude/knowledge/weather-normalized-substrate.md
  • crates/helix/tests/bearing_encode_paths.rs

Comment on lines +53 to +54
**Confidence (2026-08-11, updated post-#920):** merged, and **two Locked claims are now FALSIFIED by #920** — read that entry first. The floor policy remains `[S]`.
**Correction (2026-08-11 from PR #920):** the Locked line *"helix360 is … the shipped 6-byte `HelixResidue` lane read as 2 × 24-bit hemispheres = wind in/out"* is **wrong on both halves.** (a) **"helix360" is not a symbol** — pickaxe over full history returns 12 blobs, all authored by that session, zero deletions `[G-absence]`; the type is **`Signed360`**. (b) **The 2×24 in/out reading is not a sanctioned reading of the lane.** Per `.claude/knowledge/helix-cartesian-vs-fisher2z.md` (the doctrine doc that 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)` the **render** carrier; the in/out framing conflated the two. The `Pair48` successor shape this entry's Deferred list implied is **WITHDRAWN, not deferred**. The `[G-absence]` "no pair-writer exists" observation stands as a fact and is simply no longer a gap. What ALSO survives unchanged: the `Signed360` polar sign-partition being load-bearing (codex P2 #498) — #920 added the sweep test that proves the partitions fill `[128,255]`/`[0,127]` exactly.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Keep the merged #917 record immutable.

Line 54 appends a correction inside the merged #917 entry. This violates the board ledger rule and creates an audit mismatch with .claude/board/LATEST_STATE.md, which keeps the historical #917 text unchanged.

Remove the appended correction from the #917 entry. Keep the correction in the prepended #920 entry. Retain only the permitted Confidence or Status update in the historical entry.

As per coding guidelines: “Board files are append-only except status/confidence lines.” The retrieved board-hygiene learning also requires merged entries to remain unchanged and new information to be prepended.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/board/PR_ARC_INVENTORY.md around lines 53 - 54, Remove the appended
Correction block from the merged `#917` record in the board ledger, leaving its
original text intact except for permitted Confidence or Status updates. Preserve
the correction in the prepended `#920` entry and ensure the historical `#917`
content matches the unchanged record in LATEST_STATE.md.

Sources: Coding guidelines, Learnings

Comment on lines +1106 to +1109
**What the reuse then surfaced (the actually-new finding) `[G]`.**
`encode_signed` derives **all three** direction-bearing fields from `n` alone
(`residue.rs:182-204`): `rim` from `(place, n)`, `polar` from
`signed_lift(n, …)`, `azimuth` from `n·φ`. Two candidate bearing encodes exist,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the actual encode_signed input dependencies in both records.

rim depends on (place, n), polar depends on (n, sign), and azimuth depends on n.

  • .claude/knowledge/weather-normalized-substrate.md#L1106-L1109: rewrite the architectural record with these dependencies.
  • crates/helix/tests/bearing_encode_paths.rs#L4-L5: align the module documentation with the corrected record.
📍 Affects 2 files
  • .claude/knowledge/weather-normalized-substrate.md#L1106-L1109 (this comment)
  • crates/helix/tests/bearing_encode_paths.rs#L4-L5
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/knowledge/weather-normalized-substrate.md around lines 1106 - 1109,
The architectural record in .claude/knowledge/weather-normalized-substrate.md at
lines 1106-1109 must state that encode_signed derives rim from (place, n), polar
from (n, sign), and azimuth from n; update the discussion of both candidate
bearing encodes accordingly. Align the module documentation in
crates/helix/tests/bearing_encode_paths.rs at lines 4-5 with the same corrected
dependencies.

Comment on lines +74 to +76
for bear in [0.0, 22.5, 45.0, 90.0, 137.5, 180.0, 270.0, 315.0] {
for elev in [0.0, 5.0, 30.0] {
let t = dir(bear, elev);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add a lower-hemisphere case.

All test elevations are non-negative. The Sign::Neg path and 127 - mag branch are not exercised. Add negative elevations or a focused lower-hemisphere test. Update the documented case count and means if the grid changes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/helix/tests/bearing_encode_paths.rs` around lines 74 - 76, Add
negative elevation coverage to the bearing test loop around dir, exercising the
Sign::Neg and 127 - mag branches; if expanding the grid, update the documented
case count and expected means accordingly.

Comment on lines +84 to +85
println!("\n MEAN over {c} (bearing x elevation) cases: PathA {:.4}° PathB {:.4}° ratio {:.2}x",
sa/c as f64, sb/c as f64, (sa/c as f64)/(sb/c as f64));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the measurement enforceable.

The test only prints values. A regression can make Path A or Path B worse while the test still passes. Compute the means once and assert broad bounds for the documented result.

Proposed regression checks
-    println!("\n  MEAN over {c} (bearing x elevation) cases:  PathA {:.4}°   PathB {:.4}°   ratio {:.2}x",
-             sa/c as f64, sb/c as f64, (sa/c as f64)/(sb/c as f64));
+    let mean_a = sa / c as f64;
+    let mean_b = sb / c as f64;
+    let ratio = mean_a / mean_b;
+    println!("\n  MEAN over {c} (bearing x elevation) cases:  PathA {:.4}°   PathB {:.4}°   ratio {:.2}x",
+             mean_a, mean_b, ratio);
+    assert!(mean_a > 0.5);
+    assert!(mean_b < 0.2);
+    assert!(ratio > 5.0);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
println!("\n MEAN over {c} (bearing x elevation) cases: PathA {:.4}° PathB {:.4}° ratio {:.2}x",
sa/c as f64, sb/c as f64, (sa/c as f64)/(sb/c as f64));
let mean_a = sa / c as f64;
let mean_b = sb / c as f64;
let ratio = mean_a / mean_b;
println!("\n MEAN over {c} (bearing x elevation) cases: PathA {:.4}° PathB {:.4}° ratio {:.2}x",
mean_a, mean_b, ratio);
assert!(mean_a > 0.5);
assert!(mean_b < 0.2);
assert!(ratio > 5.0);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/helix/tests/bearing_encode_paths.rs` around lines 84 - 85, Update the
measurement test around the mean-reporting println to compute the Path A and
Path B means once, reuse those values for output, and add assertions enforcing
broad documented upper bounds for both paths. Keep the existing ratio reporting
while making regressions that worsen either path fail the test.

@AdaWorldAPI
AdaWorldAPI merged commit de7303c into main Aug 11, 2026
7 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Aug 11, 2026
…not fit it

#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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI added a commit that referenced this pull request Aug 11, 2026
…arvest-rfii13

docs(board): record #921 — the wind reuse and the doctrine that does not fit it
AdaWorldAPI pushed a commit that referenced this pull request Aug 11, 2026
Operator: "you didn't factor in that due to normalized values the field has
different ergonomics than the single value — meaning AMX matmul, tile ops etc."

Correct, and it reverses the recommendation. §12.13 ranked the two bearing
encodes by angular RECONSTRUCTION error — the operation §12.10 rules out and
the substrate exists to avoid. Third instance of that error in one arc, and
this one landed three sections after writing the rule down.

At field scale the ergonomics run the other way:

- nearest-n collapses direction to ONE index in the 256-palette domain, so
  comparison is rim.distance_adaptive = two DistanceLut u8 lookups: an L1
  metric with the triangle inequality, CAKES/CLAM-safe, U8x64-friendly
  (distance.rs:12), and a &[u8] plane that feeds ndarray's
  int8_gemm_amx_tiled(a_u8, b_i8, ...) -> [i32] directly.
- direct (polar, azimuth) has a 16-bit CIRCULAR azimuth, which distance.rs:8-10
  names explicitly as NOT a metric ("the 2pi wrap ... must never feed CAKES
  bounds"). No 256x256 LUT, no tile plane, and comparing would require decoding.

Resolution is a split by OPERATION, not a winner: single-index for
compare/search/correlate over a field (what "pay the inbound tax once" actually
buys, and why palette256 is the same pattern one rank down); direct write only
where one bearing must genuinely be materialized.

Rule extracted: a per-element accuracy number is the round-trip metric wearing
a different hat. A representation can win it while destroying the index-domain
comparison, the metric guarantee, and the tile shape that made the substrate
worth building.

The 10% measurement stands and is kept; only its verdict is corrected. Applied
as an append-only Correction line on the #921 arc entry plus its Confidence,
never an edit to the Locked text.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Aug 11, 2026
Operator: "you didn't factor in that due to normalized values the field has
different ergonomics than the single value — meaning AMX matmul, tile ops etc."

Correct, and it reverses the recommendation. §12.13 ranked the two bearing
encodes by angular RECONSTRUCTION error — the operation §12.10 rules out and
the substrate exists to avoid. Third instance of that error in one arc, and
this one landed three sections after writing the rule down.

At field scale the ergonomics run the other way:

- nearest-n collapses direction to ONE index in the 256-palette domain, so
  comparison is rim.distance_adaptive = two DistanceLut u8 lookups: an L1
  metric with the triangle inequality, CAKES/CLAM-safe, U8x64-friendly
  (distance.rs:12), and a &[u8] plane that feeds ndarray's
  int8_gemm_amx_tiled(a_u8, b_i8, ...) -> [i32] directly.
- direct (polar, azimuth) has a 16-bit CIRCULAR azimuth, which distance.rs:8-10
  names explicitly as NOT a metric ("the 2pi wrap ... must never feed CAKES
  bounds"). No 256x256 LUT, no tile plane, and comparing would require decoding.

Resolution is a split by OPERATION, not a winner: single-index for
compare/search/correlate over a field (what "pay the inbound tax once" actually
buys, and why palette256 is the same pattern one rank down); direct write only
where one bearing must genuinely be materialized.

Rule extracted: a per-element accuracy number is the round-trip metric wearing
a different hat. A representation can win it while destroying the index-domain
comparison, the metric guarantee, and the tile shape that made the substrate
worth building.

The 10% measurement stands and is kept; only its verdict is corrected. Applied
as an append-only Correction line on the #921 arc entry plus its Confidence,
never an edit to the Locked text.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Aug 12, 2026
#927 was MIXED, not hygiene-only -- it landed board hygiene for #926 AND a
correction to COMET_TAIL_REPORT.md AND an append-only revert. The termination
clause exempts only the pure case, so its non-hygiene half owes this entry.
(#927's own description called itself "hygiene-only"; that was written before
the correction landed and was wrong by the time it merged.)

The entry records two things a future session needs:

  * The Fisher-z ring-mean ratio is 4.7x, not 5x -- caught by verifying the
    entry's own figures against the committed JSONs before landing. 9 of 10
    matched exactly; this was the tenth, a 6% overstatement in the favourable
    direction, one commit from being frozen into an append-only record.

  * LIVING DOCUMENTS and APPEND-ONLY LEDGERS take OPPOSITE correction
    discipline. A living document (report, code, JSON, PR description) is
    landed on directly, so a stale claim is a trap -> correct every copy. An
    append-only ledger is read newest-first and its value IS the audit trail
    -> freeze the merged entry, correct in a new one. I applied the first rule
    to the second kind of file while citing that very rule. The failure mode
    is a correct rule generalized past its domain -- the same shape as #921's
    doctrine-vs-domain finding and this arc's own Fisher-z result.

Also banks the falsifier that closed "where else did I do this": a pure
prepend cannot delete, so `git diff origin/main..HEAD -- .claude/board/`
showing zero removed lines is a structural append-only audit. Measured
+13/-0, +10/-0, +0/-0.

THIS PR IS PURE HYGIENE -- no type, plan, deliverable, epiphany or code. Per
the termination clause it generates no further obligations and the chain stops
here. The living-vs-ledger lesson is deliberately recorded in the arc entry
rather than minted as an EPIPHANIES entry, which would make this PR mixed and
restart the chain; promote it on request.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Aug 12, 2026
…ng, and the append-only audit could not fail

Operator: "930 has comments / check also previous 5 / if you want go back
another 5." All 68 review comments on #920-#930 enumerated and checked against
the TREE, not the merge. Depth is non-uniform and said so: #922-#930
finding-by-finding; #920 (27) and #921 (5) spot-checked on P1/governance only
(both clean), ~30 older findings there left explicitly UNVERIFIED.

Clean: #922/#924/#925/#929 zero comments; all 27 of #926's findings fixed in
the tree (equal-budget grid_pts + regenerated E2 JSON, seam-wrapping
subgrid_min, find_center->None, F7d 35->40, CT_F12 NO-VERDICT, persisted storm
metadata, np.roll longitude, __file__-relative write, net-decay E6, the
93-97%->90.9-94.3% headline); #923's plan-status P2 resolved.

Three open, all frozen in append-only ledgers, all corrected in NEW entries:

1. "+92.76 Pa moves R2 in the 5th decimal" is refuted by the report's own
   carve table 15 lines above it: carve A's +92.76 Pa moved R2 0.9212->0.9129
   (0.0083, THIRD decimal); carve D's +1.59 Pa moved it 2.4e-06 (SIXTH). The
   var() BUG was blind at every magnitude; the STATISTIC is near-blind only in
   the single-digit-Pa regime -- which is exactly where "lossless" was claimed.
2. "10 probe scripts with committed JSON" undercounts: 15 .py added, 11 with a
   committed .json.
3. "+13/-0, +10/-0, +0/-0": measured +13/-0, +17/-0, and EPIPHANIES absent from
   the net diff -- it was +1/-1 at 0f9e6bc (the in-place edit), zeroed by the
   revert. The +0/-0 was a revert artefact, not evidence of purity.

And the audit METHOD is replaced: zero-deletions proves ADDITIVE, not PREPEND.
The suffix check (new.endswith(old)) proves it. Both halves measured before
banking: a constructed end-append scores zero-del=True/suffix=False; a true
prepend True/True. It also fires on THIS PR (LATEST_STATE suffix=False at
+15/-0) -- correctly, since #930 inserts table rows mid-file and composes an
unmerged entry in place. A False is a demand for justification, not a verdict.

Same defect shape as #930's relation error, twice in three days: two
individually-true numbers asserted of one pair when each belongs to a
different one. A figure-by-figure check cannot catch it; the relation must be
evaluated as a claim. Already standing in report SS10.1 and the worker
preamble of weather-w-probes-v1 (both verified present, not assumed).

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants