- Per-assignee cost breakdown helper + dashboard panelNew getCostByAssignee() helper aggregates the rev-51 per-task cumulative cost columns (totalInputTokens + totalOutputTokens) by task.assignedToUserId so multi-operator desks can answer 'where is our AI cost going by teammate?' at a glance. Joins to the users table for human-readable name/email rendering. Tasks with no assignee aggregate into a synthetic unassigned bucket so the breakdown reconciles with the workspace total. New CostByAssigneePanel client component renders alongside the rev-51 TopCostTasksPanel as the per-recipient axis: each row shows the teammate's total cumulative spend, what percent of the workspace total that represents, a proportional indigo→teal bar (visually distinct from the rev-51 brand→amber bar so the two panels read as siblings), and the underlying token + task count. Hidden on solo desks. Strategic significance: the cost story has been built up across 9 revs (rev 7 transparency, rev 8 per-cycle drill-down, rev 9 30-day projection, rev 20 hard cap, rev 21 80% warning, rev 32 spike alarm, rev 33 today snapshot, rev 34 yesterday delta, rev 35 7-day baseline, rev 51 per-task) and was almost entirely *vertical* (across time). Rev 52 opens the *horizontal* (across team) axis. ISO 42001 control families on AI cost transparency call out per-team cost attribution as a maturity step — rev 52 closes that gap.
- Cost-spike alarm gets per-assignee scoping (Slack + outbound)Closes the load-bearing rev-51 named follow-up. The rev-32 detectCostSpike() now also returns a byAssignee[] array — top 5 named buckets sorted desc by spend, with name/email/percent/USD. The Slack push from pingCostSpikes() now includes a 'open-task spend by teammate' line when 2+ named assignees show up (omitted on solo desks where the line reads tautologically as '100% you'). Operators reading the alarm see 'today's spend is 3.2× the trailing average — and Maria has $4.20 (40%), Leo has $2.10 (25%)' without leaving Slack. The workspace.cost_spike outbound webhook payload also carries the same byAssignee array so downstream FinOps tools, project trackers, or board-status dashboards can route the alarm by teammate. The rev-32 cost-spike trio (in-app banner + Slack + outbound) now reads as a four-axis: where (workspace/per-team/per-task/over-time).
- GET /api/v1/cost/by-assignee endpointBearer-auth endpoint mirrors the dashboard panel exactly. Same shape, accessible programmatically. Pairs with the rev-51 /api/v1/tasks/top-cost (per-task axis), rev-13 /api/v1/runs (per-cycle cost), and rev-18 /api/v1/stats (workspace 7-day cost) as the four-axis cost-observability surface on the protocol-bound side. Strategic significance: the upcoming MCP server's cost tooling has nothing left to design — the four cost axes (per-cycle / per-task / per-teammate / workspace 7-day) all have v1 mirrors in lockstep with the dashboard, so MCP-cost tools are exclusively protocol-translation work.
- MCP cost story announcement post + visual polishNew blog post 'Where Is Your AI Cost Going? Per-Teammate Cost Visibility for SMB AI Workspaces' explains the per-recipient cost axis as the load-bearing primitive that closes the procurement story for governance-first AI tools. SEO surface area for 'AI cost attribution by team', 'per-team AI spend visibility', 'FinOps for AI workspaces' — buyer-side terms that sit one notch above 'governance-first' in the procurement vocabulary. Cumulative micro-polish on the new dashboard panel: indigo→teal gradient bar fill so the two cost panels stack cleanly, percent pill in brand-color so the proportional reading lands first, italic muted treatment on unassigned rows so they don't compete with named-assignee rows.