memlnaut-nisps/manifold
monkey-w1n5t0n 9490e20a7a feat(ml)!: P3 core — geometric dislike in nisps/, jolt/OU + geo ABI
Geometric dislike (rl-feedback-design §2.1/§4; upstream InterfaceRL @
0a541cc ported verbatim, constants included):

- nisps/ml/replay.hpp: ReplayView over storage-owned buffers — deepen-or-
  store negatives (dedup 0.05, clamp -16), k-NN positive centroid with
  deterministic index tie-break + fixed accumulation order, proportional
  decay (0.0025*max(|r|,1)) + eviction, order-preserving compaction.
- nisps/ml/geo_push.hpp: push-away target (pushStep clamp(|avgNeg|,.25,1)
  *0.5, taper /(1+len), useRandom on len<=1e-4 via nisps::Rng — the single
  deliberate divergence from libc rand()), negLRRatio 0.5-0.4*negFraction.
- mlp.hpp: train_targets(input, computed-target, lr, out_mask) — trains
  toward computed targets (negative lr = cold-start train-away); solo/
  focus gating zeroes masked derivs.
- feedback.hpp: AvoidStyle {Geometric (new default), Diffuse (legacy
  move_weights, kept for A/B)}; dislike_geometric() collapses upstream's
  press+optimise into one synchronous call; on_up in geometric Avoid
  feeds the positive centroid; dislike-multiplier bookkeeping. Storage
  gains replay buffers (Fixed: ReplayCap=32 firmware default ≈ +8KB SRAM;
  Dynamic arena: cap 64).
- bindings: nisps_ml_feedback_{dislike_geometric,store_positive,
  positive_count,negative_count,set_avoid_style} + P3.2 jolt/OU ABI:
  nisps_ml_jolt_{press,step,release,active,lr_scale,tick_lr_ramp},
  nisps_ml_explore_{intensity,get_intensity,apply} (OUNoise<4096>
  over-provisioned; same code the firmware ModeBase runs).
- parity v4: Stage 6 scripted geometric session (2 likes → 2 dislikes,
  f32-exact heard vectors via Math.fround) — 961 floats PASS at 2.4e-7.
- tests: test_mlp_geo_dislike.cpp (replay dedup/deepen/clamp, centroid
  tie-break, push direction/taper/mask/clamp, cold-start inertness +
  train-away, determinism, Diffuse legacy); legacy Avoid test pinned to
  Diffuse per the ADR's deliberate-break note.

Firmware: PAFSynth .text/.data unchanged (geometric path not referenced
by current glue). NOTE: discovered pre-existing bug 10c3e55c — the
explore/place wiring is linker-GC'd out of the PAFSynth ELF (predates
this refactor; evidence in the ergo task).
2026-07-14 04:16:21 +02:00
..
osc-bridge feat(osc-bridge): add /nisps/input (multi-float) + /nisps/feedback (JSON) verbs; client sendInput/sendFeedback; VcvBackend uses them; document VCV runtime 2026-06-28 04:28:45 +02:00
public feat(ml)!: P3 core — geometric dislike in nisps/, jolt/OU + geo ABI 2026-07-14 04:16:21 +02:00
src feat(manifold): runtime-shaped net reshape with confirm modal (P2.3) 2026-07-14 03:54:12 +02:00
tests feat(manifold): runtime-shaped net reshape with confirm modal (P2.3) 2026-07-14 03:54:12 +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 feat(manifold): runtime-shaped net reshape with confirm modal (P2.3) 2026-07-14 03:54:12 +02:00
package.json docs(plan): P1 burned down; wire golden fixtures test into bun run test 2026-07-13 23:30:28 +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