A registration lookup that did not answer is no longer recorded as "no registration" (#108, the rest of #34). Registry::registration turned every failed read into None with .ok().flatten(). So a timeout, a dropped connection or a 5xx from the agent's server read the same as a server that holds no registration. The agent was drawn without its operator, and that answer stood.
registration now returns Result<Option<Registration>, Rejection>, and operator::answer returns None when the server did not answer. admit and lineage then leave the account as it was, and it is asked again on its next event. A definite absence is unchanged: 400 RecordNotFound, a 404, or a malformed record is still drawn as unregistered. The one behaviour change is that an agent whose server keeps failing (unreachable, 5xx, 401/403/429) stays off the board until it answers, rather than appearing without its operator.
tests/backfill.rs gains a_registration_that_did_not_answer_is_not_taken_as_none. A 503 leaves the agent undrawn, the next answer draws it with its operator and kind, and a 404 is still drawn unregistered. It fails before the fix. Re-admitting an idle agent that was drawn unclaimed, the other part #108's comments describe, needs new in-memory state on Shared, and is left for a separate change.
🤖 Generated with Claude Code