2026-06-28 03:28:45 +02:00
|
|
|
/**
|
|
|
|
|
* Manifold — app root. The convertible Console (ConsoleApp) wired to the real
|
|
|
|
|
* engine, mounted under EngineProvider. Defaults to the hero `focus="composite"`
|
|
|
|
|
* (the convertible centerpiece). The `?debug=1` probe is installed once the
|
|
|
|
|
* engine is live.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import { useEffect } from 'react';
|
|
|
|
|
import { EngineProvider } from './engine/EngineProvider';
|
feat(manifold): geometric dislike + jolt/OU via shared core (one-core-engine P3)
TS half of P3.1/P3.2/P3.3: wire the new WASM exports and delete the TS
approximations now that geometric-dislike, jolt, OU, and the seeded RNG live
in the C++/WASM core.
- types.ts/wasm-iml.ts: bind + wrap dislike_geometric, store_positive,
positive/negative_count, set_avoid_style, jolt_press/step/release/active/
lr_scale/tick_lr_ramp, explore_intensity/get/apply. Weight-mutating wrappers
republish weights (version bump); explore_apply reuses feedbackBuf.
- engine-api: extend .feedback (dislikeGeometric/storePositive/counts/
setAvoidStyle) + new .explore facade. thumbsDown now passes the HEARD
(routed) vector, not the raw MLP output (raw == net output => inert cold-start).
- feedback/controller.ts: delete dislikes[] + applyDislikeBias + both C++ GAP
blocks + the SeededRng field; dislike() -> core dislikeGeometric (returns
action, 15 => cold-start prompt); like() feeds the centroid via the core
thumbsUp; getState() exposes positive/negative counts. Delete feedback/rng.ts.
- engine/exploration.ts: execute the P3 SWAP POINT -> drive engine.explore.*;
delete engine/jolt.ts + ou-explore.ts. UI surface unchanged.
- ConsoleApp: one-time cold-start banner (British spelling), routed heard vector
at the dislike call site.
- App.tsx/spine.ts: under ?debug=1 pin a fixed seed + fixed per-tick dt so the
probe/e2e are deterministic (production keeps time-seeded, real-time dt).
- tests: new geo-dislike.spec.ts; probe gains dislikeGeometric/storePositive/
feedbackCounts/setAvoidStyle; the thumbsDown probe test now drives a real
distinct-heard-vector dislike (bare thumbsDown on the net's own output is
correctly inert under the geometric core). 27 e2e + 9 unit green.
Docs: manifold/ONBOARDING.md engine+feedback sections synced.
2026-07-14 04:54:27 +02:00
|
|
|
import type { EngineApiOptions } from './engine/engine-api';
|
2026-06-28 03:28:45 +02:00
|
|
|
import { useEngine } from './engine/useEngine';
|
|
|
|
|
import { installDebugProbe } from './debug/probe';
|
|
|
|
|
import { ConsoleApp } from './console';
|
|
|
|
|
|
feat(manifold): geometric dislike + jolt/OU via shared core (one-core-engine P3)
TS half of P3.1/P3.2/P3.3: wire the new WASM exports and delete the TS
approximations now that geometric-dislike, jolt, OU, and the seeded RNG live
in the C++/WASM core.
- types.ts/wasm-iml.ts: bind + wrap dislike_geometric, store_positive,
positive/negative_count, set_avoid_style, jolt_press/step/release/active/
lr_scale/tick_lr_ramp, explore_intensity/get/apply. Weight-mutating wrappers
republish weights (version bump); explore_apply reuses feedbackBuf.
- engine-api: extend .feedback (dislikeGeometric/storePositive/counts/
setAvoidStyle) + new .explore facade. thumbsDown now passes the HEARD
(routed) vector, not the raw MLP output (raw == net output => inert cold-start).
- feedback/controller.ts: delete dislikes[] + applyDislikeBias + both C++ GAP
blocks + the SeededRng field; dislike() -> core dislikeGeometric (returns
action, 15 => cold-start prompt); like() feeds the centroid via the core
thumbsUp; getState() exposes positive/negative counts. Delete feedback/rng.ts.
- engine/exploration.ts: execute the P3 SWAP POINT -> drive engine.explore.*;
delete engine/jolt.ts + ou-explore.ts. UI surface unchanged.
- ConsoleApp: one-time cold-start banner (British spelling), routed heard vector
at the dislike call site.
- App.tsx/spine.ts: under ?debug=1 pin a fixed seed + fixed per-tick dt so the
probe/e2e are deterministic (production keeps time-seeded, real-time dt).
- tests: new geo-dislike.spec.ts; probe gains dislikeGeometric/storePositive/
feedbackCounts/setAvoidStyle; the thumbsDown probe test now drives a real
distinct-heard-vector dislike (bare thumbsDown on the net's own output is
correctly inert under the geometric core). 27 e2e + 9 unit green.
Docs: manifold/ONBOARDING.md engine+feedback sections synced.
2026-07-14 04:54:27 +02:00
|
|
|
/**
|
|
|
|
|
* Engine options derived from the URL. Under `?debug=1` (the Playwright /
|
|
|
|
|
* dev-probe gate) we pin a FIXED RNG seed so the net's initial weights — and
|
|
|
|
|
* therefore inference, feedback, and reshape behaviour — are deterministic run
|
|
|
|
|
* to run. Production (no debug flag) keeps the time-seeded default, so this
|
|
|
|
|
* never changes what a real user hears.
|
|
|
|
|
*/
|
|
|
|
|
function engineOptions(): EngineApiOptions {
|
|
|
|
|
if (typeof window === 'undefined') return {};
|
|
|
|
|
try {
|
|
|
|
|
const params = new URLSearchParams(window.location.search);
|
|
|
|
|
// Fixed seed + fixed per-tick dt ⇒ deterministic weights AND deterministic
|
|
|
|
|
// pipeline smoothing (the pipelines otherwise read performance.now()).
|
|
|
|
|
if (params.get('debug') === '1') return { seed: 0xc0ffee, debugClockDt: 1 / 60 };
|
|
|
|
|
} catch {
|
|
|
|
|
/* no URL (SSR / sandbox) — fall through */
|
|
|
|
|
}
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-28 03:28:45 +02:00
|
|
|
function Loading() {
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
style={{
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
inset: 0,
|
|
|
|
|
background: 'var(--bg)',
|
|
|
|
|
color: 'var(--fg)',
|
|
|
|
|
fontFamily: 'var(--font-mono)',
|
|
|
|
|
display: 'flex',
|
|
|
|
|
flexDirection: 'column',
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
justifyContent: 'center',
|
|
|
|
|
gap: 'var(--sp-3)',
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<strong
|
|
|
|
|
style={{
|
|
|
|
|
color: 'var(--accent)',
|
|
|
|
|
fontSize: 'var(--fs-2xl)',
|
|
|
|
|
letterSpacing: 'var(--ls-tight)',
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
Manifold
|
|
|
|
|
</strong>
|
|
|
|
|
<span style={{ color: 'var(--fg-dim)', fontSize: 'var(--fs-xs)' }}>loading engine…</span>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Installs the debug probe once the engine is in context. */
|
|
|
|
|
function ProbeInstaller() {
|
|
|
|
|
const engine = useEngine();
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (engine) installDebugProbe(engine);
|
|
|
|
|
}, [engine]);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function App() {
|
|
|
|
|
return (
|
feat(manifold): geometric dislike + jolt/OU via shared core (one-core-engine P3)
TS half of P3.1/P3.2/P3.3: wire the new WASM exports and delete the TS
approximations now that geometric-dislike, jolt, OU, and the seeded RNG live
in the C++/WASM core.
- types.ts/wasm-iml.ts: bind + wrap dislike_geometric, store_positive,
positive/negative_count, set_avoid_style, jolt_press/step/release/active/
lr_scale/tick_lr_ramp, explore_intensity/get/apply. Weight-mutating wrappers
republish weights (version bump); explore_apply reuses feedbackBuf.
- engine-api: extend .feedback (dislikeGeometric/storePositive/counts/
setAvoidStyle) + new .explore facade. thumbsDown now passes the HEARD
(routed) vector, not the raw MLP output (raw == net output => inert cold-start).
- feedback/controller.ts: delete dislikes[] + applyDislikeBias + both C++ GAP
blocks + the SeededRng field; dislike() -> core dislikeGeometric (returns
action, 15 => cold-start prompt); like() feeds the centroid via the core
thumbsUp; getState() exposes positive/negative counts. Delete feedback/rng.ts.
- engine/exploration.ts: execute the P3 SWAP POINT -> drive engine.explore.*;
delete engine/jolt.ts + ou-explore.ts. UI surface unchanged.
- ConsoleApp: one-time cold-start banner (British spelling), routed heard vector
at the dislike call site.
- App.tsx/spine.ts: under ?debug=1 pin a fixed seed + fixed per-tick dt so the
probe/e2e are deterministic (production keeps time-seeded, real-time dt).
- tests: new geo-dislike.spec.ts; probe gains dislikeGeometric/storePositive/
feedbackCounts/setAvoidStyle; the thumbsDown probe test now drives a real
distinct-heard-vector dislike (bare thumbsDown on the net's own output is
correctly inert under the geometric core). 27 e2e + 9 unit green.
Docs: manifold/ONBOARDING.md engine+feedback sections synced.
2026-07-14 04:54:27 +02:00
|
|
|
<EngineProvider options={engineOptions()} fallback={<Loading />}>
|
2026-06-28 03:28:45 +02:00
|
|
|
<ProbeInstaller />
|
|
|
|
|
<ConsoleApp focus="composite" />
|
|
|
|
|
</EngineProvider>
|
|
|
|
|
);
|
|
|
|
|
}
|