From 9cea959a526ddc67317be373a73d59e7d2e3b1bd Mon Sep 17 00:00:00 2001 From: Z User Date: Thu, 5 Nov 2026 08:44:59 +0000 Subject: [PATCH] =?UTF-8?q?v7.13.1=20=E2=80=94=20Beat=20Matrix=20endpoint?= =?UTF-8?q?=20fix:=20full=2016x10=20grid,=20no=20phantom=20dot=20past=20th?= =?UTF-8?q?e=20wall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/custom.db | Bin 307200 -> 307200 bytes src/lib/ava/embedded-presets.ts | 16 ++++++++++++---- src/lib/release-notes.ts | 10 ++++++++++ src/lib/version.ts | 26 +++++++++++++++++++++++++- worklog.md | 28 ++++++++++++++++++++++++++++ 5 files changed, 75 insertions(+), 5 deletions(-) diff --git a/db/custom.db b/db/custom.db index fc48a15d615c5af6f999c5ae9d8fafcdf4cf9534..84df7b82e19f236789cd414c1084568eea3df616 100755 GIT binary patch delta 10607 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 RtUUKGv<+AB)iZ4M{{!!trGEeb delta 10162 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 gl+w*(3v-8|1IeGwa70T +// 7.13.1 re-seeds the library so every visitor gets the fixed +// Beat Matrix. // 7.13 — one build, every feature: the parallel development lines are // merged. This tree now carries BOTH the community OVE-Directory // (v7.11 here) AND the parallel line's additions — the spectrum @@ -407,4 +431,4 @@ export const APP_NAME = 'Open Visualization Engine' export const APP_SHORT = 'OVE' -export const APP_VERSION = '7.13' +export const APP_VERSION = '7.13.1' diff --git a/worklog.md b/worklog.md index a9235af..2cdc63b 100755 --- a/worklog.md +++ b/worklog.md @@ -2328,3 +2328,31 @@ E2E (agent-browser + pixel measurement + VLM, ALL PASS): Stage Summary: - v7.13 shipped: the parallel line is merged — the spectrum 16 kHz cap, the screen wake lock, the respectful Demo button, the one-click Save with auto-naming + rename dialog, the AVS-style background movement family (bgrot/bgx/bgy/bgzoom) and the eleventh Zai-Magic preset "osc-rotations" all run in the same build as the community OVE-Directory, with one clean version timeline (the parallel wake-lock release folded in as 7.10.2). Only three files needed hand-merging; every engine-side change is byte-identical to its validated original. + +--- +Task ID: 41 +Agent: main (Z.ai Code) +Task: v7.13.1 (user report): in Zai-Magic "Beat Matrix" the rightmost vertical line of dots sat offset +1 upwards -- its bottom dot did not line up with the other columns, and its top dot spilled over onto the next section to the right. Diagnose, explain, fix. + +DIAGNOSIS (why the right column was short and a phantom dot spilled): +- The engine's point position i spans 0..1 INCLUSIVE (classic AVS Superscope convention; engine.ts: i = k/(n-1)). Beat Matrix's grid math assumed exclusive i = k/n: col = floor(i * cols) sends the LAST point (i = 1 exactly) to col 16 -- one column past the 16-column wall (x = 0.986/aspect vs the wall edge 0.87/aspect) at row 0 (top), reading getspec(1.0); and column 15 was left with only 9 dots (rows 0-8, no bottom: its lowest dot sat at y = -0.62 while every other column reaches y = -0.81). Verified headlessly before the fix: col 15 = 9 dots rows 0-8, col 16 = 1 dot, bottom-row y spread col 14 vs 15 = 0.19 script units. +- Sweep of all other floor(i*M) uses in the library (62 occurrences): every other one is benign -- angular presets close their loop (bar = bars lands exactly on bar 0's angle: seg*tau/segs with seg = segs = 2pi = 0), Aurora Veil's phantom lands off-screen (x = 1.19 > 1), the megabuf particle presets (Bass Bloom, Supernova) draw their phantom slot at alpha 0 (uninitialized megabuf reads 0), Strobe Lattice/Tunnel Vision/Prism Chandelier hide one endpoint dot in rotating/mirrored chaos, and the converted Winamp classics rendered identically under original AVS (which also uses inclusive i) -- their authors saw and accepted exactly this behavior. Beat Matrix was the only hand-authored ALIGNED grid where the defect is obvious, so it was the only one that needed the fix. + +Work Log: +- embedded-presets.ts Beat Matrix [point]: the grid mapping now goes through CELL CENTERS -- cell = i * (cols * rows - 1) + 0.5, col = floor(cell / rows), row = floor(cell - col * rows). Because i = k/(n-1) over n = cols*rows points, cell = k + 0.5 exactly (up to 1-ulp dust), so every floor() sits half a cell away from an integer boundary: the endpoint can never spill and float dust can never shuffle a dot into a neighboring cell. getspec/x/y/hue all read col/row as before (col 0..15, row 0..9; the last point now lands at col 15 row 9, the author's original intent under i = k/n). A 6-line comment in the script documents the why. +- EMBEDDED_SEED_VERSION 7.12 -> 7.13.1 (library re-seed replaces the DB's Beat Matrix; verified in SQLite: seed = 7.13.1, 106 presets, fixed content present, old mapping gone). +- version.ts 7.13.1 + history entry; release-notes.ts 7.13.1 "Beat Matrix grid fixed" (fixed, first-person voice). + +HEADLESS VALIDATION (/home/z/tmp-validate/beatmatrix/validate.mts, ALL PASS — REAL parser/compiler, not a re-implementation): +- Regression guard: all 101 embedded presets still compile. +- The fixed Beat Matrix [point] program executed over all 160 points with the engine's exact i = k/(n-1): 160/160 cells occupied, ZERO duplicates, max col 15, max row 9, bottom-right cell (15,9) present, all 16 columns carry their full 10 rows, 16 distinct x symmetric about 0, 10 distinct y rows aligned. + +BROWSER E2E (agent-browser + 8-frame max-brightness composite + VLM, ALL PASS): +- Fresh load: title "OVE -- Open Visualization Engine (v7.13.1)"; /api/presets re-seeded on the version gate; Beat Matrix loads (PTS 160 = 16x10) and plays on the demo track (FPS 57-60, BPM 133.5 locked). +- Pixel lattice analysis of an 8-frame composite (captures the treble moments when the high-band columns light): exactly 16 dot columns detected, even 38-39 px gaps; the BOTTOM dot of every one of the 16 columns sits at the SAME pixel row (y = 619, spread 0 px) -- the row-9 position that only exists under the fix (the old code's col-15 lowest dot sat ~80 px higher). +- Phantom-dot check: the old spill position (x ~722, top row) shows ZERO bright pixels across the composite (x 710-750 all 0); the only brightness right of the wall is column 15's own glow decaying monotonically to nothing by x = 710 (175 -> 45 -> 0 bright-pixel counts), i.e. additive-blend glow, not a dot. The fullscreen-overlay icon (x >= 757) is outside the lattice zone. +- VLM on the composite: "16 columns"; bottom row fully lit across all 16 columns at the same height (clean straight bottom edge); no stray dot right of the rightmost column; no alignment defects. +- What's New dialog: 7.13.1 "Beat Matrix grid fixed" first with CURRENT badge; drift guard silent (0 console errors / 0 warnings across the session); dev.log clean (200s only). Test-browser localStorage cleared afterwards. + +Stage Summary: +- v7.13.1 shipped: Beat Matrix's wall is whole -- every column carries its full 10 dots, the bottom edge is straight across all 16 columns, and the phantom dot that spilled past the right edge is gone. The fix lives in the preset's grid math (cell-center mapping, immune to the inclusive-endpoint and float dust alike); the engine's AVS-correct i convention is untouched, and the library re-seed delivers the fixed preset to every visitor.