Decisions › D20
Stable and Preview channels from the shared runtime, with the tray inside Stable
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
| Option | Verdict | Reason |
|---|---|---|
| A pinned detached copy run by a login service (the first install, hours earlier) | Replaced | The tray was the whole service, and moving to a newer build meant a git command and a service restart. |
| The shared Stable/Preview runtime | Chosen | It 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 app | Not built | The 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):
f41b3662026-10-23 Placeholder face and the installed tray8d598a22026-10-23 RobotDiagnostics in Stable / Preview release channels5446bed2026-10-23 Chip: bottom-right, floating clear of the status bar