RobotDx › Reports › Round 2: the panel on the real rack. Published copy, redacted. Taken out: 23 home paths, 17 serials, 1 vault paths, 1 videos replaced by a still, 35 screenshots with serials and machine names covered. Evidence for D06, D07, D09, D10, D11. Written for Zach at the time, so it says “you”.

IO diagnostics · round 2

Plug the rack in and the panel says what is connected, what isn't, and what to check, in plain words. Printer-style utilities wrap your d_* tools, and every button dry-runs first.

io-diagnostics main @ a6853bde (local repo) · drivers on bam_ws claude/traj-tracking-sim-to-real-a3da60 @ bb393a35, not merged · live captures 2026-10-22T19:35:23-07:00, real rack, read-only. No button that writes or moves was pressed.

One frame from the hero video. The video itself is left out of the public copy.

A still from the middle of the video. The video is not in the public copy: its frames show the machine's name and device serials.

Hero: the live dashboard on this PC.

The rack, live

tree-light
Default view (structure P1, tree v6, skin Claude): entities only. The adapter holds its boards; the computer is not a fold.
adapter-28B3A25D
The second adapter: on USB, but its frames never reach the CAN wire (8,192 broadcast queries left lec 7 / dlec 7, err 0). The panel says so and lists what to unplug and measure.
adapter-272813EF
fdcanusb XXXXXXXX selected: the Utilities card, printer-style. Checks, then Maintenance, then Motion set apart.
can1-calibrate-dry-run
CAN 1 → Run calibration…: the dry run shows the exact moteus_tool command, each precondition with its state, and the confirm text naming CAN 1's hard stop and gravity load.
can1-calibrate-modal
Motion needs a ticked physical precondition before the button enables. The capture pressed Cancel.
table-light
The table uses the same rows as the tree, and the Message column no longer collapses (your screenshot showed “ME”).

Every button, and what it would run

These are real dry runs through the host (io-diagnostics act … --dry-run) against this PC's adapter and camera. Nothing ran. Same name = same meaning on every driver (docs/actions-vocabulary-v0.1.md).

ButtonDangerExact command its dry run reportsReplaces
Check communication
fdcanusb XXXXXXXX
querypy3 -m moteus_servo.diagnostics --bus-lock ~/.cache/rack-commissioning/bus.lock --firmware-cache ~/.cache/moteus-firmware --inventory ~/archive/datasets/bam_rig/rack_inventory diagnose --device /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00 --range 1 126d_find + d_triage
Check firmware
fdcanusb XXXXXXXX
querypy3 -m moteus_servo.diagnostics --bus-lock ~/.cache/rack-commissioning/bus.lock --firmware-cache ~/.cache/moteus-firmware --inventory ~/archive/datasets/bam_rig/rack_inventory diagnose --device /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00 --queries 0 --no-config
Stop all
fdcanusb XXXXXXXX
interruptspy3 ~/bam_ws/src/core/mdp/agent/actuators/moteus_servo/utils/moteus_with_targets.py ~/.local/bin/moteus_tool -t 1,14 --stop --fdcanusb /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00d_stop
Open console
fdcanusb XXXXXXXX
interruptspy3 ~/bam_ws/src/core/mdp/agent/actuators/moteus_servo/utils/moteus_with_targets.py ~/.local/bin/tview -t 1,14 --fdcanusb /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00d_tview
Update firmware…
fdcanusb XXXXXXXX · CAN 1
changespy3 a private note --target 1 --port /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00 --cache-dir ~/.cache/moteus-firmware --tool ~/.local/bin/moteus_toolthe update-moteus-firmware skill
Run calibration…
fdcanusb XXXXXXXX · CAN 1
moves~/.local/bin/moteus_tool --target 1 --calibrate --fdcanusb /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00d_calibrate
Update configuration…
fdcanusb XXXXXXXX · CAN 1
changes~/.local/bin/moteus_tool --target 1 --restore-config ~/.local/share/moteus-config/can-1.cfg --fdcanusb /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00d_config (its script is gone; stock moteus_tool --dump-config / --restore-config)
Clear faults
fdcanusb XXXXXXXX · CAN 1
changespy3 -m moteus_servo.diagnostics --bus-lock ~/.cache/rack-commissioning/bus.lock --firmware-cache ~/.cache/moteus-firmware --inventory ~/archive/datasets/bam_rig/rack_inventory act --device /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00 --action clear_faults --node 1
Reboot…
fdcanusb XXXXXXXX · CAN 1
interruptspy3 -m moteus_servo.diagnostics --bus-lock ~/.cache/rack-commissioning/bus.lock --firmware-cache ~/.cache/moteus-firmware --inventory ~/archive/datasets/bam_rig/rack_inventory act --device /dev/serial/by-id/usb-mjbots_fdcanusb_272813EF-if00 --action reboot --node 1
Change CAN id…
fdcanusb XXXXXXXX · CAN 1
changesran in 0.098 s · 1 linesd_reassign
Check communication
RealSense D405 · 6036
querypyrealsense2.context().query_devices() device.get_info(pyrealsense2.camera_info.<field>) for <field> in (name, serial_number, asic_serial_number, firmware_version, recommended_firmware_version, usb_type_descriptor, physical_port, product_id, product_line, firmware_update_id, connection_type), skipping any the device does not support
Check firmware
RealSense D405 · 6036
querypyrealsense2.context().query_devices() device.get_info(pyrealsense2.camera_info.<field>) for <field> in (name, serial_number, asic_serial_number, firmware_version, recommended_firmware_version, usb_type_descriptor, physical_port, product_id, product_line, firmware_update_id, connection_type), skipping any the device does not support
Reboot…
RealSense D405 · 6036
interruptsintel_rgbd.real.RealSenseCamera('XXXXXXXXXXXX').hardware_reset()
Update firmware…
RealSense D405 · 6036
changesexited 3 after 0.1 s
Run calibration…
RealSense D405 · 6036
changespyrealsense2.context().query_devices() device('XXXXXXXXXXXX').as_auto_calibrated_device().run_on_chip_calibration('{"speed": 3, "scan parameter": 0}', 120000) set_calibration_table(table) then write_calibration(), only when |health_before| >= 0.25 and |health_after| < |health_before|
Open console
RealSense D405 · 6036
interrupts/usr/bin/realsense-viewer

