fix(enable): name a failed election on every path that owns it

Commit

Stefan Haubold3d ago

Trail finding 01M6E80ZCE95, real. Resolving the earlier finding 01M51C5QZX42 made printSetupCheckpointDestinationNote return on syncAffected() and hand every failed election to enableCheckpointRemoteChoice.report, so that entire enable names the fault once with one remedy. That is only sound if report names it on every path, and two of its paths did not.

push_sessions=false returned before it ever looked at the election: it resolved one only to judge an ignored checkpoint_remote, and a resolution error there was discarded. With the note now deferring to it, a push-disabled repo with a broken checkpoint_push_remote heard nothing from either side. The broken setting outlives push_sessions โ€” re-enabling pushing runs straight into it, and it travels to clones that do push โ€” so that branch says so and offers the same remedy as the others.

The mixed pinned/unpinned case said "Dedicated checkpoint uploads can still proceed", which is true only of the pinned remotes; a remote left unpinned goes through the election that just failed and its pushes carry nothing. That is the PARTIAL state doctor reports, and it read here as business as usual. The unpinned remotes are now named.

Two regression tests, both mutation-checked: removing either fix fails its test.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Entire-Checkpoint: 01M6E88CNVF5SC33NZRDF57A8S