fix(doctor): report a fail-closed checkpoint sync election
Commit
The checkpoint-destination note narrated the election's rules from static text instead of asking the election what it decided, so a repo whose checkpoint_push_remote names a missing remote โ where the resolver fails closed and checkpoints sync nowhere โ was told they "sync to a single elected remote" and to run entire status to see which one. It also said nothing at all when such a repo had only one remote, because the note fired only on remote ambiguity.
remoteTopology now consults strategy.ResolveCheckpointSyncRemote and reports the disabled state instead of the destination narration, regardless of ambiguity. The two conditions are exclusive: while sync is off there is no destination to describe. entire enable shares the note and so stops making the same claim.
The fail-closed return becomes CheckpointPushRemoteNotConfiguredError (message byte-identical, so entire status output is unchanged) to separate the misconfigured setting from the other fail-closed outcome, an unreadable settings file. The remedy is gated on errors.As, so an unmatched cause gets none.
A remote pinned to a dedicated checkpoint_remote URL is exempt, because the pre-push gate exempts it from the election before consulting it.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Entire-Checkpoint: 01M27WP3N6VVS58MFCFY2GJKB1