diff --git a/ALIGNMENT.md b/ALIGNMENT.md index f5ee140..3aa8685 100644 --- a/ALIGNMENT.md +++ b/ALIGNMENT.md @@ -58,11 +58,25 @@ The clean-slate rewrite (2026-04-29) consolidated everything into one C++20 code **Rough cost.** ~A day for a host-side blocks-per-second benchmark + a per-variant size report in `build-firmware.sh` (plan §6.5f). -### 7. Training-health telemetry: one product decision fragmented into four half-features (2026-07-21) +### 7. Training-health telemetry: decided, not yet built (2026-07-21) -**What.** A 16 KB loss-history buffer in every firmware MLP that nothing reads; a WASM worker faking a 1-element loss history; decorative gradient-health UI; and a real `get_layer_stats` API plumbed end-to-end and consumed by nobody. +**What.** Four fragments of one feature. Fragment 3 (decorative gradient-health UI) was deleted in +Phase 1. The other three stand: a 16 KB loss-history buffer in every firmware MLP that nothing +reads (`nisps/ml/mlp.hpp`); a WASM worker faking a **1-element** loss history +(`manifold/src/engine/wasm-worker.ts:310`, `new Float32Array([loss])`); and a real `layer_stats` / +`nisps_ml_get_layer_stats` API plumbed end-to-end and consumed by nobody. -**Why it blocks the mission.** "Is the network learning?" is a core research affordance — currently it *looks* answered while being fake. Decide feature-or-delete once (plan §7.3) and collapse all four limbs accordingly. +**Decisions are now complete** (operator, §7.3 + L25): telemetry becomes **real, browser-only, +behind a feature flag**; the fakes go; and the **firmware buffer stays** — it is the on-device +record the hardware editor (defect 4) will want, and it costs flash we demonstrably have (16% RAM +on the largest variant). So the remaining work is one coherent job, not a judgement call: plumb +`loss_history` through the C API (`Drawers.tsx:263` already marks the gap), replace the worker's +fake with it, and put the display plus `get_layer_stats` behind the advanced-mode flag. + +**Why it blocks the mission.** "Is the network learning?" is a core research affordance, and today +it *looks* answered while being fabricated — worse than absent. + +**Rough cost.** ~A day, spec-light: plan §6.5e, no longer gated on anything. ### 8. RMSProp still deferred from `nisps/ml/` (2026-04-29; reaffirmed 2026-07-21) diff --git a/docs/specs/plans/simplification-plan.md b/docs/specs/plans/simplification-plan.md index e76b458..ae24e2e 100644 --- a/docs/specs/plans/simplification-plan.md +++ b/docs/specs/plans/simplification-plan.md @@ -119,7 +119,7 @@ One cut, no dual path. `firmware/useq-celium/` already proves the PIO + arduino- - **5b Browser mode coverage honesty (A2).** Add an audio-topology notion (generator / audio-in-fx / event-only / analysis) so Manifold stops cataloguing 4 modes that structurally cannot run; wire mic input for the audio-in class (absorbs old ALIGNMENT #1); event-only modes need transport/MIDI-out UI, or explicit "hardware-only" labelling. - **5c Curated/advanced split (A3, A7).** Product model first (§7.6): what is a "curated preset" — schema + backend preset + input map + trained net? Then: instrument picker rendered from the already-plumbed `ctx.modes`/`setModeId` (engine reshape-on-switch already works); per-drawer depth levels as the disclosure mechanism rather than one global boolean; `backends/presets.ts` + schemas seed the data model (add the missing `cv` backend to presets — small bug from A3's verification). - **5d Hardware editor (A4, S14).** The repo already contains the right discipline: `useq-celium`'s C-header wire-protocol truth + TS mirror + parity test. Apply it to a MEMLNaut USB-serial protocol; give firmware an actual command surface + on-device persistence; settings/training payloads derive from schema codegen, not hand-defined tables. `InputChain`/`OutputChain` firmware wiring (L29) lands here or gets its comment softened now. -- **5e Training-health telemetry — one decision, four fragments (critic gap 5; §7.3).** Either it's a feature (wire the already-plumbed `get_layer_stats` + a loss-history ABI to the advanced mode, delete the fakes) or it isn't (delete the 16 KB buffer L25, the fabricated gradient UI L1, and old ALIGNMENT #2). Decide once; stop maintaining all four limbs. +- **5e Training-health telemetry (critic gap 5; §7.3) — DECIDED, unblocked.** It *is* a feature, but browser-only and behind a feature flag. L1's fabricated gradient UI was deleted in Phase 1. **L25 resolved: keep the firmware loss-history buffer** (operator) — it is the on-device record 5d's hardware editor will read, and the RAM is demonstrably there. Remaining: add a `loss_history` C-API entry across the 5-layer registration chain, replace `wasm-worker.ts:310`'s 1-element fake with it, and surface it plus the already-plumbed `get_layer_stats` behind the advanced-mode flag. No judgement calls left in this item. - **5f Performance measurement (critic gap 4).** A host-side blocks-per-second benchmark for `engine_process_block` (native + WASM), and `build-firmware.sh` emitting a per-variant flash/RAM size report — makes the headline constraint enforceable instead of vibes. ## §7 Operator decisions needed