From fd2d78870c0bf8eb9f27acddee0afe0b9908c49a Mon Sep 17 00:00:00 2001 From: Shaala <156393271+ShaalaXIV@users.noreply.github.com> Date: Tue, 22 Sep 2026 18:36:54 -0500 Subject: [PATCH 1/3] Prepare 0.1.8 and make the release gate runnable on PowerShell 5.1 The plugin version is bumped for the release carrying Stagehand stages, the viewport capture fix and the Chronicle additions. tools/smoke-server.ps1 assumed PowerShell 7: Windows PowerShell 5.1 does not load System.Net.Http by default, so the release gate failed before reaching any of the checks it exists to perform. A release gate has to run on the shell the release machine actually has. Co-Authored-By: Claude Opus 5 --- src/Beacon.Plugin/Beacon.Plugin.csproj | 2 +- tools/smoke-server.ps1 | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Beacon.Plugin/Beacon.Plugin.csproj b/src/Beacon.Plugin/Beacon.Plugin.csproj index 6806467..23329a4 100644 --- a/src/Beacon.Plugin/Beacon.Plugin.csproj +++ b/src/Beacon.Plugin/Beacon.Plugin.csproj @@ -4,7 +4,7 @@ Beacon Beacon - 0.1.7.0 + 0.1.8.0 enable diff --git a/tools/smoke-server.ps1 b/tools/smoke-server.ps1 index 259e259..91494fd 100644 --- a/tools/smoke-server.ps1 +++ b/tools/smoke-server.ps1 @@ -4,6 +4,12 @@ param() $ErrorActionPreference = 'Stop' Set-StrictMode -Version Latest +# Windows PowerShell 5.1 does not load System.Net.Http by default, and the release gate has to be +# runnable on whatever shell the release machine actually has rather than only on PowerShell 7. +if (-not ('System.Net.Http.HttpClient' -as [type])) { + Add-Type -AssemblyName System.Net.Http +} + $repoRoot = Split-Path -Parent $PSScriptRoot $scratch = Join-Path ([System.IO.Path]::GetTempPath()) ("beacon-smoke-" + [guid]::NewGuid().ToString('N')) $published = Join-Path $scratch 'server' From 7d2315ab17436e66d4810b75015027892988fbb1 Mon Sep 17 00:00:00 2001 From: Shaala <156393271+ShaalaXIV@users.noreply.github.com> Date: Tue, 22 Sep 2026 18:37:52 -0500 Subject: [PATCH 2/3] Fix two more PowerShell 5.1 gaps in the server smoke test ProcessStartInfo.ArgumentList and Process.Kill(entireProcessTree) are both .NET Core only, so the release gate still could not start or stop its test server on Windows PowerShell 5.1. Co-Authored-By: Claude Opus 5 --- tools/smoke-server.ps1 | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tools/smoke-server.ps1 b/tools/smoke-server.ps1 index 91494fd..daa2977 100644 --- a/tools/smoke-server.ps1 +++ b/tools/smoke-server.ps1 @@ -31,7 +31,15 @@ function Get-FreeLoopbackPort { function Start-BeaconServer([int]$Port) { $start = [System.Diagnostics.ProcessStartInfo]::new() $start.FileName = 'dotnet' - $start.ArgumentList.Add((Join-Path $published 'Beacon.Server.dll')) + # ArgumentList is .NET Core only. On Windows PowerShell 5.1 the only way through is the quoted + # Arguments string, and the published path can contain spaces. + $serverDll = Join-Path $published 'Beacon.Server.dll' + if ($null -ne $start.PSObject.Properties['ArgumentList']) { + $start.ArgumentList.Add($serverDll) + } + else { + $start.Arguments = '"' + $serverDll + '"' + } $start.WorkingDirectory = $published $start.UseShellExecute = $false $start.CreateNoWindow = $true @@ -52,7 +60,14 @@ function Stop-BeaconServer($ServerProcess) { return } - $ServerProcess.Kill($true) + # Kill(entireProcessTree) is .NET Core only; 5.1 has the parameterless overload. + try { + $ServerProcess.Kill($true) + } + catch [System.Management.Automation.MethodException] { + $ServerProcess.Kill() + } + $ServerProcess.WaitForExit() $ServerProcess.Dispose() } From 8fdd700daa2572451e0d61fdb3bd112083e41922 Mon Sep 17 00:00:00 2001 From: Shaala <156393271+ShaalaXIV@users.noreply.github.com> Date: Tue, 22 Sep 2026 18:38:41 -0500 Subject: [PATCH 3/3] Write the release checksum without a PowerShell 7 encoding name -Encoding utf8NoBOM does not exist on Windows PowerShell 5.1, so the release gate passed every check and then failed on its last line. Writing the file directly also guarantees no BOM, which would break sha256sum -c. Co-Authored-By: Claude Opus 5 --- tools/publish-release.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/publish-release.ps1 b/tools/publish-release.ps1 index 4ca614f..8cdba6b 100644 --- a/tools/publish-release.ps1 +++ b/tools/publish-release.ps1 @@ -29,7 +29,9 @@ try { Copy-Item -LiteralPath 'src/Beacon.Plugin/bin/Release/Beacon/latest.zip' -Destination $destination -Force $hash = Get-FileHash -LiteralPath $destination -Algorithm SHA256 - Set-Content -LiteralPath "$destination.sha256" -Value "$($hash.Hash.ToLowerInvariant()) $([IO.Path]::GetFileName($destination))" -Encoding utf8NoBOM + # -Encoding utf8NoBOM is PowerShell 7 only, and a BOM in a checksum file breaks sha256sum -c. + $checksumLine = "$($hash.Hash.ToLowerInvariant()) $([IO.Path]::GetFileName($destination))" + [IO.File]::WriteAllText("$destination.sha256", $checksumLine + "`n", [Text.UTF8Encoding]::new($false)) Write-Host "Release package: $destination" Write-Host "SHA-256: $($hash.Hash.ToLowerInvariant())"