- Unread mentions in the daily digest emailRev 27 made @-mentions push-loud via Slack/email/outbound; rev 30 surfaced them as a dashboard inbox panel. Rev 31 closes the steady-state surface โ your daily digest email now ends with a per-recipient 'N mentions from your team' section listing the last 24 hours of unread mentions, each with a deep-link to the specific comment. Solo founders without Slack get the same heads-up that Slack-first teams already had. Reuses the rev-30 getUserMentionsInbox() helper.
- Focus drift timeline (90-day)Rev 30 added a 'previously: โฆ' diff line beneath the active focus tags. Rev 31 turns that into a real timeline โ every focus shift in the last 90 days renders as a vertical thread of dots with the tag set, the date, and how long that focus held before being replaced. Two summary stats anchor the view: total shifts and percentage of time spent focused (vs no-focus). Top tags by total focused-duration appear as proportional pills. New endpoint GET /api/v1/workspace/focus-history?sinceDays=90 mirrors the dashboard view onto the v1/MCP surface. Drives entirely from the activity log โ no new schema.
- Comment permalinks + deep-link from mentions inboxEvery comment now carries id="comment-<id>". A new 'Link' chip in the comment header copies the permalink to the clipboard. The TaskComments component listens for #comment-<id> in the URL hash and auto-opens the discussion thread, scrolls the matching row into view, and briefly highlights it. The rev-30 mentions inbox and the rev-31 digest email both build links of this shape, so a click from anywhere lands the operator on the exact comment with the thread already expanded โ not just on the parent task.
- Ad-hoc 'Push to Slack' button on every outputUntil rev 31, Slack only carried the auto-generated cycle brief. Operators routinely wanted to send a single output (a draft, a decision, an updated watchlist) to the channel right now without waiting for the next cycle. The new chip on every approval-queue artifact does that in one click โ Slack post includes the artifact's title, summary, body excerpt, the public share-link if one exists, and an attribution line. Endpoint POST /api/artifacts/:id/push-slack reuses the dead-webhook auto-clear path so a stale URL doesn't silently retry. Editor+ role required.