| Age | Commit message (Expand) | Author |
| 8 hours | fix(src/platform): code review cleanup | skal |
| 8 hours | chore(src/gpu): remove stale cnn_v1/v2 artifacts and dead comments | skal |
| 9 hours | feat(cnn_v3): upgrade architecture to enc_channels=[8,16] | skal |
| 30 hours | feat(cnn_v3): 3×3 dilated bottleneck + Sobel loss + FiLM warmup + architectu... | skal |
| 2 days | fix(fft): make bit_reverse_permute static, remove from public API and tests | skal |
| 2 days | fix(fft): replace iterative twiddle with direct cosf/sinf, add tests A-E | skal |
| 3 days | test(fft): re-enable DCT tests, document twiddle accumulation bug | skal |
| 3 days | feat(gbuffer): wire_dag() + find_downstream_output() for temporal feedback | skal |
| 3 days | feat(cnn_v3): GBufferEffect temporal feedback via post_render() | skal |
| 4 days | feat(shaders): add ray_sphere snippet, use in gbuf_raster impostor | skal |
| 4 days | refactor(shaders): extract oct-normal encode/decode into math/normal snippet | skal |
| 4 days | feat(cnn_v3): GBufDeferredEffect — simple deferred render (albedo * shadow) | skal |
| 4 days | feat(cnn_v3): GBufferEffect Pass 2 — SDF shadow raymarching | skal |
| 4 days | feat(cnn_v3): add G-buffer visualizer + web sample loader (Phase 7) | skal |
| 4 days | feat(cnn_v3): wire trained weights into CNNv3Effect + add timeline test sequence | skal |
| 5 days | refactor(cnn_v3): code review — comments, simplifications, test fix | skal |
| 5 days | feat(cnn_v3): Phase 5 complete — parity validation passing (36/36 tests) | skal |
| 5 days | feat(cnn_v3): Phase 4 complete — CNNv3Effect C++ + FiLM uniform upload | skal |
| 5 days | feat(cnn_v3): Phase 3 complete — WGSL U-Net inference shaders | skal |
| 5 days | make the heptagon effect more interesting | skal |
| 6 days | feat(cnn_v3): Phase 1 complete - GBufferEffect integrated + HOWTO playbook | skal |
| 6 days | feat(cnn_v3): G-buffer phase 1 + training infrastructure | skal |
| 7 days | chore: remove broken seeking test, demote CNN v2 quant to future CNN v3 | skal |
| 14 days | fix(win): update wgpu-native to v27, unify Windows/macOS API paths | skal |
| 2026-03-11 | fix(headless): add missing sampler/texture stubs to gpu_headless.cc | skal |
| 2026-03-11 | fix(test_3d): correct projection matrix m[5] assertion sign | skal |
| 2026-03-11 | factorize render_ntsc() | skal |
| 2026-03-10 | fix(effects): particle sync and heptagon SDF bugs | skal |
| 2026-03-10 | fix(particles): release compute and render pass encoders | skal |
| 2026-03-10 | change dither_c64() signature to take 'dimension' directly | skal |
| 2026-03-10 | ntsc: factor common code into snippet; add RGB and YIQ input variants | skal |
| 2026-03-10 | rotating_cube: use VSOut, and store to yiq | skal |
| 2026-03-10 | fix: use ShaderComposer in RotatingCube; add rule to CODING_STYLE | skal |
| 2026-03-10 | style: require 2-line header comment in all .wgsl files | skal |
| 2026-03-09 | NTSC: use 6-taps filtering instead of 12-tap | skal |
| 2026-03-09 | refactor: mv get_border_col() to color_c64.wgsl as get_border_c64() | skal |
| 2026-03-09 | feat: register math/color_c64 snippet in ShaderComposer | skal |
| 2026-03-09 | refactor: extract YIQ and C64 dither to common WGSL shaders | skal |
| 2026-03-09 | add dithering | skal |
| 2026-03-08 | ntsc effect for real | skal |
| 2026-03-08 | feat: extend debug_print with full ASCII and debug_str() | skal |
| 2026-03-08 | fix: negate Y in perspective() to correct rasterized 3D orientation | skal |
| 2026-03-08 | fix: register debug/debug_print snippet in ShaderComposer | skal |
| 2026-03-08 | feat: add WGSL debug_f32() snippet with C64 8x8 font | skal |
| 2026-03-08 | fix: transpose matrices on GPU upload (row-major → column-major) | skal |
| 2026-03-08 | feat: new clouds | skal |
| 2026-03-08 | tweak: scene2.wgsl visual adjustments | skal |
| 2026-03-08 | feat: WGSL asset load-from-disk in dev mode | skal |
| 2026-03-08 | fix: Update tests to use new asset manifest | skal |
| 2026-03-08 | fix: Resolve compile error in GetAssetType | skal |