Skip to content

doctrine: correct 5 overclaims in the zero-copy/memory-safety section - #46

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/5plus3-pr45-council-correction
Aug 28, 2026
Merged

doctrine: correct 5 overclaims in the zero-copy/memory-safety section#46
AdaWorldAPI merged 1 commit into
mainfrom
claude/5plus3-pr45-council-correction

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Why

PR #45 merged with no real review — CodeRabbit posted only its auto-summary (merged before its review cycle ran), Bugbot hit its usage limit twice and never ran. The only check the doctrine text got was my own single-pass audit. Ran the /5plus3 council against it as the fallback review layer.

What the council found (5 savants → consolidate → 3 reviewers → fix)

Panel: this repo's own abi-membrane-warden / zero-copy-warden / handle-lifecycle-auditor / java-surface-warden cards + a citation-truth lens, then overclaim-auditor / dilution-collapse-sentinel / firewall-warden on the consolidated draft.

Five real overclaims in the merged CLAUDE.md doctrine, each fixed:

  1. "stale generation fails closed before dereference" didn't cover the cached-descriptor path (lgj_lane_describe/lgj_mask_describe hand Java a raw addr, read directly thereafter guarded only by a Java closed boolean, not the generation registry). Scoped to handle-mediated ops; gap tracked as ISS-LGJ-EPOCH-UNCHECKED.
  2. "an older library fails cleanly at the call, not at load" was false for ABI minors 2-4 (fail at Downcalls.<clinit>, a pre-existing tracked gap Downcalls.java's own comment already names). Scoped to the minor-5+ lazy-holder pattern.
  3. "checked_mul/checked_add throughout rowstore.rs and kernels.rs" overclaimed kernels.rs (zero occurrences — it bounds against an already-allocated slice's real length instead). Scoped, real mechanism named.
  4. "never segment.set(...)" was contradicted by the already-named Import exception (RowStore.importRows). Cross-referenced instead of left as a violated absolute.
  5. Materialization list was missing two real, bounded call sites. Kept as a five-item exhaustive list rather than converted to a property claim — dilution-collapse-sentinel BLOCKed the property-claim fix as a checkability regression; stricter verdict won.

Also caught: PR #45 itself had no PR_ARC_INVENTORY.md entry — backfilled here.

What's in the diff

Doc-only, 0 lines of Rust/Java (confirmed by git diff --stat): CLAUDE.md (5 bullets reworded), EPIPHANIES.md (storno entry correcting E-ZERO-COPY-MEMORY-SAFETY-AUDITED-CLEAN-1 in place per append-only rule), ISSUES.md (ISS-LGJ-EPOCH-UNCHECKED), PR_ARC_INVENTORY.md (PR #45 backfill).


Generated by Claude Code

PR #45 landed with no real review (CodeRabbit posted only its auto-
summary since it merged before the review cycle ran; Bugbot hit its
usage limit twice and never ran) -- the only check it got was a single
audit pass. Convened a 5+3 council (5 savants: citation-truth,
abi-membrane-warden, zero-copy-warden, handle-lifecycle-auditor,
java-surface-warden; 3 reviewers: overclaim-auditor,
dilution-collapse-sentinel, firewall-warden) against the merged
doctrine text.

Five real overclaims found and fixed in CLAUDE.md:
- "stale generation fails closed before dereference" didn't cover the
  cached-descriptor path (lgj_lane_describe/lgj_mask_describe hand Java
  a raw addr, read directly thereafter with only a Java closed-boolean
  guard, not the generation registry). Scoped to handle-mediated ops;
  the gap tracked as ISS-LGJ-EPOCH-UNCHECKED.
- "an older library fails cleanly at the call, not at load" was false
  for ABI minors 2-4 (fail at Downcalls.<clinit>, a pre-existing tracked
  gap). Scoped to the minor-5+ lazy-holder pattern.
- "checked_mul/checked_add throughout rowstore.rs and kernels.rs"
  overclaimed kernels.rs, which has zero occurrences (it bounds against
  an already-allocated slice's real length instead). Scoped and the
  real mechanism named.
- "never segment.set(...)" was contradicted by the already-named Import
  exception (RowStore.importRows). Cross-referenced instead of left as
  an absolute the code visibly violates.
- The materialization list was a closed enumeration missing two real,
  bounded call sites. Kept exhaustive (five items now) rather than
  converted to an unfalsifiable property claim -- the stricter reviewer
  verdict (dilution-collapse-sentinel BLOCKed the property-claim fix as
  a checkability regression) won over the looser one.

Storno entry in EPIPHANIES.md corrects E-ZERO-COPY-MEMORY-SAFETY-
AUDITED-CLEAN-1 without editing its prose. PR_ARC_INVENTORY.md also
backfilled for PR #45 itself, which had no arc entry at all.
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2805f594-3bdf-4e59-9a28-1d050dd2e029


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 28, 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_21564cc7-7f54-4c94-b255-e7e38af87a60)

@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review August 28, 2026 08:18
@AdaWorldAPI
AdaWorldAPI merged commit ac02f90 into main Aug 28, 2026
1 of 2 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Aug 28, 2026
CodeRabbit's Major on the epoch re-check design, verified real and
absorbed as a council constraint rather than deferred: the epoch fetch
and the cached LaneWindow/words read are two steps, so a cross-thread
close (or same-slot reuse) between them defeats the check. Two honest
frames recorded with it: the race is PRE-EXISTING (the closed-boolean
guard carries the identical window — the re-check neither introduces
nor widens it), and it is cross-thread-only (unreachable within one
thread). The Phase-0 spec now requires the council to choose, as an
explicit output: (i) serialize/lease covering both steps + a mandatory
interleaving falsifier, or (ii) a written scoped contract with doctrine
wording matching that scope — never (ii)'s semantics under (i)'s
wording, the exact overclaim class PR #46 corrected. Savant #1's
question set upgraded accordingly; W1.1 in the integration plan mirrors
the constraint and scopes what 'resolved' means to the chosen arm.
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