Skip to content

P0: JDK 28 + Valhalla value classes + Panama — implemented, 409 checks green - #81

Merged
AdaWorldAPI merged 4 commits into
mainfrom
claude/great-pascal-k96kok
Sep 19, 2026
Merged

AdaWorldAPI merged 4 commits into
mainfrom
claude/great-pascal-k96kok

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Operator ruling: LGJ MUST use JDK 28 and MUST use Valhalla and Panama. This records it as canon and implements it.

The flip

The six vocabulary types — LaneId, MaskId, Ordinal, FacetId, RowRange, WideFieldMask — are public value record. bench/run.sh pins /opt/jdks/jdk-28+16 and carries --release 28 --enable-preview.

Measured on Temurin 28+16-ea, against a freshly built liblgj_abi.so (abi 0.11, ndarray::simd avx512):

arm result
JDK 28, sources unchanged, no preview 409 checks, 0 failed
JDK 28, six types flipped, --enable-preview 409 checks, 0 failed
isValue() on all six, at runtime true; new LaneId(7) == new LaneId(7) → true
FFM with no preview flag final; SysVx64Linker; MemorySegment round-trip clean

The lab's one-word claim is now demonstrated on the production sources, not on valhalla-lab's parallel vocabulary. The gate suite does not move.

A cross-repo break this had to fix first

lgj-abi did not compile against current lance-graph main. mask_risc::ExecError gained RangeOutOfBounds { lo, hi, n_rows } with the Pred::Range work, and exports.rs's exec_error_to_status maps ExecError exhaustively. The new variant joins the documented "would be a bug in THIS file, not in a caller's plan" family (LGJ_ERR_ALLOCATION_FAILED) — the ABI lowering emits no Pred::Range, exactly as it emits no sum terminal and no blend — and the doc comment's enumeration is extended so the prose list stays exhaustive too. Native suite: 187 tests green.

Worth noting as a standing hazard: an exhaustive match across a repo boundary turns an upstream additive change into a downstream build failure, and no CI job here compiles the native crate, so nothing caught it.

Docs corrected, not deleted

CLAUDE.md gains a P0 section; the superseded "production targets a shipped GA JDK, no preview flags — a real, deliberate strength" decision is struck in place in .claude/knowledge/jdk-toolchain-facts.md. That framing turned a release constraint into an architectural virtue and had already licensed the false claim that production does not depend on Valhalla. The correct split: lance-graph / T0 owns canonical storage; Panama carries the verb; Valhalla carries the noun. Valhalla is a Java-side storage membrane, never storage ownership.

E4 is unaffected and stated so it is not over-applied: the Vector API stays a lab arm; JDK 28 finalizing it gives Java no backend, because Java has no backends.

How the JDK was obtained

Most routes are blocked here — the egress gateway answers 403 to CONNECT for api.adoptium.net, packages.adoptium.net, repos.azul.com, apt.corretto.aws, jdk.java.net and the launchpad PPAs, and Ubuntu noble stops at openjdk-25-jdk. What passes: anonymous git ls-remote (gave jdk-28+16-ea-beta) and GitHub release download paths. The EA asset name drops the 28U prefix. Route and every probe are in jdk-toolchain-facts.md so the next session does not re-derive it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d


Generated by Claude Code

Records the mandate as canon in CLAUDE.md and strikes, in place, the
superseded 'production targets a GA JDK, no preview flags' decision in the
toolchain knowledge doc. That framing turned a release constraint into an
architectural virtue and licensed the false claim that production does not
depend on Valhalla: Panama carries the verb, Valhalla carries the noun,
lance-graph owns the reality.

Unaffected and stated so it is not over-applied: E4 (no Vector API in
src/main), the classfile-poisoning rule, and every mask-native invariant.

Mandated, not implemented: no JDK 28 in this container and jdk.java.net is
proxy-blocked, so the migration is filed with its steps and falsifier as
ISS-LGJ-TOOLCHAIN-MUST-BE-JDK28-VALHALLA-PANAMA.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
… on production sources

