You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Consolidates the UtilitiesCS.Test nondeterminism filed as #780, #803, and #594 into one item so the required mstest-coverage check stops failing on unrelated pull requests. #803 is a duplicate of the DfDeedle_COM_TestsNullReferenceException already in #594: GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransform fails under parallel load because the class mutates static seams and production code at DfDeedle.cs:186 dereferences tableSnapshot.Item1 without a null check. #780 is DictionaryExtensions.TryAddValuesAsync cancelling its inner Task.Run after a hard-coded 500 ms wall-clock window, which the thread pool exceeds under coverage instrumentation with 24 class workers. #594 also carries two Console.Out races between concurrently executing tests. #592 (QuickFiler pump-host 60 s expiry) is deliberately not included: it is a different assembly and needs its own investigation.
Environment
OS/version: Windows 11 Pro 10.0.26200 locally; GitHub Actions windows runner in CI
Runtime: .NET Framework 4.8.1 test host, VSTest 18.9.0, MSTest 4.4.0, assembly-level parallelization with 24 class-scope workers
Data source or fixture: in-memory dictionaries; mocked Table and MAPIFolder in DfDeedle_COM_Tests
Steps to Reproduce
Run the full suite under coverage with parallel class workers. Observe, intermittently: TryAddValuesAsync_UpdatesExistingValue failing with TaskCanceledException after ~20 s (passes in ~2 ms alone); GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransform failing with NullReferenceException at DfDeedle.cs:186; two Console.Out races.
Every test in UtilitiesCS.Test passes deterministically regardless of class ordering and parallel load.
TryAddValuesAsync does not fail production callers on thread-pool scheduling latency.
Production code at DfDeedle.cs:186 does not dereference a possibly-null snapshot element.
A full nine-assembly /InIsolation run reports zero failures on ten consecutive runs.
Actual Behavior
Intermittent failures as above, each blocking a required check on an unrelated pull request and inviting re-run-until-green.
Logs / Screenshots
Attached minimal logs or screenshot
Snippet (Bug: tryaddvaluesasync-wall-clock-timeout-flaky #780, 2026-09-04): System.Threading.Tasks.TaskCanceledException: A task was canceled. at UtilitiesCS.DictionaryExtensions.<TryAddValuesAsync>d__10\2.MoveNext() in UtilitiesCS\Extensions\DictionaryExtensions.cs:line 179`. Local run 4767 tests, 4766 passed, the failing test alone took 21 s.
Medium: a nondeterministic failure in a required check blocks unrelated pull requests and erodes the signal the gate exists to provide. Production callers of TryAddValuesAsync may also receive a spurious cancellation under starvation.
Summary
Consolidates the
UtilitiesCS.Testnondeterminism filed as #780, #803, and #594 into one item so the requiredmstest-coveragecheck stops failing on unrelated pull requests. #803 is a duplicate of theDfDeedle_COM_TestsNullReferenceExceptionalready in #594:GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransformfails under parallel load because the class mutates static seams and production code atDfDeedle.cs:186dereferencestableSnapshot.Item1without a null check. #780 isDictionaryExtensions.TryAddValuesAsynccancelling its innerTask.Runafter a hard-coded 500 ms wall-clock window, which the thread pool exceeds under coverage instrumentation with 24 class workers. #594 also carries twoConsole.Outraces between concurrently executing tests. #592 (QuickFiler pump-host 60 s expiry) is deliberately not included: it is a different assembly and needs its own investigation.Environment
vstest.console.exe <nine assemblies> /EnableCodeCoverage /InIsolation /Logger:trx "/TestCaseFilter:TestCategory!=LiveOutlook"; the repositorymstest-coveragejobTableandMAPIFolderinDfDeedle_COM_TestsSteps to Reproduce
TryAddValuesAsync_UpdatesExistingValuefailing withTaskCanceledExceptionafter ~20 s (passes in ~2 ms alone);GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransformfailing withNullReferenceExceptionatDfDeedle.cs:186; twoConsole.Outraces.b2132349(7107 of 7108 passed, then green on re-run) and during PR Chore/update dependencies #779 verification on 2026-09-04.Expected Behavior
UtilitiesCS.Testpasses deterministically regardless of class ordering and parallel load.TryAddValuesAsyncdoes not fail production callers on thread-pool scheduling latency.DfDeedle.cs:186does not dereference a possibly-null snapshot element./InIsolationrun reports zero failures on ten consecutive runs.Actual Behavior
Intermittent failures as above, each blocking a required check on an unrelated pull request and inviting re-run-until-green.
Logs / Screenshots
System.Threading.Tasks.TaskCanceledException: A task was canceled. at UtilitiesCS.DictionaryExtensions.<TryAddValuesAsync>d__10\2.MoveNext() in UtilitiesCS\Extensions\DictionaryExtensions.cs:line 179`. Local run 4767 tests, 4766 passed, the failing test alone took 21 s.System.NullReferenceException at UtilitiesCS.DfDeedle.GetEmailDataInViewAsync, UtilitiesCS/Extensions/DfDeedle.cs line 186, Total 7108, Passed 7107, Failed 1.Impact / Severity
Medium: a nondeterministic failure in a required check blocks unrelated pull requests and erodes the signal the gate exists to provide. Production callers of
TryAddValuesAsyncmay also receive a spurious cancellation under starvation.Source
From: docs/features/potential/2026-09-07-utilitiescs-test-determinism-780-803-594.md