Phoenix channel for live task-record updates.
Clients join api:tasks:thread:{thread_id} to receive the thread's current
event-sourced tasks and subscribe to changes. The join reply carries a full
snapshot (%{tasks: [...]}), and every subsequent change lands as a
tasks_updated push carrying a fresh snapshot — the same replace-wholesale
contract expected by task-panel clients, so clients need no
delta bookkeeping.
Change signals originate from ArchAstro.Tasks.Projectors.TaskProjector,
which broadcasts on "tasks:thread:{thread_id}" after each committed
projection. Bursts (e.g. a mirror reconcile dispatching several commands)
are coalesced: the first signal arms a short timer and the reload happens
once, after the burst settles.
Phoenix channel for live task-record updates. Clients join
api:tasks:thread:{thread_id}to receive the thread's current event-sourced tasks and subscribe to changes. The join reply carries a full snapshot (%{tasks: [...]}), and every subsequent change lands as atasks_updatedpush carrying a fresh snapshot — the same replace-wholesale contract expected by task-panel clients, so clients need no delta bookkeeping. Change signals originate fromArchAstro.Tasks.Projectors.TaskProjector, which broadcasts on"tasks:thread:{thread_id}"after each committed projection. Bursts (e.g. a mirror reconcile dispatching several commands) are coalesced: the first signal arms a short timer and the reload happens once, after the burst settles.