memlnaut-nisps/manifold
monkey-w1n5t0n 87daac4f0d refactor(manifold): extract BaseBackend mirroring the input layer's BaseSource
Phase 3 (L17). The midi/osc/vcv transports each carried their own copy of the
status plumbing, throttle gate and lastSent management; the inputs layer already
had this factored out as BaseSource, so BaseBackend mirrors its shape rather
than inventing a second convention.

AUDIT CORRECTION: L17 says "all four" backends duplicate lastSent. Only three
do. The uSEQ CV backend has a genuinely different frame-level dead-zone (an
Int32Array over 14 channels plus gate bits) and no per-output lastSent, so it
takes the status half only — forcing it into the shared per-output path would
have needed a special case, and a base class with a per-subclass escape hatch is
worse than three backends sharing one. Also: BaseSource itself has no throttle
or lastSent (it is status + action plumbing only), so the mirror is partial by
nature; the throttle/lastSent half is the duplication the backends actually had.

Three internal representation changes, none observable: the MIDI backend's
lastSent moves Int16Array -> Float32Array (stored values are integers -1..127,
exact in f32, so every dead-zone comparison is bit-identical); the CV backend
now inherits a setContext that also allocates a per-output buffer it never reads
(cold path, no effect); and onStatusChange's unsubscribe returns void rather
than Set.delete's boolean (the declared type was already `() => void` and no
caller used it).

Phase 2's fix to vcv-backend.ts — tracking and dead-zoning the full N-dim input
vector rather than 2 — is preserved.

Gates: typecheck clean, 17/17 unit tests.
2026-07-21 14:02:48 +02:00
..
osc-bridge refactor(manifold): delete the OSC bridge twin and dead protocol legs 2026-07-21 12:49:25 +02:00
public refactor(codegen): codegen owns mode identity, per-mode schemas and net dims 2026-07-21 14:02:23 +02:00
src refactor(manifold): extract BaseBackend mirroring the input layer's BaseSource 2026-07-21 14:02:48 +02:00
tests fix(manifold): full-width input vector, dropped switches, MIDI churn, re-subscribe churn 2026-07-21 13:22:38 +02:00
.gitignore feat(manifold): dock restructure, settings, backends, shared-core feedback, particle stage 2026-06-28 04:14:30 +02:00
index.html feat(manifold): add convertible React front-end + simplify console chrome 2026-06-28 03:28:45 +02:00
ONBOARDING.md ci: restore verification — reachable submodule pin, codegen + WASM freshness gates 2026-07-21 11:57:32 +02:00
package.json fix(manifold): full-width input vector, dropped switches, MIDI churn, re-subscribe churn 2026-07-21 13:22:38 +02:00
playwright.config.ts feat(manifold): add convertible React front-end + simplify console chrome 2026-06-28 03:28:45 +02:00
tsconfig.json feat(manifold,firmware): restore uSEQ CV/gate as an Outputs backend 2026-06-28 22:30:54 +02:00
vite.config.ts feat(manifold): add convertible React front-end + simplify console chrome 2026-06-28 03:28:45 +02:00