Archive closed cb5 Saved Scenario UI gate with full-suite failures

This commit is contained in:
2026-09-13 01:16:54 -07:00
parent 5bd2c0bec8
commit d6dd2b0920
37 changed files with 37513 additions and 0 deletions
@@ -0,0 +1,20 @@
# Pure file/log readers. No executable is started by these helpers.
function Get-GateBinary([string]$Path,[string]$Target) {
$resolved=[IO.Path]::GetFullPath($Path)
$root=[IO.Path]::GetFullPath($Target).TrimEnd('\','/')+[IO.Path]::DirectorySeparatorChar
if(-not $resolved.StartsWith($root,[StringComparison]::OrdinalIgnoreCase)){throw 'Executable path escapes the parent-owned target.'}
$item=Get-Item -LiteralPath $resolved
[ordered]@{path=$resolved;bytes=$item.Length;sha256=(Get-FileHash -LiteralPath $resolved -Algorithm SHA256).Hash.ToLowerInvariant();mtimeUtc=$item.LastWriteTimeUtc.ToString('o')}
}
function Get-GateTestBinaries([string]$Log,[string]$Target) {
$paths=@([regex]::Matches($Log,'(?m)^\s*Running unittests .+? \(([^\r\n]+\.exe)\)\s*$')|ForEach-Object {$_.Groups[1].Value}|Sort-Object -Unique)
foreach($path in $paths){Get-GateBinary $path $Target}
}
function Same-GateBinaries($Left,$Right) {
$a=@($Left|Sort-Object path);$b=@($Right|Sort-Object path)
if($a.Count -eq 0 -or $a.Count -ne $b.Count){return $false}
for($i=0;$i -lt $a.Count;$i++){
if($a[$i].path -ine $b[$i].path -or $a[$i].bytes -ne $b[$i].bytes -or $a[$i].sha256 -cne $b[$i].sha256){return $false}
}
return $true
}