From 7bdc8a9060835416de387f3a605fe1bf44f472cf Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Tue, 6 Oct 2026 07:50:46 +0000 Subject: [PATCH] pc2-segments: int64 segment keys (a double never matched the int64 hashtable keys, so job b claimed nothing in 88 passes); the work-list line; the log search widened Co-Authored-By: Claude Fable 5.1 --- tools/proving-v1/pc2-segments.ps1 | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/proving-v1/pc2-segments.ps1 b/tools/proving-v1/pc2-segments.ps1 index df040cf41..58aa16cbf 100644 --- a/tools/proving-v1/pc2-segments.ps1 +++ b/tools/proving-v1/pc2-segments.ps1 @@ -163,7 +163,9 @@ if (-not (Test-Path (Join-Path $job 'prep.sh'))) { "RESULT refused $(Stamp) prep $logDir = Join-Path $app 'logs' function RateLines($since, $until) { $out = @() - foreach ($f in (Get-ChildItem -Path $logDir -Filter 'app-*.log' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 2)) { + $files = @(Get-ChildItem -Path $logDir, (Join-Path (Split-Path $app -Parent) 'logs'), $app -Filter '*.log' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-3) } | Sort-Object LastWriteTime -Descending | Select-Object -First 4) + if ($files.Count -eq 0) { "RESULT rate_files none under $logDir, $(Join-Path (Split-Path $app -Parent) 'logs'), $app" } + foreach ($f in $files) { foreach ($l in (Get-Content $f.FullName -ErrorAction SilentlyContinue | Where-Object { $_ -match '^(\d{10}) status: .* ([\d.]+) MH/s' })) { $t = [int64]$Matches[1]; if ($t -ge $since -and $t -le $until) { $out += [double]$Matches[2] } } @@ -189,16 +191,19 @@ function Candidates { $work = Rpc 'igneum_getAssignedShards' @(@($keyHash), 600) if (-not $work) { return @() } $by = @{} - foreach ($w in $work) { $num = Hex $w.number; if ($num -lt $script:start) { continue }; if (-not $by.ContainsKey($num)) { $by[$num] = @() }; $by[$num] += $w } + foreach ($w in $work) { [int64]$num = Hex $w.number; if ($num -lt $script:start) { continue }; if (-not $by.ContainsKey($num)) { $by[$num] = @() }; $by[$num] += $w } + "RESULT worklist $(Stamp) entries=$(@($work).Count) blocks=$($by.Count) start=$($script:start) n=$($script:n) tipDaa=$tipDaa" $need = [math]::Max(240, [math]::Ceiling($lastSegSecs * 1.5)) $segs = @() $seen = @{} foreach ($num in ($by.Keys | Sort-Object)) { - $k = [math]::Floor(($num - $script:start) / $script:n); $first = $script:start + $k * $script:n; $last = $first + $script:n - 1 + # [int64] throughout: [math]::Floor gives a double, and a double never matches an int64 hashtable key (job b, + # 07:20Z to 07:50Z: every segment "not whole", 88 passes, nothing claimed) + [int64]$k = [math]::Floor(($num - $script:start) / $script:n); [int64]$first = $script:start + $k * $script:n; [int64]$last = $first + $script:n - 1 if ($seen.ContainsKey($first)) { continue }; $seen[$first] = $true if ($attempted.ContainsKey($first)) { continue } $whole = $true; $shards = @(); $lastDaa = 0; $wei = 0 - for ($b = $first; $b -le $last; $b++) { + for ([int64]$b = $first; $b -le $last; $b++) { if (-not $by.ContainsKey($b)) { $whole = $false; break } $es = $by[$b] | Sort-Object { $_.shard } -Unique foreach ($e in $es) { @@ -211,7 +216,7 @@ function Candidates { } if ($whole -and $shards.Count -gt 0) { $deadline = $lastDaa + $script:unproven - if ($deadline -ge ($tipDaa + 1 + $need)) { $segs += @{ first = $first; last = $last; lastDaa = $lastDaa; deadline = $deadline; shards = $shards; margin = ($deadline - $tipDaa - 1) } } + if ($deadline -ge ($tipDaa + 1 + $need)) { $segs += @{ first = $first; last = $last; lastDaa = $lastDaa; deadline = $deadline; shards = $shards; margin = [int64]($deadline - $tipDaa - 1) } } } } # newest first (the most time before the deadline); the app ranks by FNV(first, key) for the spread