Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test - #125682

Merged
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue
Mar 19, 2026
Merged

Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test#125682
danmoseley merged 4 commits into
mainfrom
copilot/fix-filesystemwatcher-symlink-issue

Conversation

CopilotAI commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Description

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories was consistently flaky on macOS, failing with AggregateException: (Expected Event occurred) × 3 from the ExpectNoEvent assertion.

Root cause: macOS FSEvents can deliver a late Created event for subDir (created during test setup, just before the stream starts at kFSEventStreamEventIdSinceNow). Since subDir is a direct child of the watched path, it correctly passes CheckIfPathIsNested even with IncludeSubdirectories = false. With no expectedPath filter on ExpectNoEvent, anyCreated event triggered the failure—including this unrelated one.

Changes:

  • ExpectNoEvent — add path filter: Pass expectedPath: Path.Combine(linkPath, subDir, subDirLv2) so the assertion only fails if a Created event fires at the specific nested path under test. Spurious events at sibling paths (e.g. subDir itself) are ignored.
  • [ActiveIssue] — removed: The [ActiveIssue] attribute has been removed entirely. The expectedPath fix makes the test robust enough to run on all platforms without skipping.
  • Comments — added disk-layout diagram and inline path annotations: A layout comment explains the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path. Each path variable and expectedPath argument is annotated with its concrete resolved value (e.g. // linkPath/subDir/subDirLv2) to make the test easier to follow.

Security

No security-relevant changes.

Original prompt

This section details on the original issue you should resolve

<issue_title>FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories failed with missed event</issue_title>
<issue_description>## Build Information
Build: https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1302001
Build error leg or test failing: System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
Pull request: #124628

Error Message

Fill the error message using step by step known issues guidance.

{
"ErrorMessage": "System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[One or more errors occurred]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 8:56:47 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Known issue validation

Build: 🔎https://dev.azure.com/dnceng-public/public/_build/results?buildId=1302001
Error message validated:[System.AggregateException : One or more errors occurred. (Expected Event occurred) (Expected Event occurred) (Expected Event occurred)]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 2/20/2026 11:20:21 PM UTC

Report

BuildDefinitionTestPull Request
1302819dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124660
1302001dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories#124628

Summary

24-Hour Hit Count7-Day Hit Count1-Month Count
222

Report

BuildDefinitionTestPull Request
1311577dotnet/runtimeSystem.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories
1310526dotnet/runtime[System.IO.Tests.SymbolicLink_Changed_Tests.FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories](https://dev.azure.com/dnceng-public/publ...

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-io
See info in area-owners.md if you want to be subscribed.

…udeSubdirectories test
Add expectedPath filter to ExpectNoEvent call so spurious Create events
from setup (e.g. subDir created just before the FSEvents stream started)
do not cause false test failures on macOS.
Change [ActiveIssue] to be OSX-specific since the root cause is macOS
FSEvents delivering late events near the kFSEventStreamEventIdSinceNow
boundary, and the test now runs cleanly on Linux/Windows.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix FileSystemWatcher symbolic link missed event issueFix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories testMar 17, 2026
CopilotAI requested a review from danmoseleyMarch 17, 2026 22:02
@danmoseley

Copy link
Copy Markdown
Contributor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

@danmoseley
danmoseley requested a review from CopilotMarch 18, 2026 00:47
@danmoseley
danmoseley marked this pull request as ready for review March 18, 2026 00:47
@danmoseley

Copy link
Copy Markdown
Contributor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

 action: () => Directory.CreateDirectory(subDirLv2Path),
cleanup: () => Directory.Delete(subDirLv2Path),
expectedPath: Path.Combine(linkPath, subDir, subDirLv2));

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Improves reliability and coverage of the FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test by reducing false failures from unrelated Created events and ensuring the test is only skipped on the affected platform.

Changes:

  • Scope ExpectNoEvent to only fail when a Created event occurs for the specific nested directory path under test.
  • Restrict the existing [ActiveIssue] skip to TestPlatforms.OSX so the test runs on Windows/Linux.

…ate_IncludeSubdirectories test
The expectedPath fix makes the test robust enough to run on all platforms.
Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot remove the ActiveIssue, since the point of this change is to fix and enable the test.

Done — removed the [ActiveIssue] attribute entirely in c62ed9b. The test now runs on all platforms.

Co-authored-by: danmoseley <6385855+danmoseley@users.noreply.github.com>

CopilotAI commented Mar 18, 2026

Copy link
Copy Markdown
ContributorAuthor

also @copilot it might be helpful to add some comments around here with examples of each of these path variables ot help readers.

...

Added a disk-layout diagram and inline comments on each path variable in 483c78c. The comments now show the relationship between tempDir, tempSubDir, linkPath, and subDirLv2Path, and the expectedPath arguments are annotated with the concrete path they resolve to.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, failures seem to be unrelated. Thank you @danmoseley

cc @jozkee

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the failures are unrelated

@danmoseley
danmoseley merged commit 7bd64cb into mainMar 19, 2026
87 of 92 checks passed
@danmoseley
danmoseley deleted the copilot/fix-filesystemwatcher-symlink-issue branch March 19, 2026 14:33
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 19, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

4 participants

@danmoseley@adamsitnik