Skip to content

D-WXS-2a half A: the KILL fires — row-major vs Morton closed, no code change - #949

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/jirak-math-theorems-harvest-rfii13
Aug 13, 2026
Merged

AdaWorldAPI merged 1 commit into
mainfrom
claude/jirak-math-theorems-harvest-rfii13

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Follow-up to #948 (merged). Branch restarted from main.

Settles the undeclared deviation recorded in #948's plan §1.3a — the shipped key assigns one whole byte per axis where OGAR's cascade doctrine specifies the axis bytes nibble-interleaved (Morton).

The bar was committed before the run (d83b4d3e), deliberately: this deliverable exists to settle a deviation I introduced, which makes writing the bar afterwards exactly the failure the rule guards.

Measured

20 pre-registered boxes (4 tile-aligned, 8 non-tile-aligned, 4 seam-crossing, 4 pole-adjacent); deterministic stride-677 neighbour sample, n = 1534.

arm rc median (non-tile-aligned) neighbour-locality median
SHIPPED 140.00 32.00
MORTON 212.50 16.00
CONTROL-BAD 3100.00 15862.00

The three verdicts

  • primary — FAIL. The bar required MORTON to beat SHIPPED on both metrics. It won one and lost one: 2× better on neighbour locality, ~1.5× worse on range count.
  • control — PASS. CONTROL-BAD is far worse on both. The metrics therefore measure locality rather than nothing — without this the primary result would be unreadable.
  • stay-silent twin — PASS. Every tile-aligned box is exactly one range under both arms ([1,1,1,1] each). §1.2's load-bearing claim — a 16° box is a HEEL-prefix scan — holds, and shows no difference where the plan claims none.

Pre-registered consequence, applied unchanged: D-WXS-2a closes. No code change. The migration is not opened.

⚠ A correction to my own §1.3b wording — not a softening of the verdict

§1.3b phrased the KILL as "the deviation is harmless for this workload". The data shows that was imprecise, and it is corrected in §1.3c rather than left to read as more than was measured:

MORTON wins, 2×, on exactly the metric half B would care about. Neighbour locality is what a ζ stencil spends; range count is what a box scan spends. The honest statement is "no unambiguous win in key space", not "harmless".

The verdict is untouched — the bar said both, it got one, and one is a FAIL. Re-reading a split as a win is the failure this arc has an explicit rule against ("re-normalising a metric until it stops showing the confound is how a confound becomes a finding"). What changes is only the summary sentence that claimed more than the measurement. The prior it leaves for half B is recorded as a prior, not a result — and a 2× locality win still would not by itself justify a migration, because the same measurement shows it costs ~1.5× on range count.

The instrument was checked before the result was read

Selftest green, including the case the brief demanded be worked out rather than assumed: a full longitude row under SHIPPED is 23 ranges (one per longitude tile), not 1 — because SHIPPED's second-most-significant byte is lon_tile, which sorts before the row-distinguishing lat_hip byte. Bijectivity of all three arms over all 1,038,240 cells is asserted, which is what licenses the exact rank computation and therefore the no-false-positives range count.

SHIPPED's neighbour median is arithmetic-checkable and checks out: within a tile the order is lat_hip-major / lon_hip-minor, so lon ± 1 is 1 apart and lat ± 1 is 64 apart — median of [1, 1, 64, 64] = 32, exactly the measured value.

The probe's SHIPPED arm calls key.rs::encode_key through rather than re-deriving the shift/mask arithmetic, so it cannot drift from the shipped codec; MORTON and CONTROL-BAD are pure permutations of the same four bytes.

35/35 · clippy -D warnings clean · fmt clean.

Still open, unchanged

  1. D-WXS-0 — the classid mint, OGAR-side and operator-gated. The bake must refuse to write until it resolves.
  2. D-WXS-7 — the re-specified D-WXA-5, the actual gate. Never run.

weather-poc is workspace-EXCLUDED, so green CI means the main workspace is unaffected; the crate is gated separately via cargo test --manifest-path crates/weather-poc/Cargo.toml.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi


Generated by Claude Code

The bar was committed before the run (d83b4d3), deliberately, because this
deliverable exists to settle a deviation I introduced.

Measured, over 20 pre-registered boxes (4 tile-aligned, 8 non-tile-aligned,
4 seam-crossing, 4 pole-adjacent) and a deterministic stride-677 neighbour
sample of 1534 cells:

  arm            rc median (non-tile-aligned)   neighbour-locality median
  SHIPPED                              140.00                       32.00
  MORTON                               212.50                       16.00
  CONTROL-BAD                         3100.00                    15862.00

