From 9c98f07a3fefcd64863fcf730490e9db6d59c287 Mon Sep 17 00:00:00 2001 From: ImmutableJeffrey Date: Thu, 30 Apr 2026 00:14:54 +1000 Subject: [PATCH 1/4] fix(audience-sample-app): broaden FindObjectsInactive cutoff to UNITY_2022_2_OR_NEWER (SDK-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `FindFirstObjectByType(FindObjectsInactive)` is available from Unity 2022.2+, but the existing cutoff at UNITY_2023_1_OR_NEWER sent Unity 2022.3 cells (added by this PR) down the `FindObjectOfType(bool)` else-branch. That overload is `[Obsolete]` from Unity 2023+ and emits CS0618 — Unity 6's macOS log already showed the warning surfacing on the new-branch side under Unity 6 even though the cutoff supposedly excluded it. Broadening to UNITY_2022_2_OR_NEWER lets Unity 2022.2+ (including 2022.3 and Unity 6) take the new API; Unity 2021.3 still falls through to the legacy overload. --- .../Assets/SampleApp/Tests/Runtime/SampleAppLiveFireTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/audience/Assets/SampleApp/Tests/Runtime/SampleAppLiveFireTests.cs b/examples/audience/Assets/SampleApp/Tests/Runtime/SampleAppLiveFireTests.cs index a5d5626d..43a42330 100644 --- a/examples/audience/Assets/SampleApp/Tests/Runtime/SampleAppLiveFireTests.cs +++ b/examples/audience/Assets/SampleApp/Tests/Runtime/SampleAppLiveFireTests.cs @@ -89,7 +89,7 @@ private IEnumerator LoadSceneOnly() yield return SceneManager.LoadSceneAsync(SampleAppUi.SceneName, LoadSceneMode.Single); yield return null; // one extra frame for Awake/InitializeUi -#if UNITY_2023_1_OR_NEWER +#if UNITY_2022_2_OR_NEWER var sample = UnityEngine.Object.FindFirstObjectByType(FindObjectsInactive.Include); #else var sample = UnityEngine.Object.FindObjectOfType(includeInactive: true); From 8bc054573d5ab9676e7a011c00f0864e694274fe Mon Sep 17 00:00:00 2001 From: ImmutableJeffrey Date: Thu, 30 Apr 2026 00:14:57 +1000 Subject: [PATCH 2/4] ci(audience-sdk): add Unity 2022.3.62f2 cells to PlayMode matrix (SDK-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 4 cells (Win+Mac × IL2CPP+Mono2x) on Unity 2022.3.62f2 / 7670c08855a9, completing the SDK-256 matrix expansion (4 → 12). Builds on the Unity 6 cells in the prior PR; same observability hooks (annotation step + unity.log artifact) cover the new cells without further workflow changes. --- .../workflows/test-audience-sample-app.yml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/test-audience-sample-app.yml b/.github/workflows/test-audience-sample-app.yml index 833114a5..1173c558 100644 --- a/.github/workflows/test-audience-sample-app.yml +++ b/.github/workflows/test-audience-sample-app.yml @@ -60,6 +60,26 @@ jobs: unity: 6000.4.0f1 changeset: 8cf496087c8f runner: [self-hosted, macOS, ARM64] + - target: StandaloneWindows64 + backend: IL2CPP + unity: 2022.3.62f2 + changeset: 7670c08855a9 + runner: [self-hosted, Windows, X64] + - target: StandaloneWindows64 + backend: Mono2x + unity: 2022.3.62f2 + changeset: 7670c08855a9 + runner: [self-hosted, Windows, X64] + - target: StandaloneOSX + backend: IL2CPP + unity: 2022.3.62f2 + changeset: 7670c08855a9 + runner: [self-hosted, macOS, ARM64] + - target: StandaloneOSX + backend: Mono2x + unity: 2022.3.62f2 + changeset: 7670c08855a9 + runner: [self-hosted, macOS, ARM64] runs-on: ${{ matrix.runner }} timeout-minutes: 60 From 8580c4cdf2ef6645d88f3feea24734a1ed9ebc32 Mon Sep 17 00:00:00 2001 From: ImmutableJeffrey Date: Thu, 30 Apr 2026 02:19:50 +1000 Subject: [PATCH 3/4] fix(audience-sample-app): drop com.unity.collab-proxy to test IDE-IPC shutdown hypothesis (SDK-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 718's first cold-cache run on Win/IL2CPP/Unity 6 hung 60 min in Editor shutdown after tests passed (39/39, 36s) and `Cleanup mono` fired. Two threads (0xF30, 0x83C) refused to abort. The previous broader cleanup attempt (removed 5 packages: collab-proxy + textmeshpro + timeline + ugui + visualscripting) caused a different failure: Win/IL2CPP/Unity 2021 IL2CPP build succeeded but the player binary did not communicate with the Editor's test runner for 600s. macOS cells all passed, so the failure is Windows-specific. Likely com.unity.ugui (or transitively a removed package) is referenced by the Test Framework's PlayerWithTests scene template on Windows IL2CPP. This commit narrows the change to just com.unity.collab-proxy. It is the strongest match for the original Editor-shutdown hang because it loads Unity.PlasticSCM.Editor.dll + Unity.CollabProxy.Editor.dll into the Editor (confirmed in the failing log), shipping a full Plastic SCM Cloud Edition with CloudDrive, Workspaces, and CloudEdition modules. That is the same shape as the Rider plugin already removed in PR 716 — Editor-only IPC plugin with worker threads that fire DomainUnload and may not abort cleanly under Mono runtime shutdown on Windows. The other four packages (textmeshpro, timeline, ugui, visualscripting) are kept. They are not IDE-plugin-shaped (no IPC threads, no DomainUnload-style shutdown handlers). Cleaning them up is a separate cosmetic change that should land in its own ticket once the SDK-256 matrix is empirically green. --- examples/audience/Packages/manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/audience/Packages/manifest.json b/examples/audience/Packages/manifest.json index d1a4781a..22e45b69 100644 --- a/examples/audience/Packages/manifest.json +++ b/examples/audience/Packages/manifest.json @@ -1,7 +1,6 @@ { "dependencies": { "com.immutable.audience": "file:../../../src/Packages/Audience", - "com.unity.collab-proxy": "2.5.2", "com.unity.test-framework": "1.4.5", "com.unity.textmeshpro": "3.0.6", "com.unity.timeline": "1.6.5", From f7dfaf0e52fde473d0c1b948bb583e21f6a2d352 Mon Sep 17 00:00:00 2001 From: ImmutableJeffrey Date: Thu, 30 Apr 2026 03:13:17 +1000 Subject: [PATCH 4/4] ci(audience-sdk): capture player log artifact for player-launch diagnosis (SDK-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 718's Win/Mono2x/Unity 2021 cell hit "Test execution timed out. No activity received from the player in 600 seconds." despite the player binary building successfully and 11 of 12 sibling cells passing on the same SDK code path. The editor unity.log shows the build completing and the editor waiting, but cannot show whether the player binary launched, started, or crashed. The Unity player writes its log separately from the editor: - macOS: ~/Library/Logs///Player.log - Windows: %USERPROFILE%\AppData\LocalLow\\\Player.log Copy any Player.log files into artifacts/ after the PlayMode step (always runs, even on timeout) and add the path to upload-artifact. Next failure of the player-no-activity pattern will produce a log that distinguishes between (a) player crashed at startup, (b) player launched but its connection back to the editor failed, (c) player never spawned at all. Each has a different remediation. This is a diagnostic infrastructure improvement, not a workaround. The current state — failure with no diagnostic data — cannot be root-caused remotely. --- .../workflows/test-audience-sample-app.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/.github/workflows/test-audience-sample-app.yml b/.github/workflows/test-audience-sample-app.yml index 1173c558..1ef9bf24 100644 --- a/.github/workflows/test-audience-sample-app.yml +++ b/.github/workflows/test-audience-sample-app.yml @@ -329,6 +329,40 @@ jobs: run: | git config --global --add safe.directory $env:GITHUB_WORKSPACE.Replace('\','/') + - name: Capture player log (macOS) + if: always() && runner.os == 'macOS' + shell: bash + run: | + # The test-runner builds + launches a player binary that writes its own + # log separately from Unity's editor log. When the editor reports + # "Test execution timed out. No activity received from the player ..." + # the editor unity.log alone cannot tell us whether the player crashed, + # hung, or never started. Copy whatever Player.log files Unity wrote + # into artifacts/ so the upload-artifact step preserves them. + mkdir -p artifacts + src="$HOME/Library/Logs" + if [ -d "$src" ]; then + find "$src" -name "Player.log" 2>/dev/null | while IFS= read -r f; do + cp "$f" "artifacts/Player-$(basename "$(dirname "$f")").log" 2>/dev/null || true + done + fi + + - name: Capture player log (Windows) + if: always() && runner.os == 'Windows' + shell: pwsh + run: | + # See macOS counterpart for rationale. Windows player log location: + # %USERPROFILE%\AppData\LocalLow\\\Player.log + New-Item -ItemType Directory -Force -Path artifacts | Out-Null + $src = "$env:USERPROFILE\AppData\LocalLow" + if (Test-Path $src) { + Get-ChildItem -Path $src -Recurse -Filter "Player.log" -ErrorAction SilentlyContinue | + ForEach-Object { + $name = $_.Directory.Name + Copy-Item -Path $_.FullName -Destination "artifacts/Player-$name.log" -ErrorAction SilentlyContinue + } + } + - name: Surface Unity compile errors as annotations (macOS) if: always() && runner.os == 'macOS' shell: bash @@ -390,4 +424,5 @@ jobs: path: | artifacts/test-results.xml artifacts/unity.log + artifacts/Player-*.log examples/audience/Logs/**