{# ── S-117 / S-125 / S-126 / S-127 console panel ── Three Alpine islands talk via a single window CustomEvent ``studio:job-start`` with ``detail.jobId`` (and optional ``detail.seed``): * S-127 generate launcher dispatches the event after a successful ``POST /api/generate`` (returns ``{job_id, seed}``). * S-126 cancel button listens, surfaces a Cancel control while a job is running, and POSTs ``/api/jobs/{job_id}/cancel`` on click. * S-125 live progress console listens, opens the S-109 ``/ws/jobs/{job_id}`` WebSocket via ``studioConsole()`` (``/static/studio_console.js``), and renders the per-table bars + rows/sec + terminal summary. Stable ids for the wave-merge / future stories: ``studio-generate-btn``, ``studio-seed-input``, ``studio-cancel-button``, ``studio-console-status``, ``studio-console-overall``, ``studio-console-tables``, ``studio-console-summary``. #}
No active run. Submit a generate job to stream live progress here.