- Per-memory daily cost history primitive (memoryEntries.dailyCostHistory column + pulse engine jsonb_set bump)Closes the named rev-159 next-sprint candidate ('per-memory cost trajectory mini-chart — letting per-memory entries carry a 7-day cost trajectory just as rev 54 added per-task daily cost history'). New JSONB column on memory_entry — same shape as the rev-54 task.dailyCostHistory primitive (Record<YYYY-MM-DD, { inputTokens, outputTokens }>). The pulse engine's per-memory cost-attribution UPDATE (rev 159) now also bumps today's bucket via SQL jsonb_set alongside the rev-159 cumulative-column writes — single statement, all retrieved rows share the same todayKey on a single cycle so one round-trip covers the entire batch. The rev-159 cumulative columns remain authoritative for total spend; this map is pure history. Trimmed implicitly via 30-day cap when the dashboard renders the trailing window — long-running entries don't grow unbounded JSONB. Closes the *trajectory* axis on the cost dimension at the per-memory level the same way rev-157 closed it on the retrieval dimension and rev-54 closed it on the per-task surface.
- Inline brand-amber MemoryCostSparkline on TopCostMemoryPanel + memory list rowsNew `MemoryCostSparkline` client component renders inline beside the rev-159 cost pill on every TopCostMemoryPanel row + beside the rev-157 retrieval sparkline on every memory list row whose dailyCostHistory has at least one non-zero day. Brand-amber palette (rgba(207,108,58,*)) matches the rev-159 TopCostMemoryPanel + rev-51 top-cost-tasks panel cost vocabulary. Distinct from the rev-157 brand-purple retrieval sparkline so the dashboard's two per-memory trajectory primitives (cost vs retrieval) read at two distinct attention levels. The TopCostMemoryPanel `getTopCostMemoryEntries` helper now projects a `trajectory7d` cents array per row (mirrors the rev-51 task.trajectory7d primitive at the per-memory axis on the cost dimension); the dashboard MemoryList computes a `costSparkline7dCents` per entry using the existing `trajectoryDayKeys` array (computed once for the rev-54 task cost trajectory) so the per-row work is a single Map lookup. Pinned + importance>=9 entries skip the sparkline since they're load-bearing by design. Hidden when every value is zero so fresh + never-attributed memory rows don't see clutter.
- GET /api/v1/memory/{id}/cost-trajectory v1 endpoint + extended GET /api/v1/memory listing with cost7dCents derived field + extended GET /api/v1/memory/top-cost rows with trajectory7dCloses the protocol-bound surface for the rev-160 trajectory primitive in lockstep with the dashboard. New bearer-auth `GET /api/v1/memory/{memoryId}/cost-trajectory?days=7` endpoint returns trailing N daily cost buckets oldest → newest with zero-fill (max days=30, default 7). Each row carries `{ date: ISO YYYY-MM-DD in workspace TZ, inputTokens, outputTokens, estimatedCostUsd }` so MCP hosts have the full shape without a follow-up estimateRunCostUsd call. Mirrors `GET /tasks/{id}/cost-trajectory` (rev 54) + `GET /memory/{id}/retrieval-trajectory` (rev 157) at the per-memory axis on the cost dimension. Plus the rev-153 `GET /api/v1/memory` listing endpoint now projects a `cost7dCents` derived field (sum of trailing 7 days of dailyCostHistory in cents) alongside the rev-158 `retrievals7d` — MCP hosts ranking memory by recent-activity-on-cost vs all-time see both signals in one call. Plus the rev-159 `GET /api/v1/memory/top-cost` rows now carry `trajectory7d` cents arrays so the dashboard panel + MCP hosts render the inline sparkline without a follow-up call per entry.
- OpenAPI 3.1 typed coverage on the rev-160 endpoint + extended MemoryEntry schema with cost7dCents — 82nd unbroken cadence revThe OpenAPI 3.1 spec types the new `GET /memory/{memoryId}/cost-trajectory` endpoint with full request/response schemas (memoryId path param + days query param 1-30 default 7 + response shape with `trajectory[]` array of typed rows including date ISO YYYY-MM-DD + inputTokens + outputTokens + estimatedCostUsd). The shared `MemoryEntry` schema component picks up the new `cost7dCents` derived field so MCP-host code generators reading the spec see it on every memory listing surface. The rev-159 `/memory/top-cost` row schema picks up the `trajectory7d` cents array. The OpenAPI spec changelog header gains a rev-160 block explaining the trajectory-axis closure on the cost dimension. The cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 82nd unbroken rev with rev 160. The per-memory observability cluster on the protocol-bound surface is now fourteen axes deep (read rev 12 + write rev 12 + bulk-update rev 35 + reactions rev 33 + tags rev 21 + export rev 125 + stale rev 153 + auto-archive rev 154 + archive-warning rev 155 + per-tag-stale rev 156 + retrieval-trajectory rev 157 + top-retrieved rev 158 + top-cost rev 159 + cost-trajectory rev 160).