Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
485911f
feat: run the scene on Nexus behind AISLE_SIM_ENGINE (ADR-55)
sebcrozet Sep 5, 2026
e0097a6
fix(nexus): firm pinch grasp with the fixed contact solver, 8 substeps
sebcrozet Sep 6, 2026
72fb5a6
fix(nexus): close the engine integration gaps between Genesis and Nexus
sebcrozet Sep 10, 2026
a94d710
feat(rapier): a third engine, rapier physics on the CPU behind the Ne…
sebcrozet Sep 12, 2026
2487313
fix(sim): carry the engine registry into the validator bundle after t…
sebcrozet Sep 17, 2026
c2e3e97
feat(rollout): operator override for an episode's sim budget, and a r…
sebcrozet Sep 18, 2026
739acf7
build(sim): pin the engine sources to their pushed branches by commit
sebcrozet Sep 20, 2026
2b103ff
build(sim): build nexus against the published rapier 0.36.0
sebcrozet Sep 25, 2026
cf2f246
docs(adr): renumber the engine ADRs to 67 and 68 and restore main's A…
sebcrozet Sep 25, 2026
7f6878d
docs(freeze): drop a rebase leftover that misstated why bnd v11 super…
sebcrozet Sep 25, 2026
b1194f7
refactor(rollout): take the episode budget and build grace overrides …
sebcrozet Sep 25, 2026
9456595
test(harness): run the gate tests without an installed engine, as CI'…
sebcrozet Sep 25, 2026
b5d5ac8
fix(fleet): run rollout's engine gate before launching a fleet
sebcrozet Sep 25, 2026
48b1c70
fix(sim): render the recorded ambient, free superseded cameras, wake …
sebcrozet Sep 25, 2026
665a46b
fix(bridge): time the wire render before the debug camera draws
sebcrozet Sep 25, 2026
45a7143
fix(tools): refuse an empty trace in the grasp replay with a JSON error
sebcrozet Sep 25, 2026
99cf201
chore(benchmark): refresh the release manifest after the ADR renumbering
sebcrozet Sep 25, 2026
814ee87
test(rollout): give the typed rollout gate stubs the engine the gate …
sebcrozet Sep 25, 2026
05bdc33
build(rapier): pin the rapier branch rebased on 0.36.0 and adopt its …
sebcrozet Sep 25, 2026
16bbd9b
test(rollout): mark the engine attestation tests unit and run them wi…
sebcrozet Sep 25, 2026
6173684
docs(adr): state that Nexus and rapier are development-only engines
sebcrozet Sep 25, 2026
45b76f6
fix(rollout): count a tick's renders once in the real-time factor
sebcrozet Sep 25, 2026
cabf2eb
fix(sim): require engine build provenance
heyong4725 Sep 27, 2026
b8374e3
chore(freeze): bind engine provenance fixes
heyong4725 Sep 27, 2026
7637bee
test(harness): isolate env hash refusal from engine gate
heyong4725 Sep 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,11 @@ out/
# input to one: it is derived from graphs/, so committing it would be a
# second copy of the topology that silently goes stale.
*-graph.html

# ADR-67: receipt of the locally built Nexus wheel (tools/nexus_runtime.py)
.nexus-runtime-receipt.json
# ADR-68: receipt of the locally built rapier wheel (tools/rapier_runtime.py)
.rapier-runtime-receipt.json

# ADR-67/ADR-68: pinned engine checkouts fetched by tools/engine_sources.py
.engine-sources/
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ benchmark acceptance. Run things:
`uv run pytest -m unit`, `uv run harness validate graphs/expert_t0.yaml`,
`dora run graphs/expert_t0.yaml --uv`. Never install with bare pip/conda.
CUDA-only deps are forbidden in default extras (CON-1).
Optional second engine (ADR-67): `harness rollout --sim-engine nexus` runs
the same scene on Nexus; install its wheel with `tools/nexus_runtime.py`
(docs/getting-started.md §3b). Genesis stays the default and the only engine
behind the measured record.

## Quality gates before EVERY commit (inherited from dora-rs/dora practice)
Class B/C (nodes, harness, frozen set, contracts): /review on the diff →
Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@ execution is the intended path.*
Agentic auto-research for robot manipulation on open infrastructure:
coding agents (Claude Code / Codex) compose and evolve **typed dora-rs
dataflows** against a **Genesis** physics scene, with frozen
verification/reset and scoped safety structure.
verification/reset and scoped safety structure. The scene contract is
engine neutral; two optional engines run the same graphs for development,
[Nexus](docs/decisions/ADR-67.md) on the GPU and
[rapier](docs/decisions/ADR-68.md) on the CPU (`--sim-engine nexus|rapier`),
while Genesis stays the default and the only engine behind the measured
record.
<!-- claim:typed-dataflow-causal/readme -->
The **UNRUN confirmatory claim under test** is whether a
typed dataflow substrate makes agentic robotics faster, safer, more
Expand Down
7 changes: 7 additions & 0 deletions analysis/freeze/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,10 @@ macOS sandbox denial log with start and end controls. A log with missing
reports or unprobed executable names remains incomplete. The inherited seed
commitments and all pending gates remain unchanged; these registrations do not
authorize collection.

