PC assembly
A robot installs five parts into a desktop PC case: memory, CPU, cooler, graphics card and motherboard. Each part seats through simulated contact, keys, latches, levers and screws, with no snapping into place. Every VLA model will run the same 30 setups and starting positions.
Tasks
The case lies on its side with the side panel removed. M3 screws are driven with a push-to-drive screwdriver tool.
RAM
two DIMMs into slots A2 and B2: key, full seating depth, both latches caught
CPU
LGA with load plate and lever, or PGA ZIF; pin-1 orientation, plate closed, lever latched
Cooler
low-profile cooler with captive M3 screws, driven with a push-to-drive screwdriver
GPU
PCIe slot to full depth, slot latch caught, bracket screw fastened
Motherboard
board into the case, I/O to the rear, mounting screws fastened
Full build
All five installs in a row. Scored and reported apart from the main score.
A part counts as installed only when all of these hold on the final state:
- Identity: the right part in the right place, for example a RAM stick (DIMM) in slot A2 or B2.
- Orientation: the keyed orientation is correct (DIMM key, CPU pin 1, GPU connector, board I/O to the rear).
- Depth: pushed in to within a set distance of full depth for that part.
- Release: the gripper or tool no longer touches the part.
- Retention: latches caught, CPU load plate closed and lever latched, required screws fastened.
- Stability: the part stays still through the settle window after release.
A graphics card that sits in its slot without full depth, a caught latch and a fastened bracket screw does not count. We never report a partial assembly as a complete build. The checks are mechanical and say nothing about whether the PC would power on. Power supply, storage and cables are out of scope for v1.
10 machines, 3 layouts
Machines vary board form factor, socket type, RAM generation and latches, cooler size and screw count, GPU length, slot width and mass. Each setup is one machine on one layout, named M01-L1 to M10-L3.
| Id | Machine |
|---|---|
| M01 | office micro-ATX, Intel LGA, DDR5, compact 2-slot GPU |
| M02 | gaming ATX, Intel LGA, DDR5 tall spreaders, long 2.5-slot GPU |
| M03 | micro-ATX, AMD AM5 (LGA, lever left), DDR5, 2-slot GPU |
| M04 | micro-ATX, AMD AM4 (PGA ZIF socket), DDR4 two-sided latches, 2-slot GPU |
| M05 | small-form-factor mini-ITX, Intel LGA, DDR5 (adjacent slots), short 2-slot GPU |
| M06 | mini-ITX, AMD AM5, DDR5, single-slot low-profile-height GPU |
| M07 | workstation ATX, Intel LGA, DDR4, heavy 3-slot GPU |
| M08 | budget micro-ATX, AMD AM4 (PGA ZIF), DDR4 one-sided latches, compact GPU |
| M09 | ATX, AMD AM5, DDR5, 2.5-slot GPU |
| M10 | micro-ATX, Intel LGA, DDR4 two-sided latches, single-slot GPU |
nominal
bench fixture front-left, case front-right, trays behind, tools on the right
mirrored
fixture front-right, case front-left, tools on the left
shifted and rotated
case and fixture farther from the robot, turned 90 deg

