- Per-thread keyword + author filter on task discussions โ closes the missing per-task search axisThe rev-26 task discussion primitive has been growing in load-bearingness for fourteen revs (rev 27 mentions, rev 28 threading, rev 29 reactions, rev 30 inbox, rev 31 permalinks + email digest, rev 32 inline reply, rev 33 reactions on outputs/memory, rev 34 ack receipts, rev 35 in-queue badges) but the *per-task search* axis was missing โ workspaces with 50+ comments on a long-running task forced operators to scroll the entire thread to find a specific reference. Rev 128 closes that gap. New `<input type="search">` + author chip row above the thread when the task has 5+ comments (below that, scrolling beats typing). Pure client-side filter on the existing comments JSONB โ matches body text + author name. Composes with the rev-30 mentions inbox + rev-31 permalinks (a hash deep-link to a specific comment clears the active filter so the targeted comment always renders on its target). Replies always surface with their parent so the discussion frame never breaks. Author chips activate when 3+ distinct authors have commented โ sorted by comment count desc with stable ordering so a chip doesn't move when a new comment lands. Mirrors the rev-17 workspace search + rev-38 activity-log keyword search at the per-task comment axis. The search-axis cluster on the dashboard is now five surfaces deep โ workspace (rev 17), memory (rev 8 + rev 21 tags), activity (rev 38), outputs (rev 110), and now per-thread comments (rev 128).
- Copy entire thread as markdown โ extends the rev-42 markdown copy primitive to the comment-thread axisProcurement reviewers + customer-success ops routinely paste discussion histories into CRMs / Notion / wikis to summarise stakeholder context on a deal or ticket. Until rev 128 the only path was a manual scroll-and-copy of every comment. Rev 128 closes that with a one-tap 'Copy thread' button alongside the rev-128 filter row. Assembles every visible comment + reply (respecting the rev-128 keyword + author filter) into a clean markdown package with author attribution, relative timestamps, and indented reply nesting that reads cleanly when pasted into a downstream surface. Pure client-side via `navigator.clipboard.writeText` with the standard `execCommand` fallback for non-secure contexts (matches the rev-42 / rev-43 / rev-101 copy-affordance pattern). Success-flash animation matches the rev-22+ tactile click vocabulary so the operator sees confirmation without a toast. Pairs with the rev-42 artifact markdown copy + rev-43 memory copy as the third surface on the dashboard's 'lift content out' vocabulary.
- Aggregate reaction-summary chip on every active-work card โ closes the per-task engagement-visibility gapReactions have ridden on individual comments since rev 29 (and on outputs + memory since rev 33). Until rev 128 the *aggregate* engagement signal โ the answer to 'which task in my queue has the most reaction activity?' โ required expanding every thread. Rev 128 surfaces it as a quiet brand-purple chip in the active-work card pill row showing the most-used emoji + total reaction count across every comment on the task. Pure derived state from existing `task.comments[].reactions` JSONB โ no schema, no migration, no extra round-trip. Tooltip on the chip shows the per-emoji breakdown so an operator can decide whether the task is hot ('๐ 8 ยท ๐ฏ 3') or contentious ('๐ 5 ยท ๐ 2'). Distinct from the rev-35 comment-count pill (volume) and the rev-35 unacked-mention pill (your work waiting) โ three orthogonal pill kinds in one row each answering a different reading-horizon question: volume, attention, engagement. Multi-step workflow operators triaging 20+ active tasks now spot the 'this is the discussion to read first' signal at a glance. The active-work card pill row now reads at four orthogonal axes: triage state (rev 21 priority + rev 22 due + rev 16 assignee + rev 23 pin), discussion volume (rev 35 comment count), attention (rev 35 unacked mention + rev 48 staleness), and engagement (rev 128 reaction summary).
- Visual polish โ brand-purple reaction chip + tactile filter bar + copy-thread success-flashCumulative micro-polish (every rev 22+ has carried at least one). The new `.ld-task-reaction-summary` chip wears a brand-purple `rgba(107,78,214,*)` palette distinct from the rev-35 brand-color comment-count pill so the operator's eye reads 'engagement state' at a different cadence than 'discussion volume'. Hover lift matches the rev-22+ tactile click affordance vocabulary even though the chip is read-only โ the lift signals 'this carries information'. New `.ld-task-comment-filter` bar uses a soft tinted background so the row reads as ONE control surface rather than three competing widgets (search input + author chips + copy button). Author chips share the rev-29 + rev-39 chip vocabulary with `:focus-visible` rings so keyboard-only operators land cleanly. The copy-thread chip uses the rev-22+ chip palette with brand-green success state matching the rev-101 changelog permalink + rev-125 roadmap permalink + rev-127 cost-panel synced-chip vocabulary so all the dashboard's copy-success affordances ring out consistently across every surface.