The agent reported its state only on the adaptive sync tick (3s watching / 10s idle), so a resolving→downloading→verifying→organizing→completed transition could lag up to a full interval before the server (and the web UI) saw it. Now every successful Task.Transition fires an onChange hook wired to TriggerSync, pushing the new state immediately. Bursts are safe: TriggerSync is a buffered-1 send, so clustered transitions coalesce into one sync. - Task gains an onChange hook fired AFTER the status mutex is released (so a future heavier hook can't deadlock on task.mu); nil is a no-op. - Manager.OnStateChange is set on each task at Submit; the daemon wires it to TriggerSync alongside the existing OnTaskDone. - Stream tasks transition outside the Manager, so handleStreamTask wires the same hook explicitly (gap found in review) — resolving/downloading/ completed/failed on the stream path now push too. The adaptive ticker stays as a reconciliation heartbeat; it's just no longer the latency floor for state changes. |
||
|---|---|---|
| .. | ||
| agent | ||
| arr | ||
| cmd | ||
| config | ||
| engine | ||
| funnel | ||
| library | ||
| mediaserver | ||
| parser | ||
| sentry | ||
| ui | ||
| upgrade | ||
| usenet | ||
| vpn | ||