Root cause of "why does a fresh install show everything as healthy" —
readState()'s missing-entry fallback was `{state: "healthy"}`. That's
correct for pick_agents/dispatch eligibility (a fresh install with real
env-var credentials should dispatch immediately without requiring an
explicit audit first — untouched, lib/pick.js still treats a missing
state entry as eligible). But the SAME fallback leaked into ui.js's
stateRows() and cli.js's cmdStatus(), so a completely fresh container
with ZERO real credentials rendered all 29 agents as a green "healthy"
pill — indistinguishable from a genuinely verified, working agent.
Found while building the isolated Docker test image: the operator
correctly asked "why does it show all healthy, we isolated it?"
Fix: display-only fallback changed to "unverified" in both surfaces.
Styled as a neutral/dashed pill (never green) so it visually cannot be
mistaken for a confirmed state. Stats tile "Healthy models" already
filtered on state === "healthy" specifically, so it now correctly reads
0 on a fresh install instead of a misleading 29. Unlock banner logic
(filters on needs_auth) is unaffected — unverified entries don't show up
there either, since we genuinely don't know if they need a key.
pick_agents/dispatch behavior is UNCHANGED — this is presentation only.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>