Status-change actions (detail panel buttons and drag-and-drop) targeted
#kanban-board with innerHTML, but the handlers return the full
_KanbanBoard partial including the #board-content wrapper and filter
bar. Each action nested a new board inside the grid, duplicating the
filter chips and collapsing the layout. Target #board-content with
outerHTML instead, matching the filter bar and create-task form.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add ActivityHub and wire up SignalR in Program.cs
- Broadcast new context events from ContextController
- Connect SignalR client on Analytics page for live feed updates
- Restructure activity feed HTML to support live prepending
- Add slide-in animation for new activity items
- Update CORS to allow credentials for SignalR
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clicking the header "New Task" button now scrolls to and focuses
the create-task input in the Pending column.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire up SortableJS in app.js to enable dragging task cards between
Kanban columns. On drop, fires htmx PUT requests to the appropriate
Board handler (Start/Pause/Resume/Complete) based on the column
transition. Invalid transitions are reverted. Sortable instances are
destroyed and recreated after htmx swaps to prevent memory leaks.
Also centralizes detail panel open/close/edit helpers and Escape key
handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>