Skip to content

jc: DAV probe carrier invariance — Quack carrier (R1) + resident bit-plane carrier (R2) - #1347

Merged
AdaWorldAPI merged 2 commits into
mainfrom
claude/sharp-bardeen-8nlu1z
Oct 6, 2026
Merged

AdaWorldAPI merged 2 commits into
mainfrom
claude/sharp-bardeen-8nlu1z

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

This PR checks that the DAV active-observation probe from #1344 gives the same results when its observations are held in a different carrier. Both rounds are in crates/jc/examples/dav_active_observation_probe.rs.

Round 1: Quack carrier B

The probe runs one world through two carriers:

In B, candidate selection is a single Quack filter, is_null(VALID) AND Cmp::Range(SITE). It is lowered by Quack and executed by mask-risc.

A == B across 5 apertures × 4 NULL payloads (zero, the hidden truth, its negation, garbage) × 2 enumeration orders. The comparison covers ranking, RevisionDelta, the resulting horizon, replay, the residual and the final state.

The frontier range is attached to the site-ordinal axis, not to the nullable value column. The probe asserts two cases:

  • Trap fires: with the range on VALUE, sql_where gates it by validity and the candidate set comes back empty.
  • Correct case is left alone: with the range on SITE, sql_where leaves the filter unchanged.

Round 2: resident carrier C

  • C reads the horizon's independent_roots (validity) and projected_claims (value) as two borrowed bit-planes. It builds no value lane.
  • A == B == C over the same differential. B is unchanged.
  • C does not have SQL NULL semantics: Quack never treats a mask plane as nullable. B remains the NULL test; C tests that a different physical layout reads the same.

For k = 1, picking the top candidate does not need a candidate list:

  • Top-1 is a streaming fold over the kept candidate mask. Its whole state is one Option<Candidate>; there is no row-id Vec, no Vec<Candidate> and no sort.
  • The ordinal baseline's pick is the lowest set bit of the same mask.

The probe also measures heap use with a counting allocator, following the pattern in tests/no_alloc.rs. At a = 0.55:

Path Heap bytes
C candidate selection + visitation 0
C streaming top-1 (scoring included) 8 = 2 candidates × 4 B
C full ranking 586
B full ranking 762

The 8 bytes come from pairwise_agreement_u8, which allocates a small result Vec each time it scores a candidate. That is route semantics, left unchanged on purpose.

The one population-sized object left on C's path is the kept candidate mask: 8 bytes, a stack array owned by the caller.

No shipped terminal returns a row position (MaskedMaxI32 returns the value, not where it is). Doing top-1 inside mask-risc would therefore need algebra that does not exist yet. Nothing new was added for it.

Disable runs

Each falsifier was checked by breaking the code and confirming the probe fails: R1 has 5 and R2 has 7 (all red). In R2, inverting every value bit does not change the ranking, because route disagreement is unchanged when all values flip. Only the final-state check catches that, and the board entry records it.

Board entries:

  • 2026-10-06-dav-carrier-invariance-quack.md
  • 2026-10-06-dav-resident-reading-round2.md

Gates

fmt, clippy -D warnings and cargo test for jc are all green. The probe runs green; CI runs it at jc-proof.yml:67.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MHMvKHLhM6xwRswKY4s6vY

…Quack

Round 1 of the carrier-invariance arc. The #1344 active-observation probe
now runs its world through two carriers: the reference [Option<bool>; N]
and a Quack value lane plus validity plane, the plane being the horizon's
own independent_roots word, borrowed. Candidate selection in the Quack
path is one filter, is_null(VALID) AND Range(SITE), executed by the
mask-risc evaluator. Routes, scoring and revision are shared code.

Every semantic output matches across 5 apertures, 4 NULL payloads
(including the hidden truth) and 2 enumeration orders. The frontier
range is bound to the site-ordinal axis; binding it to the nullable
value column lets sql_where drop every candidate, and the probe asserts
both halves. Five disable runs go red.

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

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Next included review available in 41 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 66 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 76368734-6102-4028-83b7-b91511eeafae
📥 Commits

Reviewing files that changed from the base of the PR and between eead532 and f4b2c16.

📒 Files selected for processing (5)
  • .claude/board/entries/2026-10-06-dav-carrier-invariance-quack.md
  • .claude/board/entries/2026-10-06-dav-resident-reading-round2.md
  • .claude/board/entries/README.md
  • crates/jc/Cargo.toml
  • crates/jc/examples/dav_active_observation_probe.rs
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


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

@cursor

cursor Bot commented Oct 6, 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: 8dae6afc-2b2f-4059-a709-40ed89745e79)

Round 2. Adds carrier C beside A and B (B untouched): the horizon's
independent_roots and projected_claims words read as two borrowed
bit-planes, no value lane built. A == B == C across 5 apertures,
4 poisons, 2 orders, and the DAV and ordinal cycles.

For k=1, top-1 is a streaming fold over the kept mask with one
Option<Candidate> of state; no row-id list, candidate list or sort. A
heap meter (the no_alloc.rs pattern) pins candidate selection plus
visitation at 0 bytes. The kept mask (8 B, caller-owned stack) is the
one population object left. No shipped terminal returns a position, so
in-substrate argmax would need missing algebra; it is not built.

Seven disable runs go red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MHMvKHLhM6xwRswKY4s6vY
@AdaWorldAPI AdaWorldAPI changed the title jc: DAV probe carrier differential — Quack value lane + validity plane (Round 1) jc: DAV probe carrier invariance — Quack carrier (R1) + resident bit-plane carrier (R2) Oct 6, 2026
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review October 6, 2026 10:22
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-06T10:25:39.051042Z f4b2c16 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@AdaWorldAPI
AdaWorldAPI merged commit 7f0cb11 into main Oct 6, 2026
11 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: f4b2c162a0

ℹ️ 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 +1015 to +1016
let (_, rank_c_heap) = measure(|| rank_resident(prior, aperture, Poison::Zero, false));
let (_, rank_b_heap) = measure(|| rank_quack(prior, aperture, Poison::Zero, false));

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 Reuse the pre-lowered plans in measured rankings

When these heap totals are interpreted as the allocation cost of the B/C full-ranking paths, both measurements also include query lowering: rank_resident calls lower itself, while rank_quack reaches QuackCarrier::select, which also calls lower. Consequently the reported 586/762-byte figures are not measured with plans lowered outside the window as claimed, and the rank_*_heap > top1_heap falsifier can succeed because lowering allocates rather than because candidate-list construction does. Pass the already-built program into both measured ranking paths or measure lowering separately.

Useful? React with 👍 / 👎.

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