+
MEMLNaut Playground
+
+ Interactive ML control of audio. SolidJS scaffold — modes coming online in stream 9.
+
+
+ This is a fresh scaffold. Primitives, stores, ML, WASM, and audio engines are added in subsequent commits.
+
+
+ );
+};
+
+export default App;
diff --git a/playground/src/debug/probe.ts b/playground/src/debug/probe.ts
new file mode 100644
index 0000000..f241afc
--- /dev/null
+++ b/playground/src/debug/probe.ts
@@ -0,0 +1,118 @@
+/**
+ * Debug probe: window.__nisps
+ *
+ * Stream 8 (this stream) installs a stub that returns placeholder values.
+ * Stream 10 wires real ML calls. Keeping the install path stable here means
+ * Playwright tests can rely on `window.__nisps` existing from page load even
+ * before the ML engine boots.
+ *
+ * All methods MUST be synchronous (or return immediately-resolved promises).
+ * The probe deliberately bypasses Solid reactivity so tests get deterministic,
+ * imperative semantics.
+ */
+
+export interface DebugProbe {
+ /** Current 126-element output vector (Float32Array). */
+ getOutputs(): Float32Array;
+ /** Last training loss, or null if no training has occurred. */
+ getLoss(): number | null;
+ /** Flat weight array (~13K floats once wired). */
+ getWeights(): Float32Array;
+ /** Number of training examples currently in the dataset. */
+ getExampleCount(): number;
+ /** Set joystick X/Y in [0,1] and run inference. */
+ setInputs(x: number, y: number): void;
+ /** Trigger thumbs-up RL feedback (train + decay noise). */
+ thumbsUp(): void;
+ /** Trigger thumbs-down RL feedback (move weights + grow noise). */
+ thumbsDown(): void;
+ /** Synchronous training; returns final loss. */
+ train(): number;
+ /** Async training; returns Promise