P0: JDK 28 + Valhalla value classes + Panama — implemented, 409 checks green - #81
Conversation
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
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Essentials Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (29)
✨ Finishing Touches📝 Generate docstrings
Comment |
Bugbot couldn't run - usage limit reachedBugbot 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
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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
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
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
board: PR #81 arc entry + LATEST_STATE
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— arepublic value record.bench/run.shpins/opt/jdks/jdk-28+16and carries--release 28 --enable-preview.Measured on Temurin
28+16-ea, against a freshly builtliblgj_abi.so(abi 0.11,ndarray::simd avx512):--enable-previewisValue()on all six, at runtimenew LaneId(7) == new LaneId(7)→ trueSysVx64Linker;MemorySegmentround-trip cleanThe 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-abidid not compile against current lance-graphmain.mask_risc::ExecErrorgainedRangeOutOfBounds { lo, hi, n_rows }with thePred::Rangework, andexports.rs'sexec_error_to_statusmapsExecErrorexhaustively. 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 noPred::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.mdgains 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.netand the launchpad PPAs, and Ubuntu noble stops atopenjdk-25-jdk. What passes: anonymousgit ls-remote(gavejdk-28+16-ea-beta) and GitHub release download paths. The EA asset name drops the28Uprefix. Route and every probe are injdk-toolchain-facts.mdso the next session does not re-derive it.🤖 Generated with Claude Code
https://claude.ai/code/session_01HScwwezRdMxFfTs3WLG19d
Generated by Claude Code