Jobs and the interface
Every long operation is a job, and the interface reports them consistently.
Where jobs appear#
| Surface | Where | What it gives you |
|---|---|---|
| Toasts | Bottom-right | One per lifecycle event; failures stay until dismissed and offer Details. Rapid sequences collapse. |
| Dock | Bottom-left pill | Active count and the top job's progress; hover expands the three most recent, with per-job cancel. Disappears 30 s after the last job completes. |
| Drawer | The pill, or j j | Every job: All / Running / Queued / Finished, filter by title or id, cancel all running, pause or resume the queue. |
| Plan checklist | Import groups in the drawer | The modules an import started in the background (the eager ones, or those you had already opened on a re-import): each step as waiting, running, skipped, or done, with Waiting on X where an ordering edge was declared. |
Job row fields#
| Element | Meaning |
|---|---|
| Status | queued, running, paused, completed, failed, cancelled. |
| Progress | A percentage when the module reports fractions or counts; indeterminate otherwise. |
| Rate and ETA | From the last 20 progress samples, or the module's own eta_seconds hint. |
| Stall hint | After three minutes without a tick. A hint about the job, not an error. |
| Actions | Cancel; Retry when the job failed. The job id copies from the details dialog. |
The queue runs WORKER_CONCURRENCY jobs in parallel (default 2, changeable live by an admin). A job's declared priority is shown in its details but there is no manual reordering, the queue can be paused without interrupting running work, and a job past JOB_EXECUTION_TIMEOUT_SECONDS (default 1800) is force-stopped, offload children included.
Keyboard shortcuts#
| Keys | Action |
|---|---|
| j j | Open the jobs drawer (ignored while typing). |
| Enter / Space | Open the focused job's details. |
| Esc | Close a sheet, dialog, or tour step. |
| ← → | Move through the product tour. |
| cmd/ctrl + A · D · Delete | Select all, duplicate, remove cards (dashboard edit mode). |
| Arrows (+ shift) | Nudge the selected cards. |
Interface conventions#
| Convention | Meaning |
|---|---|
| Colour | Only semantic: good, warning, serious, critical — always with an icon or label, never colour alone. |
| Loading | Skeletons above the fold; a canvas keeps its last result instead of unmounting. |
| Empty and error states | Every list has a designed empty state with the action that fills it, and a designed error state. |
| Motion | prefers-reduced-motion disables animation across the app. |