Fifteen attempts to make a GR00T arm policy generalise. Two passed the gate; a new task can be taught, but not for free.
Every candidate runs the same six suites (12 scenes × 8 perturbed rehearsals, seed 42) and is compared with v5 scene by scene (paired McNemar). It is promoted only with a pooled gain and no suite significantly worse, a gate fixed before the first round was scored. Everything is simulation; the physical arm has not arrived.
Scoreboard
DAgger rounds 2 and 3 each cleared the gate: 464, then 483 on the retrain (the first round-3 run scored 481). Rounds 4 and 5, with RL-expert recoveries at ×8 and ×2, dropped back to 471 and 455. Real co-training (v9) loses 65; FLUX, trained on the same demos for the same volume, collapses. Since then, calibrated co-training (v11) is neutral at 472, failure-state synthesis falls to 437, and Autopilot's first cycle (441) traded stacking for a new task. Colours compare with v5; only the gate decides promotion.
Where round 2 gained
Better on five of six suites, significant on one; held-out objects did not move.
Grey dot is v5, coloured dot is round 2. The labels count scenes where only one checkpoint succeeded.
How it fails
Two DAgger rounds cut no_contact from 57 to 24. Holding rose from 4 to 18 in round 2 and eased to 13 in round 3: the policy grasps but does not always let go on target.
Each bar is one checkpoint's failures, split by the label FailureWatch assigns. FLUX fails four times as often, mostly without touching the block.
The DAgger loop
Each round rolls the current policy out, snapshots each failure, keeps the most uncertain within a balanced budget, and lets the scripted expert record a recovery from that exact state. Recoveries are weighted ×8 in training from round 2 on.
flowchart LR P["current policy"] -->|800 rollouts| F["failure snapshots"] F -->|"uncertainty band 5–80%, budget per type"| K["kept states"] K -->|scripted expert| R["recoveries"] R -->|"×8 + base demos"| T["fine-tune 4k steps"] T --> B["6 suites × 96 vs v5"] B -->|"pooled gain, no suite worse"| P
Each round the policy fails less and the script rescues only about 40% of kept states, so recoveries shrank 85 → 72 → 59. Rounds 4 and 5 swapped in the residual RL expert, which recovered 88 of 120 and 72 of 113, but the policy got worse.
FLUX predicts well and acts badly
Open-loop the LoRA beats holding the pose three to one at 32 steps; closed-loop it succeeds 50 times in 576.
Mean action error on 60 held-out demo frames, each fed its 7 preceding frames. The quantile bridge sits inside this loop both ways, so the mapping is not the problem.
An RL expert to recover what the script cannot
A residual policy on top of the scripted expert recovers 74.0% of held-out failure snapshots; the expert alone recovers 45.9%.
Recovery from DAgger failure states the policy never trained on (W&B run fb6yv89f), with fresh scenes still at 100%. Shaped PPO from scratch stays near 6% training success and is not shown. The next DAgger round records recoveries with this expert.
Autopilot: the loop that trains on what Preflight refuses
The first cycle taught a task the policy had never seen, 6 → 86 of 96, and transferred nothing to the task it held out (ring, 0 → 0). It also cost stacking (clean_many 88 → 76, real_1_pomade_tin 87 → 68), so the gate discarded it.
Every scene Preflight won't clear becomes a learning request. Autopilot ranks a fixed menu of tested recipes by the failures each could win back. Requests from real refusals rank first. Nemotron on Token Factory picks one of the top three; it never scores the result. The paired gate G3 judges it, and a human approves promotion. After cycle 1, Nemotron's proposed ring round was dropped as overtaken by the evidence. Cycle 4, a DAgger round answering four Preflight refusals, was discarded: no gain on new objects and both real-object suites worse. Live on the Autopilot Space.
flowchart LR
PF["Preflight: RETRY / ASK_HUMAN"] -->|learning request| AP["Autopilot: rank menu"]
BM["benchmark of served policy"] --> AP
AP -->|top 3 eligible| N["Nemotron picks one"]
N --> T["train on the A100"]
T --> G{"G3: target gain, no suite worse"}
G -->|pass| H["human approves"] --> PF
G -->|fail| L["ledger: DISCARD / KEEP"]
Every experiment, with its verdict
What is not established
- Nothing has run on the physical arm. The repo will be updated with live results when it arrives.
- Round 3's new-object gain (p=0.043) is one suite of six, uncorrected for multiple comparisons, from one seed.
- No single suite gain from round 3's retrain is significant on its own; the pooled gain passed a gate fixed in advance, twice in a row for rounds 2 and 3.
- Which of FLUX's two changes (current-frame conditioning, absolute targets) carries its 21-vs-3 gain; they were tested together.
- Whether a smaller share of new-task demos keeps the basket gain without the stacking loss; cycle 1 tried one mix (demos ×2, about 20% of episodes).
- Nemotron's choices are logged, not validated: the gate judges each cycle's result, not whether another recipe would have done better.
- One benchmark seed and one training seed per checkpoint.