Skip to content

[CI][Windows] Remote entitlements test exceeds MAX_PATH in RemoveDir #27040

Open

Description

@dalexsoto

Apple platform

iOS (iossimulator-arm64, Windows remote-build CI lane).

Framework version

net11.0-*; the test assembly targets .NET 11.

Affected platform version

Windows CI client with the PR-built iOS 27.1 workload. The precise Windows OS build was not collected; no server OS/runtime is inferred from a sibling job.

Description

2 original test failures across 2 distinct PRs share a concrete generated-path failure in Xamarin.Tests.IncrementalBuildTest.CompiledEntitlementsTriggerNativeLinkOnRemoteWindows(iOS,"iossimulator-arm64").

The generated application directory is 272 characters long; RemoveDir reports the Windows 260-character limit and throws System.IO.PathTooLongException. The same original TRX then records the outer dotnet build assertion timing out after 600 seconds. The stack reaches the first DotNet.AssertBuild, before the entitlements-change/incremental assertions.

Both own Enable long paths tasks return succeeded after a registry-permission warning; the before/after recorded LongPathsEnabled value is still 0. This is the documented best-effort behavior introduced by #26697, not a regression or reopening of #26667's former fatal setup task. The new failure occurs later in an executed test.

Both exact-head RemoveDir wrappers are the same blob and call base.Execute() before remote handling; the original test stacks identify the first-build call at fixture lines 180 and 197 respectively. The generated project and application directory repeat the long test-derived name. The exclusive reason the build process remains alive until its outer deadline is not established by the path exception alone.

Searches covered open and closed issues separately for the exact exception, exact test, RemoveDir/260, Windows MAX_PATH, and remote long-path terms. #20053 concerns archive/unzip paths, #22697 concerns long package-version/branch paths and missing runtime files, and #26667 concerns the earlier fatal registry setup. Their bodies, non-ignored histories and applicable closure fixes were checked; none records this exact generated-fixture/RemoveDir failure.

Steps to Reproduce

  1. Run the existing RemoteWindows entitlements test above with the standard authorized CI remote-build configuration.
  2. Observe the test-derived project/application directory reach 272 characters while long paths remain disabled after the nonfatal setup warning.
  3. The first build reports RemoveDir / PathTooLongException; the outer test records its 600-second timeout.

Did you find any workaround?

No validated workaround. No registry, image, security-policy, cache, SDK or source changes and no monitor CI retries were made. Rolf-authored source branches were left unchanged.

Relevant log output

The "RemoveDir" task failed unexpectedly.
System.IO.PathTooLongException: ... exceeds the OS max path limit.
Generated application directory: 272 characters; reported limit: 260.
'dotnet build' timed out after 00:10:00

The original reports and own source/reset/setup evidence were inspected. Complete invocation strings, connection parameters, worker identifiers and raw remote TRX are intentionally not reproduced. Use the authorized build/job links above; CI artifact retention is limited.

Note

Generated by GitHub Copilot.

