Skip to content

RootSet retry misses structured update-ref lock races #77

Description

@flyingrobots

Problem

The v6.4.0 release-candidate verifier observed ExpiringSet concurrent safety fail with ROOT_SET_REF_UPDATE_FAILED. Immediate rerun and 12 focused real-Git repetitions passed, proving nondeterminism.

GitRefAdapter.updateRef() can receive a structured plumbing error with details.code: GIT_REPOSITORY_LOCKED when concurrent git update-ref --no-deref operations overlap at lock-file timing. RootSetPersistence.#isConflict() recognizes ordinary compare-and-swap stderr (but expected / reference already exists) but not this exact structured lock shape, so RootSet never executes its bounded conflict retry.

Required Fix

  • Recognize GIT_REPOSITORY_LOCKED only when structured command arguments prove the failed operation was update-ref --no-deref for the exact managed RootSet ref.
  • Preserve terminal behavior for unrelated repository locks and non-update-ref failures.
  • Add deterministic unit coverage for both classification boundaries.
  • Rerun the focused real-Git stress proof and full v6.4.0 release verifier.

Release Evidence

Blocks the v6.4.0 release candidate until fixed and reviewed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:storageStorage, Git objects, manifests, or persistencestatus:reviewIn review or awaiting PR feedbacktype:sliceTurn-sized proof work under a goalpost

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions