Skip to content

[DO NOT MERGE] Reproduce reset placeholder test flake - #2142

Closed
Tyrie Vella (tyrielv) wants to merge 4 commits into
microsoft:masterfrom
tyrielv:tyrielv/repro-placeholder-reset-flake
Closed

Tyrie Vella (tyrielv) wants to merge 4 commits into
microsoft:masterfrom
tyrielv:tyrielv/repro-placeholder-reset-flake

Conversation

@tyrielv

@tyrielv Tyrie Vella (tyrielv) commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Problem and Context

Run 39628260944 failed on x64 in the reset placeholder test. The arm64 run passed.

The test helper reported that git reset --stdin did not exit within 10 seconds. The Git trace records a successful exit after 17.8 seconds.

This diagnostic branch starts from #2138 to retain the original code context. Do not merge this PR.

Changes

  • Run only BlocksPlaceholderCreationWhileGitCommandIsRunning("reset --stdin") in the existing None, Full, and SparseMode fixtures.
  • Run these three fixtures concurrently with four NUnit workers.
  • Repeat each fixture 10 times on each of five independent runners per architecture: 150 x64 attempts and 150 arm64 attempts.
  • Record each attempt and retain separate NUnit results, Git traces, and failure diagnostics.
  • Separate NUnit fixture discovery from the exact case filter. A global setup name in the case filter also selects its loaded descendants.
  • Verify the selected case count before each batch and after each attempt.
  • Skip unrelated functional tests and upgrade tests.
  • Keep the test and product code unchanged for the baseline.
  • Reuse the unchanged build artifacts from run 39636821560.

Reproduction Evidence

The isolated baseline passed 50 of 50 x64 attempts and 50 of 50 arm64 attempts.

The concurrent baseline passed all 300 target attempts:

Architecture None Full SparseMode Failures
x64 50 50 50 0
arm64 50 50 50 0

The local Full reset case also passed with Git 2.55. A separate Git 2.56 attempt stopped at a test-service startup timeout.

The original failure came from the helper's 10-second cleanup deadline, not a placeholder assertion. Git exited successfully after 17.8 seconds.

The cause of that delay remains unknown. These unchanged-code samples do not reproduce the timeout, so they cannot establish a fix or a reduced failure rate.

Exempt worktree list without relaxing locks for other worktree subcommands.
Also exempt audited history, ref-query, object-statistics, and verification
operations. Default annotate follows the existing blame policy for
working-tree reads. Neither command provides snapshot isolation.

Share the hook policy with unit coverage through a partial source file.
Add deterministic first-open coverage during a paused worktree-list command.
Cover read-only commands under contention and preserve normal status waits.
Keep test lock holders alive only for the synchronous test action.
Require lock readiness before the action and cover retained dispatcher waits.
Use producer-shaped pre-command and post-command metadata in the unit cases.

Assisted-by: GPT-6.1 Sol
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Assisted-by: GPT-6.1 Sol

Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Separate NUnit discovery from the exact case filter. Reuse unchanged build artifacts for the baseline.

Assisted-by: GPT-6.1 Sol

Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Use the three existing working-tree modes to restore concurrent fixture pressure without unrelated functional tests.

Assisted-by: GPT-6.1 Sol

Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
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