Decisions › D20

Stable and Preview channels from the shared runtime, with the tray inside Stable

Decision
D20
Date
2026-10-23
Status
Accepted
Area
release

Context

Zach wanted RobotDx installed on his own computer so he could use it and give real feedback. The first install ran from a pinned snapshot so that agents editing the repository could not break the copy he uses; updating it meant moving that snapshot by hand.

The decision

Two channels from the shared Stable/Preview package. Stable serves a pinned copy of the page from the last Make Stable, with its API forwarded to the release's own tray process (the tray and the API are one process, so no two hosts run every driver twice against the same rack). Preview is the main checkout as it is now, restarted whenever its Python or a plugin declaration changes. Agent lanes get their own dev servers.

A floating chip at the bottom right of every channel shows Open Preview and Roll Stable Back on Stable, and Make Stable on Preview. The dock icon's right click does the same. At login a small service brings Stable up.

Why

“Please add the stable preview switch”

Zach Yamaoka, 23 Oct 2026

“move the stable preview switching to the bottom right corner”

Zach Yamaoka, 23 Oct 2026

Options considered

OptionVerdictReason
A pinned detached copy run by a login service (the first install, hours earlier)ReplacedThe tray was the whole service, and moving to a newer build meant a git command and a service restart.
The shared Stable/Preview runtimeChosenIt owns which release is Stable, so Make Stable and Roll Stable Back swap the tray and the page together.
Write a launcher and release script for this appNot builtThe shared package already exists, so only a config file and a small adapter in the app's own server were written.

Consequences

  • Snapshots leave out docs, reports, tests, prototypes and brand files, so a docs or report commit does not make the chip say “Stable is behind”, and about 190 MB of media never goes into a release.
  • The chip floats clear of the status bar after it sat on the picker controls at the bottom right.
  • The reason each setting is what it is lives in the doc, since JSON cannot carry comments.

Evidence

  • Stable and Preview channelsContract doc, 2026-10-23. Why each setting in stable-preview.json is what it is, and how the login service brings Stable up.

Commits in the app's repository (private):

  • f41b366 2026-10-23 Placeholder face and the installed tray
  • 8d598a2 2026-10-23 RobotDiagnostics in Stable / Preview release channels
  • 5446bed 2026-10-23 Chip: bottom-right, floating clear of the status bar

← All decisions