Temurin 28+16-ea at /opt/jdks/jdk-28+16. Measured, not read: JEP 401 is
preview-gated on this build (isValue() true for value record and value class,
substitutability holds); FFM is final and flag-free (SysVx64Linker). All 37
production sources compile under JDK 28 as-is, and all six vocabulary types
flip with a one-word change and compile under --enable-preview with
isValue() == true at runtime.

Records the obtain route, since most are blocked here: apt, the Adoptium API
and every JDK distribution host are 403 at the egress gateway; anonymous git
ls-remote and GitHub release download paths pass. The EA asset name drops the
28U prefix.

Unblocks ISS-LGJ-TOOLCHAIN-MUST-BE-JDK28-VALHALLA-PANAMA: what remains is the
gate suite against a fresh liblgj_abi.so with re-pinned allocation numbers,
the build scripts carrying the preview flag, and valhalla-lab re-scoped.

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

The six vocabulary types (LaneId, MaskId, Ordinal, FacetId, RowRange,
WideFieldMask) are now public value record; bench/run.sh pins jdk-28+16 and
carries --release 28 --enable-preview. Measured on Temurin 28+16-ea: the full
gate suite is 409 checks / 0 failures both unflipped and flipped, all six
types report isValue() == true at runtime, and FFM stays final and flag-free.

Also fixes a cross-repo break that blocked the build entirely: lance-graph's
mask_risc::ExecError gained RangeOutOfBounds with the Pred::Range work and
exec_error_to_status maps it exhaustively, so lgj-abi did not compile against
lance-graph main. The new variant joins the documented bug-in-this-file family
and the doc enumeration is extended with it. Native suite: 187 tests green.

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

coderabbitai Bot commented Sep 19, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Essentials

Run ID: 0e0f2d42-c679-4670-a804-ed1ff9faf546

📥 Commits

Reviewing files that changed from the base of the PR and between f5fa792 and 1c66091.

