fix(strategy): require fetch URLs for checkpoint sync remote election - #2370
Open
MuskanPaliwal wants to merge 4 commits into
Open
fix(strategy): require fetch URLs for checkpoint sync remote election#2370MuskanPaliwal wants to merge 4 commits into
MuskanPaliwal wants to merge 4 commits into
Conversation
Entire-Checkpoint: 01M27T1RWDBF17KCRMSQ250AA8
Entire-Checkpoint: 01M27WQF6JC2MHFMZXWQVQW7WK
Entire-Checkpoint: 01M28135FSP4SZ5JH97FDY692W
MuskanPaliwal
marked this pull request as ready for review
September 11, 2026 11:05
Entire-Checkpoint: 01M2B04JPMA1SRJXTE0Z6J21GF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #2360
Trail: https://entire.io/gh/MuskanPaliwal/cli/trails/4
A Git remote can be configured with only a
pushurland no fetch URL. Such a remote can receive pushes, but Entire cannot read checkpoint history or reconcile checkpoint state from it.ResolveCheckpointSyncRemotepreviously treated this configuration inconsistently:git remote get-url.remote.*.urlentries and therefore correctly excluded the same remote.This allowed an explicit
checkpoint_push_remoteto select a destination that automatic election considered unusable.entire statusthen presented that remote as the active checkpoint destination even though checkpoint reads and reconciliation could not work against it.Use one eligibility rule throughout election
Remote election now builds the set of remotes with configured fetch URLs once and uses that set for every election tier.
The behavior differs deliberately based on who owns the selection:
checkpoint_push_remoteAn explicit setting fails closed because it represents a user decision that should be corrected rather than silently replaced. Captured state remains fail-soft because it was produced automatically and may become stale when remotes are renamed or reconfigured.
Status and diagnostics
When the explicit remote has no fetch URL,
entire statusnow:Checkpoints sync to:destination.The gated-sync hint uses the same fetchability rule, ensuring it never recommends a destination that checkpoint sync cannot read from.
Regression coverage
The new tests construct real isolated Git repositories with:
and deliberately omit
remote.pushonly.url.They verify that:
origin.Verification
The following checks passed:
go test ./cmd/entire/cli/strategy -run '^TestHintGatedCheckpointSync$'go test ./cmd/entire/cli/strategymise run checkmise run lint