Activity

  1. dalexsoto commented on Oct 26, 2026

    @dalexsoto
    MemberAuthor

    New recurrence: 3 confirmed original failed cases across 2 distinct PRs. This is a new Windows attempt on the already-counted PR, not another PR or a reread of its Windows4 result.

    PR #26936, unchanged actual reset head b5805e3f2b9f849e10934999bc777a484c457712: run 15812827 / Windows stage6-job6. The original remote TRX again fails Xamarin.Tests.IncrementalBuildTest.CompiledEntitlementsTriggerNativeLinkOnRemoteWindows(iOS,"iossimulator-arm64").

    The own RemoveDir exception reports a 272-character generated directory against the literal 260-character OS limit. The stack reaches the first-build assertion at exact-head fixture line 180, before the entitlements-change assertions. Original case clocks are 2026-10-26T14:35:56.4938363-07:00 to 2026-10-26T14:45:56.5681027-07:00; recorded duration is 00:10:00.0735470 and the outer build assertion times out after 600 seconds.

    Own Enable long paths still returns succeeded after a registry-permission warning, with LongPathsEnabled 0 before and after. This remains the best-effort setup behavior, not a regression or reopening of the former fatal setup issue #26667. The case's own selected SDK is 12.0.100-alpha.1.26513.123; no bootstrap or sibling SDK is substituted.

    Original results are remote 32 Passed / 1 Failed, local 68 Passed, and bgen 427 Passed / 1 NotExecuted. The parent actually finished failed at 2026-10-26T22:29:46.1540686Z. The two older occurrence identities remain unchanged. The path exception alone still does not establish why the build process stays alive until its outer deadline.

    No validated workaround, source/registry/SDK/worker changes, or monitor retry was made. Raw remote messages, complete invocations, connection parameters, worker identifiers and addresses are intentionally omitted. The issue body has no Additional info to collect section; the original evidence is retained privately and the authorized job link is above (artifact retention is limited).

    Note

    Generated by GitHub Copilot.

  2. dalexsoto commented on Oct 27, 2026

    @dalexsoto
    MemberAuthor

    New original occurrence: 4 confirmed entitlements-case failures across 3 distinct PRs.

    PR #27043, own Windows reset head 74455d0e7b7c9bd13bf98444cee34fbf125e11ee: run 15824143 / Windows stage1-job1.

    The own remote VSTest console explicitly reports Xamarin.Tests.IncrementalBuildTest.CompiledEntitlementsTriggerNativeLinkOnRemoteWindows(iOS,"iossimulator-arm64") as Failed. Its own error message contains RemoveDir / PathTooLongException, a 272-character application directory including its literal trailing separator (271 without it), the 260-character limit, and the outer 600-second build timeout. The exact-head stack reaches fixture line 180, the first build before entitlements-change assertions. The fixture and RemoveDir wrapper blobs still match the earlier occurrences.

    This case's own selected SDK is 12.0.100-alpha.1.26513.123. The own Enable long paths task returns succeeded despite a registry-permission warning; both logged LongPathsEnabled values remain 0. No bootstrap or sibling SDK, worker identity, or selected Apple runtime is substituted.

    The enclosing job was canceled at its 120-minute limit, and the parent finished failed at 2026-10-27T04:39:19.5013523Z. Windows TestSummary, HtmlReport and binlog publication steps were skipped, so a final remote TRX and precise original case start/end clocks are unavailable. The console contains only a partial remote result set: 23 reported Passed / 9 reported Failed, including eight separate Application Control denials. Those eight are not additional MAX_PATH occurrences. The own local run reports 68 Passed; generator tests were skipped, not passed.

    The path exception alone still does not establish why the build stayed alive to its outer deadline. No monitor retry, source change, registry/security-policy change, SDK repair or worker repair was made. Retry capacity remains uncertified because all-actor history is incomplete. The issue body has no Additional info to collect section.

    Note

    Generated by GitHub Copilot.

  3. dalexsoto commented on Oct 27, 2026

    @dalexsoto
    MemberAuthor

    Same-head recurrence in Windows generation 7: one new original remote testcase.

    PR #26936, logical head b5805e3f2b9f849e10934999bc777a484c457712, run 15812827 / job d5991fe8-6450-58f6-74ff-881584b87c3f, Windows Integration Tests generation 7:

    Xamarin.Tests.IncrementalBuildTest.CompiledEntitlementsTriggerNativeLinkOnRemoteWindows(iOS,"iossimulator-arm64")

    The original remote TRX has 32 Passed / 1 Failed. This case's own error/output contains the RemoveDir / System.IO.PathTooLongException signature: the generated directory is 272 characters including its trailing separator, 271 without, against the literal 260 limit. Its outer dotnet build assertion also timed out after 600 seconds. The source stack and exact B580 source bind this to the first build at fixture line 180, not a later no-op or entitlements-change rebuild. This is a new failed execution, not a recovery of the earlier cases.

    Counts are now 5 confirmed cases across 3 distinct PRs. All four prior case records, their source scopes and count attribution remain unchanged. The new record is this one original TRX leaf, not three repeated error renderings.

    Other own generation-7 results stay separate: local TRX 68 Passed; generator TRX 427 Passed / 1 NotExecuted. The TestSummary's 1 failed / 2 passed is a wrapper/configuration summary, not an NUnit testcase total. A pre-custom-install SDK-info task is not treated as the failing build's selected SDK; the selected product SDK/runtime is not independently certified here and no version is borrowed from another execution.

    The whole parent genuinely completed failed at 2026-10-27T08:25:50.0942913Z; this does not establish exact accepted-request payload satisfaction or refund any charge. The refreshed issue body has no Additional info to collect section. Generated paths, worker identities/addresses and raw commands are withheld. No monitor retry, source change, SDK/registry/worker repair or remote deletion was performed.

    Note

    Generated by GitHub Copilot.

  4. dalexsoto commented on Oct 27, 2026

    @dalexsoto
    MemberAuthor

    New externally observed Windows execution; no new MAX_PATH testcase is counted.

    PR #26936, unchanged logical head b5805e3f2b9f849e10934999bc777a484c457712, run 15812827 / Windows generation 8: in the captured own snapshot, the parent reactivated from its recorded failed end to inProgress, with no finish time. The own Windows stage advanced 7 to 8 and the publisher 9 to 10; the retained Simulator generation remains 3. The generation-8 reservation job succeeded and the product job started, but neither establishes an entitlements-case result or a repaired path configuration.

    This adds one external accepted-request lower bound, not one charge per stage, job, publisher or changed timeline record. Observable minima are now 8 lifetime / 7 for this exact head. The six older terminal request associations and every charge remain intact. Exact request count/grouping, payload, actor and service submission clock are unknown; complete all-actor history and remaining retry capacity are still uncertified.

    The path family remains 5 confirmed original failed cases across 3 distinct PRs. No additional RemoveDir / PathTooLongException recurrence, original-case recovery, permanent fix, accepted-payload satisfaction or refund is inferred from this new in-progress execution. No selected SDK or Apple runtime is borrowed from an earlier execution.

    The refreshed issue body has no Additional info to collect section. Worker identities/addresses and raw commands remain private. The monitor did not request this execution, retry CI, approve workflows, change source or repair registry/SDK/worker state, and did not delete remote data.

    Note

    Generated by GitHub Copilot.

  5. rolfbjarne commented on Oct 27, 2026

    @rolfbjarne
    Member

    This is really a variation/duplicate of #27046.

  6. added
    ci-failureThe issue only affects CI
    ci-postmortemCI post-mortem analysis: flaky tests, infrastructure failures, shared regressions
    on Oct 27, 2026
  7. added this to the Future milestone on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ci-failureThe issue only affects CIci-postmortemCI post-mortem analysis: flaky tests, infrastructure failures, shared regressions

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions