Skip to content

eval plan (known vs test) + DistanceLut::circular() + field-ergonomics corrections - #923

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

eval plan (known vs test) + DistanceLut::circular() + field-ergonomics corrections#923
AdaWorldAPI merged 5 commits into
mainfrom
claude/jirak-math-theorems-harvest-rfii13

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

The arc's closing deliverables, rebased onto main after #922 merged mid-push: the evaluation plan (known vs to-test), the field-ergonomics corrections that reshaped it, and DistanceLut::circular().

The evaluation plan — .claude/plans/weather-substrate-evaluation-v1.md

§1 KNOWN: 25 claims (K-1..K-25), each with file:line evidence and an honest grade — [G] committed code/tests · [G-session] probe source committed, fixture fetched, run this session · [H] measured but reproducer NOT committed (exactly two rows: the latitude-band and palette-azimuth tables, whose scratch tests were deleted — §2 names the split, EV-9 closes it) · [G-absence] (helix has no CI anywhere; HelixResidue has zero writers/decoders).

§3 TO TEST: EV-1..EV-10 in three waves

Wave Probes
0 (no data) EV-9 — commit the two orphan measurements as disable-verified tests
1 (one fetch.py) EV-1 advection-as-Morton-shift falsifier · EV-2 wind-lane FIELD-level encode (closes §12.13–§12.15) · EV-3/EV-4 floor & window sweeps → D-1/D-2 · EV-5 U-shaped variables (the shape rule's other half, two-sided by construction) · EV-6 harness on the SHIPPED RollingFloor frame, exact-number equivalence gate (0.848/0.820/95.65 + 0.9997/0.999556 to 1e-4 rel) · EV-8 Jirak effective-n · EV-10 second timestep/season
2 (scale) EV-7a — 16k×16k 3DGS top-k over 1 048 576 tiles (heel-reject ∉ {0 %, 100 %}) · EV-7b — comma anti-moiré falsifier (the regular-stride control MUST alias or the fixture cannot falsify)

§5 decision register D-1..D-6 keeps the operator calls (noise floor · saturation window · from_bearing API · dormant-lane fix · helix CI · harness-of-record) separate from the tests that feed them.

Every EV carries the discipline this arc kept tripping on: a named can-it-fail outcome, can-fire and stay-silent halves on non-trivial inputs, no inert thresholds, provisional pins relative to measured baselines, and an apparatus check so a null cannot masquerade as a pass.

Plan status: DRAFT-pending-audit by its own header. A 13-agent verify/attack workflow (7 source-verifiers over the K-ledger, 6 falsifier-auditors attacking the EV specs) is running; its verdicts land as §8 on this branch and flip the plan ACTIVE.

Also in this diff

  • DistanceLut::circular()min(|a−b|, 256−|a−b|), the cycle-graph geodesic on Z_256, proven a metric exhaustively (0 violations / 16 777 216 triples), with the wrap falsifier d(255,0)=1 vs linear 255. Topology picks the table formula; it never decides whether a quantity belongs in the palette domain (§12.15).
  • The field-ergonomics inversion (§12.14, operator-corrected): the 10× per-element bearing measurement stands but is the round-trip metric wearing a different hat — at field scale nearest-n's single index is the L1-metric, U8x64, AMX-tileable shape. Resolved as a split by operation, then re-opened for the direct path by circular().
  • §12.16 + §12.17 — the [a,b] domain carries perturbation (the discrete Pythagorean comma, 0 stored bits), Morton motion (2 bytes moves a field bit-exact), 3DGS (splat3d, TILE_SIZE=16, depth cascade already HHTL), the 64×64 = 4096 bit = 512 B = CANON-node-stride bitboard identity — and the honest finding that the mu+kσ evaluation frame ships four times in this workspace, so the weather probe must be its fifth instance, not fifth implementation.
  • Three EPIPHANIES entries, INTEGRATION_PLANS prepend, STATUS_BOARD EV rows (all Queued).

🤖 Generated with Claude Code

https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi

claude added 5 commits August 11, 2026 10:09
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
…the domain

Operator: "distance.rs is normalized [a,b] amortizing in LUT."

That is the load-bearing property and I had mis-stated it as "a metric/cache".
quantize() normalizes [a,b] once per element at ingest; from_floor() folds the
SAME normalization into the table. Afterwards there is no lo, no hi, no
division, no per-element normalization — a pure index lookup in unit-free
units, which is exactly what licenses cross-variable comparison. O(256^2) once
instead of O(N^2). This is "pay the inbound tax once", instantiated.

The consequence supersedes both §12.13 and §12.14: if the LUT amortizes ANY
bounded [a,b], a circular range is just another bounded range needing a
different formula. So distance.rs's "raw-azimuth is NOT a metric (the 2pi
wrap)" is a statement about the FORMULA, not about angles — linear() is the
wrong table for a ring, and distance_heuristic uses no table at all.

