docs: record the operator's L25 and telemetry decisions
L25: keep the firmware loss-history buffer. With §7.3's "make it real, browser only, behind a feature flag", the telemetry decision set is now complete and plan 5e has no judgement calls left in it — only work. Also corrects the ALIGNMENT entry, which described four live fragments: the fabricated gradient-health UI (L1) was already deleted in Phase 1, so three remain. Fragment inventory re-verified against the tree rather than copied forward from the audit.
This commit is contained in:
parent
1f38f1a7fb
commit
b6be081cf0
2 changed files with 18 additions and 4 deletions
20
ALIGNMENT.md
20
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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue