docs(evidence): #799 acceptance runs on master aa60b3e3 - Windows x64 and Linux both fail the unchanged cold RSS cap
v2-ci / unit-tests (push) Waiting to run

Owner scope 2026-11-12 (Windows x64 + Linux, unchanged cycle-3 caps, >=7200 s, SDK 1.5 comparator).

- Linux ARM64 (late-slope, 7200.12 s, 1964 cycles / 491 restarts, shutdown verified, analyzer-validated):
  first rejection RSS at cycle 247 / 900.73 s, 358,682,624 > 358,678,528 (+4 KiB); peak 382.98 MiB vs
  limit 342.06 MiB; late plateau medians 344.4/341.1/341.9 MiB, OLS -1.90 MiB/h. FAIL.
- Windows x64 on windev (same workload, working set as RSS, handle table as descriptors): first rejection RSS
  at cycle 285 / 1130.76 s, 303,505,408 > 302,174,208; peak 319.49 vs limit 288.18 MiB; plateau ~314-315 MiB,
  +0.93 MiB/h. FAIL. Also incomplete: the launcher's wall-clock outer deadline fired early after a +552 s
  w32time step and ended the run at test-phase 7014 s (rejection had already latched); launchers now use a
  Stopwatch.
- SDK 1.5.378.182 comparator (efb9197a publication, Windows, 7201 s): RSS peak +65.8 MiB (never over its cap),
  plateau ~+48 MiB, but the +32 handle cap tripped at cycle 17 (max 674 vs 642).
- Managed flat on both SDK2 runs; growth is the generated-factory JIT burst (+40k/+44k methods) - Linux JIT
  doublemapper ~180 MiB; Windows private bytes grew ~25 MiB of a ~132 MiB working-set rise.
- Retained: b61f3e05 cycle-1 fixture failure (#808 unplaced UNS folder), Windows/SDK1 smoke diagnostics.

No cap raised, no warm baseline, no failed run counted as passing.

Claude-Session: https://claude.ai/code/session_01GT67ACmpMR7b9LGRPLijMi
This commit is contained in:
Joseph Doherty
2026-11-12 14:51:31 -05:00
parent e303165444
commit fea7de0aef
51 changed files with 19174 additions and 3 deletions
@@ -16,6 +16,8 @@ New-Item -ItemType Directory -Path (Join-Path $Output 'tmp') | Out-Null
& icacls $Output /inheritance:r /grant:r "$($env:USERNAME):(OI)(CI)F" '*S-1-5-18:(OI)(CI)F' | Out-Null
$exe = Join-Path (Resolve-Path $Bin).Path 'sdk1-comparator.exe'
$started = Get-Date
# Monotonic: the 2026-11-12 windev run lost its last 186 s when a +552 s host clock step (w32time) advanced a wall-clock deadline.
$clock = [System.Diagnostics.Stopwatch]::StartNew()
$bytes = New-Object byte[] 3; [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
$env:OTOPCUA_BASELINE_CANONICAL_KEY = 'otua_k-server-events_' + (($bytes | ForEach-Object { $_.ToString('x2') }) -join '')
$env:OTOPCUA_COMPARATOR_SOURCE = $SourceRevision
@@ -32,7 +34,7 @@ $proc = [System.Diagnostics.Process]::Start($psi)
$outTask = $proc.StandardOutput.ReadToEndAsync(); $errTask = $proc.StandardError.ReadToEndAsync()
$sampler = Join-Path $Output 'external-samples.jsonl'
while (-not $proc.WaitForExit(30000)) {
$elapsed = ((Get-Date) - $started).TotalSeconds
$elapsed = $clock.Elapsed.TotalSeconds
$row = [ordered]@{ utc = (Get-Date).ToUniversalTime().ToString('o'); launcherElapsedSeconds = [math]::Round($elapsed, 1) }
try {
$p = Get-Process -Id $proc.Id -ErrorAction Stop
@@ -39,6 +39,8 @@ foreach ($d in 'tmp', 'cli', 'data', 'results') { New-Item -ItemType Directory -
# Private task directory: no inherited ACEs, only the running user and SYSTEM.
& icacls $Output /inheritance:r /grant:r "$($env:USERNAME):(OI)(CI)F" '*S-1-5-18:(OI)(CI)F' | Out-Null
$started = Get-Date
# Monotonic: the 2026-11-12 windev run lost its last 186 s when a +552 s host clock step (w32time) advanced a wall-clock deadline.
$clock = [System.Diagnostics.Stopwatch]::StartNew()
function Write-Json($path, $value) { $value | ConvertTo-Json -Depth 6 | Set-Content -Encoding UTF8 -Path $path }
@@ -120,7 +122,7 @@ if (-not $verified) {
$sampler = Join-Path $Output 'external-samples.jsonl'
$nextHealth = Get-Date
while (-not $vstest.WaitForExit(30000)) {
$elapsed = ((Get-Date) - $started).TotalSeconds
$elapsed = $clock.Elapsed.TotalSeconds
$row = [ordered]@{ utc = (Get-Date).ToUniversalTime().ToString('o'); launcherElapsedSeconds = [math]::Round($elapsed, 1) }
try {
$p = Get-Process -Id $targetPid -ErrorAction Stop
@@ -143,7 +145,7 @@ while (-not $vstest.WaitForExit(30000)) {
$log.Write($outTask.Result); $log.Write($errTask.Result); $log.Dispose()
$status = $vstest.ExitCode
"$status" | Set-Content -Encoding ASCII (Join-Path $Output 'test-exit-status.txt')
$wall = ((Get-Date) - $started).TotalSeconds
$wall = $clock.Elapsed.TotalSeconds
$evidence = [ordered]@{}
foreach ($f in Get-ChildItem -LiteralPath $Output -File -Recurse | Where-Object { $_.FullName -notlike "$Output\tmp\*" -and $_.FullName -notlike "$Output\cli\*" -and $_.FullName -notlike "$Output\data\*" }) {
$evidence[$f.FullName.Substring($Output.Length + 1).Replace('\', '/')] = (Get-FileHash -Algorithm SHA256 $f.FullName).Hash.ToLowerInvariant()