- Dashboard reset-to-defaults chip โ closes the named rev-84 next-sprint candidateRev 84's running state explicitly named 'dashboard "reset to defaults" UI affordance' as the natural rev-85 step. Rev 84 shipped the DELETE primitive on `/api/workspace/dashboard-prefs` (and its v1 mirror) but operators could only fire it via curl. Rev 85 closes the loop with an in-app chip beside the rev-39 density toggle in the status bar. One tap โ confirm dialog โ DELETE โ router.refresh, plus aggressive localStorage cache clearing of the rev-77 collapsed panels, rev-82 panel order, and rev-79 collapsed activity buckets so the in-tab UI matches the freshly-defaulted server state without waiting for the rev-78 cross-device merge to flow back through. Visual treatment matches the density toggle's neutral palette so neither competes for the eye over the rev-77 personal inbox pill (amber) or rev-76 what's-new badge (brand-color); a 1.2s brand-green success flash confirms the action took. **Strategic significance**: every operator-tunable layer on the dashboard now has a clean reset path *and* a 1-click affordance โ pairs with the rev-39 density toggle as the second compactness primitive (density tunes spacing globally; reset clears every per-user prefs field). Cumulative trust signal: an operator who accidentally hides too many panels can't get stuck.
- Per-recipient Slack quiet hours for assignment + mention-ack pushes โ closes the named rev-82 final remaining forward-compat candidateRev 82's running state explicitly named 'per-recipient Slack quiet hours' as the final remaining rev-82 forward-compat candidate, noting it was non-trivial because Slack pushes go to a workspace-wide webhook so per-recipient mute would need to map onto per-event surfaces (assignment, mention-ack) rather than the brief push. Rev 85 ships exactly that. New `isUserInPersonalQuietHours()` helper reuses the rev-81 `dashboardPrefs.digestQuietHoursStart/End` window (originally only gated digest emails) and now also gates: (a) the rev-17 task assignment Slack + email push (gated by *assignee's* prefs), (b) the rev-35 mention-ack closure-receipt Slack + email push (gated by the *original mention author's* prefs). Workspace-wide events (rev-1 cycle brief, rev-31 ad-hoc push, rev-32+ cost-spike pings) deliberately keep the rev-15 workspace-level quiet hours since they fan out to a workspace-wide channel. The rev-35 outbound `task.mention_acked` event fires regardless of personal quiet hours since downstream integrations are an integration concern not a recipient concern. Best-effort never-block-the-send: every error path defaults to 'send the push' so a configuration glitch can't silently drop pings. **Strategic significance**: closes the four-axis operator-respect cluster from rev 80/81 (workspace on/off โ personal sections โ weekend mute โ quiet hours window) by extending the *fourth axis* from email-only to per-recipient Slack pushes. An operator who set 22:00โ07:00 muting now gets coverage on both digest email AND per-recipient task push channels.
- OpenAPI 3.1 spec expansion to load-bearing v1 endpoints โ 11 more endpoints typedContinued the rev-by-rev OpenAPI coverage expansion thread. Rev 85 types: `/sources` GET + POST (rev 13 โ load-bearing core entity), `/tasks/{id}/blockers` PUT (rev 37 โ task-dependency primitive), `/tasks/{id}/notes` GET + POST (rev 76 โ operator-direction channel), `/tasks/stale` GET (rev 48 โ diagnostic surface), `/tasks/auto-archived` GET (rev 50 โ audit-trail closure), `/tasks/{id}/renew` POST (rev 50 โ operator counter-action), `/tasks/{id}/sources` GET (rev 43 โ input transparency), `/tasks/{id}/source-memory` GET (rev 44 โ memory transparency), `/tasks/{id}/timeline` GET (rev 41 โ unified per-task feed), `/artifacts/{id}/sources` GET (rev 41 โ procurement evidence), `/artifacts/{id}/versions` GET (rev 44 โ revision lineage), `/sources/cost-spikes` GET (rev 58), `/sources/{id}/cost-trajectory` GET (rev 60), `/sources/bulk` POST (rev 36 โ closes the five-entity bulk symmetry on the protocol surface), `/badge.svg` GET (rev 19 โ public marketing endpoint, no auth header). **Strategic significance**: the typed-schema surface now covers the input-transparency cluster (artifact + task sources + source-memory), the task-lifecycle audit cluster (stale + auto-archived + renew), task dependencies (blockers), the operator-direction channel (notes), and the public marketing badge โ five new surface clusters that MCP-host code generators can typecheck against. The MCP server (Q3 #1) gains typed contracts for the most operator-loaded surfaces beyond the cost-axis cluster (which rev 79 typed) and the integration observability cluster (which rev 84 typed).
- Visual polish โ focus-visible ring on reset chip + brand-green success flashCumulative micro-polish (every rev 22+ has carried one). The new rev-85 reset chip wears the same neutral-palette base as the rev-39 density toggle so the two layout-tuning affordances read as siblings, plus a `.is-success` modifier that flashes brand-green for 1.2s after a successful reset before reverting โ distinct visual confirmation that doesn't require a toast. New `:focus-visible` outline ring matches the rev-38 dashboard accessibility pattern so keyboard-only operators land cleanly. Hover state strengthens both the density toggle AND reset chip's border-color by stepping from rgba(11,26,42,0.08) to 0.16 โ same step the rev-22+ design language uses for tactile click affordance. **Strategic significance**: the status bar instrument cluster now reads as seven instruments deep โ heartbeat (rev 12), desk health (rev 13), cycle performance (rev 14), read-only pill (rev 16), density toggle (rev 39), what's-new badge (rev 76), personal inbox (rev 77), and now reset chip (rev 85). The rev-by-rev visual-hierarchy discipline is what keeps the status bar from drifting into instrument-stack chaos.