BND v15, FLT v7, CSE v27 and pilot v13 supersede v14, v6, v26 and v12 after the
ADR-67/ADR-68 engine seam moved three matched sources: the shared harness CLI,
the rollout runner and the simulator bridge now select the physics engine
behind `AISLE_SIM_ENGINE`. Calibration rules, seed lineages, decision rules and
every pending gate are preserved, and Genesis remains the default and the only
engine behind these campaigns.
183 changes: 183 additions & 0 deletions analysis/freeze/bnd-task-band-calibration-v15/declaration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
{
"analysis": {
"scripts": [
"src/aisle/harness/benchmark_statistics.py",
"src/aisle/harness/non_oracle.py",
"src/aisle/harness/perception_audit.py",
"src/aisle/harness/perception_eligibility.py"
],
"seed": 490001
},
"artifacts": {
"candidate_engineering": "graphs/expert_t2.yaml",
"candidate_short_composition": "graphs/expert_t1_l2.yaml",
"lock": "uv.lock",
"perception_audit_report": "analysis/perception-audit/records/bnd-perception-corpus-03/report.json",
"perception_auditor": "src/aisle/harness/perception_audit.py",
"perception_cli": "src/aisle/harness/cli.py",
"perception_eligibility": "analysis/perception-audit/records/bnd-perception-corpus-03/eligibility.json",
"perception_eligibility_cli": "tools/perception_eligibility.py",
"perception_eligibility_module": "src/aisle/harness/perception_eligibility.py",
"perception_envelope": "analysis/perception-audit/envelope.json",
"perception_model_lock": "src/aisle/verifier/models.lock",
"perception_models": "src/aisle/verifier/models.py",
"perception_raw_predictions": "analysis/perception-audit/records/bnd-perception-corpus-03/raw-predictions.json.gz",
"perception_record_cli": "tools/perception_record.py",
"perception_run_manifest": "analysis/perception-audit/records/bnd-perception-corpus-03/manifest.json",
"public_observation_source:docs/decisions/ADR-pilot-public-observations.md": "docs/decisions/ADR-pilot-public-observations.md",
"public_observation_source:docs/monolithic/public-observations.md": "docs/monolithic/public-observations.md",
"public_observation_source:registry/manifests/pilot-policy-surface.yaml": "registry/manifests/pilot-policy-surface.yaml",
"public_observation_source:src/aisle/harness/pilot_model_cache.py": "src/aisle/harness/pilot_model_cache.py",
"public_observation_source:src/aisle/harness/pilot_policy_surface.py": "src/aisle/harness/pilot_policy_surface.py",
"registry": "registry/manifests",
"research_prompt": "harness/CLAUDE.research.md",
"seed_commitment_predecessor": "analysis/freeze/bnd-task-band-calibration-v14/freeze-manifest.json",
"spec": "specs/490-non-oracle-task-band.md",
"validators": "src/aisle/harness/non_oracle.py"
},
"budgets": {
"evidence_kind": "unscored_pilot",
"heldout_seeds_per_artifact": 32,
"session_tokens": 200000,
"session_wall_s": 3600,
"sessions_per_interface_per_candidate": 16
},
"campaign_id": "bnd-task-band-calibration-v15",
"commands": [
"AISLE_FRAME_CAPTURE_PERIOD_S=0.1 uv run harness rollout --graph graphs/expert_t1_l2.yaml --tier T1 --embodiment franka --perception L2 --episodes 32 --seeds 0..31 --no-idea-gate --env-baseline local --run-id bnd-perception-corpus-03",
"uv run harness perception audit --run runs/bnd-perception-corpus-03 --envelope analysis/perception-audit/envelope.json --output /tmp/bnd-perception-corpus-03-report.json",
"uv run python tools/perception_record.py --report /tmp/bnd-perception-corpus-03-report.json --run runs/bnd-perception-corpus-03 --output analysis/perception-audit/records/bnd-perception-corpus-03",
"uv run python tools/perception_eligibility.py --report analysis/perception-audit/records/bnd-perception-corpus-03/report.json --envelope analysis/perception-audit/envelope.json --candidate t1-l2-expert-graph --role short_composition --graph graphs/expert_t1_l2.yaml --output analysis/perception-audit/records/bnd-perception-corpus-03/eligibility.json",
"uv run harness freeze check --manifest analysis/freeze/bnd-task-band-calibration-v14/freeze-manifest.json --allow-withheld-seeds"
],
"decision_rules": {
"alpha": 0.05,
"equivalence_margin": {
"expert_parity": {
"completion_time_s": 10.0,
"sidedness": "two-sided 0.90",
"success": 0.15
}
},
"multiplicity": "per-stratum floors are all-must-pass; no pooling rescue (BND-7)",
"power": 0.8,
"smallest_effect": {
"measure": "per-stratum identity accuracy floor",
"value": 0.9
},
"stopping_rule": "16 randomized sessions per interface per candidate (BND-9); no threshold relaxed after results (BND-10)"
},
"disposition": "short_composition candidate expert_t1_l2 is not perception-eligible on the frozen envelope (BND-7): 22 of 22 strata fail, led by target_class=ibuprofen (68 of 80 evaluation frames refused) with every other target's lower bound below the 0.90 floor; no threshold was changed (BND-10); role open pending a new human-reviewed candidate round; the ADR-66 pilot may still run on this candidate with BND-7 recorded as a machine-gate limitation",
"endpoints": {
"primary": [
{
"aggregation": "proportion per interface with exact interval; selection by BND-10 rule on pooled rate",
"direction": "nearest 0.50",
"id": "E-BND-1",
"outcome": "pilot_session_success_intent_to_treat",
"status": "descriptive",
"unit": "agent_session"
},
{
"aggregation": "per stratum lower bound vs frozen floor",
"direction": "higher",
"id": "E-BND-2",
"outcome": "perception_identity_accuracy_by_stratum",
"status": "inferential",
"unit": "frame_record"
}
],
"secondary": [
{
"aggregation": "paired equivalence interval within frozen margins (BND-8)",
"direction": "equivalent",
"id": "E-BND-3",
"outcome": "expert_parity_success_and_completion_time",
"status": "inferential",
"unit": "paired_dev_seed"
},
{
"aggregation": "per stratum",
"direction": "within envelope",
"id": "E-BND-4",
"outcome": "perception_refusal_and_latency",
"status": "descriptive",
"unit": "frame_record"
}
]
},
"exclusions": {
"deviation_policy": "any behaviour-affecting change after registration is a documented deviation record and a new campaign version id; confirmatory data never revises the registered protocol",
"infrastructure": [
"session launcher failure before first agent turn",
"provider outage recorded by the controller"
],
"rerun_policy": "a permitted rerun receives a new randomized id; the original row is retained with its exclusion reason and never replaced in place",
"treatment_integrity": [
"pre-registered treatment-integrity invalidation only; reported, never replaced (BND-9)",
"any oracle-derived signal on a policy path (BND-2)"
]
},
"hypotheses": [
{
"direction": "band membership",
"id": "H-BND-1",
"statement": "At least one candidate per role is perception-eligible, expert-parity-passing, and lands in the 0.20-0.80 intent-to-treat pilot band on both interfaces (BND-7..9)."
}
],
"instrument_set": {
"items": [
"short_composition:t1-l2-expert-graph",
"engineering:t2-label-read-stack"
],
"kind": "task_candidate"
},
"integrity_checks": [
{
"gate": "CON-7 frozen set",
"kind": "machine_check",
"owner_role": "env_hash checker",
"record": "tools/env_hash.json",
"status": "passed"
},
{
"gate": "BND-5 perception audit",
"kind": "machine_check",
"owner_role": "perception auditor (hardened, corpus-03, 32 development seeds, envelope unchanged); 22 strata failed their floor",
"record": "analysis/perception-audit/records/bnd-perception-corpus-03/report.json",
"status": "failed"
},
{
"gate": "BND-8 monolithic expert parity",
"kind": "machine_check",
"owner_role": "parity harness; monolithic control exists, independent authorship and operator evidence remain pending (MON-9)",
"record": null,
"status": "pending"
},
{
"gate": "BND-1 human-reviewed candidate amendment",
"kind": "external_review",
"owner_role": "project owner (CON-14)",
"record": null,
"status": "pending"
},
{
"gate": "seed commitment verification",
"kind": "machine_check",
"owner_role": "holder of the original private seed and salt sources",
"record": null,
"status": "pending"
}
],
"issue": 346,
"purpose": "calibration",
"schema_version": "aisle.freeze.declaration.v1",
"seed_commitment": {
"inherited_from": "analysis/freeze/bnd-task-band-calibration-v14/freeze-manifest.json",
"rule": "32 distinct integers in [1000,9999) drawn once from the OS CSPRNG, retained only under ~/aisle-private/freeze/bnd-task-band-calibration-v1/, disjoint by value from every committed dev/pilot seed list; revealed after the campaign closes",
"salt_source": "~/aisle-private/freeze/bnd-task-band-calibration-v2/salt.bin",
"seeds_source": "~/aisle-private/freeze/bnd-task-band-calibration-v2/seeds.json"
},
"spec": "490",
"superseded": "bnd-task-band-calibration-v14 (the perception CLI artifact src/aisle/harness/cli.py gained the ADR-67/ADR-68 `--sim-engine` selection on every sim-launching subcommand; calibration rules, seed lineage, pending gates and every other artifact are preserved, and Genesis remains the default and the only engine behind this campaign)"
}
Loading
Loading