Adds DistanceLut::circular() = min(|a-b|, 256-|a-b|), the cycle-graph geodesic
on Z_256, with three tests:

- exhaustive triangle inequality: 0 violations over all 256^3 = 16,777,216
  triples (not a stride sample — a circular table is cheap enough to prove)
- the wrap falsifier: d_circ(255,0) = 1 vs d_linear(255,0) = 255
- symmetry, identity, positivity, exhaustively

Corrected standing for azimuth: u8 palette + circular() gives 0.352 deg mean
(1.406 deg step), beats nearest-n's 0.972 deg, AND keeps the field ergonomics
(&[u8] plane, 128 KB L1 LUT, U8x64, AMX-tileable). §12.14 was right about the
ergonomics and wrong to treat them as disqualifying.

Rule: a bounded quantity's TOPOLOGY selects its table formula; it never decides
whether the quantity belongs in the palette domain.

Gates: helix 80 lib + 15 integration tests green; my three files rustfmt- and
clippy-clean. NOT fixed and NOT swept: two PRE-EXISTING clippy findings in
files this change does not touch (src/walk_spectrum.rs:81,
tests/probe_mantissa_fill.rs:174 — new lints from the 1.97 toolchain), left
alone rather than reformatting code outside this change's scope.

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

Operator: "using [a,b] allows also perturbation ergonomics including testing
spatial gaussian splat (3dgs) over 16k x 16k topk ... or morton tile cascade ...
with irrational number pythagorean comma."

Every piece named already exists; verified rather than theorized:

- Perturbation phase = the DISCRETE Pythagorean comma, a stride-4-over-17
  coprime walk, "integer, bit-exact, aperiodic", 0 STORED BITS, regenerated
  from the address alone. 17 = 4^2+1 IS the comma ("without the +1, stride 4
  mod 16 covers 4/16"). Fence run: comma_three_gap_distinct=3 (Steinhaus <=3),
  comma_coprime_full_perm=1.

- Morton tile cascade: motion is O(1) in pixels. Measured dx=7 dy=5
  bit_exact=1 motion_bytes=2 sprite_px=576; interior residual 0, only the
  disocclusion strip is new (disocc_frac=0.1215).

- 3DGS: ndarray::hpc::splat3d is a feature-gated DIRECTORY (a first check for
  splat3d.rs wrongly reported it absent) — gaussian/project/raster/tile/spd3/
  sh/ply/depth_cascade, Kerbl SIGGRAPH 2023 SH layout, TILE_SIZE=16. Its
  depth_cascade is ALREADY HHTL: HhtlTier, HhtlAction, heel_reject_mask.

At 16384^2 with TILE_SIZE 16 that is 1024x1024 = 1,048,576 tiles — the scale
at which staying in the index domain stops being an optimization.

Why the comma and not phi: in a quantized layer a regular tile grid plus a
regular perturbation aliases. The comma walk is the anti-moire dither and it is
free (phase is convention, not data). OGAR's D-QUANTGATE already rules exactly
this. prove.rs uses log2(3/2) as the CONTROL phi beats in the CONTINUOUS 2-D
discrepancy proof — a different question in a different layer, not a demotion.

Marked [S] and NOT measured: for weather, advection IS a Morton shift, which
would make the wind lane the transport operator for the scalar fields rather
than just another encoded field. Falsifier stated: derive (dx,dy) per tile from
wind across two ERA5 timesteps, shift 2m_temperature, measure residual against
the true next timestep vs a no-shift baseline.

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

Operator: "also check lance-graph / crates / perturbation ... morton allows
64x64 stockfish ergonomics ... also check domino.rs." All three land.

(a) crates/perturbation-sim is the APPLIED instance of this whole thread:
rolling_floor.rs ("Belichtungsmesser cascade with preheated confidence-interval
thresholds"), splat.rs (Gaussian-splat MAGNITUDE side) + sketch.rs (Walsh/XOR
SIGN side) — literally OGAR's two-algebra rule — cascade_key.rs::morton48 (the
OGAR production HHTL address), hhtl.rs (HEEL/HIP/TWIG by Cheeger bisection of
the Laplacian), columns.rs (SoaMemberSpec, the #511 calibration).

(b) The expensive miss: perturbation_sim::RollingFloor ALREADY IS the corrected
evaluation frame of §12.10/§12.11 — threshold() = "the confidence-interval
floor" mu+k*sigma, z() = "the Jirak-honest noise-floor units; significance via
n^(p/2-1), not IID", band() -> Stable..Alarm, preheat(), observe() testing
against the floor as it stood. I rebuilt it by hand in Python after an operator
correction. It is the FOURTH instance of one frame (ndarray Cascade::expose,
perturbation-sim RollingFloor, helix RollingFloor, thinking-engine domino's
"3-sigma top-K"); the weather probe should have been the fifth instance, not a
fifth implementation.

(c) 64x64 "Stockfish ergonomics" is an exact identity: 64x64 = 4096 cells =
4096 bit = 512 byte = 64 x u64 = the CANON node stride. A node's bits ARE a
bitboard; masked_popcount_batch(words, mask) IS popcount(attacks & targets);
magic bitboards are the same LUT amortization as the [a,b] floor.

(d) symbiont/src/domino.rs already proves the AMX path on real hardware: 4x4
Morton BF16 tiles, 16 SoA boards per AMX 16x16 tile GEMM, cascade feedback,
TDPBF16PS on Emerald Rapids. It also states the consumer rule verbatim — all
SIMD through ndarray::simd::*, never ndarray::hpc::* directly.

Consequence, concrete: the P1/P2 probes should be re-expressed against the
shipped frame rather than carried as bespoke Python. The measured numbers stand
— they were computed correctly, just computed twice.

Rule extracted, fourth instance of one lesson: before writing a frame, grep the
workspace for the frame. The "Consult, don't guess" ladder has no rung for
"search the sibling crates for the thing you are about to build".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
…r (DRAFT)

Operator: "please create an evaluation plan with the details known vs what to
test." Two halves:

§1 KNOWN — 25 claims K-1..K-25, each with file:line evidence and an honest
grade: [G] committed code/tests; [G-session] probe source committed, fixture
fetched, run happened this session; [H] measured but reproducer NOT committed
(only K-12/K-13 — the latitude-band and palette-azimuth tables whose scratch
tests were deleted; §2 names this split, EV-9 closes it); [G-absence].

§3 TO TEST — EV-1..EV-10 in three waves: Wave 0 no data (EV-9 commits the
orphan measurements); Wave 1 one fetch.py re-fetch (EV-1 advection-as-Morton-
shift falsifier, EV-2 wind-lane field-level encode closing §12.13-§12.15,
EV-3/EV-4 floor and window sweeps feeding D-1/D-2, EV-5 U-shaped variables —
the shape rule's other half, two-sided by construction — EV-6 harness
re-expression on the SHIPPED RollingFloor frame with an exact-number
equivalence gate, EV-8 Jirak effective-n, EV-10 second timestep/season);
Wave 2 scale (EV-7a the operator-named 16k x 16k 3DGS top-k run over
1,048,576 tiles; EV-7b the comma anti-moire falsifier, two-sided: the
regular-stride control MUST alias or the fixture cannot falsify).

§5 decision register D-1..D-6 keeps the operator calls (noise floor, window,
from_bearing API, dormant-lane fix, helix CI, harness-of-record) separate from
the tests that feed them.

Every EV carries the discipline this arc kept tripping on: a named can-it-fail
outcome, can-fire AND stay-silent halves on non-trivial inputs, no inert
thresholds, provisional pins relative to measured baselines instead of magic
numbers, and an apparatus check so a null cannot masquerade as a pass.

Status: DRAFT — a 13-agent verify/attack workflow (7 source-verifiers over the
K-ledger, 6 falsifier-auditors attacking the EV specs) is running; its
verdicts fold in as §8 in the follow-up commit, which flips the plan ACTIVE.

Board: INTEGRATION_PLANS.md prepend + STATUS_BOARD EV rows (all Queued), per
the new-plan row of the board-hygiene table.

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_3e47d5be-abf0-4410-855f-3f22cb2a0751)

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@AdaWorldAPI, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 13 seconds

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 392d39be-5ec6-4af2-809b-ef8ebf2135ca

📥 Commits

