Draw curves in the terminal, and stop waiting five seconds to hear

`space` ticks runs on the serve dashboard's table and `enter` compares them:
one metric in braille, five distinct hues, and the table of what actually
differs under it. Both halves are routes that already existed — the browser's
own comparison endpoint for the curves, the runs export for the table, whose
input columns are filtered to the ones that vary.

The palette is hue rather than the web's lightness ramp on purpose: five steps
of one brand hue collapse to a single colour on a 16-colour tty.

The screen also subscribes to the engine's event bus over the same websocket a
browser uses, so a run that starts and finishes inside a tick is seen rather
than only recorded. `a` lists what a run left behind and fetches it.
This commit is contained in:
2026-08-30 12:51:08 +02:00
parent 1bb18e14ac
commit dd34b59b2d
12 changed files with 926 additions and 35 deletions
+34
View File
@@ -125,6 +125,9 @@ by it.
| `s` | stop the engine, or start it again |
| `r` | restart it |
| `c` | cancel the run the cursor is on |
| `space` | tick the run under the cursor into a comparison |
| `enter` | compare the ticked runs, or draw the one under the cursor |
| `a` | list what the run left behind, and fetch it |
| `e` | pair with a portal, without leaving the screen |
The engine is a child process rather than a thread, which is what makes those
@@ -136,6 +139,37 @@ stopped from here only when it is this installation's own: both the pidfile
beside the data and a token this directory's key signed have to agree. Another
installation's engine is named and left alone.
The screen subscribes to the engine's event bus over the same websocket a
browser uses, so a run appears the moment it starts rather than at the next
poll — which is what used to make a run that started and finished inside five
seconds visible only in the history. It reconnects on its own, quietly: an
engine stopped from this screen is a normal state, not an error to fill the
log pane with.
#### Comparing runs
`enter` opens a comparison of the ticked runs: one metric's curve for each,
over a table of what differs between them.
The curves are drawn in braille, five to a chart, in five distinct colours —
a deliberate departure from the browser's chart palette, where the five series
step one hue by lightness. Hue is what survives a terminal. Every curve is
named in the legend either way.
Two pickers sit above the chart. The first is the metric, named as the run
records it — `train.loss` rather than `loss`, since a name is qualified by the
node that published it. The second is what it is plotted against: the step,
`time (s)` measured from each run's own first reading so runs started hours
apart lie on top of each other, or another metric of the same runs.
The table below keeps only what actually differs — the inputs whose values are
not the same in every run, and the seed when it varies — beside each run's
status, duration and final numbers. A parameter every run shared is not a
column worth scanning.
A run that is still going has its curve re-read once a second, and the whole
comparison refreshes when the engine says a run finished.
## `fluksio enroll`
Pairs an existing installation with a portal.