primary FAIL. The bar required MORTON to beat SHIPPED on BOTH metrics. It won
one and lost one: 2x better on neighbour locality, ~1.5x worse on range count.

control PASS. CONTROL-BAD is far worse on both, so the metrics measure locality
rather than nothing. Without this the primary result would be unreadable.

stay-silent twin PASS. Every tile-aligned box is exactly one range under BOTH
arms. Section 1.2's load-bearing claim -- a 16-degree box is a HEEL-prefix scan
-- holds, and shows no difference where the plan claims none.

Pre-registered consequence applied unchanged: D-WXS-2a closes, no code change,
the migration is not opened.

A CORRECTION to my own section 1.3b wording, which is not a softening of the
verdict. I phrased the KILL as "the deviation is harmless for this workload".
The data shows that was imprecise: MORTON wins, 2x, on exactly the metric half
B would care about -- neighbour locality is what a zeta stencil spends, range
count is what a box scan spends. The honest statement is "no unambiguous win in
key space", not "harmless". The verdict is untouched -- the bar said both, it
got one, one is a FAIL, and re-reading a split as a win is the failure this arc
has an explicit rule against. What changes is only the summary sentence that
claimed more than the measurement. The prior this leaves for half B is recorded
as a prior, not a result.

The instrument was checked before the result was read. Selftest green,
including the case the brief demanded be worked out rather than assumed: a full
longitude row under SHIPPED is 23 ranges (one per longitude tile), not 1 --
because SHIPPED's second-most-significant byte is lon_tile, which sorts before
the row-distinguishing lat_hip byte. Bijectivity of all three arms over all
1,038,240 cells is asserted, which is what licenses the exact rank computation
and therefore the no-false-positives range count.

SHIPPED's neighbour median is arithmetic-checkable and checks out: the order is
lat_hip-major / lon_hip-minor within a tile, so lon+/-1 is 1 apart and lat+/-1
is 64 apart, median of [1,1,64,64] = 32, exactly the measured value.

The probe's SHIPPED arm calls key.rs::encode_key THROUGH rather than
re-deriving the shift/mask arithmetic, so it cannot drift from the shipped
codec; MORTON and CONTROL-BAD are pure permutations of the same four bytes.

35/35, clippy -D warnings clean, fmt clean.

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

coderabbitai Bot commented Aug 13, 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: 54 minutes

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: 9e0dd18b-7e84-48e1-b184-bdacdb546735

📥 Commits

Reviewing files that changed from the base of the PR and between cd2fd32 and fc7951a.

📒 Files selected for processing (4)
  • .claude/board/STATUS_BOARD.md
  • .claude/plans/weather-soa-bake-v1.md
  • crates/weather-poc/examples/layout_probe.json
  • crates/weather-poc/examples/layout_probe.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.

@cursor

cursor Bot commented Aug 13, 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_f1b660fe-9922-46cd-98ea-0a10d51f8f07)

@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review August 13, 2026 10:53
@AdaWorldAPI
AdaWorldAPI merged commit 15f5dc3 into main Aug 13, 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: fc7951ae1b

