AISLE can realize the same scene and bridge contract with three physics
engines. Select one with harness rollout --sim-engine; the harness injects
the choice into the bridge and records it in the run manifest.
| Engine | Physics | Renderer | Installation | Status |
|---|---|---|---|---|
genesis |
Genesis | Genesis | Included in the sim or cuda extra |
Default; only engine behind the measured record |
nexus |
Nexus GPU | Nexus | dimforge-nexus3d, included in the sim extra |
Development only |
rapier |
Rapier CPU | Nexus | rapier3d and dimforge-nexus3d, included in the sim extra |
Development only |
Results from different engines are not directly comparable. Each run records
the engine, resolved backend and device, and the engine realization digest.
The engine wheels come from uv.lock like Genesis, so the environment
attestation covers them too (ADR-70).
The Nexus and Rapier wheels are published for macOS arm64, Linux x86_64 and
aarch64, and Windows x64; the sim extra skips them on other platforms.
Genesis is installed with the normal simulation environment:
uv sync --extra sim --lockedIt is the default when --sim-engine is omitted. An explicit development
rollout is:
uv run --extra sim --locked harness rollout --graph graphs/expert_t0.yaml --tier T0 \
--episodes 2 --seeds 0..1 --no-idea-gate --env-baseline local \
--sim-engine genesisOn NVIDIA Linux, use uv sync --extra cuda --locked, use --extra cuda on
the uv run, and add --sim-extra cuda. The CUDA request fails closed if no
CUDA device is available.
Nexus is installed by the normal simulation environment:
uv sync --extra sim --lockedRun a graph with Nexus:
uv run --extra sim --locked harness rollout --graph graphs/expert_t0.yaml --tier T0 \
--episodes 2 --seeds 0..1 --no-idea-gate --env-baseline local \
--sim-engine nexusThe harness resolves native Metal on macOS and WebGPU elsewhere (wgpu then
picks the platform's GPU API). The macOS wheel supports metal, webgpu and
cpu; the Linux and Windows wheels webgpu and cpu
(nexus3d.available_backends() lists them). AISLE_SIM_BACKEND overrides the
choice; a backend the wheel lacks, such as cuda, fails at the first scene
build. Determinism holds per backend: a Metal run and a WebGPU run of the same
seed are not expected to match bit for bit.
Rapier steps physics on the CPU and uses Nexus for rendering. Both wheels come
with the sim extra:
uv sync --extra sim --locked
uv run --extra sim --locked harness rollout --graph graphs/expert_t0.yaml --tier T0 \
--episodes 2 --seeds 0..1 --no-idea-gate --env-baseline local \
--sim-engine rapierTo try an unreleased Nexus or Rapier change, build its wheel with maturin from the checkout and install it over the locked one:
uv pip install --reinstall-package dimforge-nexus3d ../nexus/target/wheels/dimforge_nexus3d-*.whlUse uv run --no-sync afterwards, since a sync puts the locked wheel back.
Such a wheel is not from the lock, so the run records it as unattested
(env_attested: false) and trusted runs refuse it.
--sim-engine {genesis,nexus,rapier}is available onharness rollout,harness fleet,harness monolith run,harness fault calibrate, andharness skill register.- A graph can declare
AISLE_SIM_ENGINEin its simulation bridge node. A conflicting CLI selection is refused instead of silently overriding the graph. - For a direct
dora run, setAISLE_SIM_ENGINEin the bridge node'senvmapping. Prefer the harness for recorded work because it validates, injects, hashes, and records the engine choice.
More detail:
- Getting started, including platform prerequisites
- Harness CLI guide
- Troubleshooting
- ADR-67: Nexus engine
- ADR-68: Rapier engine
- ADR-70: Engine wheels from PyPI