Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
4ed8f69
fix(studio): acknowledge PTP role/config/start in native guided Timin…
masarray Oct 15, 2026
725b51e
fix(studio): keep PTP START acknowledgements distinct from SV publish…
masarray Oct 15, 2026
a328da1
fix(workbench): preserve bounded initial SCL-assisted MMS q/t evidenc…
masarray Oct 15, 2026
8be7b8a
fix(studio): default native PTP Sync cadence to supported 1000 ms
masarray Oct 15, 2026
fb0457f
ci(studio): package side-by-side native Windows GUI preview with pinn…
masarray Oct 15, 2026
57d028c
build(studio): replace preview NSIS with Inno Setup smart upgrade and…
masarray Oct 15, 2026
d1c4124
feat(installer): gated ownership-safe migration from public NSIS v0.1…
masarray Oct 15, 2026
c375615
test(studio): localize Windows reference-template failure before inst…
masarray Oct 15, 2026
ff64f50
fix(ci): wait on GUI installers and application exit codes in Windows…
masarray Oct 15, 2026
7ce9025
fix(ci): copy pinned firmware/tool contents into canonical native Stu…
masarray Oct 15, 2026
eb7fba2
test(studio): capture baseline vs new native firmware contract failur…
masarray Oct 15, 2026
bc5415b
fix(studio): bundle matched PR-head ESP32-P4 firmware in isolated Inn…
masarray Oct 15, 2026
4b8de64
ci(esp32): isolate reusable preview firmware build from standalone wo…
masarray Oct 15, 2026
82d2f18
fix(esp32): fail closed on invalid firmware source commit provenance
masarray Oct 15, 2026
ebc62a1
fix(studio): stop independent PTP runtime on GUI shutdown before Inno…
masarray Oct 15, 2026
06db65e
fix(studio): bound full serial STOP drain instead of assuming first b…
masarray Oct 15, 2026
305ac0c
fix(installer): unambiguous Inno stable/preview channel and safe PTP-…
masarray Oct 15, 2026
8fa52fa
test(installer): correct PowerShell expression grouping in final NSIS…
masarray Oct 15, 2026
a0adcbd
fix(studio): require PTP role ACK and live PTP2 readback before GUI S…
masarray Oct 15, 2026
61be86f
docs(workbench): canonical ARSAS-inspired GUI/SSOT strategy and cross…
masarray Oct 15, 2026
03fceb0
merge(studio): reconcile native Inno preview with latest canonical Wo…
masarray Oct 15, 2026
58ed859
fix(studio): make PTP STOP fail-closed under queued START and transpo…
masarray Oct 15, 2026
c9c0155
test(studio): validate role-mismatch rollback through STOPPED before …
masarray Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(ci): wait on GUI installers and application exit codes in Windows…
… smoke
  • Loading branch information
masarray committed Oct 15, 2026
commit ff64f50d100ef2d14c7b1d553e61274ac47e72cc
58 changes: 29 additions & 29 deletions .github/workflows/arstack-studio-native-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ jobs:
if ($LASTEXITCODE -ne 0) { throw 'Native session regression failed' }
# Differentiate product code regressions from missing deployed DLLs.
$nativeGui = Join-Path $PWD 'build-studio-preview\Release\arstack_studio.exe'
& $nativeGui '--check-reference-template'
Write-Host "NATIVE_BUILD_REFERENCE_TEMPLATE_EXIT=$LASTEXITCODE"
if ($LASTEXITCODE -ne 0) { throw 'Native Windows reference template regression before packaging' }
$probe = Start-Process -FilePath $nativeGui -ArgumentList '--check-reference-template' -Wait -PassThru
Write-Host "NATIVE_BUILD_REFERENCE_TEMPLATE_EXIT=$($probe.ExitCode)"
if ($probe.ExitCode -ne 0) { throw 'Native Windows reference template regression before packaging' }

