Summary
Test on ubuntu-latest fails on main with 92 failures, all in Semantics.Paths tests. Test on windows-latest passes. Every PR inherits the red job, which is how it was noticed.
|
ubuntu-latest |
windows-latest |
main @ 3b40272 (run) |
❌ 92 failed, 1006 passed |
✅ |
Why it started
8b9df02 ("ci: adopt the unified dotnet workflow") added Linux to the test matrix two days ago. Its own commit message says exactly what it was for:
Tests now run on Linux as well as Windows, which is new coverage for libraries that ship netstandard and claim to run anywhere but were only ever tested on one operating system.
The coverage found what it was looking for on the first run. Nothing regressed — this is pre-existing behaviour that had never been exercised.
What is failing
All 92 are path tests that assume Windows semantics: drive letters, \ separators, and the 259-character limit. A sample:
SemanticPath_RootPath
SemanticPath_PathLength_Long
PathOperators_CrossPlatformSeparators_HandleCorrectly
PathOperators_WithDotPaths_HandleCorrectly
RelativeFilePath_AsAbsoluteWithBase_ResolvesCorrectly
RelativeDirectoryPath_Parent_ReturnsCorrectParent
IsChildOf_WithMixedSeparators_WorksCorrectly
SemanticFilePath_FileName_WithPathSeparators_ShouldReturnOnlyFileName
AbsoluteToRelative_RoundTrip_WorksCorrectly
Suggested shape of the fix
Most of these look like test assumptions rather than defects in Semantics.Paths, so the work is mostly to express each expectation in terms of the running platform:
- Build fixtures with
Path.Combine and Path.DirectorySeparatorChar instead of literal C:\... strings.
- Take the root from
Path.GetPathRoot(Environment.CurrentDirectory) rather than hard-coding C:\.
- Gate the 259-character limit behind
[TestCategory("OS-Specific")], which CLAUDE.md already prescribes for exactly this.
Check each one as you go, though — the point of a Linux matrix is to find real bugs, and some of these may be genuine Semantics.Paths defects on a platform where \ is a legal filename character and there is no drive letter. IsChildOf_WithMixedSeparators_WorksCorrectly in particular is worth reading carefully before assuming the test is at fault: treating \ as a separator on Linux would be a library bug, not a test bug.
Acceptance criteria
Context
Found while working #181. Analysis was posted on #188 and #190 to explain why those PRs left the job red — neither introduced a failure, and both matched main's count exactly.
Summary
Test on ubuntu-latestfails onmainwith 92 failures, all inSemantics.Pathstests.Test on windows-latestpasses. Every PR inherits the red job, which is how it was noticed.main@3b40272(run)Why it started
8b9df02("ci: adopt the unified dotnet workflow") added Linux to the test matrix two days ago. Its own commit message says exactly what it was for:The coverage found what it was looking for on the first run. Nothing regressed — this is pre-existing behaviour that had never been exercised.
What is failing
All 92 are path tests that assume Windows semantics: drive letters,
\separators, and the 259-character limit. A sample:SemanticPath_RootPathSemanticPath_PathLength_LongPathOperators_CrossPlatformSeparators_HandleCorrectlyPathOperators_WithDotPaths_HandleCorrectlyRelativeFilePath_AsAbsoluteWithBase_ResolvesCorrectlyRelativeDirectoryPath_Parent_ReturnsCorrectParentIsChildOf_WithMixedSeparators_WorksCorrectlySemanticFilePath_FileName_WithPathSeparators_ShouldReturnOnlyFileNameAbsoluteToRelative_RoundTrip_WorksCorrectlySuggested shape of the fix
Most of these look like test assumptions rather than defects in
Semantics.Paths, so the work is mostly to express each expectation in terms of the running platform:Path.CombineandPath.DirectorySeparatorCharinstead of literalC:\...strings.Path.GetPathRoot(Environment.CurrentDirectory)rather than hard-codingC:\.[TestCategory("OS-Specific")], whichCLAUDE.mdalready prescribes for exactly this.Check each one as you go, though — the point of a Linux matrix is to find real bugs, and some of these may be genuine
Semantics.Pathsdefects on a platform where\is a legal filename character and there is no drive letter.IsChildOf_WithMixedSeparators_WorksCorrectlyin particular is worth reading carefully before assuming the test is at fault: treating\as a separator on Linux would be a library bug, not a test bug.Acceptance criteria
Test on ubuntu-latestpasses onmain.Semantics.Pathsrather than in the test.[TestCategory("OS-Specific")].Context
Found while working #181. Analysis was posted on #188 and #190 to explain why those PRs left the job red — neither introduced a failure, and both matched
main's count exactly.