55 types : [opened, synchronize, reopened, ready_for_review]
66 paths :
77 - ' apps/arstack_studio/**'
8+ # Firmware-only timing fixes MUST create a matched ESP32 image and
9+ # Windows Inno installer; do not leave users on stale embedded firmware.
10+ - ' embedded/esp32p4_smv_injector/**'
11+ - ' include/ariec61850/time_sync/**'
812 - ' .github/workflows/arstack-studio-native-preview.yml'
913
1014permissions :
@@ -19,10 +23,14 @@ jobs:
1923 # rather than taking an older public firmware that lacks PROFILE-BINARY-V1.
2024 firmware :
2125 uses : ./.github/workflows/esp32p4-smv-injector.yml
26+ with :
27+ # Only the GUI Preview installer opts into measured local phase sync.
28+ # Stable release workflow keeps ordinary firmware until board validation.
29+ phase_sync_preview : true
2230
2331 windows-preview :
2432 needs : firmware
25- if : ${{ !github.event.pull_request.draft && github.event.pull_request.head.repo.full_name == github.repository }}
33+ if : ${{ github.event.pull_request.head.repo.full_name == github.repository }}
2634 runs-on : windows-2022
2735 timeout-minutes : 40
2836 env :
@@ -50,10 +58,17 @@ jobs:
5058 run : |
5159 cmake -S apps/arstack_studio -B build-studio-preview -G "Visual Studio 17 2022" -A x64 -DARIEC61850_WARNINGS_AS_ERRORS=ON -DARSTACK_STUDIO_ENGINEERING_PREVIEW=ON
5260 if ($LASTEXITCODE -ne 0) { throw 'Preview configuration failed' }
53- cmake --build build-studio-preview --config Release --target arstack_studio arstack_session_harness --parallel 2
61+ cmake --build build-studio-preview --config Release --target arstack_studio arstack_session_harness arstack_clipboard_harness arstack_capture_harness --parallel 2
5462 if ($LASTEXITCODE -ne 0) { throw 'Native Studio preview build failed' }
5563 & "$PWD\build-studio-preview\Release\arstack_session_harness.exe"
5664 if ($LASTEXITCODE -ne 0) { throw 'Native session regression failed' }
65+ & "$PWD\build-studio-preview\Release\arstack_clipboard_harness.exe"
66+ if ($LASTEXITCODE -ne 0) { throw 'Production native clipboard readback regression failed' }
67+ # The exact production PCAP decoder must pass the real historical
68+ # 24-byte/zero-packet and STOPPED+stale-FPS regression, not just
69+ # the session and clipboard tests on Draft PRs.
70+ & "$PWD\build-studio-preview\Release\arstack_capture_harness.exe"
71+ if ($LASTEXITCODE -ne 0) { throw 'Native SV capture 24-byte PCAP / liveness regression failed' }
5772 # Differentiate product code regressions from missing deployed DLLs.
5873 $nativeGui = Join-Path $PWD 'build-studio-preview\Release\arstack_studio.exe'
5974 $probe = Start-Process -FilePath $nativeGui -ArgumentList '--check-reference-template' -Wait -PassThru
@@ -95,6 +110,16 @@ jobs:
95110 throw 'Matching firmware job did not provide its manifest'
96111 }
97112 $manifest = Get-Content -Raw -LiteralPath $manifestPath | ConvertFrom-Json
113+ if ($manifest.phaseSyncPreview -ne $true -or
114+ $manifest.bootSimulatedGlobalGmEnabled -ne $true -or
115+ $manifest.bootSourceAutostartEnabled -ne $true -or
116+ $manifest.defaultPtpPolicy -ne 'INTERNAL_GM_ONLY' -or
117+ $manifest.globalGmTraceabilityPhysicallyProven -ne $false -or
118+ $manifest.phaseServoEnabled -ne $true -or
119+ $manifest.canonicalMacTxEvidenceEnabled -ne $true -or
120+ $manifest.broadcastMirrorEnabled -ne $false) {
121+ throw 'FAT preview requires simulated Global GM BOOT + PTP-source autostart + measured SV phase/MAC evidence, never LOCAL-only firmware'
122+ }
98123 $expectedCapabilities = @('SMV-4I4V', 'PROFILE', 'PROFILE-BINARY-V1', 'LIVE-SETPOINTS', 'SESSION-LEASE', 'PTP-P2', 'SMPSYNCH-AUTO')
99124 foreach ($capability in $expectedCapabilities) {
100125 if ($manifest.capabilities -notcontains $capability) { throw "PR firmware lacks capability: $capability" }
@@ -216,7 +241,7 @@ jobs:
216241 $env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $stage 'firmware'
217242 $env:ARSTACK_STUDIO_ESPFLASH = Join-Path $stage 'tools\espflash.exe'
218243 $env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
219- foreach ($check in @('--check-reference-template', '--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
244+ foreach ($check in @('--check-reference-template', '--check-firmware-contract', '--check-p0-policy', '--check-clipboard', '--check- app-lifecycle')) {
220245 $probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
221246 Write-Host "PACKAGED_PREVIEW_CHECK=$check EXIT=$($probe.ExitCode)"
222247 if ($probe.ExitCode -ne 0) {
@@ -264,7 +289,7 @@ jobs:
264289 $env:ARSTACK_STUDIO_FIRMWARE_DIR = Join-Path $installDir 'firmware'
265290 $env:ARSTACK_STUDIO_ESPFLASH = Join-Path $installDir 'tools\espflash.exe'
266291 $env:ESPFLASH_SKIP_UPDATE_CHECK = 'true'
267- foreach ($check in @('--check-firmware-contract', '--check-p0-policy', '--check-app-lifecycle')) {
292+ foreach ($check in @('--check-firmware-contract', '--check-p0-policy', '--check-clipboard', '--check- app-lifecycle')) {
268293 $probe = Start-Process -FilePath $exe -ArgumentList $check -Wait -PassThru
269294 if ($probe.ExitCode -ne 0) { throw "Installed preview failed $check code $($probe.ExitCode)" }
270295 }
0 commit comments