|
| 1 | +## 2026-09-22 — the Java gate is DISPATCHED, and one measurement stops being restated in eight places |
| 2 | + |
| 3 | +`ISS-LGJ-CONSUMERS-HAVE-NO-CI-LINE` is RESOLVED. `java-suites` in |
| 4 | +`.github/workflows/lint.yml` builds `liblgj_abi.so`, then runs the four |
| 5 | +`javac`/`java` command strings `java/README.md` documents, verbatim — no build |
| 6 | +tool was introduced, there still is none by design. |
| 7 | + |
| 8 | +- **The issue's first task was acquisition, not the job**, and it resolves by a |
| 9 | + mechanism this container does not use — which is why the entry was right to |
| 10 | + refuse to generalise from the local ladder. Read from primary sources: |
| 11 | + setup-java's `normalizeVersion` sets `stable = false` on an `-ea` suffix, its |
| 12 | + temurin installer then asks `release_type=ea`, and Adoptium's API (queried |
| 13 | + live) serves `jdk-28+16-ea-beta` — the same build this container runs. The |
| 14 | + container's blocker was gateway-blocked distribution hosts; a runner never had |
| 15 | + that constraint. NOT pinned to `+16`: internal head pins are forbidden, and |
| 16 | + what the suite needs is JEP 401 under preview, which every 28 EA build carries. |
| 17 | +- **Measured on `origin/main` (`aef2382`), every command verbatim:** core **612 |
| 18 | + checks / 17 suites / 0 failures** (abi 0.12, avx512, release), bricks **70**, |
| 19 | + graph **68**, trades **3** and **12** — **765 checks across 5 entry points**, |
| 20 | + all exit 0. All of it was gating nothing. |
| 21 | +- **Two counts were wrong on the way in.** FOUR consumer mains, not three |
| 22 | + (`trades` carries two; running one of two would have been the |
| 23 | + no-gate-with-extra-steps outcome the issue names). And root `CLAUDE.md` |
| 24 | + briefed every session with `409 / 16 suites / abi 0.11`. Fixed |
| 25 | + **structurally**, not re-pinned: the live count now exists in exactly ONE |
| 26 | + dated place and every other site had its number REMOVED. One measurement |
| 27 | + restated in eight places goes stale in eight places — which is what had |
| 28 | + happened. The three surviving 409s are dated historical measurements kept as |
| 29 | + evidence; the Valhalla-flip comparison is only meaningful against its own |
| 30 | + baseline and must not be restated forward. |
| 31 | +- **Falsifier run, red-then-green, on the step body extracted from the |
| 32 | + committed YAML rather than retyped.** Stale `0` pin: all four mains reached, |
| 33 | + `::error::` named the culprit, exit 1. Restored: exit 0. Not fail-fast |
| 34 | + deliberately — a bare `java` under `bash -e` aborts at the first red main, so |
| 35 | + one broken consumer would mask three others and each round would reveal one. |
| 36 | + |
| 37 | +**The one OPEN item CLOSED on the first run** (#86, `af58fbd`): |
| 38 | +`java-suites completed success`, 13/13 steps. The runner downloaded |
| 39 | +`Java 28.0.0+16.0.ea (Temurin-Hotspot)` from |
| 40 | +`adoptium/temurin28-binaries/.../jdk-28+16-ea-beta` — the exact release the |
| 41 | +Adoptium API had named, so the chain is closed by execution and not only by |
| 42 | +reading. Bonus measurement: the runner reports `avx2 (x86-64-v3)` where this |
| 43 | +host reports `avx512`, and all 765 counts are byte-identical, which turns the |
| 44 | +backend-agnostic claim from something read out of the tests into something |
| 45 | +observed across two backends. |
| 46 | + |
| 47 | +**Review follow-up (`2a30039`), both findings CodeRabbit-confirmed.** Two real |
| 48 | +defects, both mine: |
| 49 | + |
| 50 | +- **Persisted checkout credentials** (zizmor `artipacked`). Fixed on ALL |
| 51 | + THIRTEEN checkout steps, not the four named — `persist-credentials` appeared |
| 52 | + nowhere in the file, every job runs `cargo`, so the `build.rs` read path was |
| 53 | + identical in `format`/`clippy`/`rust-test`. Verified free first: nothing |
| 54 | + pushes, `contents: read`, no secret read. **Verified at RUNTIME, not just in |
| 55 | + YAML** — each of the four checkouts logs `persist-credentials: false`, then |
| 56 | + `Setting up auth`, then `Removing auth` INSIDE the checkout step, so the |
| 57 | + credential no longer spans the later `cargo build`. Without the flag there is |
| 58 | + no in-step `Removing auth` and the config survives to post-job cleanup. |
| 59 | +- **The documented suite command could not run.** My own pointer sentence aimed |
| 60 | + at a JDK 25/26 command without the preview flags; measured `error: value |
| 61 | + classes are a preview feature and are disabled by default`, exit 1. Fixing it |
| 62 | + surfaced three more in the same block (`/usr/lib/jvm` now holds only Java 21 |
| 63 | + so `temurin-26-jdk-amd64` does not exist here; the block mixed working |
| 64 | + directories and died on `find: 'java/src/main'`; `-Dlgj.library=$PWD/target/...` |
| 65 | + named an incidental leftover `target/` that is a separate inode from what |
| 66 | + step 1 builds) — and one I INTRODUCED, caught only by executing it: |
| 67 | + `--manifest-path` instead of `cd` broke the toolchain, because rustup reads |
| 68 | + `rust-toolchain.toml` from the CWD (`rustc 1.94.1 is not supported`, exit |
| 69 | + 101). The `cd` is load-bearing and is back in a subshell. Verified by |
| 70 | + extracting the fenced block by PARSE and running it under `bash -e`: exit 0, |
| 71 | + `ALL PASSED (612 checks)`. |
| 72 | + I also nearly filed a FALSE finding — the two `.so` paths have different |
| 73 | + mtimes, which read as a stale artifact; they are md5-identical. Checking |
| 74 | + content instead of timestamps stopped it. |
| 75 | + |
| 76 | +**OPEN:** nothing on this. The remaining gap is elsewhere and unchanged — |
| 77 | +`lint.yml` fires `on: {pull_request, push}` for THIS repository only, so an |
| 78 | +upstream-only merge in `lance-graph` or `ndarray` cannot start the workflow and |
| 79 | +a sibling break stays invisible until someone pushes here. That is the trigger |
| 80 | +gap `E-THE-CI-GAP-WAS-THE-TRIGGER-NOT-THE-COVERAGE-1` already names; this job |
| 81 | +inherits it rather than fixing it, and now inherits it for the Java half too. |
| 82 | + |
1 | 83 | ## 2026-09-22 — D-LGJ-FOLD-5: the consumer stops asking sixteen times, and a red pin on `main` gets root-caused |
2 | 84 |
|
3 | 85 | The consumer half of minor 12. `BricksQuery.sumBy()` was sixteen queries — |
|
0 commit comments