Skip to content

Commit eba91d7

Browse files
tryakshclaude
andcommitted
Measure the capability envelope and correct two claims it disproved
Certification only showed the policy works inside its training distribution. Two sweeps push the promoted Level-2 policy past that range, one axis at a time, 500 episodes per point at full reset distance. Initial pose error is the binding axis. Success falls 100% at 1-2x trained reset noise, 97.0% at 3x, 87.8% at 4x, 62.4% at 6x, 42.6% at 8x, 21.2% at 12x, so roughly double the trained noise is absorbed for free and the half-success point is near 7x. Every point, including 12x, had zero instability and zero non-finite terminations: the policy stops completing insertions rather than diverging. Two claims did not survive contact with the data, and both are corrected in place rather than dropped: The predicted failure mode was wrong. Margin analysis said orientation would break first because it consumed 97.8% of its tolerance. The measured failure is lateral divergence, with terminal lateral error p95 jumping from 0.0 mm at 3x to 60.6 mm at 4x and tripping the 60 mm predicate. Orientation rises in failing episodes but is a symptom, not the termination. The Level-2 blade-mass claim is close to vacuous. Sweeping mass to 1-50 kg, more than triple the trained range, is still 100% with nearly identical terminal metrics. In zero gravity with a fixed-joint grasp and millimetre-scale quasi-static motion, inertial forces are tiny, so mass barely enters the dynamics. The mass-bucket gate passed because the task is mass-insensitive, not because the policy learned mass robustness. Read Level 2 as tight-clearance robustness only. Also records that contact forces are solved but never observed or limited, so there is no damage-safety claim, and promotes that to the next roadmap item. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 493278e commit eba91d7

7 files changed

Lines changed: 996 additions & 17 deletions

File tree

‎CLAUDE.md‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@ Sim2Real plan.
2626
Levels 0, 1, and 2 of the secured-grasp insertion curriculum are promoted, each
2727
on three held-out evaluation seeds, at 100% success over roughly 9,000 episodes
2828
per level (27,121 total) with terminal metrics captured before Isaac Lab's
29-
automatic reset. Level 2 covers 1.5 mm side clearance and 5–15 kg payload mass.
30-
Level 3 stiction is physically blocked; terminal orientation error already
31-
consumes 97.8% of its tolerance, so that is the axis to instrument first. The
29+
automatic reset. Level 2 covers 1.5 mm side clearance and 5–15 kg payload mass. Envelope sweeps
30+
past the trained range show initial pose error is the binding axis (half-success
31+
near 7× trained noise, failing by lateral divergence, never by numerical
32+
instability), while blade mass is not a meaningful axis in this regime, which
33+
weakens the Level-2 mass claim. Level 3 stiction is physically blocked. The
3234
blade is held by a PhysX fixed joint standing in for an already-secured grasp;
33-
that is not learned grasping. Full numbers, limitations, and the pre-existing
34-
`train.py --smoke` probe defect live in `docs/status.md`.
35+
that is not learned grasping. Contact forces are solved but never observed or
36+
limited, so there is no damage-safety claim. Full numbers, limitations, and the
37+
pre-existing `train.py --smoke` probe defect live in `docs/status.md`.
3538

3639
## Operating rules
3740

