Finding
Fleet can render a generic down — restart needed agent problem even while the spoke already knows the current start failure reason. Example from fleet triage: projectbluefin/common showed 1 agent(s) down — restart needed, but spoke logs showed copilot hung with no output/no CLI prompt.
Expected
Heartbeat should send the current per-agent mgr.StartFailureState before the blocked threshold, including reason, consecutive count, lastAt, and last exit code/signal when available. Hub verdict text should render starting failed ×N: <reason> (last <ago>) and use that as the blocker instead of the generic down/restart text. Absent fields remain backward compatible.
Tests
- Pre-threshold start failure renders the precise start failure reason.
- Threshold/blocked behaviour remains compatible.
- Absent new fields keeps old generic verdict behaviour.
Source: fleet triage 2026-09-04, recommended fix B2.
Finding
Fleet can render a generic
down — restart neededagent problem even while the spoke already knows the current start failure reason. Example from fleet triage:projectbluefin/commonshowed1 agent(s) down — restart needed, but spoke logs showedcopilot hung with no output/no CLI prompt.Expected
Heartbeat should send the current per-agent
mgr.StartFailureStatebefore the blocked threshold, including reason, consecutive count, lastAt, and last exit code/signal when available. Hub verdict text should renderstarting failed ×N: <reason> (last <ago>)and use that as the blocker instead of the generic down/restart text. Absent fields remain backward compatible.Tests
Source: fleet triage 2026-09-04, recommended fix B2.