fix(cli): stabilize dispatch retention after lock contention - #1938
Merged
limityan merged 1 commit intoJul 31, 2026
Merged
Conversation
limityan
force-pushed
the
agent/dispatch-retention-windows-lock
branch
from
July 31, 2026 15:14
94477a2 to
7b3ba72
Compare
limityan
marked this pull request as ready for review
July 31, 2026 15:29
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.
Summary
JobLockthroughfs2::FileExt::unlockbefore the backing file handle is closedRoot cause
The GitCode Windows pipeline exposed a timing-dependent failure in
retention_skips_contended_job_without_blocking_and_retries_later: the first collection correctly skipped the locked job, but the single immediate retry returned0instead of1.Retention already treats Windows
PermissionDeniedrename failures as retryable and defers cleanup to a later collection. The test assumed that "later" meant the very next call, whileJobLockalso relied on implicit handle-close semantics instead of explicitly releasing itsfs2lock. Under transient Windows file contention, those assumptions made the test flaky.This keeps retention non-blocking and preserves its existing eventual-cleanup behavior. It does not change storage schemas, lock paths, public APIs, or job lifecycle semantics.
Verification
cargo check --locked -p bitfun-clicargo test --locked -p bitfun-cli(503 unit tests and all CLI integration suites passed)bitfun_cirun passedohos_arrch64,macos_arm64, andcargo-testThe original failure is timing-dependent and may pass locally on the unmodified code; the remote Windows failure is the observed regression evidence.