‎README.md‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ snapshot is:
219219
| Phase-2 robust task | Integration passed | CUDA smoke checkpoints saved at level 0 and level 4; six actions, zero gravity, no sensors, mass/friction/stiction ranges and compliant mount constructed; this is not convergence evidence |
220220
| Secured-grasp Level 0 (collision-free) | Promoted on three held-out seeds | Epoch 700 achieved 9,086/9,086 deterministic successes across near/medium/full starts on seeds 1060/2060/3060 (Wilson 95% lower bound 0.9996), with zero timeout, failure, mount-instability, or non-finite termination. Terminal pose, velocity, and cycle-time metrics are captured before Isaac Lab's automatic reset. |
221221
| Secured-grasp Level 1 (physical side rails) | Promoted on three held-out seeds | Fine-tuning the epoch-700 policy for 500 more PPO epochs achieved 9,014/9,014 deterministic successes on seeds 1061/2061/3061 with real wide side-rail collision and doubled reset joint noise (Wilson 95% lower bound 0.9996), zero instability. Stage-0 terminal axial error improved from 4.15 mm to 1.65 mm. |
222-
| Secured-grasp Level 2 (tight rails + 5–15 kg mass) | Promoted on three held-out seeds | Fine-tuning the Level-1 policy for 600 more PPO epochs achieved 9,021/9,021 deterministic successes on seeds 1062/2062/3062 with 1.5 mm side clearance and blade mass randomized over an observed 5.00–14.97 kg, including 100% in each of the low/mid/high mass bands. Full-distance cycle time improved to 7.20 s median. Terminal orientation error reaches 97.8% of its tolerance, the thinnest remaining margin. Level 3 stiction settling and Level 4 remain blocked. |
222+
| Secured-grasp Level 2 (tight rails + 5–15 kg mass) | Promoted on three held-out seeds | Fine-tuning the Level-1 policy for 600 more PPO epochs achieved 9,021/9,021 deterministic successes on seeds 1062/2062/3062 with 1.5 mm side clearance and blade mass randomized over an observed 5.00–14.97 kg. Full-distance cycle time improved to 7.20 s median. Level 3 stiction settling and Level 4 remain blocked. |
223+
| Capability envelope | Measured, not certified | Pushing the Level-2 policy past its training range: success degrades gracefully with initial pose error (100% at 1–2×, 97.0% at 3×, 62.4% at 6×, 21.2% at 12×), failing by lateral divergence with **zero** instability at every point. Blade mass is flat at 100% out to 1–50 kg, which shows the task is nearly mass-insensitive in this regime and that the Level-2 mass claim is weak. |
223224
| Nominal insertion baseline | Diagnosed, not promoted | Superseded 300-iteration curriculum: 56.35% full-distance and 22.57% near-distance deterministic success on unseen seed 1042; all failures were timeouts and the 90% gate was not met |
224225
| Mixed-curriculum axial baseline | Diagnosed, not promoted | Fresh 300-iteration run stayed correctly at Level 0 and achieved 1,292/2,000 (64.6%) near-distance deterministic success; lateral error remained above tolerance, motivating three-axis translation control |
225226

@@ -294,6 +295,12 @@ validated.
294295
- Because every certification episode succeeded, the reported terminal error
295296
distribution is bounded by the success criterion itself. It shows where
296297
inside the tolerance box the policy lands, not accuracy independent of it.
298+
The capability-envelope sweeps exist to cover that gap.
299+
- Blade-mass robustness is close to vacuous for this task: in zero gravity with
300+
a fixed-joint grasp and millimetre-scale quasi-static motion, mass barely
301+
enters the dynamics, and a sweep to 1–50 kg is still 100%.
302+
- Contact forces are solved by PhysX but never observed, limited, or reported,
303+
so nothing here demonstrates the insertion would not damage a connector.
297304
- Level-0 margin is thin on two axes: terminal axial error reaches 11.96 mm of
298305
the 12 mm limit and orientation error reaches 0.0484 of the 0.0524 rad limit.
299306
Lateral error and blade velocities keep comfortable margin.

