- Persistent workspace task templates (closes named rev-65 candidate)New `task_template` table + helpers + dashboard CRUD lets operators save a custom task shape (or the rev-65 detected pattern) as a workspace-scoped persistent template that surfaces alongside the rev-64 static set in the quick-start chip row. Each row carries label, emoji, hint, title, summary, goal, kind, deliverableType, priority, tags, plus `usageCount` + `lastUsedAt` so apply records usage server-side and the recent-first ordering benefits multi-operator workspaces (the rev-65 localStorage usage map only covers one operator). Capped at 20 templates per workspace; unique by label. **Strategic significance**: rev 64 introduced static templates; rev 65 introduced AI-suggested-from-history (one-shot, session-only); rev 66 fills the missing slot β workspace-specific recurring shapes the operator wants durable. Pairs with the rev-19 onboarding templates as the workspace lifecycle's three template surfaces: day 1 onboarding (rev 19) / day N static (rev 64) / day N personalised + persistent (rev 65 + rev 66).
- Save-as-template button + save-detected-pattern affordanceNew 'Save as template' button on the rev-24 task creation form lets operators lift the current input into a persistent workspace template before queueing β handles the 'I just typed something I want to reuse' path. New 'Save' button alongside the rev-65 detected-pattern chip lets operators promote the AI-suggested pattern from one-shot into durable. Both paths route through the same `POST /api/workspace/task-templates` endpoint with editor+ role enforced server-side. The dashboard refreshes on success so the new template surfaces in the chip row immediately. **Strategic significance**: rev 65 named 'an upcoming rev that lets operators save a detected pattern' as the natural follow-up; rev 66 ships both the manual save path and the detected-pattern lift in one cycle.
- Per-tag cost attribution panel + v1 endpoint (closes 4th cost axis)New `getCostByTag()` helper aggregates `task.totalInputTokens + totalOutputTokens` by `task.tags` so operators can answer 'which workstream is eating my AI spend?'. Each task contributes its full cost to *every* tag it carries (distinct from rev-57 source attribution which splits equally β a task doesn't have multiple 'primary sources' the way it can have multiple thematic tags). New `CostByTagPanel` mounts in the dashboard sidebar alongside the rev-51/52/57 cost panels with a purpleβamber gradient bar so the four cost panels stack as siblings without competing visually. New `GET /api/v1/cost/by-tag` v1 mirror in lockstep. **Strategic significance**: closes the missing fourth axis on the cost-attribution cluster (per-task rev 51 / per-recipient rev 52 / per-source rev 57 / per-tag rev 66). Pairs with rev-39 tag drill-down (cross-entity retrieval) and rev-29 focus tags (prescriptive attention) for the full tag-axis story across all four operator surfaces: write β descriptive β prescriptive β retrieval β cost.
- v1 mirrors for persistent task templates + visual polishFive new bearer-auth v1 endpoints β `GET/POST /api/v1/workspace/task-templates`, `PATCH/DELETE/POST /api/v1/workspace/task-templates/{id}` β mirror the dashboard endpoints in lockstep. MCP hosts can list, create, update, delete, and record-usage on persistent templates via the protocol surface. The new persistent chip row uses a teal-tinted left-border accent to distinguish it from the rev-64 static row + rev-65 detected pattern, and the rev-65 detected-pattern row gains an inline 'Save' button that lifts the suggestion into a persistent template. Plus subtle polish: hover/transition treatments on the new persistent chips + remove buttons match the rev-22+ design-language thread. **Strategic significance**: closes the v1 parity gap on the rev-66 dashboard primitive in the same cycle the primitive ships.