The instrument floor, driven from this portal. A workflow is a list of
Device;Command lines; the floor runs them strictly one at a time and
streams its camera and its instrument feedback back into this page.
Click to append. Blank lines and # comments are ignored.
| POST | /workflows | text/plain body, one Device;Command per line. Returns { job_id, total_steps } immediately; 400 with a per-line explanation on a bad command. |
| GET | /workflows/{job_id} | Polled once a second. Returns state · current · total · current_step · log[], plus error when it fails. |
| GET | /health | Reachability of the floor: { ok, camera, queued, running[] }. Checked before anything else is drawn. |
| IMG | /camera/stream?fps=N | MJPEG, rendered by the bench panel above. Held at 8 fps; /camera/snapshot gives a single frame. |