diff --git a/ALIGNMENT.md b/ALIGNMENT.md index bca5842..342cd6f 100644 --- a/ALIGNMENT.md +++ b/ALIGNMENT.md @@ -50,7 +50,7 @@ The clean-slate rewrite (2026-04-29) consolidated everything into one C++20 code **Why it blocks the mission.** The registries are dual-truth bugs waiting to fire (one already did: the selftest table). Stale specs are agent-confusing surface area. -**Rough cost.** Plan phase 3 (~2–3 days, codegen takes ownership) plus the docs disposition pass (§8). Behaviour bugs found en route (dataset-cap divergence 100 vs 128 + OOB read, VCV 2-D input truncation, VCV audio-thread race + JSON) are plan §3. +**Rough cost.** Plan phase 3 (~2–3 days, codegen takes ownership) plus the docs disposition pass (§8). The behaviour bugs found en route (dataset-cap divergence, VCV 2-D input truncation, VCV audio-thread race and JSON) were fixed in phase 2 on 2026-07-21. ### 6. No performance measurement despite a performance-defined mission (2026-07-21) diff --git a/docs/specs/plans/simplification-plan.md b/docs/specs/plans/simplification-plan.md index 9e0d179..fb92785 100644 --- a/docs/specs/plans/simplification-plan.md +++ b/docs/specs/plans/simplification-plan.md @@ -48,6 +48,19 @@ All verifier-checked deletions; protected exceptions noted. Rough net effect: th ## §3 Phase 2 — Behaviour bugs (~2 days) +**BURNED DOWN 2026-07-21.** All nine landed with regression tests where testable. Two deviations +from the text below, both deliberate: **L35** was resolved by DELETING the OSC full-state bridge +rather than moving its JSON to the worker — reading the current transport showed both directions +have zero consumers (manifold's osc-client.ts never sends `/nisps/state`|`/nisps/weights` and +bridge.ts drops them), so relocating heap-heavy work to serve nobody was the wrong shape; +`dataToJson`/`dataFromJson` are untouched and still serve Rack patch save/load off the audio +thread. **S35** required extending `nisps_ml_describe` from a 6-int to a 7-int wire format, which +forced matching buffer-size fixes in two call sites outside the finding's scope +(`wasm-worker.ts`, `parity_wasm.mjs`) that would otherwise have overflowed the WASM heap by 4 +bytes on every call. Also fixed en route: `manifold/package.json`'s test script listed test files +explicitly, so new unit tests were silently not run — now a glob. + + - **S35** Dual example store: name `kDefaultMaxExamples = 128` once in nisps, expose via `nisps_ml_describe`, align the TS mirror (currently 100) — fixes `train()`/`trainAsync()` diverging past 100 examples and the latent OOB sample-weight read. - **S10** VCV bridged mode truncates inputs to 2-D: `EngineApi.inputVector()` returns the spine's full N-dim raw vector; VcvBackend tracks/dead-zones the full length. - **L34/L35** VCV plugin RT-safety: worker deep-copies example vectors into staging before flagging; move full-state JSON off Rack's audio thread onto the existing worker (reuse the staged-weights pattern).