Reviewing files that changed from the base of the PR and between 12c13aa and 24f1966.

📒 Files selected for processing (9)
  • .claude/board/EPIPHANIES.md
  • .claude/board/INTEGRATION_PLANS.md
  • .claude/board/PR_ARC_INVENTORY.md
  • .claude/board/STATUS_BOARD.md
  • .claude/knowledge/weather-normalized-substrate.md
  • .claude/plans/weather-substrate-evaluation-v1.md
  • crates/helix/src/distance.rs
  • crates/helix/tests/bearing_encode_paths.rs
  • crates/helix/tests/signed360_claims.rs

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.

@AdaWorldAPI
AdaWorldAPI merged commit 373d3b7 into main Aug 11, 2026
6 checks passed

@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: 24f19660c9

ℹ️ 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 +103 to +105
- **Method:** 2 consecutive ERA5 timesteps; per tile (16×16 first, 64×64
control) `(dx,dy) = round(mean 10m wind · 3600 s / 27.8 km)`; shift; residual
vs truth. At 0.25°/1 h, 10 m/s ≈ 1.3 cells — measurable, not sub-cell noise.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Convert zonal wind using latitude-dependent cell widths

For the global ERA5 fixture, a 0.25° longitude cell is approximately 27.8 km × cos(latitude), while only the meridional spacing stays near 27.8 km. Dividing both wind components by a constant 27.8 km therefore increasingly underestimates dx toward the poles (by 2× at 60° and much more at higher latitudes), so EV-1 can make the Morton shift appear worse than persistence for purely geometric reasons. Compute zonal displacement from each tile's latitude-dependent longitude spacing, separately from the meridional conversion.

Useful? React with 👍 / 👎.

Comment on lines +119 to +123
- **Method:** ERA5 10m u/v → bearings → three encodes (nearest-`n`;
u8-palette-circular; u16-linear). For sampled point pairs: true angular
difference vs table distance. Spearman ρ per encode (Jirak-cited
significance), plus a wrap-corruption COUNT for `linear()` (pairs straddling
0°/360° whose rank inverts).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Use a circular high-resolution reference for EV-2

For pairs straddling 0°/360°, the proposed u16-linear arm assigns almost the maximum distance to nearly identical bearings, which is precisely the wrap corruption this EV is meant to detect. The subsequent gate nevertheless treats that arm as the “u16 ground-truth ranking,” so a correct palette-circular result can fail by disagreeing with the deliberately corrupted baseline. Use true angular distance or a high-resolution circular u16 distance as the reference, retaining u16-linear only as the negative control.

Useful? React with 👍 / 👎.


| ID | Claim | Evidence | Grade |
|---|---|---|---|
| K-14 | `perturbation_sim::rolling_floor::RollingFloor` IS the corrected evaluation frame: `threshold()` = "the confidence-interval floor" `mu+k·σ`; `z()` = "the Jirak-honest noise-floor units; significance via n^(p/2−1), not IID"; `band()` → Stable…Alarm; `preheat()`; `observe()` tests against the floor as it stood | `crates/perturbation-sim/src/rolling_floor.rs` (~:93–145) | [G] |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep bucket-CI logic out of the instability RollingFloor

The cited perturbation_sim::RollingFloor does not implement the corrected P1 evaluation frame: it tracks the mean and standard deviation of mode-instability samples and exposes mu + k·sigma, but it accepts neither quantizer bucket edges nor a physical noise floor and cannot represent the unbounded CI of saturated buckets 0/255. By contrast, p1_ci_vs_floor.py computes each bucket's half-width in original units and handles saturation separately. Treating the former as the shipped replacement will either change the measured quantities or force EV-6 to reimplement the allegedly reused frame, so this claim and the EV-6 dependency should point to an actual bucket-CI abstraction.

Useful? React with 👍 / 👎.

> integration-lead, measurement-skeptic-analog sessions, and ANY session
> executing an EV-* probe below.
>
> **Status:** DRAFT pending the verify/attack audit pass (§8) → then ACTIVE.

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 Resolve the plan status before queueing its probes

The plan remains marked DRAFT pending an audit in nonexistent §8, while STATUS_BOARD.md says it was audited before becoming ACTIVE and already queues EV-1 through EV-10. Mandatory readers therefore cannot determine whether they are authorized to execute the queue or must wait for an audit that has no section or completion record. Either record the completed audit and mark the plan ACTIVE, or keep the board entries gated.

