Decisions › D10

Rows are devices, not wires: one row per entity, the path one toggle away

Decision
D10
Date
2026-10-22
Status
Accepted
Area
UI

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.

StructureIdeaOutcome
P1 Devices, transport as columnsEntities only; the path is a quiet columnDefault, opened
P2 Two views, one toggleDevices by function against ConnectionsBecame “Group by Type”
P3 Path on demandA muted breadcrumb under the selected rowDropped: one row per entity, detail lives in the Table
P4 Compact foldersSingle-child chains join into one rowBecame “Group by Port”
P5 Bus lensCAN buses on top, then cameras and capture cardsBecame “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):

  • 170a25f 2026-10-22 Structure p1: devices, transport as columns
  • f5cc296 2026-10-23 Resizable panes and one View options popover
  • 7212d1f 2026-10-23 Round 3.5: back and forward through selections

← All decisions