- `GET/PUT /api/v1/workspace/dashboard-prefs` โ bearer-auth v1 mirror of the rev-78 dashboard endpointCloses the v1 parity gap on the rev-78 dashboard prefs primitive in the same cycle pattern that has been running since rev 37 โ every dashboard primitive ships with the corresponding v1 path within one rev. Until rev 79 the rev-78 multi-device sync of panel collapse state was dashboard-only on the protocol-bound side; an MCP host driving the desk could read every other workspace member field but couldn't sync the per-user dashboard preferences. Caller specifies `userId` via `?userId=`; defaults to workspace owner so a quick MCP probe works without enumerating members first. Forward-compat: rev 79 also extends the prefs JSONB shape with `digestPersonalSections` (per-recipient digest opt-out) and `collapsedActivityBuckets` (multi-device sync of the rev-78 activity-log time-bucket UI). MCP hosts can sync all three through the same endpoint.
- Per-recipient digest opt-out for the rev-25 / 31 / 49 / 53 / 76 / 78 personal sectionsMulti-operator desks accumulate operators with different digest preferences โ some admins are already on top of their queue and want only the workspace-shared summary; others want the full personal-section experience. Until rev 79 the only digest control was the workspace-wide `digestEmail` boolean. Rev 79 adds the per-recipient `digestPersonalSections` toggle (default true). When false, the daily digest skips the rev-25 assignee + rev-31 mentions + rev-49 personal stale + rev-53 personal cost + rev-76 personal chronic + rev-78 personal inbox sections for THAT recipient โ they still get the workspace-shared summary, fresh signal, and approval-waiting blocks. Persisted on `workspace_member.dashboardPrefs` so multi-operator teams have per-recipient control without a new schema column. UI in the integrations panel right under the existing digest on/off toggle. **Strategic significance**: closes the per-recipient personalisation symmetry on the OPT-OUT axis. The rev-25/31/49/53/76/78 cycle built six per-recipient personal sections; rev 79 makes them recipient-controllable.
- Per-bucket collapse on the rev-78 time-bucketed activity log (multi-device sync)Rev 78 introduced Today / Yesterday / Earlier this week / Older buckets on the activity log. Rev 79 makes each bucket header clickable to collapse independently. Persisted via `workspace_member.dashboardPrefs.collapsedActivityBuckets` so the operator's '/Older is always collapsed' preference follows them across machines. localStorage stays as the write-through cache for sync render. Pairs with the rev-77 panel collapse + rev-78 time-bucket UI as the operator's third axis of dashboard density control after rev-39 layout density. The chevron + hover state read as ambient affordance rather than a primary action โ the bucket label remains the visual focus. **Strategic significance**: cumulative micro-polish (every rev 22+ has carried at least one) โ but rev 79's polish is load-bearing because the rev-78 buckets accumulated visible-row volume that operators who only care about today's activity were forced to scroll past.
- OpenAPI 3.1 spec coverage expanded to the cost-axis cluster + chronic-ack endpoints + dashboard-prefs (closes named rev-78 follow-up)Rev 78 shipped the curated OpenAPI 3.1 subset covering the most load-bearing core (workspace, signals, artifacts, tasks, memory, search, today, stats, cost-today). Rev 79 closes the named rev-78 next-sprint candidate ('OpenAPI spec coverage expansion') by extending typed schemas to: the full cost-axis cluster (per-task cost + trajectory, top-cost-tasks, per-source / per-assignee / per-tag breakdowns with trajectory variants), every cost-spike alarm endpoint across the rev-32/55/58/62/67 five-axis cluster, the daily-ack endpoints across the per-task / per-source / per-assignee / per-tag axes, the chronic-ack endpoints across all three axes where chronic makes sense (per-tag rev 71, per-source rev 72, per-assignee rev 72), the rev-73 chronic-acks listing endpoint, and the rev-79 dashboard-prefs GET/PUT pair. **Strategic significance**: the upcoming MCP server wrapping `/api/v1` (Q3 #1) gains typed contracts for the cost-axis cluster โ the most schema-rich subset of the v1 surface and the area MCP hosts most need typed parameter validation for. Coverage continues to grow rev-by-rev; the full self-describing index at `/api/v1` remains authoritative for the complete endpoint list.