- name: Verify immutable public v0.1.1 firmware and flasher source
shell: pwsh
Expand All @@ -71,9 +71,9 @@ jobs:
}
}
$legacyGui = Join-Path $baseline 'ARStackStudio.exe'
& $legacyGui '--check-reference-template'
Write-Host "PUBLIC_BASELINE_REFERENCE_TEMPLATE_EXIT=$LASTEXITCODE"
if ($LASTEXITCODE -ne 0) { throw 'Verified public base GUI reference template regression' }
$probe = Start-Process -FilePath $legacyGui -ArgumentList '--check-reference-template' -Wait -PassThru
Write-Host "PUBLIC_BASELINE_REFERENCE_TEMPLATE_EXIT=$($probe.ExitCode)"
if ($probe.ExitCode -ne 0) { throw 'Verified public base GUI reference template regression' }
Write-Host 'Pinned v0.1.1 public firmware / flasher archive: VERIFIED'

- name: Stage isolated GUI preview with pinned release firmware
Expand Down Expand Up @@ -116,11 +116,11 @@ jobs:
$env:ARSTACK_STUDIO_ESPFLASH = Join-Path $stage 'tools\espflash.exe'
$env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
foreach ($check in @('--check-reference-template', '--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
& $exe $check
Write-Host "PACKAGED_PREVIEW_CHECK=$check EXIT=$LASTEXITCODE"
if ($LASTEXITCODE -ne 0) {
$probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
Write-Host "PACKAGED_PREVIEW_CHECK=$check EXIT=$($probe.ExitCode)"
if ($probe.ExitCode -ne 0) {
Get-ChildItem $stage -Filter '*.dll' | Select-Object -ExpandProperty Name
throw "Preview GUI failed packaged smoke $check with code $LASTEXITCODE"
throw "Preview GUI failed packaged smoke $check with code $($probe.ExitCode)"
}
}
& $env:ARSTACK_STUDIO_ESPFLASH --version
Expand Down Expand Up @@ -155,17 +155,17 @@ jobs:
run: |
$installer = Join-Path $PWD 'dist\ARStack-Studio-Preview-win-x64-setup.exe'
$installDir = Join-Path $env:RUNNER_TEMP 'ARStackStudioPreviewCleanInstall'
$silent = @('/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART', '/CLOSEAPPLICATIONS', "/DIR=$installDir")
& $installer @silent
if ($LASTEXITCODE -ne 0) { throw 'Inno preview installation failed' }
$silent = @('/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART', '/CLOSEAPPLICATIONS', "/DIR=`"$installDir`"")
$install = Start-Process -FilePath $installer -ArgumentList $silent -Wait -PassThru
if ($install.ExitCode -ne 0) { throw "Inno preview install exit $($install.ExitCode)" }
$exe = Join-Path $installDir 'ARStackStudio.exe'
if (-not (Test-Path $exe)) { throw 'Preview installation is missing GUI EXE' }
$env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $installDir 'firmware'
$env:ARSTACK_STUDIO_ESPFLASH = Join-Path $installDir 'tools\espflash.exe'
$env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
foreach ($check in @('--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
& $exe $check
if ($LASTEXITCODE -ne 0) { throw "Installed preview failed $check" }
$probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
if ($probe.ExitCode -ne 0) { throw "Installed preview failed $check code $($probe.ExitCode)" }
}
$previewKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\ARStack61850.Studio.Preview_is1'
if (-not (Test-Path $previewKey)) { throw 'Inno Preview AppId registration missing' }
Expand All @@ -179,8 +179,8 @@ jobs:
throw 'GUI did not become interactive during hot-update test'
}
if ($runningApp.HasExited) { throw 'GUI exited before hot-update test' }
& $installer @silent
if ($LASTEXITCODE -ne 0) { throw 'Inno upgrade with running GUI failed' }
$upgrade = Start-Process -FilePath $installer -ArgumentList $silent -Wait -PassThru
if ($upgrade.ExitCode -ne 0) { throw "Inno GUI hot-update exit $($upgrade.ExitCode)" }
$runningApp.Refresh()
if (-not $runningApp.HasExited) {
throw 'Inno did not gracefully close the GUI for upgrade'
Expand All @@ -195,12 +195,12 @@ jobs:
if (-not (Test-Path -LiteralPath $userNote)) {
throw 'Preview upgrade removed an operator-owned file'
}
& $exe '--check-firmware-contract'
if ($LASTEXITCODE -ne 0) { throw 'Upgraded GUI firmware contract failed' }
$probe = Start-Process -FilePath $exe -ArgumentList '--check-firmware-contract' -Wait -PassThru
if ($probe.ExitCode -ne 0) { throw 'Upgraded GUI firmware contract failed' }
$uninstall = Join-Path $installDir 'unins000.exe'
if (-not (Test-Path $uninstall)) { throw 'Inno-generated uninstaller missing' }
& $uninstall '/VERYSILENT' '/SUPPRESSMSGBOXES' '/NORESTART'
if ($LASTEXITCODE -ne 0) { throw 'Inno preview uninstall failed' }
$removal = Start-Process -FilePath $uninstall -ArgumentList @('/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART') -Wait -PassThru
if ($removal.ExitCode -ne 0) { throw "Inno preview uninstall exit $($removal.ExitCode)" }
if (Test-Path $exe) { throw 'Uninstall left an application-owned GUI EXE' }
if (Test-Path $previewKey) { throw 'Uninstall left Inno AppId entry' }
if (-not (Test-Path $userNote)) { throw 'Uninstall deleted operator-owned data' }
Expand All @@ -223,8 +223,8 @@ jobs:
$legacyKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\ARStackStudio'
$innoKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\ARStack61850.Studio.Stable_is1'
if (Test-Path $legacyKey) { throw 'Unexpected preexisting stable NSIS registration on runner' }
& $oldSetup '/S' "/D=$stableDir"
if ($LASTEXITCODE -ne 0) { throw 'Actual v0.1.1 NSIS install failed' }
$legacyInstall = Start-Process -FilePath $oldSetup -ArgumentList @('/S', "/D=$stableDir") -Wait -PassThru
if ($legacyInstall.ExitCode -ne 0) { throw "Historical NSIS install exit $($legacyInstall.ExitCode)" }
if (-not (Test-Path $legacyKey) -or
-not (Test-Path (Join-Path $stableDir 'Uninstall.exe'))) {
throw 'Legacy NSIS installation evidence missing'
Expand All @@ -239,8 +239,8 @@ jobs:
if ($LASTEXITCODE -ne 0) { throw 'Stable-channel migration fixture compilation failed' }
$migrationSetup = Join-Path $env:RUNNER_TEMP 'ARStack-Studio-win-x64-setup.exe'
if (-not (Test-Path $migrationSetup)) { throw 'Inno migration fixture missing' }
& $migrationSetup '/VERYSILENT' '/SUPPRESSMSGBOXES' '/NORESTART' '/CLOSEAPPLICATIONS'
if ($LASTEXITCODE -ne 0) { throw 'Verified NSIS to Inno migration failed' }
$migrated = Start-Process -FilePath $migrationSetup -ArgumentList @('/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART', '/CLOSEAPPLICATIONS') -Wait -PassThru
if ($migrated.ExitCode -ne 0) { throw "Verified NSIS to Inno migration exit $($migrated.ExitCode)" }
if (Test-Path $legacyKey) { throw 'Legacy NSIS uninstall registration was not cleaned' }
if (Test-Path (Join-Path $stableDir 'Uninstall.exe')) {
throw 'Legacy NSIS uninstaller still present after migration'
Expand All @@ -250,11 +250,11 @@ jobs:
$newGui = Join-Path $stableDir 'ARStackStudio.exe'
$env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $stableDir 'firmware'
$env:ARSTACK_STUDIO_ESPFLASH = Join-Path $stableDir 'tools\espflash.exe'
& $newGui '--check-firmware-contract'
if ($LASTEXITCODE -ne 0) { throw 'Migrated firmware package contract failed' }
$probe = Start-Process -FilePath $newGui -ArgumentList '--check-firmware-contract' -Wait -PassThru
if ($probe.ExitCode -ne 0) { throw 'Migrated firmware package contract failed' }
$uninstall = Join-Path $stableDir 'unins000.exe'
& $uninstall '/VERYSILENT' '/SUPPRESSMSGBOXES' '/NORESTART'
if ($LASTEXITCODE -ne 0) { throw 'Migrated Inno uninstall failed' }
$removed = Start-Process -FilePath $uninstall -ArgumentList @('/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART') -Wait -PassThru
if ($removed.ExitCode -ne 0) { throw "Migrated Inno uninstall exit $($removed.ExitCode)" }
if (Test-Path $newGui -or (Test-Path $innoKey) -or -not (Test-Path $note)) {
throw 'Migrated Inno uninstall did not remove owned files safely'
}
Expand Down
Loading