Skip to content

fix: escalate portable repair failures to the reclone fallback - #129

Merged
steipete merged 1 commit into
mainfrom
portable-reclone-escalation
Jul 27, 2026
Merged

fix: escalate portable repair failures to the reclone fallback#129
steipete merged 1 commit into
mainfrom
portable-reclone-escalation

Conversation

@steipete

Copy link
Copy Markdown
Contributor

Follow-up to #128.

When reset/pull repair fails—corrupt Git index/metadata, the class behind the 2026-07-26 broken-checkout incident—both the corruption and missing-source recovery paths now escalate to the existing reclone fallback.

Reclone attempts are bounded by a 15-minute backoff on a new last_reclone_attempt stamp recorded for successful and failed attempts. The state directory is created before persisting the stamp so fresh installs cannot loop unbounded. Healthy-mirror fallbacks are preserved.

Proof:

  • Four new regression tests: successful escalation with deterministic repair failure via a truncated .git/index, pre-seeded backoff, failed-reclone-still-stamps-backoff across two reads, and missing-source escalation.
  • Full suite green, with a -count=2 flake check on the new tests.
  • Autoreview clean: "patch is correct."

When reset/pull repair of a portable store checkout fails - for example
because the Git index or metadata is corrupted, the class behind this
week's broken-checkout incident - both the corruption recovery path and
the missing-source recovery path now escalate to the existing reclone
fallback instead of giving up. Escalation is bounded by a 15-minute
backoff on a new last_reclone_attempt stamp recorded for successful and
failed attempts alike, the recovery state directory is created before
the stamp is persisted so a fresh install cannot loop unbounded, and
all healthy-mirror fallbacks are preserved.
@clawsweeper

clawsweeper Bot commented Jul 27, 2026

Copy link
Copy Markdown

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix: escalate portable repair failures to the reclone fallback This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete merged commit 5777c50 into main Jul 27, 2026
11 checks passed
osolmaz pushed a commit to osolmaz/gitcrawl that referenced this pull request Jul 29, 2026
…law#129)

When reset/pull repair of a portable store checkout fails - for example
because the Git index or metadata is corrupted, the class behind this
week's broken-checkout incident - both the corruption recovery path and
the missing-source recovery path now escalate to the existing reclone
fallback instead of giving up. Escalation is bounded by a 15-minute
backoff on a new last_reclone_attempt stamp recorded for successful and
failed attempts alike, the recovery state directory is created before
the stamp is persisted so a fresh install cannot loop unbounded, and
all healthy-mirror fallbacks are preserved.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant