Decisions › D10
Rows are devices, not wires: one row per entity, the path one toggle away
Context
The first live tree showed every layer: host, USB bus, port, tty, CAN bus, driver, motor. Zach's mental model was the devices, and the layers were in the way.
The decision
Rows are entities, labelled model · id (for example moteus-c1 · CAN 15). An adapter holds its boards. The USB and PCIe path is a quiet column, and a Ports toggle brings the layers back as rows. A single computer is never a fold: with one host its children are the top level. The table uses exactly the same rows as the tree.
On 23 October the structures became one “Group by” picker inside a single View options popover (Devices, Type, Port, Bus, Physical), with “Sort by” beside it. Devices is the default and opens expanded. Both pane boundaries drag, remember their widths and reset on a double click, and in the Table the inspector folds away.
Why
“Instead of like so many rows you have right now that are kinda obsecuring the devices on there...”
Zach Yamaoka, notes, 22 Oct 2026
“Ok I think the thing is that I personally do not think about devices in terms of the USB Port that they are pplugged into..”
Zach Yamaoka, notes, 23 Oct 2026
“p1 is a reasonable default view and by default it should be expanded so you see the things inside”
Zach Yamaoka, notes, 23 Oct 2026
“in p3 I don't like giving each entity more than 1 row:”
Zach Yamaoka, notes, 23 Oct 2026
“Please give me the option to resize the sise of the side bar.”
Zach Yamaoka, notes, 23 Oct 2026
“You almost never do that and I almost always want that ability”
Zach Yamaoka, notes, 23 Oct 2026
Options considered
Round 2 built five structures. Round 3 turned the survivors into the Group by picker.
| Structure | Idea | Outcome |
|---|---|---|
| P1 Devices, transport as columns | Entities only; the path is a quiet column | Default, opened |
| P2 Two views, one toggle | Devices by function against Connections | Became “Group by Type” |
| P3 Path on demand | A muted breadcrumb under the selected row | Dropped: one row per entity, detail lives in the Table |
| P4 Compact folders | Single-child chains join into one row | Became “Group by Port” |
| P5 Bus lens | CAN buses on top, then cameras and capture cards | Became “Group by Bus” |
Consequences
- A standing rule came out of the resize request: every side panel, sidebar, inspector or split view gets draggable boundaries, a remembered size, and an inspector that folds away.
- A part's problem is drawn on its owner, with the part's own words (“driver: fault 33”), so an independent cause is drawn once.
- Stored text renders as authored: the label is
moteus-c1 · CAN 15, not a prettified name.
Evidence
- Round 2: the panel on the real rackReport, 2026-10-22. Evidence for this decision.
- Round 2 briefContract doc, 2026-10-22. Zach's round-2 feedback as five structure proposals and eleven skins.
- Round 3 briefContract doc, 2026-10-23. What was settled in round 3 (resizable panes, warning colours reserved, quieter utilities) and the three sets of proposals.
- Round 2 seams: tokens, skins and structuresContract doc, 2026-10-22. The contract for skins, structures, the row object and page state, with the decisions taken in rounds 3 and 3.5.
Commits in the app's repository (private):
170a25f2026-10-22 Structure p1: devices, transport as columnsf5cc2962026-10-23 Resizable panes and one View options popover7212d1f2026-10-23 Round 3.5: back and forward through selections