‎docs/claim_vs_evidence.md‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ insertion of an already-secured replacement blade into a rack in microgravity**.
2626
| --- | --- | --- |
2727
| A PPO policy inserts a secured blade with no rack contact, from three reset distances | 9,086 / 9,086 deterministic episodes, seeds 1060/2060/3060, Wilson 95% lower bound 0.9996 | `evidence/rigid_grasp_l0_ep700_certification.json`. Simulation only. Held-out *evaluation* seeds, one training seed |
2828
| The policy still succeeds when the rack side rails are physically collidable and initial pose error is doubled | 9,014 / 9,014 deterministic episodes, seeds 1061/2061/3061, Wilson 95% lower bound 0.9996 | `evidence/rigid_grasp_l1_ep1200_certification.json`. Fine-tuned 500 PPO epochs from the Level-0 checkpoint |
29-
| The policy still succeeds at 1.5 mm side clearance with payload mass randomized over 5-15 kg | 9,021 / 9,021 deterministic episodes, seeds 1062/2062/3062, and 100% in each of the low, mid, and high mass bands over an observed 5.00-14.97 kg | `evidence/rigid_grasp_l2_ep1800_certification.json`. Fine-tuned 600 PPO epochs from the Level-1 checkpoint |
29+
| The policy still succeeds at 1.5 mm side clearance with payload mass randomized over 5-15 kg | 9,021 / 9,021 deterministic episodes, seeds 1062/2062/3062, and 100% in each of the low, mid, and high mass bands over an observed 5.00-14.97 kg | `evidence/rigid_grasp_l2_ep1800_certification.json`. **The mass half of this is close to vacuous**: a sweep to 1-50 kg is also 100%, because zero-g quasi-static motion makes the task nearly mass-insensitive. Read this as tight-clearance robustness, not payload robustness |
3030
| Progressive fine-tuning improved precision and speed, it did not merely preserve success | Stage-0 terminal axial error fell from 4.15 mm mean (L0) to 1.65 mm (L1); full-distance median cycle time fell from 7.90 s (L0) to 7.20 s (L2) despite tighter clearance and a threefold mass range | Same reports. Distribution is bounded by the success criterion, see below |
3131
| Terminal-state evidence cannot be corrupted by the simulator's automatic reset | `TerminalMetricsMixin` snapshots each episode inside `_reset_idx`; unit tests assert the captured value differs from the post-reset value | `tests/test_terminal_metrics.py` |
3232
| No episode ended in numerical or physics instability | Zero non-finite and zero mount-instability terminations across 27,121 episodes | Categorization prefers instability over success when both fire in one control step |
3333
| Simulated cycle time is measured, not estimated | Median 7.2 s at full reset distance, 1.2 s at near distance, at 30 Hz control | Simulated time. Does not include perception, approach, grasp, or extraction |
3434
| Training is reproducible on consumer hardware | 512 environments on a 12 GB laptop GPU; 500 PPO epochs in about 22 minutes at 5,000-8,500 environment-steps/s | Isaac Sim 5.1 publishes a 16 GB VRAM minimum; this runs under it via benchmark-driven environment counts |
35-
| The remaining margin is known and stated, not hidden | Terminal orientation error at Level 2 reaches 0.0512 rad of a 0.0524 rad limit, 97.8% of budget | Orientation is the least-headroom axis and the predicted first failure mode at Level 3 |
35+
| The operating envelope is characterized, not just the operating point | Success degrades monotonically from 100% at the trained pose error to 97.0% at 3×, 62.4% at 6×, and 21.2% at 12×, with the half-success point near 7× | `evidence/rigid_grasp_l2_envelope_pose_error.json`. 500 episodes per point, one axis varied at a time |
36+
| The policy degrades safely rather than diverging | Zero instability and zero non-finite terminations at every sweep point, including 12× pose error where it fails four episodes in five | It stops completing insertions; it never blows up numerically |
37+
| The dominant failure mode is identified | Lateral divergence: terminal lateral error p95 goes from 0.0 mm at 3× to 60.6 mm at 4×, tripping the 60 mm failure predicate. Timeouts stay a small minority | This contradicted the prediction from margin analysis, which expected orientation to fail first. Orientation rises in failing episodes but is a symptom |
3638

3739
## What is not established
3840

