- v1 desk-state control โ PATCH /api/v1/workspace/loop + /api/v1/workspace/pause-until (closes long-outstanding parity gap)Until rev 82 the rev-1 desk-state primitive (loop on/paused/off) and the rev-21 scheduled-pause primitive (pauseUntilAt with auto-resume up to 14 days) were dashboard-only on the protocol-bound surface. An MCP host driving the desk could read the loop state via `GET /api/v1/workspace` but couldn't change it without a custom dashboard session โ the rev-1 primitive was 81 revs old without v1 parity. Rev 82 closes both gaps: `PATCH /api/v1/workspace/loop` accepts `{ loopState: 'on' | 'paused' | 'off' }`; `PATCH /api/v1/workspace/pause-until` accepts `{ pauseUntilAt: ISO | null }` with the same 14-day max window the dashboard route enforces. Both reuse the existing `updateWorkspaceLoopState` and `setWorkspacePauseUntil` helpers so the two surfaces share one server-side implementation. **Strategic significance**: the most load-bearing missing v1 primitive shipped today. An MCP-host watcher agent that detects an anomaly and wants to pause the desk while a human investigates can now do so without operator intervention โ pairs with the rev-21 in-app cost-cap warning + rev-32 cost-spike alarm to give the entire desk-state control surface programmatic parity.
- OpenAPI 3.1 spec expanded to workspace-config cluster (closes named rev-81 next-sprint candidate)Rev 81's running state explicitly named 'OpenAPI spec coverage expansion to the workspace-config endpoints' as the rev-82 candidate, citing the cluster of `/workspace` profile + loop + integrations + Slack quiet-hours + cost-cap + auto-archive endpoints that have shipped over many revs without typed schemas. Rev 82 closes that. The spec now types: `/workspace/loop` PATCH (rev-1 primitive), `/workspace/pause-until` PATCH (rev 21), `/workspace/auto-archive-config` GET/PUT (rev 49), `/workspace/cost-spike-config` GET/PUT (rev 56), `/workspace/source-cost-spike-config` GET/PUT (rev 59), `/workspace/source-chronic-spike-config` GET/PUT (rev 62), `/workspace/tag-cost-spike-config` GET/PUT (rev 69), plus the new rev-82 `panelOrder` field on dashboard-prefs. **Strategic significance**: the workspace-config cluster is the operator's primary defensive control surface โ daily cost cap, spike auto-pause across all four axes (per-task, per-source, per-tag), and stale-task auto-archive. MCP hosts wrapping `/api/v1` for autonomous defensive control now have typed contracts for every primitive in the cluster. Coverage continues to grow rev-by-rev; the full self-describing index at `/api/v1` remains authoritative for the complete endpoint list while the OpenAPI spec is the *typed* subset for code generators.
- Per-user panel ordering on dashboard-prefs (closes rev-81 forward-compat candidate)Rev 81's running state named four forward-compat candidates for the rev-79/80/81 dashboardPrefs JSONB shape: panel order, default sort, per-row column visibility on cost panels, per-recipient Slack quiet hours. Rev 82 closes the first one (and the most load-bearing for power-user dashboard density). New optional `panelOrder?: string[]` field on the existing `DashboardPrefs` TS type โ same multi-device sync mechanism as rev 78 (localStorage write-through cache for sync render, server JSONB as source of truth for cross-device drift). Capped at 60 entries with the same dedup + drop-empty normalisation as `collapsedPanels`. Panels not present in the array fall back to their default dashboard position so a partial reorder is supported (operators can pin Today + Approvals to the top without enumerating every panel id). Wired into both the dashboard `/api/workspace/dashboard-prefs` and v1 `/api/v1/workspace/dashboard-prefs` Zod schemas in lockstep, plus typed in the OpenAPI 3.1 spec. **Strategic significance**: the dashboard has accumulated 30+ panels over 80 revs. Rev 78 added per-panel collapse; rev 82 adds the layout primitive's TS type and v1 surface so the upcoming UI work has nothing left to wire on the protocol side. The third axis โ default sort โ and the fourth โ per-recipient Slack quiet hours โ remain natural rev-83+ candidates.
- v1 self-describing index documents the new endpointsThe rev-82 v1 endpoints (`PATCH /api/v1/workspace/loop`, `PATCH /api/v1/workspace/pause-until`) are listed in the `/api/v1` self-describing endpoint index alongside the existing 100+ entries. The cadence pattern from rev 37 onward (ship the dashboard primitive + the v1 mirror + the index entry + the OpenAPI typed schema in lockstep) holds. **Strategic significance**: the v1 surface remains *both* fully self-describing for human developers reading the index *and* fully typed for code generators reading the OpenAPI spec. Until rev 82 the rev-1 desk-state primitive was the longest-outstanding v1-vs-dashboard parity gap; rev 82 closes it.