Five ways to see the entities

All six are live in the bottom-right Structure switcher, on the same live data. P1 is the default because it is literally “fdcanusb → Moteus c1 · CAN 15” plus a Ports toggle for the USB / PCIe detail. The single computer is never a fold in any of them.

structure-p1
p1 · Devices, transport as columns (default) — Only the things you plugged in: the adapter holds its boards. The USB / PCIe path is a quiet Connection column and tooltip; the Ports toggle brings the layers back.
structure-p2
p2 · Two views, one toggle — Devices by what they are for (Actuators / Cameras / Network / Computer) or by connection, like Windows Device Manager's two views; the same row stays selected across the toggle.
structure-p3
p3 · Path on demand — The entity tree, with the connection path as a breadcrumb under the selected row, a Path column, and a Paths toggle.
structure-p4
p4 · Compact folders — Today's physical tree with every single-child chain joined into one row (VS Code's compact folders); tty and video nodes become attributes.
structure-p5
p5 · Bus lens — The buses first (CAN · fdcanusb XXXXXXXX, USB cameras, PCIe, Ethernet), the computer's own topology folded into one Computer row.
structure-p0
p0 · Physical (round 1) — Round 1's physical tree, kept for comparison.

Eleven skins, light and dark

The seven you named, plus four of mine:

Every skin and mode passes the WCAG gate in the test, measured: text ≥ 4.5:1 on four surfaces, and problem shapes ≥ 3:1 on the surface and the selected row. OK rows stay uncoloured. Claude is the default.

skin-claude-lightskin-claude-dark
Claude (default)
skin-obsidian-lightskin-obsidian-dark
Obsidian
skin-notion-lightskin-notion-dark
Notion
skin-terminal-lightskin-terminal-dark
Terminal
skin-foxglove-lightskin-foxglove-dark
Foxglove / medkit
skin-shadcn-lightskin-shadcn-dark
shadcn/ui
skin-unstyled-lightskin-unstyled-dark
Unstyled (bring your own)
skin-isa101-lightskin-isa101-dark
ISA-101 HMI
skin-macos-lightskin-macos-dark
macOS Settings
skin-linear-lightskin-linear-dark
Linear
skin-contrast-lightskin-contrast-dark
High contrast

What the live rack caught

Decisions

Done and proved

Needs you

Deliberately not done