⛔ Files ignored due to path filters (5)
  • native/lgj-abi/Cargo.lock is excluded by !**/*.lock
  • valhalla-lab/results/stable-api-javac.log is excluded by !**/*.log
  • valhalla-lab/results/stable-lab-javac.log is excluded by !**/*.log
  • valhalla-lab/results/valhalla-api-javac.log is excluded by !**/*.log
  • valhalla-lab/results/valhalla-lab-javac.log is excluded by !**/*.log
📒 Files selected for processing (29)
  • .claude/agents/BOOT.md
  • .claude/agents/panama-bridge-engineer.md
  • .claude/board/EPIPHANIES.md
  • .claude/board/ISSUES.md
  • .claude/knowledge/jdk-toolchain-facts.md
  • CLAUDE.md
  • README.md
  • bench/gate-run.sh
  • bench/run.sh
  • docs/panama.md
  • java/README.md
  • java/src/main/java/com/adaworldapi/lancegraph/FacetId.java
  • java/src/main/java/com/adaworldapi/lancegraph/LaneId.java
  • java/src/main/java/com/adaworldapi/lancegraph/MaskId.java
  • java/src/main/java/com/adaworldapi/lancegraph/Ordinal.java
  • java/src/main/java/com/adaworldapi/lancegraph/RowRange.java
  • java/src/main/java/com/adaworldapi/lancegraph/WideFieldMask.java
  • native/lgj-abi/src/exports.rs
  • native/lgj-abi/src/plan_lower.rs
  • valhalla-lab/results/AB-default.diff
  • valhalla-lab/results/stable-default.txt
  • valhalla-lab/results/stable-noea.txt
  • valhalla-lab/results/valhalla-default.txt
  • valhalla-lab/results/valhalla-noarrayflat.txt
  • valhalla-lab/results/valhalla-noea.txt
  • valhalla-lab/results/valhalla-nofieldflat.txt
  • valhalla-lab/results/valhalla-noflat.txt
  • valhalla-lab/run.sh
  • valhalla-lab/src/valhalla/com/adaworldapi/lancegraph/lab/Platform.java
 ______________
< Bugs begone! >
 --------------
  \
   \   \
        \ /\
        ( )
      .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR

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

@cursor

cursor Bot commented Sep 19, 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_87971cfa-a64e-4fee-a269-4c35965bd3d6)

…scoped, measurements

Completes the integration rather than the toolchain bump.

- RangeOutOfBounds: compatibility plumbing only, now backed by
  plan_lower::range_falsifier -- sweeps every opcode through the real
  lower_plan, disable-verified red-then-green. Goes red the day LGJ gains a
  Range lowering, forcing a deliberate caller-visible mapping.
- Build surface: java/README.md, README.md, docs/panama.md, bench/gate-run.sh
  and two agent cards retargeted to JDK 28, each stating that the preview flag
  is Valhalla's and never FFM's. Historical result artifacts left untouched.
- valhalla-lab re-scoped: both arms on one JDK, so the object model is the only
  variable (it was confounded with the JDK version before). Adapted the
  flattening probe to JDK 28's narrowed ValueClass.isFlatArray signature.
- Measured: 183 native tests, 409 Java checks; LaneId/Ordinal/MaskId flatten,
  RowRange and Row do not (the 8-byte cliff reproduces); array construction
  8.2x less allocation, non-escaping construction and Row hydration slightly
  worse; the FFM path is byte-identical across the object model.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review September 19, 2026 11:41
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@AdaWorldAPI
AdaWorldAPI merged commit 07aa441 into main Sep 19, 2026
4 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Sep 19, 2026
Discharges the merged-PR obligation for #81 at merge time, not as a backfill:
the Panama x Valhalla framing, the RangeOutOfBounds fix and its falsifier, the
409/183 gate results, the flattening cliff reproducing on JDK 28 with RowRange
and Row on the wrong side, the two allocation measurements that got worse, the
lab re-scope and its removed confound, and the JMH numbers still owed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
AdaWorldAPI pushed a commit that referenced this pull request Sep 19, 2026
Codex P2 on #82, verified against .github/workflows/lint.yml: the claim that
no CI job here compiles the native crate is false -- the clippy and rust-test
jobs check out the lance-graph sibling and run cargo clippy --all-targets and
cargo test from native/lgj-abi on every push and PR to this repo.

The real gap is the trigger: on {pull_request, push} fires for this repository
only, so an upstream-only merge in lance-graph cannot start the workflow and
the break stays invisible until someone pushes here. Corrected in place in the
unmerged #81 arc entry, and by prepend for the merged epiphany.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
AdaWorldAPI pushed a commit that referenced this pull request Sep 19, 2026
Framing torque flagged in review on #82: the repo kept saying 'the Valhalla
lab' after #81 made production the Valhalla arm, which reifies the superseded
topology (Panama real, Valhalla experimental annex) the implementation had
just removed.

- docs/panama.md carried an objectively stale paragraph: the lab compiled with
  -source 27 --enable-preview and was 'never on the classpath the production
  tests run against', with physical separation as a structural guarantee
  against preview poisoning. All three are false now -- both arms are JDK 28,
  both load the production API, and that API is itself preview-marked.
- README's stack diagram drew 'stable-JDK implementation / Valhalla
  laboratory' as layers; replaced with JDK 28 Panama + JEP 401 production and
  representation probes.
- docs/valhalla-lab.md gains a legacy-name banner; the directory keeps its
  name for path compatibility.
- The #82 arc bullet and LATEST_STATE now name the experiment as object-model
  and layout consequence, not Valhalla.

Historical board entries are left as history.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
AdaWorldAPI added a commit that referenced this pull request Sep 19, 2026
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