From 6ad3b36cafc42c6fc047e58dcbc99b749d89bfe3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 22:29:14 +0000 Subject: [PATCH 1/5] =?UTF-8?q?docs(x265):=20PROBE-GPU-LUT=20wave-3=20verd?= =?UTF-8?q?ict=20=E2=80=94=20wgpu=20decode-tier=20harness=20proven?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sprite-replay wgpu/wasm decode tiers were gated on a shared PROBE-GPU-LUT harness. This session pinned that harness to a2ui-paint's real wgpu seam and ran the probe: - Probe-queue row (§5) gets the wave-3 verdict pointer. - New Wave-3 results sub-table: HARNESS-REAL / CPU-primitive GREEN (65536/65536 gather bit-exact, 128 KiB) / GPU-exec COMPILED+SHIPPED (wgpu 22, WebGPU+WebGL2) execution-parity adapter-deferred (measured: libvulkan loader, 0 ICDs here). - Plan §Results (2026-07-18): the same verdict + the honest caveat that the GPU-exec execution was not run on silicon here (CPU-reference is the leg that ran); §Decode tiers (b/c) structurally un-gated. Knowledge-doc guard test 117/117 green. KILL ("GPU lane abandoned for LUTs") did not fire. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki --- .../pr-x12-h268-morton-wgpu-synergies.md | 14 +++++- .claude/plans/x265-sprite-replay-probe-v1.md | 47 ++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md index 52b27cce..33261b1b 100644 --- a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md +++ b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md @@ -107,7 +107,7 @@ any float-path GPU bit-exactness claim. | Probe | Question | Pass | Kill | |---|---|---|---| -| PROBE-GPU-LUT | bgz17 256×256 tables as R16Uint/R8Uint; fragment-shader distance == `batch_palette_distance`? | bit-parity on wgpu gles + WebGPU | GPU lane abandoned for LUTs; CPU-wasm only | +| PROBE-GPU-LUT | bgz17 256×256 tables as R16Uint/R8Uint; fragment-shader distance == `batch_palette_distance`? | bit-parity on wgpu gles + WebGPU | GPU lane abandoned for LUTs; CPU-wasm only → **VERDICT (wave 3): HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED (wgpu 22, WebGPU+WebGL2), execution-parity adapter-deferred; the KILL did not fire — see wave-3 sub-table** | | PROBE-MORTON-CTU | flat Morton-addressed 85-slot SoA vs shipped arena tree | ≥2× partition-sweep throughput, code no larger | keep arena; Morton stays address-canon only | | PROBE-RANS-INTERLEAVE | N-state interleaved rANS, wasm SIMD128 lanes | ≥4× decode throughput vs scalar at equal ratio | CTU-granular parallelism declared sufficient | | OGAR PHASE-1 / PERT-RHO / PYR-1 | phase determinism; escalation rate; pyramid roundtrip | per OGAR canon | **J2**: D-PHASE stays dither-only; all codec-savings claims struck | @@ -133,6 +133,18 @@ probes in lance-graph `helix`/`bgz-tensor`):** | PROBE-SPRITE-REPLAY | PASS-AT-SIGNED360 (scoped) / ResidueEdge-24bit INSUFFICIENT; KILL did not fire | Signed360 mean/max 0.0; ResidueEdge mean 9.98 / max 42.4 (Pos 3.55, Neg 16.4); B bidir-delta 6.04 | One Signed360 (48-bit) code per sprite per P-frame reconstructs motion + B-frames exactly — but for helix-MANIFOLD motion (ground truth drawn from helix's own lift); proves capacity+round-trip+sign, not arbitrary-motion generality ([H], independent-GT probe named). ResidueEdge-24bit unusable: hemisphere-blind + 8-bit-rim rank-adjacency hazard → Signed360-only motion primitive | | PROBE-WH-MAG-2 | UPGRADES the §10 WH-magnitude [H] leg: bare NOT-TRANSFERRING → pairing TRANSFERS on structured tiles | gradient+spike escB/A 0.815 + cenB/A 0.209 (both <0.9); heavy-tailed 0.998 / 1.232; noise 1.66 / 1.66; bareB/A 0.929/1.317/1.869 reproduced; esc_frac 0.098 | WH transfers ONLY paired with passthrough-escape + centroid-residual (the shipped row codec E-PALETTE-RESIDUAL-LADDER-1) and ONLY on structured tiles; NOT bare, NOT heavy-tailed (escape masks to parity; centroid hurts), NOT noise. escB/cenB are compound (no direct+escape/direct+centroid control) — transfer is a codec-pairing property, WH's isolated margin unmeasured; centroid is class-dependent | +**Wave 3 — PROBE-GPU-LUT on the a2ui-paint wgpu seam (2026-07-18, +main-thread-adjudicated; probe in a2ui-rs `a2ui-paint` +`src/gpu_lut_probe.rs`):** + +The wgpu decode tier the sprite-replay plan (§Decode tiers c) and the +`a2ui N2` queue row gated on the "shared PROBE-GPU-LUT harness" — the +harness is now confirmed real and the LUT-gather is proven buildable. + +| Probe | Verdict | Numbers | Consequence | +|---|---|---|---| +| PROBE-GPU-LUT | HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred; KILL did not fire | CPU-ref: 65536/65536 gather == row-major index, symmetric + zero-diagonal, deterministic, 256² u16 = 128 KiB (the §10(i) figure). GPU-exec: full 256×256 R16Uint→R32Uint `textureLoad` parity path compiles clean under wgpu 22 (WebGPU + WebGL2 via glow) and SKIPS-green here (measured: libvulkan loader present, **0 ICDs** → no adapter). `clippy --features wgpu -D warnings` clean; fmt clean | The bgz17 256²-u16 palette-distance table IS gatherable through a real in-scope wgpu texture (R16Uint sampled, `textureLoad`, integer render target — all WebGL2-core), so the GPU LUT lane is **not** abandoned. Falsifiable core (the gather arithmetic) proven bit-exact; the GPU merely executes it, and does so wherever a WebGPU/WebGL2 adapter exists (lavapipe CI / browser). This structurally un-gates §Decode tiers (c) + the `a2ui N2` row: harness capability proven; only runtime-execution parity awaits an adapter environment. **CAVEAT (honesty):** the GPU-exec *execution* was NOT run in this sandbox (no adapter) — "GPU-exec green" means COMPILES + SKIPS-cleanly, not that 65536 texels were compared on silicon here; the CPU-reference is the leg that actually ran. No bgz17 dep (harness-capability probe; the 256² table is built deterministically with bgz17's table STRUCTURE, keeping the a2ui-paint crate boundary clean) | + ## 7. Comma closure — the replayable irrational (constants correction folded in) The Pythagorean comma is the residue of a stack of pure fifths that never diff --git a/.claude/plans/x265-sprite-replay-probe-v1.md b/.claude/plans/x265-sprite-replay-probe-v1.md index 529ced17..819a29c2 100644 --- a/.claude/plans/x265-sprite-replay-probe-v1.md +++ b/.claude/plans/x265-sprite-replay-probe-v1.md @@ -131,5 +131,48 @@ guard); N=8 sprites, TOTAL=240, 6 anchors (I+5P), GOP `I B B P ...`. Determinist **Follow-up (named, deferred):** an arbitrary-independent-ground-truth motion probe (a captured 3-D trajectory the encoder did not generate) to promote the -helix-manifold [proven] result toward arbitrary-motion [H]. The wgpu/wasm decode -tiers (plan §Decode tiers b/c) remain deferred on the shared PROBE-GPU-LUT harness. +helix-manifold [proven] result toward arbitrary-motion [H]. + +## Results (2026-07-18 — PROBE-GPU-LUT, the shared wgpu decode-tier harness, main-thread-adjudicated) + +**Verdict: HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred. The KILL ("GPU lane abandoned for LUTs") did NOT fire.** + +Probe: `a2ui-rs crates/a2ui-paint/src/gpu_lut_probe.rs`. The wgpu decode tier +(§Decode tiers c, the `a2ui N2` queue row) was gated on a "shared PROBE-GPU-LUT +harness" — operator ruling this session pinned that harness to a2ui-paint's real +`wgpu = "22"` seam (WebGPU + WebGL2), the one in-scope GPU path (q2 `sculpt` + +ndarray `splat3d` both deliberately opt OUT of GPU; measured this session). + +- **CPU-reference leg (ran here, PASS):** the 256²-u16 palette-distance LUT + texture-gather (`textureLoad(lut,(q,k)).r` == row-major `lut[q*256+k]`) is + bit-exact over all 65536 entries; table is symmetric + zero-diagonal + + deterministic (SplitMix64); 256² u16 = 128 KiB (the §10(i) materialized-table + figure). **This is the falsifiable core** — the arithmetic is what could be + wrong; the GPU only executes it. +- **GPU-exec leg (COMPILED + SHIPPED, adapter-deferred):** the full + R16Uint-LUT → fragment `textureLoad` → R32Uint target → readback → + full-table-parity path compiles clean under wgpu 22 (WebGPU + WebGL2 via + `glow`; `clippy --features wgpu -D warnings` clean, fmt clean) and + **SKIPS-green** in this sandbox — measured: `libvulkan` loader present but + **0 ICDs** installed → `request_adapter()` returns `None`. It runs the real + 65536/65536 parity wherever a WebGPU/WebGL2 adapter exists (lavapipe CI, a + browser). Integer sampled texture + `textureLoad` + integer render target are + all WebGL2-core, so the one shader covers both backends. +- **KILL did not fire** (§Decode tiers c / `a2ui N2`): the bgz17 256²-u16 table + IS gatherable through a real in-scope wgpu texture, so the GPU LUT lane is not + abandoned — the harness capability is proven buildable. +- **HONEST CAVEAT:** the GPU-exec *execution* was NOT run on silicon here (no + adapter). "GPU-exec green" = COMPILES + SKIPS-cleanly + is the shipped WGSL, + NOT "65536 texels compared on a GPU in this session." The CPU-reference is the + leg that actually ran. Runtime-execution parity is the one piece that awaits an + adapter environment (the `a2ui N2` render-parity-headless-vs-browser bar). +- **Boundary kept clean:** no bgz17 dep in a2ui-paint (charter: no consumer + crate deps) — the 256² table is built deterministically with bgz17's table + STRUCTURE (symmetric u16, zero diagonal); this is a HARNESS-CAPABILITY probe, + not a bgz17 integration. Test-only `pollster` dev-dep for the async block. + +**Consequence:** §Decode tiers (c) wgpu + the wasm tier (b, same code) are +**structurally un-gated** — the shared harness they waited on is real and the +LUT-gather compiles + CPU-proves. The remaining deferral is narrow: run the +GPU-exec parity in an adapter environment (lavapipe CI or browser) to close the +`a2ui N2` render-parity bar on silicon. From 01f8f1bcbae761f8979a60cf2ba429bdcff3ebfb Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 22:37:57 +0000 Subject: [PATCH 2/5] docs(x265): address codex P2s on PROBE-GPU-LUT wave-3 verdict MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two corrections from codex review on ndarray #249, both on doc consistency: - §1 "wgpu in the workspace" receipt reconciled with the wave-3 verdict: the `#[cfg(test)]` PROBE-GPU-LUT probe now adds a compiled texture + bind-group + R16Uint→R32Uint textureLoad path (so "no textures/bind groups" no longer holds for the TEST surface), while the still-true negatives are kept explicit — the `webgl` cargo feature is still OFF (WebGL2 is a shader-SURFACE property, not a wired wasm backend), the path is adapter-untested, and the PRODUCTION render tier is unchanged. No two incompatible gate states remain in the doc. - Plan §Results consequence scoped to §Decode tiers (c) the wgpu harness ONLY. Tier (b) the wasm tier is a SEPARATE gate (CPU-native vs wasm32 replay determinism); this wave recorded no wasm result, so (b) stays gated until its own parity run. The earlier "(b/c) un-gated" was an overreach. Knowledge-doc guard test 117/117 green. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki --- .../pr-x12-h268-morton-wgpu-synergies.md | 2 +- .claude/plans/x265-sprite-replay-probe-v1.md | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md index 33261b1b..8f8aaa47 100644 --- a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md +++ b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md @@ -43,7 +43,7 @@ track (`pr-x12-x266-3dgs-spacetime-upscaling.md`). | **Morton 2bit×2bit primitives exist** — lance-graph `FacetTier::morton` (4⁴ nibble ancestry), symbiont `morton4`, perturbation-sim cascade keys; OGAR 3×4 canon pins tier-of-level = `>>2` shift [G] | FINDING (primitives); the CTU codec does NOT use them (see §3 row 1) | lance-graph facet/symbiont sources; OGAR `CLAUDE.md` §3×4 | | **Certificate-gated cascade** — splat3d `depth_cascade.rs`/`depth_cert.rs`: HEEL→HIP→TWIG→LEAF preselection with Reject/KeepCoarse/Refine/ProjectExact/RenderExact actions | FINDING — but it gates **render** work on decoded data, not decode work | `src/hpc/splat3d/depth_cascade.rs:1-65` | | **Deterministic phase generator** — helix `CurveRuler` stride-4-over-17 coprime walk (bit-exact integer, full-17 permutation tests) | FINDING (the generator leg of the pyramid) | lance-graph `crates/helix` | -| **wgpu in the workspace** — a2ui-paint only: **off-by-default** feature, constant-color quad pipeline, **no textures/bind groups**, wgpu's `webgl` cargo feature NOT enabled (WebGL2 is doc-comment-only), untested, repo has no CI. ndarray itself: **zero wgpu by design** ("no GPU, no wgpu", splat3d) | FINDING (negative) | a2ui-rs `a2ui-paint` manifest+src; ndarray `Cargo.lock` (0 matches), `src/hpc/splat3d/mod.rs:7-9` | +| **wgpu in the workspace** — a2ui-paint only: **off-by-default** feature; the PRODUCTION path is still a constant-color quad pipeline with no textures/bind groups. **Updated (wave 3, PROBE-GPU-LUT):** a `#[cfg(test)]` probe (`gpu_lut_probe.rs`) now adds a texture + bind-group + R16Uint→R32Uint `textureLoad` path that COMPILES under wgpu 22 — so "no textures/bind groups" no longer holds for the TEST surface. Still-true negatives: wgpu's `webgl` cargo feature is NOT enabled (the wasm32 WebGL2 backend is unwired; the probe's WebGL2 claim is a shader-SURFACE property — integer texture + `textureLoad` are GLES3-core — not a wired wasm backend), the path is **adapter-untested** (skips where no adapter), and the production render tier is unchanged. ndarray itself: **zero wgpu by design** ("no GPU, no wgpu", splat3d) | FINDING (negative, wave-3-amended) | a2ui-rs `a2ui-paint` manifest+src + `gpu_lut_probe.rs` (wave 3); ndarray `Cargo.lock` (0 matches), `src/hpc/splat3d/mod.rs:7-9` | | **Perturbation pyramid + two-algebra rule** — D-PHASE and D-WHP are operator-pinned **[H] hypotheses with named unrun probes** (PHASE-1, PERT-RHO, PYR-1; WHP-1..4), CANON-pin not CODED; losslessness fenced to *synthesis* (dither/anti-moiré grade) with quorum-certificate escalation | CONJECTURE [H], probe-gated | OGAR `docs/DISCOVERY-MAP.md:249-250`, `CLAUDE.md` fences; J2 kill condition | ## 2. The industry walls (from `pr-x12-h266-h267-standards-landscape.md`, sourced) diff --git a/.claude/plans/x265-sprite-replay-probe-v1.md b/.claude/plans/x265-sprite-replay-probe-v1.md index 819a29c2..51f296e1 100644 --- a/.claude/plans/x265-sprite-replay-probe-v1.md +++ b/.claude/plans/x265-sprite-replay-probe-v1.md @@ -171,8 +171,15 @@ ndarray `splat3d` both deliberately opt OUT of GPU; measured this session). STRUCTURE (symmetric u16, zero diagonal); this is a HARNESS-CAPABILITY probe, not a bgz17 integration. Test-only `pollster` dev-dep for the async block. -**Consequence:** §Decode tiers (c) wgpu + the wasm tier (b, same code) are -**structurally un-gated** — the shared harness they waited on is real and the -LUT-gather compiles + CPU-proves. The remaining deferral is narrow: run the -GPU-exec parity in an adapter environment (lavapipe CI or browser) to close the -`a2ui N2` render-parity bar on silicon. +**Consequence (scoped — corrected per codex P2 on ndarray #249):** only §Decode +tiers **(c) the wgpu harness** is structurally un-gated — the shared harness it +waited on is real and the LUT-gather compiles + CPU-proves. The remaining +deferral is narrow: run the GPU-exec parity in an adapter environment (lavapipe +CI or browser) to close the `a2ui N2` render-parity bar on silicon. + +**Tier (b) — the wasm tier — is NOT un-gated by this wave.** Its gate is a +distinct check: **CPU-native vs wasm32 replay-determinism** of the decoded +sprite states (plan §4). PROBE-GPU-LUT recorded only a CPU-reference run + an +adapter-skipped GPU leg — **no wasm result**. Tier (b) still requires its own +CPU-vs-wasm parity run before it can be called un-gated; PROBE-GPU-LUT does not +touch it. From 9619f2d7e71b97873dca4c0e3fccae26496a428e Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 22:41:40 +0000 Subject: [PATCH 3/5] docs(x265): scope PROBE-GPU-LUT WebGL2 claim to shader-compat (codex P2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the a2ui-rs code fix: the probe is HEADLESS (surface-less adapter), so its GPU execution validates on WebGPU + native/software GL (lavapipe); the WGSL is WebGL2-compatible (GLES3-core) but wgpu's WebGL backend needs a canvas-bound compatible_surface, so the wasm32 WebGL2 backend is out of scope for this headless probe. §1 receipt + Wave-3 table both scoped. Guard test 117/117 green. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki --- .claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md index 8f8aaa47..ad9a8c59 100644 --- a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md +++ b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md @@ -43,7 +43,7 @@ track (`pr-x12-x266-3dgs-spacetime-upscaling.md`). | **Morton 2bit×2bit primitives exist** — lance-graph `FacetTier::morton` (4⁴ nibble ancestry), symbiont `morton4`, perturbation-sim cascade keys; OGAR 3×4 canon pins tier-of-level = `>>2` shift [G] | FINDING (primitives); the CTU codec does NOT use them (see §3 row 1) | lance-graph facet/symbiont sources; OGAR `CLAUDE.md` §3×4 | | **Certificate-gated cascade** — splat3d `depth_cascade.rs`/`depth_cert.rs`: HEEL→HIP→TWIG→LEAF preselection with Reject/KeepCoarse/Refine/ProjectExact/RenderExact actions | FINDING — but it gates **render** work on decoded data, not decode work | `src/hpc/splat3d/depth_cascade.rs:1-65` | | **Deterministic phase generator** — helix `CurveRuler` stride-4-over-17 coprime walk (bit-exact integer, full-17 permutation tests) | FINDING (the generator leg of the pyramid) | lance-graph `crates/helix` | -| **wgpu in the workspace** — a2ui-paint only: **off-by-default** feature; the PRODUCTION path is still a constant-color quad pipeline with no textures/bind groups. **Updated (wave 3, PROBE-GPU-LUT):** a `#[cfg(test)]` probe (`gpu_lut_probe.rs`) now adds a texture + bind-group + R16Uint→R32Uint `textureLoad` path that COMPILES under wgpu 22 — so "no textures/bind groups" no longer holds for the TEST surface. Still-true negatives: wgpu's `webgl` cargo feature is NOT enabled (the wasm32 WebGL2 backend is unwired; the probe's WebGL2 claim is a shader-SURFACE property — integer texture + `textureLoad` are GLES3-core — not a wired wasm backend), the path is **adapter-untested** (skips where no adapter), and the production render tier is unchanged. ndarray itself: **zero wgpu by design** ("no GPU, no wgpu", splat3d) | FINDING (negative, wave-3-amended) | a2ui-rs `a2ui-paint` manifest+src + `gpu_lut_probe.rs` (wave 3); ndarray `Cargo.lock` (0 matches), `src/hpc/splat3d/mod.rs:7-9` | +| **wgpu in the workspace** — a2ui-paint only: **off-by-default** feature; the PRODUCTION path is still a constant-color quad pipeline with no textures/bind groups. **Updated (wave 3, PROBE-GPU-LUT):** a `#[cfg(test)]` probe (`gpu_lut_probe.rs`) now adds a texture + bind-group + R16Uint→R32Uint `textureLoad` path that COMPILES under wgpu 22 — so "no textures/bind groups" no longer holds for the TEST surface. Still-true negatives: wgpu's `webgl` cargo feature is NOT enabled (the wasm32 WebGL2 backend is unwired; the probe's WebGL2 claim is a shader-SURFACE property — integer texture + `textureLoad` are GLES3-core — not a wired wasm backend, and the HEADLESS probe cannot obtain a WebGL2 canvas adapter anyway: wgpu's WebGL backend requires a `compatible_surface` — codex P2), the path is **adapter-untested** (skips where no surface-less adapter), and the production render tier is unchanged. ndarray itself: **zero wgpu by design** ("no GPU, no wgpu", splat3d) | FINDING (negative, wave-3-amended) | a2ui-rs `a2ui-paint` manifest+src + `gpu_lut_probe.rs` (wave 3); ndarray `Cargo.lock` (0 matches), `src/hpc/splat3d/mod.rs:7-9` | | **Perturbation pyramid + two-algebra rule** — D-PHASE and D-WHP are operator-pinned **[H] hypotheses with named unrun probes** (PHASE-1, PERT-RHO, PYR-1; WHP-1..4), CANON-pin not CODED; losslessness fenced to *synthesis* (dither/anti-moiré grade) with quorum-certificate escalation | CONJECTURE [H], probe-gated | OGAR `docs/DISCOVERY-MAP.md:249-250`, `CLAUDE.md` fences; J2 kill condition | ## 2. The industry walls (from `pr-x12-h266-h267-standards-landscape.md`, sourced) @@ -143,7 +143,7 @@ harness is now confirmed real and the LUT-gather is proven buildable. | Probe | Verdict | Numbers | Consequence | |---|---|---|---| -| PROBE-GPU-LUT | HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred; KILL did not fire | CPU-ref: 65536/65536 gather == row-major index, symmetric + zero-diagonal, deterministic, 256² u16 = 128 KiB (the §10(i) figure). GPU-exec: full 256×256 R16Uint→R32Uint `textureLoad` parity path compiles clean under wgpu 22 (WebGPU + WebGL2 via glow) and SKIPS-green here (measured: libvulkan loader present, **0 ICDs** → no adapter). `clippy --features wgpu -D warnings` clean; fmt clean | The bgz17 256²-u16 palette-distance table IS gatherable through a real in-scope wgpu texture (R16Uint sampled, `textureLoad`, integer render target — all WebGL2-core), so the GPU LUT lane is **not** abandoned. Falsifiable core (the gather arithmetic) proven bit-exact; the GPU merely executes it, and does so wherever a WebGPU/WebGL2 adapter exists (lavapipe CI / browser). This structurally un-gates §Decode tiers (c) + the `a2ui N2` row: harness capability proven; only runtime-execution parity awaits an adapter environment. **CAVEAT (honesty):** the GPU-exec *execution* was NOT run in this sandbox (no adapter) — "GPU-exec green" means COMPILES + SKIPS-cleanly, not that 65536 texels were compared on silicon here; the CPU-reference is the leg that actually ran. No bgz17 dep (harness-capability probe; the 256² table is built deterministically with bgz17's table STRUCTURE, keeping the a2ui-paint crate boundary clean) | +| PROBE-GPU-LUT | HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred; KILL did not fire | CPU-ref: 65536/65536 gather == row-major index, symmetric + zero-diagonal, deterministic, 256² u16 = 128 KiB (the §10(i) figure). GPU-exec: full 256×256 R16Uint→R32Uint `textureLoad` parity path compiles clean under wgpu 22 (GL backend via glow builds) and SKIPS-green here (measured: libvulkan loader present, **0 ICDs** → no adapter). `clippy --features wgpu -D warnings` clean; fmt clean | The bgz17 256²-u16 palette-distance table IS gatherable through a real in-scope wgpu texture (R16Uint sampled, `textureLoad`, integer render target — all WebGL2-core), so the GPU LUT lane is **not** abandoned. Falsifiable core (the gather arithmetic) proven bit-exact; the GPU merely executes it. **Backend scope (codex P2, headless):** the probe requests a **surface-less** adapter, so its execution validates on **WebGPU** (native/browser) + native/software GL (lavapipe CI); the WGSL is WebGL2-**compatible** (GLES3-core), but wgpu's WebGL backend needs a canvas-bound `compatible_surface`, so the wasm32 WebGL2 backend is OUT OF SCOPE for this headless probe — "WebGL2" is a shader-surface property, not a validated execution backend here. This structurally un-gates §Decode tiers (c) + the `a2ui N2` row: harness capability proven; only runtime-execution parity awaits an adapter environment. **CAVEAT (honesty):** the GPU-exec *execution* was NOT run in this sandbox (no adapter) — "GPU-exec green" means COMPILES + SKIPS-cleanly, not that 65536 texels were compared on silicon here; the CPU-reference is the leg that actually ran. No bgz17 dep (harness-capability probe; the 256² table is built deterministically with bgz17's table STRUCTURE, keeping the a2ui-paint crate boundary clean) | ## 7. Comma closure — the replayable irrational (constants correction folded in) From 436101c13ac99b1f3aefa9d9d738b8c318778e0e Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 23:17:42 +0000 Subject: [PATCH 4/5] =?UTF-8?q?docs(x265):=20=C2=A75=20HEVC=20external=20a?= =?UTF-8?q?nchor=20RUN=20=E2=80=94=20x265=20over=20the=20=CF=86-spiral=20s?= =?UTF-8?q?cene?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plan §Results (2026-07-18 — HEVC external anchor): the §5 optional context is run + visual. x265 3.5 (medium, --psnr) over the 8-sprite φ-spiral scene (320×240 × 240): 578× vs raw Y4M, 1594.5 bits/frame, Global PSNR 60.79 dB, real I/P/B GOP. Reproducer: lance-graph crates/helix/examples/hevc_moving_scene.rs. Honest: x265's numbers on easy synthetic content (external anchor, not a gate); our-motion-vs-x265-MV bitrate study is the named follow-up. Guard test 117/117. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki --- .claude/plans/x265-sprite-replay-probe-v1.md | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.claude/plans/x265-sprite-replay-probe-v1.md b/.claude/plans/x265-sprite-replay-probe-v1.md index 51f296e1..c4c2e0b7 100644 --- a/.claude/plans/x265-sprite-replay-probe-v1.md +++ b/.claude/plans/x265-sprite-replay-probe-v1.md @@ -183,3 +183,34 @@ sprite states (plan §4). PROBE-GPU-LUT recorded only a CPU-reference run + an adapter-skipped GPU leg — **no wasm result**. Tier (b) still requires its own CPU-vs-wasm parity run before it can be called un-gated; PROBE-GPU-LUT does not touch it. + +## Results (2026-07-18 — HEVC external anchor, §5 optional context, RUN + VISUAL) + +The plan §5 optional anchor ("run actual x265 over the CPU raster sequence; +report bits/frame + PSNR") is now RUN — and made visual. + +- **Scene:** 8 gaussian sprites tracing φ-spiral (golden-angle hemisphere) + paths, alternating hemispheres by index parity — the sprite-replay scene + (NUM_SPRITES=8, TOTAL=240) rendered to pixels. 320×240, 240 frames, a faint + panning background so P/B-frames have global motion to track. +- **Encoder:** x265 3.5, preset medium, `--psnr`. x265 ran its OWN I/P/B GOP + over our moving scene (the arc's "replay x265's GOP grammar" made literal): + 1 I, 56 P, 183 B, up to 5 consecutive B-frames. +- **Numbers:** raw Y4M 27,649,483 B → HEVC 47,836 B = **578×**; **1594.5 + bits/frame** (199 B/frame); Global **PSNR 60.79 dB** (Y 47.3–49.2 by + slice-type; chroma neutral). Encode 296 fps. +- **Roundtrip visual:** frames decoded back OUT of the `.265` bitstream (ffmpeg) + into a 5-frame motion montage + animated GIF — the sprites visibly at + different positions/sizes across time. +- **Reproducer:** `lance-graph crates/helix/examples/hevc_moving_scene.rs` + (std-only, deterministic SplitMix64) → Y4M; `x265 --input scene.y4m --y4m + --preset medium --psnr -o scene.265`; `ffmpeg -i scene.265 … montage/gif`. + +**Reading (honest):** this is an EXTERNAL ANCHOR (plan §5, explicitly "not a +gate"), NOT a claim about our codec. The 578× / 60.79 dB are **x265's** numbers +on a smooth-gaussian synthetic scene that compresses easily — they anchor "what +a stock HEVC encoder does with this content," not "our primitives beat x265." +The arc's own sprite-replay motion coding (E-SPRITE-IPB-HELIX-1: one Signed360 +code per sprite per P-frame) is the thing being contextualized; the +bitrate-comparison study (our object-level motion codes vs x265's per-block MV +field on the SAME scene) is a NAMED follow-up, not done here. From 101fee4bd87f45e762dfbb01a64af5a98cf8212a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 18 Jul 2026 23:27:28 +0000 Subject: [PATCH 5/5] =?UTF-8?q?docs(x265):=20CodeRabbit=20#738=20fixes=20?= =?UTF-8?q?=E2=80=94=20corrected=20HEVC=20numbers=20+=20honest=20wgpu=20sc?= =?UTF-8?q?oping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HEVC anchor re-run after the faithful-scene fix (canonical draw order + signed-z hemisphere): 641×, 1437 bits/frame, PSNR 60.94 dB (was 578×/60.79 — pre-fix scene had inert `sign`). Plan §Results + Wave-3 note updated. - Wave-3 table: "IS gatherable through a real wgpu texture" → "is representable and COMPILES through the wgpu texture path; runtime gather deferred to GPU execution". Guard test 117/117 green. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki --- .claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md | 2 +- .claude/plans/x265-sprite-replay-probe-v1.md | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md index ad9a8c59..a551c597 100644 --- a/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md +++ b/.claude/knowledge/pr-x12-h268-morton-wgpu-synergies.md @@ -143,7 +143,7 @@ harness is now confirmed real and the LUT-gather is proven buildable. | Probe | Verdict | Numbers | Consequence | |---|---|---|---| -| PROBE-GPU-LUT | HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred; KILL did not fire | CPU-ref: 65536/65536 gather == row-major index, symmetric + zero-diagonal, deterministic, 256² u16 = 128 KiB (the §10(i) figure). GPU-exec: full 256×256 R16Uint→R32Uint `textureLoad` parity path compiles clean under wgpu 22 (GL backend via glow builds) and SKIPS-green here (measured: libvulkan loader present, **0 ICDs** → no adapter). `clippy --features wgpu -D warnings` clean; fmt clean | The bgz17 256²-u16 palette-distance table IS gatherable through a real in-scope wgpu texture (R16Uint sampled, `textureLoad`, integer render target — all WebGL2-core), so the GPU LUT lane is **not** abandoned. Falsifiable core (the gather arithmetic) proven bit-exact; the GPU merely executes it. **Backend scope (codex P2, headless):** the probe requests a **surface-less** adapter, so its execution validates on **WebGPU** (native/browser) + native/software GL (lavapipe CI); the WGSL is WebGL2-**compatible** (GLES3-core), but wgpu's WebGL backend needs a canvas-bound `compatible_surface`, so the wasm32 WebGL2 backend is OUT OF SCOPE for this headless probe — "WebGL2" is a shader-surface property, not a validated execution backend here. This structurally un-gates §Decode tiers (c) + the `a2ui N2` row: harness capability proven; only runtime-execution parity awaits an adapter environment. **CAVEAT (honesty):** the GPU-exec *execution* was NOT run in this sandbox (no adapter) — "GPU-exec green" means COMPILES + SKIPS-cleanly, not that 65536 texels were compared on silicon here; the CPU-reference is the leg that actually ran. No bgz17 dep (harness-capability probe; the 256² table is built deterministically with bgz17's table STRUCTURE, keeping the a2ui-paint crate boundary clean) | +| PROBE-GPU-LUT | HARNESS-REAL / CPU-primitive GREEN / GPU-exec COMPILED+SHIPPED, execution-parity adapter-deferred; KILL did not fire | CPU-ref: 65536/65536 gather == row-major index, symmetric + zero-diagonal, deterministic, 256² u16 = 128 KiB (the §10(i) figure). GPU-exec: full 256×256 R16Uint→R32Uint `textureLoad` parity path compiles clean under wgpu 22 (GL backend via glow builds) and SKIPS-green here (measured: libvulkan loader present, **0 ICDs** → no adapter). `clippy --features wgpu -D warnings` clean; fmt clean | The bgz17 256²-u16 palette-distance table is **representable and COMPILES** through a real in-scope wgpu texture path (R16Uint sampled, `textureLoad`, integer render target — all WebGL2-core), so the GPU LUT lane is **not** abandoned; runtime gatherability + silicon parity stay deferred until actual GPU execution. Falsifiable core (the gather arithmetic) proven bit-exact; the GPU merely executes it. **Backend scope (codex P2, headless):** the probe requests a **surface-less** adapter, so its execution validates on **WebGPU** (native/browser) + native/software GL (lavapipe CI); the WGSL is WebGL2-**compatible** (GLES3-core), but wgpu's WebGL backend needs a canvas-bound `compatible_surface`, so the wasm32 WebGL2 backend is OUT OF SCOPE for this headless probe — "WebGL2" is a shader-surface property, not a validated execution backend here. This structurally un-gates §Decode tiers (c) + the `a2ui N2` row: harness capability proven; only runtime-execution parity awaits an adapter environment. **CAVEAT (honesty):** the GPU-exec *execution* was NOT run in this sandbox (no adapter) — "GPU-exec green" means COMPILES + SKIPS-cleanly, not that 65536 texels were compared on silicon here; the CPU-reference is the leg that actually ran. No bgz17 dep (harness-capability probe; the 256² table is built deterministically with bgz17's table STRUCTURE, keeping the a2ui-paint crate boundary clean) | ## 7. Comma closure — the replayable irrational (constants correction folded in) diff --git a/.claude/plans/x265-sprite-replay-probe-v1.md b/.claude/plans/x265-sprite-replay-probe-v1.md index c4c2e0b7..00411972 100644 --- a/.claude/plans/x265-sprite-replay-probe-v1.md +++ b/.claude/plans/x265-sprite-replay-probe-v1.md @@ -196,9 +196,12 @@ report bits/frame + PSNR") is now RUN — and made visual. - **Encoder:** x265 3.5, preset medium, `--psnr`. x265 ran its OWN I/P/B GOP over our moving scene (the arc's "replay x265's GOP grammar" made literal): 1 I, 56 P, 183 B, up to 5 consecutive B-frames. -- **Numbers:** raw Y4M 27,649,483 B → HEVC 47,836 B = **578×**; **1594.5 - bits/frame** (199 B/frame); Global **PSNR 60.79 dB** (Y 47.3–49.2 by - slice-type; chroma neutral). Encode 296 fps. +- **Numbers:** raw Y4M 27,649,483 B → HEVC 43,115 B = **641×**; **1437.2 + bits/frame** (180 B/frame); Global **PSNR 60.94 dB** (Y 47.5–52.0 by + slice-type; chroma neutral). Encode 316 fps. (Re-run after the CodeRabbit #738 + fix: the reproducer now uses `sprite_replay`'s canonical draw sequence + + signed-z hemisphere projection; the earlier 578×/60.79 dB figures were the + pre-fix scene where `sign` was inert.) - **Roundtrip visual:** frames decoded back OUT of the `.265` bitstream (ffmpeg) into a 5-frame motion montage + animated GIF — the sprites visibly at different positions/sizes across time.