Useful? React with 👍 / 👎.

AdaWorldAPI pushed a commit that referenced this pull request Aug 11, 2026
… verdict inversions

#923 merged with neither board file updated. It shipped a plan, public code,
three epiphanies and four knowledge-doc corrections — squarely not hygiene-only,
so the merged-PR row's obligations apply in full.

The entry records what #923 settled:

- Topology selects the TABLE FORMULA; it never decides whether a quantity
  belongs in the palette domain. circular() = min(|a-b|, 256-|a-b|) proven a
  metric EXHAUSTIVELY (0 violations / 16,777,216 triples), so distance.rs's
  "raw-azimuth is NOT a metric (the 2pi wrap)" is about the formula, not angles.

- The LUT is the [a,b] amortization point: quantize() normalizes once at
  ingest, from_floor() folds the same normalization into the table, and
  afterwards comparisons are pure lookups in unit-free units. O(256^2) once
  instead of O(N^2).

- 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.

- Three verdict changes on ONE question are recorded as such: §12.13 ranked the
  bearing encodes by reconstruction error (the banned metric), §12.14 inverted
  it on field ergonomics, §12.15 found §12.14 too strong — the fix was never
  "abandon the direct path", it was give the wrapping lane its own table.

- The expensive one: perturbation_sim::RollingFloor ALREADY IS the corrected
  evaluation frame, Jirak citation included, and I re-derived it in Python. It
  is the fourth instance of one frame in this workspace.

Deferrals carried forward: the plan ships DRAFT-pending-audit (§8 folds a
13-agent verify/attack pass and flips it ACTIVE — that audit had NOT completed
at merge, so any [H] row stays unconfirmed); no from_bearing minted; EV-1..
EV-10 all Queued; D-1..D-6 open; the dormant-lane defect filed not fixed.

Also recorded: helix is root-workspace-excluded and in no CI workflow, so its
tests run only by hand; two pre-existing 1.97 clippy findings were deliberately
left alone rather than sweeping files outside scope; and the #922 merge race —
five commits stacked on merged history, rebased and reopened as #923, with
#922's description restored to describe only what it merged.

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

eval plan ACTIVE: audit fold (22/24 claims confirmed, 0/11 specs sound → all v2) + #923 board record
AdaWorldAPI pushed a commit that referenced this pull request Aug 11, 2026
…the ACTIVE plan

#924 merged with neither board file updated. It was MIXED — hygiene for #923
plus the audit fold, the §3 v2 rewrite, §8, the DRAFT->ACTIVE flip, §12.18 and
two board entries — so the merged-PR obligations apply to the non-hygiene half.

The entry records what #924 settled:

- The meta-finding: pre-registration review by independent adversarial readers
  is load-bearing, not ceremony. The audit split sharply by KIND of statement —
  22 of 24 KNOWN claims CONFIRMED with file:line, but 0 of 11 EV test specs
  SOUND. The author was reliable about what IS and near-uniformly unreliable
  about what would FALSIFY, one document after being corrected for exactly
  those modes and citing the falsifiability rule inside the specs themselves.

- Two [G] ledger corrections: the bitboard primitives are at
  ndarray/src/bitwise.rs, not src/hpc/; and "whole-field shift" overstated —
  legA rigid-translates a 24x24 SPRITE within a 256x256 field, toroidally, so
  §12.16's "2 bytes moves the whole field" is corrected by §12.18. Whole-field
  advection is one (dx,dy) PER TILE, which is what EV-1 actually tests.

- The eleven spec defects catalogued by class, including the ones with teeth: a
  silence half that was an identity comparison; another that was an arithmetic
  tautology; a fixture that 404s at the pinned timestep feeding a pipeline whose
  anomaly step destroys the bound-mass under test; an "exact to 1e-4" gate over
  3-sig-fig prose AND Monte-Carlo statistics; a "winter" run that could pass on
  stale summer bytes; and a missing cos(lat) wrong by up to 2.6x exactly where
  the probe would fire.

Honest limit recorded in the Confidence line: the audit's verify half is [G]
(source quotes), but its attack half is a DESIGN REVIEW, not a measurement — a
v2 spec is audited, not validated. Validation is the probe run, and zero EVs
have run. STATUS_BOARD gains a note that the rows' descriptions summarize v1
shapes while the specs are now v2.

EV-9 (Wave 0) needs no data and is the unblocked next move; it closes the only
two [H] rows.

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 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