Planned: three arms, 90 setups
The plan is to run every model on the same 90 setups: 10 machines x 3 layouts x 3 arms. Today only the Franka Panda is set up. The other two arms stay planned until the scripted reference solves all 30 setups on each.
| Arm | Status |
|---|---|
| Franka Panda (wrist camera) | in use |
| xArm6 + Robotiq 2F-85 | planned |
| UR5e + Robotiq 2F-85 | planned |
- Scoring: each model gets one score per arm; the cross-arm score is the average of the 3 arm scores, shown only when all 3 arms are done.
- Labels: each result says whether the model saw that arm in its training data.
- Not used: WidowX 250s: its 250 g payload cannot lift the GPU, board or cooler (it is still used in shape assembly).
Shape assembly already shows what a cross-arm comparison looks like: its scripted reference is measured on three arms (see the results).
Scoring
A unit is one setup and one task, so the score covers 150 units. If any unit has no tries, the score S is n/a and the run is marked incomplete. The 95% ranges are worked out as in shape assembly: Wilson intervals per setup, a bootstrap for task rates and S, and a paired bootstrap on matching starting positions when comparing two models.
| Run | Units | Tries per model | In the score |
|---|---|---|---|
| main score | 30 setups x 5 tasks, full pick | 1,500 | yes |
| full build | 30 setups | 150 | no |
| easier starts | L1 setups x 5 tasks x 2 starts (in hand, above the slot) | 1,000 | no |
| diagnostic | L1 setups x 8 faults | 400 | no |
reference
scripted controller that reads the exact part positions from the simulator; shows the task can be done
sanity
moves at random or holds still, with no camera input; checks the task cannot be passed by chance
frozen
released model, not trained on this task; the only ranked track
adapted
trained on this task, so listed apart from the released models
diagnostic
injected faults or impossible setups; not scored
Diagnostics
Injected faults and impossible setups that test whether a model notices a problem. Reported separately and not scored.
- X01 DIMM reversed in hand
- X02 DIMM partially seated
- X03 DIMM latch pre-closed
- X04 wrong RAM generation (unsolvable)
- X05 CPU rotated in hand
- X06 GPU partially seated
- X07 PCIe slot blocked (unsolvable)
- X08 screw cross-threaded (unsolvable)
RAM task: scripted reference
Dev split, run wp0fix_ram_ref150. The task list is not locked yet, so there are no test-split numbers.
Both RAM sticks installed, by start
Full pick: 30 setups x 5 tries. The two easier starts: all 30 setups x 3 tries, run before a fix to the key notch on the RAM stick. No 95% range has been published for these runs.
| Start | Tries | Successes | Split | Run |
|---|---|---|---|---|
| Starts in hand (grasped) | 90 | 90/90 | dev | before the key notch fix |
| Starts above the slot (near_slot) | 90 | 90/90 | dev | before the key notch fix |
| Full pick (pick) | 150 | 150/150 | dev | after the key notch fix |
Full pick tries in detail
| Metric | Value |
|---|---|
| Success | 150/150 |
| Control steps to finish, median / max | 222 / 315 at 25 Hz |
| Unintended contacts | 0 |
| Excessive-force steps | 0 |
| Drops | 0 |
| Retries | 5 |
| Max robot force | 49.9 N |
Source: pc-assembly-bench docs/simulation.md, RAM section 'After the cited key notch' (origin/main 435a4b9, added in c342695); in-hand starts: context/progress.md Stage 3 'RAM task' row.
All five tasks, scripted reference (dev split, task list not locked)
Early results while the task list is still a draft.
| Task | Run | Tries installed | Notes | Source |
|---|---|---|---|---|
| RAM | wp0fix_ram_ref150 | 150/150 (5 per setup) | both DIMMs keyed, fully seated, latches caught; run after the DIMM key notch fix | docs/simulation.md, RAM section, run commit 673dcef |
| CPU | m2_cpu | 90/90 (3 per setup) | socket starts closed; the reference opens it, places the CPU, closes the load plate and latches the lever | context/progress.md (Stage 3, CPU row), run commit 5579be6 |
| Cooler | cf_cooler | 90/90 (3 per setup) | secured with its captive screws, driven by the screwdriver; 0 drops, 0 excessive-force steps | docs/simulation.md (scripted references table, GPU row, re-run at d336431) |
| GPU | cf_gpu | 90/90 (3 per setup) | secured: seated, latched and bracket screws fastened (117 of 117 screws at end of travel). Force over 100 N in 40 steps across 16 episodes, during insertion | docs/sim_gpu.md "Fastened needs the end of travel", run commit d336431 |
| Motherboard | cf_mb | 90/90 (3 per setup) | secured with 4 mounting screws (360 of 360 fastened). Open issue: the screws do not hold the board sideways; it slides at about 20 N with the screws still fastened | docs/simulation.md (scripted references table, GPU row, re-run at d336431); caveat: context/progress.md (Stage 3, motherboard row) |
Models and status
| Model | Track | Status |
|---|---|---|
| scripted | reference | RAM measured (dev split); CPU, cooler, GPU and motherboard early results (dev split) |
| random, hold | sanity | Pilot on the dev split, incomplete (1 try per task on all 30 setups): 0/30 on each of RAM, CPU, cooler and motherboard |
| octo-small-1.5, octo-base-1.5 | frozen | Pilot on the dev split, incomplete (1 try per task on 3 of 30 setups): 0/3 on each of RAM, CPU, cooler and motherboard |
| openvla-7b | frozen | Pilot on the dev split, incomplete (1 try per task on 3 of 30 setups): 0/3 on each of RAM, CPU, cooler and motherboard |
| openvla-oft (5 LIBERO checkpoints) | frozen | Pilot on the dev split, incomplete (1 try per task on 3 of 30 setups): 0/3 on each of RAM, CPU, cooler and motherboard |