@@ -42,6 +44,8 @@ insertion of an already-secured replacement blade into a rack in microgravity**.
4244
| Sim2Real transfer | No real UR10e, hardware-in-the-loop rig, wrist force/torque sensor, calibrated camera, orbital acceleration data, or radiation dataset has been used |
4345
| Accuracy independent of the success criterion | Because every certification episode succeeded, the terminal error distribution is bounded by the success box. It shows where inside tolerance the policy lands, not error it was free to exceed |
4446
| Robustness to rail stiction or mount compliance | Level 3 stiction reaches valid geometry but cannot settle below velocity limits and is documented as blocked, not hidden. Level 4 floating-mount wobble is blocked behind it |
47+
| Payload-mass robustness in any meaningful sense | The task is nearly mass-insensitive in this regime, so the mass sweep is flat. A real mass axis needs faster motion, real grasp friction where weight sets slip margin, or gravity |
48+
| Damage safety | Contact forces are solved by PhysX but are not observed, limited, or reported. There is no peak-force or impulse budget, so nothing here shows the insertion would not bend a connector |
4549
| Cross-seed training repeatability | Each promoted policy comes from one training seed. The three certification seeds vary *evaluation* initial conditions only |
4650
| Perception | The policy consumes ground-truth blade pose. The vision student is scaffolding and has not been trained from the promoted policy |
4751
| Industrial fidelity | Rack, blade, and rail are primitive proxies with no connector, latch, cable, chamfer, measured tolerance, or force-displacement curve |
@@ -65,6 +69,13 @@ insertion of an already-secured replacement blade into a rack in microgravity**.
6569
- **Gate is in code.** `scripts/aggregate_evaluation.py` exits non-zero when any
6670
stage, the pooled rate, any randomized-parameter bucket, or the instability
6771
count fails. Thresholds are arguments, recorded in the report.
72+
- **Stress runs cannot pose as certification.** Evaluating outside the trained
73+
distribution flips the report to `simulation_capability_envelope` and marks
74+
the gate non-applicable, so a deliberately degraded result can never be
75+
mistaken for a promotion.
76+
- **A failed prediction is recorded, not quietly dropped.** Margin analysis said
77+
orientation would break first. The sweep showed lateral divergence. Both are
78+
in `docs/status.md`.
6879

6980
## Honest one-line summary
7081

‎docs/roadmap.md‎

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,40 @@
88
`scripts/aggregate_evaluation.py` pools runs and applies the gate.
99
2. ~~**Promote L1.**~~ Done 2026-08-08. See `docs/status.md`.
1010
3. ~~**Promote L2.**~~ Done 2026-08-08. See `docs/status.md`.
11-
4. **Resolve L3 physically before training.** Plot rail force, blade velocity,
11+
4. ~~**Characterize the capability envelope.**~~ Done 2026-08-09. Pose error is
12+
the binding axis (half-success near 7× trained noise, failing by lateral
13+
divergence); blade mass is not a meaningful axis in this regime. See
14+
`docs/status.md`.
15+
5. **Make contact force a measured quantity, then a constraint.** PhysX solves
16+
contact forces but nothing observes, limits, or reports them, so there is no
17+
damage-safety claim at all. Add a contact sensor on the blade, record peak
18+
force and accumulated impulse into the terminal metric row, then train a
19+
force-limited variant with abort-and-retry. This is the difference between an
20+
academic insertion demo and an industrial one.
21+
6. **Resolve L3 physically before training.** Plot rail force, blade velocity,
1222
contact impulse, and action versus time. Check whether the stiction
1323
implementation injects energy or chatters at zero velocity. Prefer a
1424
continuous, measured friction/connector force curve and force/admittance-
15-
limited insertion over arbitrary reward changes. The Level-2 certification
16-
predicts where this breaks: terminal orientation error already consumes 97.8%
17-
of its tolerance, so orientation is the axis to instrument first.
18-
5. **Add industrially meaningful hardware proxies.** Replace primitive
25+
limited insertion over arbitrary reward changes. Instrument the lateral axis
26+
first: the envelope sweep showed lateral divergence, not orientation, is what
27+
actually terminates failing episodes, even though orientation consumes 97.8%
28+
of its tolerance at Level 2.
29+
7. **Add industrially meaningful hardware proxies.** Replace primitive
1930
rail/handle geometry with measured, non-proprietary CAD; add chamfers,
2031
latch/connector engagement, wrench sensing, peak force/impulse limits, and
2132
abort/recovery behavior.
22-
6. **Learn grasp/extraction as a separate skill.** Validate force closure and
33+
8. **Learn grasp/extraction as a separate skill.** Validate force closure and
2334
axial pull with real pad collision before PPO. Do not remove the fixed joint
2435
from insertion until that gate passes.
25-
7. **Compose skills under a task manager.** Prefer separately validated
36+
9. **Compose skills under a task manager.** Prefer separately validated
2637
reach/grasp/extract/stow/insert policies over one monolithic sparse-reward
2738
policy.
28-
8. **Perception and adaptation.** Collect RGB/proprio/action data from the
39+
10. **Perception and adaptation.** Collect RGB/proprio/action data from the
2940
robust state policy, behavior-clone a vision policy, then fine-tune with
3041
asymmetric PPO. Keep ground-truth blade pose out of the deployable actor.
3142
Consider a real-world residual/adaptation layer only after safe hardware
3243
instrumentation exists.
33-
9. **Portfolio release.** Publish a short side-by-side video, learning curve,
44+
11. **Portfolio release.** Publish a short side-by-side video, learning curve,
3445
held-out failure montage, benchmark JSON, model card, and the one-page claim
3546
versus evidence table. Put checkpoints and videos in GitHub Releases, not Git
3647
history.

