|
| 1 | +## E-THE-VALHALLA-FLIP-COST-ONE-WORD-SIX-TIMES-AND-THE-GATES-DID-NOT-MOVE-1 (2026-09-19) |
| 2 | + |
| 3 | +**Finding, measured end to end today.** The P0 mandate (JDK 28 + Valhalla + |
| 4 | +Panama) is implemented. `/opt/jdks/jdk-28+16`, Temurin `28+16-ea`. |
| 5 | + |
| 6 | +| arm | result | |
| 7 | +|---|---| |
| 8 | +| JDK 28, sources unchanged, no preview | compiles; **409 checks, 0 failed** | |
| 9 | +| JDK 28, six types `public value record`, `--enable-preview` | compiles; **409 checks, 0 failed** | |
| 10 | +| `isValue()` on all six at runtime | **true**; `new LaneId(7) == new LaneId(7)` → true | |
| 11 | +| FFM without any preview flag | final; `SysVx64Linker`; `MemorySegment` round-trip clean | |
| 12 | + |
| 13 | +**The lab's central claim is now demonstrated on production sources:** the |
| 14 | +migration is one word, six times, and the gate suite does not move. It was |
| 15 | +previously proven only on `valhalla-lab`'s parallel vocabulary. |
| 16 | + |
| 17 | +**A cross-repo break found on the way, and it was blocking everything.** |
| 18 | +`lgj-abi` did not compile against current lance-graph `main`: |
| 19 | +`mask_risc::ExecError` gained `RangeOutOfBounds { lo, hi, n_rows }` with the |
| 20 | +`Pred::Range` work, and `exports.rs`'s `exec_error_to_status` maps `ExecError` |
| 21 | +**exhaustively**. Fixed by joining the documented *"would be a bug in THIS |
| 22 | +file, not in a caller's plan"* family (`LGJ_ERR_ALLOCATION_FAILED`) — the ABI |
| 23 | +lowering emits no `Pred::Range`, exactly as it emits no sum terminal and no |
| 24 | +blend — and the doc comment's enumeration was extended so the list stays |
| 25 | +exhaustive in prose too. **An exhaustive match across a repo boundary is a |
| 26 | +tripwire, not a safety net:** it converts an upstream additive change into a |
| 27 | +downstream build failure, and nothing in either repo's CI noticed, because no |
| 28 | +CI job here compiles the native crate. |
| 29 | + |
| 30 | +**Two false failures I nearly reported, both mine, both caught by reading.** |
| 31 | +The flipped suite showed `1 FAILED` twice. Both times it was |
| 32 | +`DoctrineFenceTest` refusing to run — it requires `java/src/main/java` AND |
| 33 | +`native/lgj-abi/src` relative to CWD, and I had run the flipped build from a |
| 34 | +scratch directory that had neither. The fence is *correct*: its first check is |
| 35 | +*"a fence that cannot find its corpus must fail, not skip."* Running the flip |
| 36 | +in the real tree (committed first, restored with `git checkout`) gave the true |
| 37 | +result. **A harness artifact and a regression look identical in a summary |
| 38 | +line** — this is the ruff trap "a disable that does not apply is |
| 39 | +indistinguishable from a guard that is not load-bearing", met from the other |
| 40 | +direction. |
| 41 | + |
1 | 42 | ## E-VALHALLA-IS-THE-STORAGE-MEMBRANE-AND-IT-IS-MANDATORY-1 (2026-09-19) |
2 | 43 |
|
3 | 44 | **Operator ruling.** *LGJ MUST use JDK 28 and MUST use Valhalla and Panama.* |
|
0 commit comments