- Per-source cost spike section in the daily digest emailCloses the rev-59 next-sprint candidate on the email channel. Mirrors the rev-55 per-task spike section at the per-source axis: every owner/admin recipient sees up to 5 spiking feeds with ratio + today vs avg + contributing-task count. Solo founders and email-first operators who don't have the dashboard tab open get the same heads-up Slack-first teams already receive via the rev-58 daily Slack push. Workspace-shared (every recipient sees the same list) since 'this feed is anomalously expensive' is workspace-level diagnostic context โ pairs with rev-55 task spikes + rev-48 stale tasks + rev-53 personal cost section to form the full cost-axis story across every channel an operator might be on.
- Bulk per-source cost-spike acknowledgment (dashboard + v1)New `bulkAcknowledgeSourceCostSpikes()` helper + `POST /api/sources/cost-spike-ack/bulk` route + matching `POST /api/v1/sources/cost-spike-ack/bulk` v1 mirror. Bulk-ack bar surfaces inline in the rev-57 cost-by-source panel when 2+ visible rows are spiking. Mirrors the rev-57 task bulk-ack at the per-source axis. Caps at 50 IDs per call. Operators landing on the dashboard after a busy morning no longer have to ack each spiking source individually โ collapses the triage to one tap.
- Per-source cost trajectory primitive (helper + endpoints + dashboard sparkline)New `getSourceCostTrajectory()` helper aggregates the rev-54 `task.dailyCostHistory` JSONB by source via `task.sourceSignalIds โ signal.sourceId` so today's per-source spend can be plotted against trailing N days (1-30, default 7). New `GET /api/sources/{id}/cost-trajectory` viewer-auth endpoint + matching `GET /api/v1/sources/{id}/cost-trajectory` bearer-auth mirror. The rev-57 `getCostBySource()` also extended with optional `trajectoryDays` so the dashboard panel renders an inline sparkline beside the rev-57 cumulative bar + rev-58 โก pill on every row โ same brand-amber today gradient as the rev-54 task trajectory sparkline so the two cost panels read with one consistent visual vocabulary. Pairs with rev-58 alarm + rev-59 ack to form the descriptive โ defensive โ action triad on every per-source row.
- Cost summary CSV export + cost-by-source row hover polishNew `getWorkspaceCostCsv()` helper + `GET /api/workspace/cost-export` route + new 'Cost summary (CSV)' button in the integrations panel data-export section. Single procurement-friendly CSV carrying trailing-30-day daily AI spend, top-cost tasks, cost-by-source, and cost-by-assignee โ all in workspace timezone with section headers (DAILY / BY_TASK / BY_SOURCE / BY_ASSIGNEE) so a SOC 2 / ISO 42001 reviewer can answer 'how is AI cost shaped here?' in one read. Closes the procurement evidence cluster on the cost axis (rev 6 JSON full + rev 7 activity + rev 22 outputs + rev 47 decisions + rev 50 stale tasks + rev 60 cost = six takeaway artefacts). Plus subtle row hover treatment on the cost-by-source panel so the panel reads as scannable rather than static.