‎docs/status.md‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,63 @@ evaluator and for a two-iteration checkpoint-resume training run through the
120120
passed for Levels 0, 1, and 2. Sustained environment-only benchmarks passed at
121121
1024 state and 256 vision environments; full PPO memory differs.
122122

123+
## Capability envelope
124+
125+
Certification says the policy works inside the distribution it trained on. It
126+
says nothing about where that ends. These sweeps push the promoted Level-2
127+
policy past its training range, one axis at a time, at full reset distance with
128+
500 episodes per point on evaluation seed 7060. They are **measurements, not
129+
certification**: the reports carry `evidence_type:
130+
simulation_capability_envelope` and their promotion gate is marked
131+
non-applicable.
132+
133+
### Initial pose error is the binding axis
134+
135+
Scale multiplies the trained reset joint-noise envelope of 0.001/0.002/0.004 rad
136+
by stage. Blade mass is held at the trained range.
137+
138+
| Pose noise | 1× | 2× | 3× | 4× | 6× | 8× | 12× |
139+
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
140+
| Success | 100% | 100% | 97.0% | 87.8% | 62.4% | 42.6% | 21.2% |
141+
| Failures | 0 | 0 | 15 | 58 | 166 | 268 | 394 |
142+
| Timeouts | 0 | 0 | 0 | 3 | 22 | 19 | 0 |
143+
144+
Report: `evidence/rigid_grasp_l2_envelope_pose_error.json`.
145+
146+
Degradation is monotonic and graceful, with roughly double the trained noise
147+
absorbed for free and the half-success point near 7×. **Every point, including
148+
12×, had zero instability and zero non-finite terminations**: the policy fails
149+
by not completing the insertion, never by diverging numerically.
150+
151+
The failure mechanism is **lateral divergence, not orientation**. Terminal
152+
lateral error p95 jumps from 0.0 mm at 3× to 60.6 mm at 4× and 92.9 mm at 12×,
153+
tripping the 60 mm lateral failure predicate; timeouts stay a small minority.
154+
This *contradicts* the earlier prediction from the Level-2 margin analysis, which
155+
expected orientation to break first because it consumed 97.8% of its tolerance.
156+
Orientation error does rise in failing episodes, but it is a symptom; the
157+
termination is lateral.
158+
159+
### Blade mass is not a meaningful axis in this regime
160+
161+
Pose error held at the trained level; only the mass range varies.
162+
163+
| Mass range (kg) | 5–15 (trained) | 3–20 | 2–25 | 1–35 | 1–50 |
164+
| --- | ---: | ---: | ---: | ---: | ---: |
165+
| Success | 100% | 100% | 100% | 100% | 100% |
166+
167+
Report: `evidence/rigid_grasp_l2_envelope_blade_mass.json`. Terminal metrics are
168+
nearly identical at every range (axial p95 about 9.7 mm, orientation p95 about
169+
0.050 rad).
170+
171+
**This weakens the Level-2 claim and should be stated plainly.** "Robust to
172+
5–15 kg payload mass" sounds substantial but is close to vacuous here: in zero
173+
gravity, with the blade held by a fixed joint and the tool moving in
174+
millimetre-scale quasi-static increments at 30 Hz, inertial forces are tiny, so
175+
mass barely enters the dynamics. The Level-2 mass-bucket gate passed because the
176+
task is insensitive to mass, not because the policy learned mass robustness. A
177+
mass axis only becomes meaningful with faster motion, real grasp friction where
178+
weight sets slip margin, or gravity.
179+
123180
## Demonstration assets
124181

125182
Recorded from the promoted Level-2 checkpoint at full reset distance, 300

0 commit comments

Comments
 (0)