System Designer #

URL: /designer

The System Designer is the visual surface for wiring a product's DUT pins to a station's instrument channels. Pick a product, pick a station, click a pin, click an instrument channel — the page draws the wire and auto-saves a fixture YAML to disk.

The bottom of the page has three tabs (Connections, Station Type, YAML Preview) that always reflect the current graph state.

Top bar — selection #

ControlPurpose
ProductDropdown of every product in the project's products/ directory. Picking one loads the product's pin map onto the design surface and, if a matching fixture YAML already exists for the auto-generated fixture ID, loads its connections too.
StationDropdown of every station in the project's stations/ directory. Picking one loads the station's instruments + channels into the right-side pool of wiring targets.
Load FixtureOpens a dialog listing every fixture in fixtures/. Pick one and the designer overlays its connections onto the current product.
Add InstrumentOpens a dialog to add an instrument to the current station definition. Fields: Instrument Type (optional dropdown from the project catalog — selecting one pre-fills channel names from the type's capability spec), Role Name (e.g. dmm, psu), Driver (e.g. examples.drivers.DMM), Channels (comma-separated).

ID bar #

FieldPurpose
System IDIdentifier the Station Type tab uses when rendering the station-type YAML preview. The designer does not write a station-type YAML on its own — the preview is for copy-paste or for matching against a hand-written stations/<id>.yaml.
Fixture IDIdentifier for the fixture YAML the designer writes on auto-save.

Auto-save writes fixtures/<fixture_id>.yaml whenever both IDs are set and the current graph has at least one connection. Triggered on:

  • Adding a wire by clicking a channel node while a pin is selected
  • Auto-Match

Things that do not trigger auto-save and require a wire add to flush:

  • Clear All — the empty-connections short-circuit means the on-disk file is not rewritten to reflect the cleared state
  • Drawer-initiated actions (Delete Connection, Delete Pin, Delete Instrument, edit a pin field)

There is no Save button anywhere on the page.

Status bar #

A row of counters and toggles, just above the design surface:

IndicatorMeaning
N / M pins wiredHow many of the product's pins are connected, and the total.
N availableHow many pins are still unconnected.
N instrumentsInstruments currently in the station.
Wiring: <pin>When a pin is selected and waiting for a channel click, the status bar shows it in a blue chip.
Hide Unused checkboxFilters the graph to only nodes with at least one connection.
Auto-Match buttonWalks every unconnected pin that has a characteristic defined on it, asks the matching engine for a compatible channel from the current station, and creates the connection. Pins without a characteristic are skipped silently.
Clear All buttonWipes every connection on the current fixture in memory. Does not trigger an on-disk write (see auto-save notes above) — the cleared state lives in the page until you add the next wire.

Design Surface #

An ECharts graph showing DUT pins on the left and instrument channels on the right, with wires drawn between connected nodes. Three interactions:

  • Click a pin — selects it. Status bar shows "Wiring: <pin>".
  • Click a channel while a pin is selected — creates the connection and clears the selection.
  • Click a wire — opens the connection in the right-side properties drawer. The drawer shows the connection's fields (Point Name, DUT Pin, Net, Instrument, Channel, optional Terminal) as read-only inputs with a Delete Connection button — it's a remove-or-leave-alone affordance, not an edit form.

When no product is selected and no instruments are loaded, the graph is replaced with a hint: "Select a product and load a station to begin."

Bottom tabs #

Three tabs share the panel below the graph; they always reflect the current graph state.

Connections tab #

A table of every current wire on the fixture.

ColumnWhat it shows
PointThe connection point name — auto-generated from pin + role at wire time and not user-editable
DUT PinThe pin on the product side
NetNet / signal name (optional, free-text)
InstrumentThe station instrument the wire terminates on
ChannelThe channel / terminal on that instrument

Click a row to open the same read-only-with-Delete drawer that the graph wires open.

When the fixture has no connections, the tab shows: "No connections yet. Wire pins to instrument channels above."

Station Type tab #

A live YAML preview of a station-type document derived from the current station's instruments. The structure mirrors what /stations consumes — useful for copying out to a stations/<id>.yaml file by hand. The designer does not save this on its own; you write it to disk yourself.

When no instruments are loaded, the tab shows: "No instruments added yet."

YAML Preview tab #

A live YAML preview of the fixture document — the file that gets auto-saved to fixtures/<fixture_id>.yaml. Cross-check this against the Fixture YAML schema to confirm the shape before you depend on the fixture in a run.

When the fixture has no connections, the tab shows: "No connections to preview."

Pre-fill via URL #

The designer accepts three URL query parameters; the URL is also kept in sync (via history.replaceState) as you make selections so the current state is bookmarkable.

ParameterPre-fills
productThe Product dropdown — ?product=<id>
stationThe Station dropdown — ?station=<id>
fixtureLoads an existing fixture by ID — ?fixture=<id>

Underlying data #

  • Products come from products/.
  • Stations come from stations/.
  • Fixtures (loaded and saved) live in fixtures/.
  • Auto-Match uses the same capability matching machinery used elsewhere to find a station-channel that satisfies a product pin's required signal direction.

Common tasks #

  • Wire a fresh fixture from scratch — pick Product + Station, set Fixture ID, click pins → click channels. Save happens automatically.
  • Iterate on an existing fixture — open the designer with ?fixture=<id> (or pick it from Load Fixture), make changes, watch the YAML Preview tab confirm the shape.
  • Generate a draft fixture quickly — load Product + Station, click Auto-Match, then refine the suggestions by clicking individual wires.

See also #