Skip to content

Land the stranded ABI minor 8 on main + board hygiene - #33

Merged
AdaWorldAPI merged 3 commits into
mainfrom
claude/board-hygiene
Aug 25, 2026
Merged

Land the stranded ABI minor 8 on main + board hygiene#33
AdaWorldAPI merged 3 commits into
mainfrom
claude/board-hygiene

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Aug 25, 2026

Copy link
Copy Markdown
Owner

Two things, both about work being real rather than merely merged.

1. The stranded tail — minor 8 never reached main

PR #32 (minor 8) was stacked on PR #30's branch, because two open PRs claiming the same ABI minor would have been a real collision. #30 then merged to main first, so #32 merged into a branch that had already been absorbed.

Net effect: main sat at LGJ_ABI_MINOR = 7 while the minor-8 commit, CarvingTable / CarvingTableTest, the load-gate prefix fix, abi.md §17 and three board entries lived only on claude/layout-probe — two commits ahead of main.

Nothing was lost and nothing was broken (main was a strict ancestor, no divergence), but the reviewed work was absent from the branch anyone would build, and neither PR gave any signal: both report "merged", both are green, GitHub says nothing. It surfaced only because a wake event prompted a git log origin/main check rather than trusting the merge notification.

This PR carries those two commits over. The failure is generic to stacked PRs, so it is written down twice rather than quietly fixed:

  • ISSUES.mdISS-LGJ-STACK-TAIL-STRANDED-MINOR-8 (found + resolved, double-entry)
  • CLAUDE.md → a new iron rule naming the check, which must come back empty:
git log origin/main..origin/THE-BASE-BRANCH

2. Board hygiene

Per the ask to bring .claude/board closer to lance-graph's.

CROSS_REPO_PRS.md — NEW, modeled on lance-graph's file of the same name. This repo is gated on three upstream PRs by its own missing-capability STOP rule and had no ledger of them at all — the gating relationship lived only in commit messages:

upstream PR capability gated
ndarray #283 masked_strided_group_sum minor 5
lance-graph #1025 ClassView::cascade_shape minor 6 (and minor 8's derivation)
ndarray #280 the mask_andnot family minor 4

Each entry names the capability that was missing and what the hand-rolled local version would have been — which is the part that makes the STOP rule legible rather than a slogan. All three PR numbers verified against the upstream logs, not asserted from memory.

README.md — NEW. What each board file answers, when it is updated, the one-writer rule and its base case, the non-recursion clause, measure-then-pin, and an explicit section on what is deliberately not carried over from lance-graph's board (sprint-log-*/, agent-tags/, the entropy ledgers). That repo runs large worker fleets; this one has not. An empty ledger read as an authoritative one is worse than an absent file.

STATUS_BOARD.md gains the minors 5–8 sweep arc. It stopped at 2026-08-18 and carried nothing for the entire sweep, including the two operator corrections that shaped it.

ISSUES.md also gains ISS-LGJ-FACETSCHEMA-PAIR48 (open, upstream-owned) — verified at facet_schema.rs:34 and class_view.rs:1168. Noted honestly as possibly not a defect: Pair48 has real consumers (helix Signed360, cam_pq [u8; 6], both genuinely 48-bit), so the open question is whether it and CascadeShape are one question asked twice or two questions that must both be answerable. This repo consumes the contract; it does not arbitrate it.

AGENT_LOG.md gains this session, including both owned mistakes: the git checkout that destroyed uncommitted work in kernels.rs, and the stacked-PR tail above.

Gates

Re-run on this branch, not inherited: Rust 134 lib tests, fmt + clippy -D warnings clean; Java 304 checks; OldAbiCompatTest green against minors 1 and 4.


🤖 Generated with Claude Code

https://claude.ai/code/session_01DCfrD5y19cvFc4AoyydXYv

claude and others added 3 commits August 25, 2026 15:06
…e times

The wire encoding of the §14 `carving` parameter lived in three places:
a Rust `match`, Java's `Carving` enum, and abi.md's own table. Each was
correct. Nothing would have failed if one had stopped agreeing with the
others — and the failure mode is silent: a grouping added or reordered
upstream re-maps one copy, a sweep then reads the same 12 bytes under the
wrong reading, and returns a plausible number.

One source, two derivations:

  1. the contract owns the SET (CascadeShape::ROTATIONS);
  2. kernels::CARVING_ORDER derives the ENCODING from it by a RULE
     (group count, descending — never declaration position), as a const;
  3. the manifest SERVES the result: carving_count + carvings[8], packed
     (groups << 8) | group_bytes.

No new symbol. The manifest already exists so Java can discover the ABI's
shape rather than declare it, and a wire encoding is exactly such a shape.

Java keeps its ARITY and loses its ENCODING: RAILS_6X2 named anything but
6x2 would be a lie in its own name, so groups()/groupBytes() stay
declared, while wire()/ofWire() read the served table. The one literal
encoding left is CarvingTable.PRE_MINOR_8, whose name says it is history.

