crates/wfdiag-app/src/workers.rs:526-569 pushes WorkerStopRecord::stopped (stopped_within_budget=true) for Monitor/Diagnostics/History/Provider/Update even when the handle was None (failed/unconfigured at boot); :588-596 discards chat/report stop_and_join(budget) results, so an AI worker missing AI_STOP_BUDGET is absent from ShutdownReport instead of reported over-budget.
Fix: record honest per-worker outcomes (not-started / stopped / over-budget).
crates/wfdiag-app/src/workers.rs:526-569 pushes WorkerStopRecord::stopped (stopped_within_budget=true) for Monitor/Diagnostics/History/Provider/Update even when the handle was None (failed/unconfigured at boot); :588-596 discards chat/report stop_and_join(budget) results, so an AI worker missing AI_STOP_BUDGET is absent from ShutdownReport instead of reported over-budget.
Fix: record honest per-worker outcomes (not-started / stopped / over-budget).