Cloud: recover completed repository attachments
Leo asked for “this kind of recovery” when attaching a repository to a Cloud chat.
A completed clone now persists its result until the chat attachment is recorded. Retrying after a record failure reuses that saved result even when the seed job has expired, and attachment recording clears the job atomically.
Follow-up 4 to #30361; replaces closed #30452 at its restored and reviewed head. A regression test injects record failure, shuts down the fake seed socket, and verifies retry records the completed clone without another start or status call. Attachment recording clears the saved job in the same projection transaction.
Repository discovery also retains pages already fetched if authentication expires on a later page. An unsafe installation link is omitted without hiding the repositories; disconnected state is tracked separately so it cannot falsely complete the Connect GitHub wait. Fake socket tests check that partial catalog and the actual pending clone progress before completion, addressing the recovery review follow-ups.
Validation: the full stack at 7dca439695292e68d2daaa30007e1f68068ec70e passed the Rust cloud_repo suite on the fleet (step 9e6433bb9eb7ac166da6d706). Formatting and static diff checks pass.
Agent session: agent session