ℹ️ 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 +172 to +177
fn interleave_nibbles(lat: u8, lon: u8) -> [u8; 2] {
let lat_hi = lat >> 4;
let lat_lo = lat & 0x0F;
let lon_hi = lon >> 4;
let lon_lo = lon & 0x0F;
[(lat_hi << 4) | lon_hi, (lat_lo << 4) | lon_lo]

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 the canonical bit-interleaved Morton arm

This implementation concatenates the axes' whole nibbles as lat_hi, lon_hi, lat_lo, lon_lo; it does not produce the repository's canonical Morton ordering, which alternates individual axis bits so every output nibble represents a 2-bit × 2-bit tile (FacetTier::morton in crates/lance-graph-contract/src/facet.rs and morton2 used by crates/perturbation-sim/src/cascade_key.rs). Consequently the committed metrics, claimed 2× locality prior, and closure of D-WXS-2a compare SHIPPED against a different layout than the OGAR-canon MORTON arm the experiment was intended to test; the arm must use the canonical bit interleave and the results be regenerated.

Useful? React with 👍 / 👎.

AdaWorldAPI pushed a commit that referenced this pull request Sep 16, 2026
…pine

Operator named five loose ends. Surveyed, and four of them turn out to be
built ends that do not meet rather than things to build.

BatchWriter (#879, #908-912, #949): #912 landed the sole owned Lance
writer, so Dataset::write is real at cycle_sink.rs:675/710 and this
plan's own "no Dataset::write" was wrong when written. batch_writer.rs's
status note claiming cast() has zero production call sites is stale too —
three today, all production: mailbox_soa (the owner), owner_adapter
(write-on-behalf), cycle_driver (P4a drain). The other ~17 .cast( hits
are ractor ActorRef::cast and would have inflated the count.

What IS unwired is the observation leg: deinterlace has zero production
callers, every hit a doc comment. So G-C splits — G-C1 connect OGAR's
bytes to the writer that already exists, G-C2 wire the durability read.
A write nothing reads back is not yet a loop.

revision.rs is Heckhausen's last phase (postactional evaluation), and
that makes it the same gap seen from the other end: the court of appeal
has no write-back because the durable read that would tell it what
happened is missing. The Rubicon model is genuinely wired otherwise —
five phases in cognitive-compiler, rubicon_witness.rs, D-ACR-8.

The kanban seam is NOT unwired: lance-graph-ogar is a workspace member
depending on both sides by design, and recipe_vocab.rs already carries
the 34 NARS recipes as ogar-loco ops with the kanban census as the
awareness surface. The palette arc's constraint is that it must not ride
the deprecated substrate the recent PRs surfaced — Binary16K and the
singleton BindSpace are superseded, and temporal.rs's version-range read
is what replaced them, which lands on G-C2 again.

And the remediation is hot-plug, not a Cargo edge: socket in the zero-dep
contract, authority production at lance-graph-ogar lib.rs:524, consumer
declares one HotPlug const and activates. The classid is the join key —
plug and play mints the classid, the classid mints ogar-vocab, which
triggers the loco vocabulary. All eight existing declarations are test
fixtures and the planner has none.

Three claims in this document were drafted false and corrected before
commit by re-checking citations. Recorded, including that a fully
qualified impl made a negative grep read as "unimplemented" — a negative
grep is a claim about the pattern, not about the tree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
AdaWorldAPI pushed a commit that referenced this pull request Sep 16, 2026
…pine

Operator named five loose ends. Surveyed, and four of them turn out to be
built ends that do not meet rather than things to build.

BatchWriter (#879, #908-912, #949): #912 landed the sole owned Lance
writer, so Dataset::write is real at cycle_sink.rs:675/710 and this
plan's own "no Dataset::write" was wrong when written. batch_writer.rs's
status note claiming cast() has zero production call sites is stale too —
three today, all production: mailbox_soa (the owner), owner_adapter
(write-on-behalf), cycle_driver (P4a drain). The other ~17 .cast( hits
are ractor ActorRef::cast and would have inflated the count.

What IS unwired is the observation leg: deinterlace has zero production
callers, every hit a doc comment. So G-C splits — G-C1 connect OGAR's
bytes to the writer that already exists, G-C2 wire the durability read.
A write nothing reads back is not yet a loop.

revision.rs is Heckhausen's last phase (postactional evaluation), and
that makes it the same gap seen from the other end: the court of appeal
has no write-back because the durable read that would tell it what
happened is missing. The Rubicon model is genuinely wired otherwise —
five phases in cognitive-compiler, rubicon_witness.rs, D-ACR-8.

The kanban seam is NOT unwired: lance-graph-ogar is a workspace member
depending on both sides by design, and recipe_vocab.rs already carries
the 34 NARS recipes as ogar-loco ops with the kanban census as the
awareness surface. The palette arc's constraint is that it must not ride
the deprecated substrate the recent PRs surfaced — Binary16K and the
singleton BindSpace are superseded, and temporal.rs's version-range read
is what replaced them, which lands on G-C2 again.

And the remediation is hot-plug, not a Cargo edge: socket in the zero-dep
contract, authority production at lance-graph-ogar lib.rs:524, consumer
declares one HotPlug const and activates. The classid is the join key —
plug and play mints the classid, the classid mints ogar-vocab, which
triggers the loco vocabulary. All eight existing declarations are test
fixtures and the planner has none.

Three claims in this document were drafted false and corrected before
commit by re-checking citations. Recorded, including that a fully
qualified impl made a negative grep read as "unimplemented" — a negative
grep is a claim about the pattern, not about the tree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X6y3drwKSE2zSgoexheLFX
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