From the #231 review (nit 2). The RunEnd/Sparse validity fixes (#225/#226) are covered by strong decoder unit tests plus the gap:225→ok/gap:226→ok conformance flips — but the conformance suite only runs against the weekly hydrated corpus, not the per-PR verify gate. There's no in-repo RustWritesJavaReads-style interop test exercising a null-fill Sparse or null-run RunEnd file that runs on every build.
Add a small ground-truth fixture (JNI-written if the reference writer can be coerced to emit a null-fill sparse / null-run runend column; else a Java-written round-trip like the #221 mixed-grid test uses) asserting null rows decode as null on every gate run. First establish whether the JNI writer's compressor will actually choose Sparse/RunEnd with null fill/runs for a crafted input — if not, gate on the chosen encoding via assumeTrue after inspecting, or fall back to a Java-writer round-trip. Same recurring concern as the #214 RLE interop test.
From the #231 review (nit 2). The RunEnd/Sparse validity fixes (#225/#226) are covered by strong decoder unit tests plus the
gap:225→ok/gap:226→okconformance flips — but the conformance suite only runs against the weekly hydrated corpus, not the per-PRverifygate. There's no in-repoRustWritesJavaReads-style interop test exercising a null-fill Sparse or null-run RunEnd file that runs on every build.Add a small ground-truth fixture (JNI-written if the reference writer can be coerced to emit a null-fill sparse / null-run runend column; else a Java-written round-trip like the #221 mixed-grid test uses) asserting null rows decode as null on every gate run. First establish whether the JNI writer's compressor will actually choose Sparse/RunEnd with null fill/runs for a crafted input — if not, gate on the chosen encoding via
assumeTrueafter inspecting, or fall back to a Java-writer round-trip. Same recurring concern as the #214 RLE interop test.