Warp-field research cockpit that pairs a Helix Core operations console with the supporting physics services, simulation assets, and archival "warp web" experiments. The repository contains both the real-time React client and the Express/TypeScript backend that brokers drive telemetry, curvature bricks, and pump controls.
We’re building the grading, proof, and trace layer agents need to verify work across domains — starting with GR and constraint packs.
- SDK + API adapters for agent runtimes.
- Deterministic verdicts with policy ladders and certificates.
- JSONL training traces for audits and learning.
- Helix Core desktop + mobile panels - Modular windows for sector duty coordination, parametric sweeps, spectrum tuning, and live warp visualisation (see
client/src/pages/helix-core.panels.ts). All new UI must ship as Helix panels so it appears in/desktopand/mobile; do not add UI to the deprecatedclient/src/pages/helix-core.tsxpage. - Hull 3D renderer - WebGL2 ray-marcher with curvature, sector, and overlay diagnostics driven by the shared hull store (
client/src/components/Hull3DRenderer.ts). - Physics + scheduling services - Energy pipeline modelling, curvature brick generation, and instrumentation endpoints implemented in the server (
server/energy-pipeline.ts,server/curvature-brick.ts,server/instruments/). - Lifshitz-aware Casimir chain - Ideal/Drude/plasma stacks with Hamaker fallback, χ override/supercell/fallback diagnostics, and nominal vs. realistic energy/mass bands surfaced to the UI.
- Static research archives - Halobank timeline and warp ledger microsites live under
warp-web/with shared assets inhalobank-spore-timeline.js. - Design documentation - Patch plans, focused reports, and sweep design notes in
PATCH_PLAN.md,REPORT.md, anddocs/(seedocs/gr-solver-progress.mdfor the GR solver progress plan and open items; the full Einstein-field solve is not declared complete yet). Mass provenance rules live indocs/mass-semantics.md.
If you need to prove that the Mk.1 Needle Hull story (Casimir tiles → ellipsoid tiling → γ_geo³ ladder → Ford–Roman duty/γ_VdB mass proxy) is wired into the codebase, read docs/casimir-tile-mechanism.md. It walks step-by-step from the research references through the exact functions (server/energy-pipeline.ts, modules/sim_core/static-casimir.ts, warp-web/km-scale-warp-ledger.html, etc.) so reviewers can go from theory to source in one pass.
HELIX-CORE advertises itself as the Needle Hull Mainframe System, meaning the console is pre-wired to the Mk 1 Natário geometry, Ford–Roman duty guards, and AI-assisted terminal tooling:
- Helix Desktop/Mobile panels are declared in
client/src/pages/helix-core.panels.tsand implemented inclient/src/components/for the windowed UI. server/energy-pipeline.tsseeds the global state with the canonical 1.007 km × 264 m × 173 m hull and 400-sector scheduler, whilemodules/warp/warp-module.tskeeps those semi-axes as the fallback for any Natário conversion./api/helix/command(implemented inserver/helix-core.ts) provides the mainframe chat endpoint so operators can pulse sectors, request diagnostics, or load documents with function-call auditing.
See docs/needle-hull-mainframe.md for the full architecture tour and list of endpoints/panels that make up the system.
- Telemetry ingress: Hooks such as
useEnergyPipelineanduseGlobalPhasekeepAlcubierrePanel.tsxflush with the latest scheduler, curvature, and hull axes data. Those hooks expose thelivepayloads (betaTiltVec,epsilonTilt, sector stats, etc.) that feed the tilt and curvature overlays. - Bus overlay memo: The panel subscribes to the
hull3d:tiltchannel, memoizes the most recent directive (busTiltDirective), and prefers it over derived telemetry when constructingoverlayConfig(see ~1730inAlcubierrePanel.tsx). Each overlay is normalized, clamped, and written into the shared Hull3D overlay state (state.overlays.tilt,state.overlays.curvature, Ford-Roman, arc sectors, etc.). - Renderer consumption:
Hull3DRenderer.tspulls the memoized overlays viauseHull3DSharedStore/OVERLAY_QUERY_KEY, repackages them as part ofHull3DRendererState, and binds them to WebGL programs each frame. Vector overlays drive the ring post-pass, while scalar overlays (heat, theta iso, Ford-Roman bar) are lifted into SSBOs or uniforms before the draw calls fire.
- Surface sheet:
SURFACE_OVERLAY_VS/FSreceiveu_tiltDir,u_tiltMag,u_tiltAlpha, andu_debugTiltEcho.drawSurfaceOverlay()renormalizes the bus vector, clamps magnitude/alpha, enables additive blending (gl.blendFunc(gl.SRC_ALPHA, gl.ONE)), and uploads the uniforms so the sheet leans without muting the volumetric hull (see ~12070-12420inHull3DRenderer.ts). The fragment shader perturbs the surface metric (pMetric += tiltDir * x * tiltStrength) and can render a zebra debug pattern whenwindow.__surfaceDebugEchois truthy. - Ring + diagnostics: The ring pass shares the same overlay state. When the surface sheet is enabled the renderer flips the ring blend mode to additive so zebra/sector arcs remain visible (~
16890). Intent arrows, Qi/Ford-Roman badges, and the curvature band all read the same overlay cache, which keeps UI indicators aligned with the sheet lean seen in the ray-march.
window.__surfaceDbgis populated each surface draw with the normalized tilt vector, magnitude, alpha, and any debug toggles so you can inspect what the shader actually consumed without guessing from the visuals.window.__surfaceDebugEcho = truedraws the red zebra aligned tou_tiltDir, making it easy to validate that bus inputs, the stored overlay, and shader-space vectors are in agreement.
The proposed patch ("Add u_tiltGainMult/u_tiltMax, feed them from curvature gain, and expose debug knobs") is a good fit for the current renderer architecture:
- Shader knobs: Adding
u_tiltGainMult+u_tiltMaxtoSURFACE_OVERLAYcleanly replaces the hard-codedTILT_GAIN ~= 0.65without touching other passes. Because tilt uniforms are already cached, extending the cache avoids extra lookups. - Renderer binding: Computing
tiltGainMult = unitGain * curvGain^gammainsidedrawSurfaceOverlay()keeps all scaling logic close to whereu_tiltMagis uploaded. That's also wherewindow.__surfaceDbgis filled, so the falsifiable checks (curvature toggle, gamma slope, ceiling guard) naturally fall out of the existing debug table. - Overlay contract: Promoting
gainFromCurvature/unitGainintooverlays.tilt(with console fallbacks) keeps Helix UI controls, bus overrides, and renderer math in sync. The change is backwards compatible because defaults (gainFromCurvature=false,unitGain=1,tiltMax>=1) restore pre-patch behaviour. - Risk profile: The patch doesn't touch ring/post passes and respects the additive blend rule, so there's little chance of regressions in 2D overlays. The only caveat is to clamp after multiplication so curvature gain and manual gain are both reflected before the debug ceiling applies.
Taken together, wiring the multiplier exactly where the bus overlay is consumed gives us deterministic coupling between curvature gain and sheet bias, while the console knobs guarantee we can validate each acceptance criterion (AC-1...AC-4) in isolation.
- Shader uniforms (
client/src/components/Hull3DRenderer.ts@SURFACE_OVERLAY_*): declareu_tiltGainMultandu_tiltMax, replace the bakedTILT_GAINconstant withtiltStrength = clamp(u_tiltMag, 0.0, 1.0) * u_tiltGainMult, and guard withtiltStrength = min(tiltStrength, u_tiltMax). - Renderer binding (
drawSurfaceOverlay): cache/upload the new uniform locations, derivetiltGainMultfrom curvature gain + optional debug knobs (window.__tiltGain,__tiltScaleFromCurvature,__tiltGainGamma,__tiltMax), and write those values intowindow.__surfaceDbg. - Overlay contract (optional but preferred): extend
overlays.tiltwithgainFromCurvature,unitGain, andgamma, letting Helix UI state drive the multiplier with console fallbacks for rapid experiments.
- Curvature coupling toggle: Flip
window.__tiltScaleFromCurvaturebetweenfalseandtruewhile holding curvature gain atk; expect the zebra amplitude andwindow.__surfaceDbg.tiltGainMultto trackk(bounded byu_tiltMax). - Linear boost: Set
__tiltScaleFromCurvature = false, dial__tiltGainfrom1to3, and observe a ~3× increase in tilt bias and debug echo brightness. - Gamma shaping: With curvature scaling enabled, set
window.__tiltGainGamma = 0.5; doublingoverlays.curvature.gainshould only increase the sheet strength bysqrt(2). - Ceiling guard: Force
window.__tiltMax = 2.0, then continue raising curvature gain or__tiltGain; the zebra stays bounded and__surfaceDbg.tiltStrengthnever exceeds2.0.
- AC-1: Doubling
overlays.curvature.gaindoubles the surface tilt strength (until capped byu_tiltMax), verifiable through visuals pluswindow.__surfaceDbg. - AC-2: With curvature coupling disabled,
__tiltGainand__tiltGainGammaprovide deterministic scaling curves that matchtiltGainMult = baseGain * curvGain^gamma. - AC-3: Setting
gainFromCurvature=false,unitGain=1, andtiltMax>=1produces pre-patch visuals, proving backward compatibility. - AC-4: Additive blending and
u_tiltAlphagating remain unchanged; no occlusion or flicker occurs in ring/diagnostic overlays when the sheet gain is amplified.
Here is the physics "why" behind the Direction Pad's two-lobe control and how each layer of the stack enforces the Alcubierre/Natario bubble requirements.
In the 3+1 split used for Alcubierre and Natario bubbles the key kinematic scalar you visualize is the expansion (trace of the extrinsic curvature, York-time style). In the shader it appears as theta_GR ∝ beta * ∂x f(rs), so the sign flips across the axis of motion: front (+x) is compressive (blue, theta < 0) and aft (−x) is expansive (red, theta > 0). The vertex shader differentiates the smoothed top-hat bubble profile and forms:
float dfdr = d_topHat_dr(rs, u_sigma, u_R);
vec3 dir = pMetric / rs;
float dfx = dfdr * dir.x;
float theta_gr = u_beta * dfx; // sign flips front vs aftBecause ∂x f is odd across the axis, physical steering must keep a front/back pair (a dipole) instead of a single monopole. A lone front-only lobe would violate the volume-preserving structure of Natario's divergence-free shift and the global conservation constraint ∇μ T^{μν} = 0 that the time-sliced proxy honors.
The renderer instantiates a two-Gaussian, antipodal gate on the equatorial ring. When split mode is enabled, the shader makes a second lobe at center + 0.5 (180°) and blends them with the split fraction:
float g1 = exp(...); // primary lobe
float g2 = exp(... at center + 0.5); // antipodal lobe
float wA = clamp(u_splitFrac, 0.0, 1.0);
float g = g1 * wA + g2 * (1.0 - wA); // unity-weight pairingThe gate is rotatable via the normalized phase, so yaw rotates the dipole (a01 = fract(a01 + u_phase01)). Setting phase to 180° flips contraction and expansion and provides a fast sign sanity check.
Front compression must be paid back by aft expansion to keep the cycle-averaged source compatible with GR constraints and the Ford-Roman guardrails. Implementation-wise every layer preserves the unity sum:
- Shader/UI:
u_splitEnabled+u_splitFracblend the antipodal Gaussians with weights that add to one, so biasing one automatically thins the other. - Energy pipeline: the server applies a sign pattern across sectors, switching the active set between "neg" and "pos" per the requested fraction (
negativeFractionmirrors1 - splitFrac). That sign multiplies the shell actuation amplitude that feeds the curvature proxy. - System bookkeeping: the live model tracks Ford-Roman margin (
zeta), duty (d_eff), and light-crossing separation so the averaged drive stays within the same green-zone narrative documented in the km-scale warp ledger.
These are the two knobs the continuum physics permits:
- Orientation: rotate the dipole (
∂x f) around the equator by addingu_phase01before sampling the ring. This matches the "Heading rotates the equatorial lobe pair" note in the Direction Pad UI. - Relative magnitude: tune how much scheduler duty/energy the compressive vs expansive half-ring receives. In the renderer this is
u_splitFrac; in the scheduler it is the sector sign plus duty weighting. The unity sum keeps total power and average curvature density stable while steering.
The Direction Pad feeds the same time-sliced, cycle-averaged source that the project uses as a GR-valid stand-in:
kappa_drive ~ (8πG / c^5) * (P_avg / A) * d_eff * G_shape, with TS >> 1
Because the Ford-Roman bound holds zeta ≤ 1 and the light-crossing ratio TS is kept large, GR "sees" the average over many strobes. The scheduler mirrors contraction/expansion so this averaged source stays valid while still allowing directional control.
Concrete hooks that match the proxy:
- Spectrum/energy panels expose
duty,sectors, andlightCrossing_us, which determined_effandTS. - The pipeline hook tracks
TS_ratio,zeta,P_avg,Q_L, etc., so any UI bias must remain inside the documented green-zone bounds.
On the actuator side the parametric tiles obey lambda = lambda0 * cos(phi), so flipping the pump phase by pi swaps the sign of the effective actuation and shifting by pi/2 moves between quadratures. That is why the scheduler can realize "front negative / aft positive" by assigning complementary phase windows to antipodal sectors while staying safely below threshold.
The Hull/Alcubierre panel uses the same numbers the scheduler uses. The uniforms u_phase01, u_splitEnabled, and u_splitFrac drive the shader, which computes the sector-weighted theta_drive from the GR theta. As a result the 3D hull shows a brighter, fatter patch on one side when you push W/S, and rotating yaw walks the pair around the rim.
Let f(rs) be the smoothed top-hat profile. Along the equator theta_GR(phi) ∝ beta * (df/drs) * cos(phi), so the natural angular pattern is a dipole (Y10 ~ cos phi): one negative lobe (front) and one positive (aft). The gating simply modulates that dipole with a wrapped Gaussian pair (g1 at phi0, g2 at phi0 + pi) whose weights sum to one, preserving the integral constraint while steering.
- Phase flip check: set
u_phase01to 0.5 (180°) and confirm contraction/expansion colors swap across the hull. - Scheduler sign check: monitor the sector sign output in the energy pipeline; contraction and expansion sectors are mutually exclusive per tick.
- Averaging/QI check: confirm
TS >> 1andzeta ≤ 1in the pipeline panel and warp ledger to ensure steering stays inside the admissible drive envelope.
Bottom line: The two-lobe control is the minimal, physically consistent way to steer an Alcubierre/Natario bubble. Phase rotates the dipole, split fraction reweights the front/back pair, and the scheduler enforces the sign and duty that keep the cycle-averaged stress-energy proxy valid.
Absolutely—and we can back each observed behavior with both code in this repo and the GR literature that motivates it.
1) Shader builds two wrapped Gaussians 180° apart and rotates them by phase.
client/src/components/Hull3DRenderer.ts samples azimuth via a01 = fract(a01 + u_phase01) and, when split mode is enabled, evaluates Gaussians at u_sectorCenter and center + 0.5, blending them via u_splitFrac. That is the contraction/expansion dipole in math form.
2) UI exposes that phase knob (“rotate active lobe … flip 180°”).
client/src/components/AlcubierrePanel.tsx surfaces the same phase01 with badges/toggles so users directly rotate the dipole around the equator.
3) Pipeline carries shared phase fields.
phase01, phaseSign, and phaseMode flow through server/energy-pipeline.ts and the client hooks, keeping scheduler and renderer aligned on heading.
4) Scheduler/sector model tracks the (+)/(−) split.
The server’s sector state maintains a first-class split index so one set handles contraction while the antipodal set “pays back” expansion each cycle.
Why lobes “disappear” near 66° NE and peak near ~184°.
Because the dipole is equatorial, when a lobe points toward the camera you see its narrow cross-section (appearing small near the center). When it swings to the limb (~180°), you observe the full footprint on the rim, so it looks large/bright. The shader’s Gaussian normalization (g / avgG) keeps total power constant; projection alone changes the apparent size.
(Verification tip: freeze u_sectorCenter, scrub u_phase01, and watch the Gaussian peak orbit the ring while its integral stays normalized.)
A) Contraction ahead / expansion aft (Alcubierre).
Alcubierre’s metric produces opposite-sign curvature gradients fore vs aft—the contraction/expansion pair your renderer shows (Alcubierre 2000).
B) Natário’s shift-vector framing keeps the same orientation.
Natário’s zero-expansion warp recasts the drive via the shift vector; directionality still enters through the shift, matching your phase01-controlled dipole (Natário 2002).
C) High-frequency averaging → effective stress-energy.
Isaacson’s limit shows that rapidly varying sources admit a meaningful averaged stress tensor; your “sector strobing” rationale mirrors that logic (Isaacson 1968).
D) Modern backreaction frameworks reach the same conclusion.
Green & Wald formalize how small-scale structure backreacts via an effective stress-energy once averaged, backing your km-scale ledger claims (Green & Wald 2011).
E) Quantum inequalities bound negative-energy duration.
Ford, Roman, and collaborators proved that negative energy must be limited in magnitude × time; your mirrored duty-cycling (ζ parameter, complementary negativeFraction) is how the drive respects those bounds (Pfenning & Ford 1995/1998).
- Visual: Two wrapped Gaussians rotate with
phase01; projection makes them appear smaller when aimed at you and largest at the rim. - Physics: That dipole is exactly the contraction/expansion requirement from Alcubierre/Natário (1, 2).
- Engineering: Fast sector strobing + antipodal mirroring yields a cycle-averaged stress-energy consistent with GR and quantum inequalities (3, 4, 5).
- Shader dipole:
client/src/components/Hull3DRenderer.ts(two Gaussians + phase rotation). - Phase controls: badges/toggles in
client/src/components/AlcubierrePanel.tsx. - Pipeline phase fields:
phase01,phaseSign,phaseModein the energy pipeline state. - Sector split in scheduler: server-side split fields dividing (+)/(−) sectors.
- Design provenance: km-scale warp ledger notes on GR-valid time-averaged curvature proxies.
These references tie the UI behavior back to concrete implementation details and peer-reviewed GR literature.
client/- React app (Vite + TypeScript) and component library. Hooks underclient/src/hooks/expose energy and curvature pipelines, while shared stores live inclient/src/store/.server/- Express server bootstrapped viaserver/index.ts, with feature modules inserver/energy-pipeline.ts,server/routes.ts, and instrumentation helpers inserver/instruments/.modules/- Physics engines and numerical tooling shared between client and server.shared/- Zod schemas (shared/schema.ts) consumed on both sides of the stack.warp-web/- Stand-alone HTML experiments and documentation pages.docs/- In-repo briefs for upcoming sweeps and feature work (seedocs/helix-desktop-panels.mdfor the Helix Desktop/Start panel wiring guide).sim_core/- Static calibration data (phase_calibration.json) bundled with the build..cal/- Runtime calibration logs dropped by the phase calibration utilities (ignored by Git by default).
All new UI must be shipped as a Helix panel. Do not add standalone page routes for new UI work. The legacy page at client/src/pages/helix-core.tsx is deprecated and should not be used for new UI work.
Helix Start lists launchable windows from HELIX_PANELS in client/src/pages/helix-core.panels.ts, and /desktop renders those entries as window panels via the desktop registry. To make a program discoverable:
- Create or expose the panel component under
client/src/components/(or a page component you can import). - Add a new entry in
client/src/pages/helix-core.panels.tsusinglazyPanel, with a uniqueid, user-facingtitle, and an icon (Lucide). Optionally setdefaultSize,defaultPosition,pinned, andendpoints. - Ensure the entry is part of
HELIX_PANELS(not justpanelRegistry) so it appears in Helix Start and the taskbar. - For mobile availability, set
mobileReady: true; otherwise it stays desktop-only.
See docs/helix-desktop-panels.md for the full desktop/start wiring details and troubleshooting checklist.
For the fastest product path, see docs/QUICKSTART.md.
- Install prerequisites
- Node.js 20.x (the project uses native ESM and
tsx) - npm 10.x (ships with Node 20)
- Optional: Python 3.11 +
requests,numpyfortests/test_dynamic.py
- Node.js 20.x (the project uses native ESM and
- Install dependencies
npm install
- Start the stack (UI + API)
This launches the Express server with Vite middleware on port 5173, so you should not start a separate Vite process. Use
npm run dev
/desktopor/mobilefor the UI. For AGI routes, runnpm run dev:agi(or setENABLE_AGI=1andENABLE_ESSENCE=1). - (Recommended) Enable local verification hooks
This wires Git to run
npm run hooks:install
npm run verify:localon each commit (setSKIP_VERIFY=1to bypass in emergencies).
npm run dev # Express + Vite middleware with HMR (default)
# If you explicitly want to serve the last build without Vite/HMR:
npm run dev:static # requires a fresh `npm run build`The dev script launches the Express server with Vite middleware, so you should not need to run a separate npx vite dev process. The default UI entry points are http://localhost:5173/desktop for the desktop window manager and http://localhost:5173/mobile for the mobile app panel window configuration. The root route (/) automatically redirects based on the current device; pass ?desktop=1 or ?mobile=1 to force a target. Treat the app panel as a window panel: follow the Helix panel template in client/src/pages/helix-core.panels.ts so it registers as a window and appears in Helix Start on /desktop (see docs/helix-desktop-panels.md). API routes mount under the same origin via Express. The dev:static variant skips Vite and serves the prebuilt bundle, so rebuild after changes before using it.
- Adapter-aware inference: Configure Luma with
LUMA_PROVIDER,LUMA_MODEL, and optionallyLORA_ADAPTERto hot-load LoRA patches. The/api/luma/chat/self-consistencyendpoint now wraps multi-sample decoding with majority voting on theFINAL ANSWERline. - Training assets: JSONL schemas under
datasets/train/include cite-first answers, equation glossaries, comparisons, and abstentions with citation or[NO_EVIDENCE]prefixes matching the new prompt contract. - Tooling:
scripts/merge_lora.pymerges a trained LoRA adapter into base weights for runtimes that cannot mount adapters dynamically.tools/verifier_math.pyscores generations or emits DPO preference pairs by inspecting theFINAL ANSWERvalue with SymPy.tools/run_eval.pyruns a local HuggingFace model (optionally with a LoRA adapter) against a JSONL question set and records verifier metrics.
- Suggested workflow:
- Fine-tune a LoRA adapter on
datasets/train/*.jsonl, optionally add verifier-derived preference pairs underdatasets/prefs/. - Evaluate with
python tools/run_eval.py --model <path> --questions eval/dev_math.jsonl. - Deploy by pointing
LORA_ADAPTER(orLUMA_MODELwhen merged) at the chosen artifact.
- Fine-tune a LoRA adapter on
| Script | Description |
|---|---|
npm run dev |
Start Express + Vite in development mode. |
npm run build |
Build the client via Vite and bundle the server with esbuild into dist/. |
npm start |
Serve the production build from dist/. |
npm test |
Run Vitest suites (client/src/lib/warp-pipeline-adapter.test.ts, component tests, etc.). |
npm run db:push |
Apply Drizzle schema changes to the configured database. |
- Unit & integration -
npm testexecutes Vitest suites co-located with the client/lib code. - Python physics checks -
tests/test_dynamic.pytargets a running simulation service athttp://localhost:5173. Activate your Python environment (seepyproject.toml) and runpytestwhen the simulator is available. - Ledger guard -
npm test -- --run tests/ledger-dimension.spec.tslocks the green-zone slopes (duty, area, geometry gain, Q_L), GR prefactors, and equality of power vs. density forms using the dev-mock contract.
- Prometheus endpoint -
GET /metricsnow exports default Node stats plus AGI task counters, tool-call histograms, queue gauges, and HTTP request latency buckets. Point Prometheus athttp://localhost:5173/metricswhen the server is running. - Structured tool logs -
GET /api/agi/tools/logs?limit=50&tool=llm.local.generatereturns the most recent tool invocations (and/api/agi/tools/logs/streamkeeps an SSE feed open for dashboards). Records include tool name, params hash, latency, seeds, and error text when available. - Local Prom/Graf stack - Launch
docker compose -f docker-compose.observability.yml upto spin up Prometheus (port 9090) and Grafana (port 3001, admin/admin by default). The bundledops/observability/prometheus.ymlscrapeshost.docker.internal:5173/metrics, so keep the Express server running on port 5173.
npm run build
npm startThe build emits static client assets to dist/public/ and bundles the server entry to dist/index.js. Ensure the dist/public directory is present before starting production mode.
PUMP_DRIVER- Set tomock(default) to use the in-process pump driver (server/instruments/pump-mock.ts); provide a custom driver identifier to integrate real hardware.PUMP_LOG- When1, logs pump duty updates to stdout.PUMP_MOCK_SETTLE_MS,PUMP_MOCK_JITTER_MS- Tune timing characteristics for the mock pump.HELIX_PHASE_CALIB_JSON- Override the path to the phase calibration JSON (sim_core/phase_calibration.jsonby default).PHASE_CAL_DIR- Directory for calibration logs (.cal/phase-calibration-log.jsonlwhen unset).ENABLE_REPO_TOOLS- When1, exposes repo-safe helpers (repo.diff.review,repo.patch.simulate) to the AGI planner for read-only diffing and patch dry-runs.
The warp-web/ directory contains HTML microsites (e.g. km-scale-warp-ledger.html) that reference the same JavaScript helpers used in the Helix Core client. Open the files directly in a browser or host them via npm run dev to leverage Express static serving.
- Create a feature branch from
main. - Run
npm run buildandnpm testbefore pushing. - Keep large binaries and generated logs out of Git; calibration logs land in
.cal/which is ignored by default.