- Per-task discussion permalink with active-match anchor โ closes the named rev-132 next-sprint candidateRev 31 introduced bare comment permalinks (#comment-<id>) so an operator could deep-link to a specific comment from the rev-30 mentions inbox or the rev-31 digest email. Until rev 133 the rev-31 listener cleared all filter scope on arrival โ when an operator filtered the rev-128 thread to query='concern' + authorFilter='Steve' and rotated to match #3 of 8 via the rev-131 โโ navigation, sharing a URL pointed at the comment but lost the filter scope and match position the sender was actually viewing. Rev 133 closes that gap. Extends the rev-31 hashchange listener to parse an optional trailing query string (#comment-<id>?q=concern&author=user-123&reactions=1&match=2) that restores the rev-128 keyword + author filter, the rev-130 reactions-only filter, and the rev-131 active-match index. Bare #comment-<id> keeps the rev-31/rev-128 behaviour exactly so existing permalinks (mentions inbox, digest emails, MCP-host deep-links built from the rev-132 matchedIds) are unaffected. Author param is validated against the thread's distinctAuthors so an unknown id falls back to no author scope rather than rendering an empty thread; match param is parsed as a non-negative int and clamped via the rev-131 safeActiveMatchIdx logic so an out-of-range index from a stale link can't strand the operator.
- Copy match link chip beside the rev-132 โโ button clusterPairs the rev-133 hash-listener primitive with a one-tap copy chip. Builds the URL inline from the active filter scope + active match index so an operator who's narrowed the rev-128 thread filter to 'Steve's comments matching concern โ match 3 of 8' sends a single URL the recipient lands on with the same scope + match position. Pure client-side via navigator.clipboard.writeText with the rev-42/43/101/125/126/128 execCommand fallback for non-secure contexts. Brand-color teal palette + brand-green success-pulse on copy match the rev-101 changelog permalink + rev-125 roadmap permalink + rev-128 copy-thread chip + rev-126 roadmap-filter share chip vocabulary so all the dashboard's share-affordances ring out with one consistent visual story across every surface (in-app, public marketing, share page).
- OpenAPI 3.1 typed coverage on the rev-133 share-permalink format โ cadence pattern from rev 78 onward holds unbrokenCloses the typed-contract gap on the rev-133 dashboard primitive in the same cycle it ships. The OpenAPI spec's /tasks/{taskId}/comments endpoint description documents the URL hash format MCP hosts driving deep-links from external systems (Slack interactive shortcuts, CRM linkbacks, procurement audit notes) can build to benefit from the same filter+match restoration. The rev-78 cadence pattern (every v1-adjacent dashboard primitive gets documented in the OpenAPI spec in the same cycle it ships) reaches its 56th unbroken rev with rev 133. The /api/v1 self-describing endpoint index updates the comments endpoint signature to mention the rev-133 permalink format inline so MCP-host integrators reading the index discover it without opening the spec.
- Cumulative dashboard polish โ brand-green success-pulse animation on the new share chipCumulative micro-polish (every rev 22+ has carried at least one). New ld-task-comment-match-counter-share CSS class with brand-color teal default state, brand-green is-copied state, and a 1.6s ld-task-comment-match-share-pulse keyframes animation so the operator sees confirmation without a toast. The pulse animation pairs with the rev-101 / rev-125 / rev-126 success palettes so all the dashboard's copy-success affordances ring out consistently across every share surface. Hover lift (1px) + brand-color border emphasis + focus-visible outline ring matches the rev-38 dashboard accessibility pattern so keyboard-only operators land cleanly on the new chip. preventDefault on mousedown keeps the search input focused so a click-then-type-then-rotate-then-share workflow stays smooth without cursor management.