Repository navigation
fix(vcs): deadline + backoff self-heal for checkpoint capture timeouts - #201
Merged
Merged
Conversation
`git add -A` during checkpoint capture ran on the generic 30s VcsProcess deadline. In large repositories (many worktrees, submodules, thousands of files) it routinely exceeds that under disk pressure - most of all while an auto-gc repacks the shared object store - so every turn surfaced a user-visible "Checkpoint capture failed" activity. - give the checkpoint index step (whole-worktree add / ls-files) its own 120s deadline instead of the generic 30s default - on a VcsProcessTimeoutError, re-run the whole capture from a fresh temp index (idempotent by design: temp index seeded from HEAD, update-ref is deterministic) with the same backoff-ladder pattern as the interrupted-turn re-drive: 5s, then 30s, then surface the failure - regression test (it.live, real clock): first add times out, the capture succeeds via the retry, and both index steps carry the dedicated deadline
…dary tests Follows the PR 201 adversarial review (APPROVE, non-blocking findings): - bound the whole checkpoint self-heal with a 180s total wall-clock budget so the serial checkpoint worker is never blocked for the ~14-minute worst case of 3 attempts plus backoff - thread the checkpoint deadline through the git ls-files fallback enumeration, matching the documented behavior - tests: assert the retry uses a fresh GIT_INDEX_FILE; assert non-timeout failures are not retried; assert the all-timeout boundary propagates after exactly 3 attempts
johnnyelwailer
added a commit
that referenced
this pull request
Oct 12, 2026
…eting, linked repos) (#524) * fix(web): desktop UX fixes (My Work drag, sign-in dialog, loading greeting, linked repos) - My Work pane and startup gate get the Electron drag header (nx-nexi#199) - Device-code account sign-in is a dialog, not a truncated sidebar button (#201) - My Work loading screen: time-of-day greeting + vector animation, no logo (#202) - Linked repositories: schemeless host/owner/repo gets https://, signed-in detection no longer fails on one stale host, Recheck re-probes, larger dialog (#203) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(web): sign-in code dialog spacing without restyling DialogPanel DialogPanel owns its spacing (shadcn/no-restyle failed Lint). Move the gap onto a plain wrapper, as the other dialogs do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Philip Jonientz <philip.jonientz@nexplore.ch> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
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.
Context
Live incident: in large repositories (many worktrees, submodules, thousands of files) the whole-worktree
git addinsideGitVcsDriver.checkpoints.captureCheckpointoutlives the generic 30sVcsProcessdeadline — most of all while an auto-gc repacks the shared object store (measured 42s on a loaded host). Every turn then surfaced a user-visible "Checkpoint capture failed" activity.Change
git add/ls-filesenumeration) gets its own 120s deadline (CHECKPOINT_INDEX_TIMEOUT_MS) instead of the generic 30s default.VcsProcessTimeoutErrorstill fires, the capture self-heals: the whole attempt is re-run from a fresh temp index (idempotent by design — temp index seeded fromHEAD,update-refis deterministic) with the same backoff-ladder pattern as the interrupted-turn re-drive (t3team-workflowEngineTurnRetrySupport.ts): 5s, then 30s, then the failure surfaces unchanged.it.live— real clock, so the 5s ladder step actually elapses): the firstgit addtimes out, the capture succeeds via the retry, and both index steps carry the dedicated deadline.Verification
pnpm typecheck(apps/server): cleanpnpm exec vitest run src/vcs/t3team-GitVcsDriverCheckpointIndex.test.ts: 4/4 pass (new self-heal test exercises the real 5s backoff step)