Also fixes a latent defect the change made reachable: Java's load gate
required the FULL manifest layout, so this — the first growth of the
manifest struct — would have made every older artifact fail to load, in
flat contradiction of §2's additive promise. The gate now requires only
the 104-byte base prefix; later fields are read when size_of_manifest
covers them AND the minor is high enough.

Gates: Rust 134 lib tests, fmt + clippy -D warnings clean; Java 304
checks (was 288); OldAbiCompatTest green against minors 1-4; no new javac
warnings.

Disable-runs, each red-then-green: swapped packed axes fail the serve
test; a reversed sort fails the order test and two others; a mismatched
Java arity fires BOTH membership directions; the restored full-layout
gate makes the minor-4 library fail to load outright.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DCfrD5y19cvFc4AoyydXYv
ABI minor 8 — the register groupings served as data, not copied three times
Two things, both about work being real rather than merely merged.

**The stranded tail.** PR #32 (minor 8) was stacked on PR #30's branch,
because two open PRs claiming the same ABI minor would have collided.
#30 then merged to main FIRST, so #32 merged into a branch that had
already been absorbed — and main sat at LGJ_ABI_MINOR = 7 while the
minor-8 commit, CarvingTable/CarvingTableTest, the load-gate prefix fix,
abi.md §17 and three board entries lived only on claude/layout-probe.
Nothing lost, nothing broken, main a strict ancestor — but the reviewed
work was absent from the branch anyone would build, and neither PR gave
any signal. This carries it over.

The failure is generic to stacked PRs, so it is written down twice:
ISSUES.md ISS-LGJ-STACK-TAIL-STRANDED-MINOR-8, and a CLAUDE.md iron rule
naming the check (`git log origin/main..origin/<base>` must be empty).

**Board hygiene**, per the operator's ask to keep .claude/board closer to
lance-graph's:

- CROSS_REPO_PRS.md, NEW, modeled on lance-graph's. This repo is gated on
  three upstream PRs (ndarray #283 and #280, lance-graph #1025) by its own
  missing-capability STOP rule, and had no ledger of them at all — the
  gating relationship lived only in commit messages. Each entry names the
  capability that was missing and what the hand-rolled local version would
  have been.
- README.md, NEW. What each board file answers, the one-writer rule and
  its base case, the non-recursion clause, measure-then-pin, and an
  explicit list of what is deliberately NOT carried from lance-graph's
  board — an empty ledger read as an authoritative one is worse than an
  absent file.
- STATUS_BOARD.md gains the minors 5-8 sweep arc. It stopped at
  2026-08-18 and carried nothing for the whole sweep.
- ISSUES.md gains the stranded-tail entry (resolved) and
  ISS-LGJ-FACETSCHEMA-PAIR48 (open, upstream-owned) — verified at
  facet_schema.rs:34 and class_view.rs:1168 rather than asserted.
- AGENT_LOG.md gains this session, including both owned mistakes.

Gates re-run on this branch: Rust 134 lib tests, fmt + clippy -D warnings
clean; Java 304 checks; OldAbiCompatTest green against minors 1 and 4.

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

coderabbitai Bot commented Aug 25, 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: 5aa8f301-f0aa-450a-b936-e6e24db6b196


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 25, 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_bd1cb623-17b0-4956-80fd-e877040424fc)

@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review August 25, 2026 15:47
@AdaWorldAPI
AdaWorldAPI merged commit 23096ce into main Aug 25, 2026
2 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Aug 27, 2026
PR_ARC_INVENTORY had entries for #1-#12, #14, #16, #18, #20 and #32, and
nothing else. Missing: #13, #22-#31, #33-#41 — twenty PRs. (#15/#17/#19/#21
are also absent and correctly so: each is itself an arc-entry-only PR,
exempt under the termination clause.) #32's own entry still read
"(draft, opened …)" with no merge sha.

Corrects this branch's first count, which said nineteen and read the gap as
starting at #21. Both were wrong — it is twenty, and it starts at #13. The
first count was a range subtraction over a file with holes; the enumeration
is what found the difference.

Method, which is the point rather than an aside: each entry drafted from
that PR's own body and diff, five parallel agents over four PRs each, none
permitted to work from a later session's recall. Every backfilled entry's
Confidence bullet ends "Backfilled 2026-08-27 from the PR body and diff,
not written at merge time", so reconstructed entries are distinguishable
from ones written at merge time; several state which claims are the PR
body's own and were not re-verified. Every cited sha, date and merge-vs-
squash label machine-checked against git.

Four things the backfill turned up, each recorded in the entry it belongs
to: #25's body asserts "no code, no reproducer changes" and its own diff
contradicts it; #39 left its lgj_hop doc comment describing the pre-change
design; #34's banked evidence file did not identify its own JDK; and #41 is
on main while its own title reads [DO NOT MERGE AS-IS], recorded as
unresolved disposition rather than an endorsement.

ISS-LGJ-ARC-INVENTORY-STOPPED-AT-32 moves to RESOLVED with the corrected
count and the standing rule restated: the entry goes in at open, in the
PR's own commit. The backfill is the repair, not the process.

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