- Per-output revision diff view (close named rev-38 candidate)Rev 20 introduced the artifact version chain (parentArtifactId stamped on regenerate) but until rev 39 the only way to see what changed was to expand both versions and diff them by eye. New ArtifactDiffView component mounts alongside the rev-20 ArtifactVersionLink on every artifact with a parent. Click 'Compare to previous' to see a unified line-by-line diff between the current body and its immediate parent's body, with title changes called out separately. LCS-based line diff implemented inline (~30 lines, no new dependency). Pairs with the rev-11 reviewer note + rev-23 inline body edit so operators have full visibility into every revision's content delta โ load-bearing for governance-first procurement teams that ask 'show me what was different about this output's earlier version'.
- Cross-entity tag drill-down modalTags went live for outputs (rev 15), memory (rev 21), and tasks (rev 24). Rev 28 introduced tag insights as a *descriptive* surface ('which tags is the team using?'). Rev 29 added focus tags as a *prescriptive* surface ('what should the team work on?'). Rev 39 closes the *retrieval* surface: click any tag in the new workspace-wide TagManager panel and a modal opens listing every task, output, and memory entry that carries it, sorted newest-first. Until rev 39 there was no way to ask 'show me everything tagged #q3-launch' without filtering each entity panel independently. The cross-entity surface knits the tag corpus together for the first time. New endpoint GET /api/workspace/tag-search?tag=โฆ (viewer+ auth) backs it via Postgres JSONB @> array containment, which is more precise than text-cast ILIKE (a tag like 'q3' wouldn't over-match 'q3-launch').
- Workspace tag rename / merge (admin only)Pairs with the rev-39 drill-down to close the silent fragmentation problem. Three months of operator usage inevitably accumulates fragmented tags (q3-launch / q3launch / q3_launch all referring to the same workstream) โ until rev 39 the only fix was to walk every entity by hand and re-tag. New POST /api/workspace/tags/rename body { from, to } operates on tasks.tags, artifacts.tags, and memory_entries.tags in one sweep; if a row already carries the target tag, the source is dropped (no duplicates). Admin-only at the route layer. Inline rename/merge form mounts inside the new TagManager panel, with autocomplete from the workspace's existing tag pool. Activity log records the merge and how many entities were updated. Closes the load-bearing problem named in rev 25 ('silent tag fragmentation') with a one-action consolidation primitive.
- Dashboard density toggle (compact mode)The dashboard has accumulated 30+ panels over 38 revs across active work, today, decisions, tag insights, focus, mentions, pinned tasks, dependency graph, signal mix, latency, health, members, sources, integrations, activity, and counting. Power-user workspaces with many panels open at once benefit from a compact mode that tightens panel padding + item spacing without hiding any data. New DensityToggle button mounts in the status bar next to the heartbeat indicator; one tap flips between 'Comfy' (default) and 'Compact'. Persisted in localStorage so it sticks across sessions. Adds an `is-compact` class to <body> consumed by CSS overrides โ shrinks .app-panel padding 22โ14px, .app-item padding 14โ10px, .app-grid gap 16โ12px, status-bar 18โ14px. Cumulative micro-polish (every rev 22+ has carried one) โ rev 39 finally addresses the panel-density problem that 38 revs of additive panel work created.
- Visual polish โ diff slide-in, tag-chip hover affordances, compact-mode densitySubtle 220ms slide-in on the new ArtifactDiffView panel so the diff content reads as a branch off the artifact rather than something stamped on. Cursor pointer + on-hover brightness on the rev-28 tag-insights bar (the chips were always click-to-copy but the cursor never advertised it). Compact-mode tag chips use a tighter 3px/8px padding for power-user workspaces with 50+ tags. Diff line backgrounds use soft red/green tints that read clearly on both light and dark dashboard panel backgrounds without being aggressive. Cumulative โ the dashboard now reads at a higher density without losing any of the affordance vocabulary the previous 38 revs accumulated.