#!/usr/bin/env bash
# Fourth-cell matrix: FOUR shas x N=5, same cell, same invocation, SERIAL.
#   BEFORE: fd296557 (control) / 2f422990 (version material only) / 4be9e5c9 (fix head)
#   AFTER : 110c7c4c (this lane)
# Counts LIVE presence per run from the cell's OWN assert text, keeps every
# listener stdout, and records BOX STATE per run -- because a pass rate on a
# loaded box measures the box.
# Standing driver form: sentinel first, integer overwrites, reader refuses a
# non-integer, stale outdir REFUSES, holder guard before every build.
set -u
GW=$1; OUT=$GW/.spt-matrix
FN=relay_backlog_and_live_deliveries_stamp_once_even_after_hook_poll
mkdir "$OUT" 2>/dev/null || { echo "REFUSE: outdir exists"; exit 4; }
cd "$GW" || exit 9
unset OWL_SESSION_ID SPT_AGENT_ID SPT_ENDPOINT_ID SPT_HOME SPT_API_TOKEN

for SHA in fd296557 2f422990 4be9e5c9 110c7c4c; do
  echo "VOID:unfinished" > "$OUT/$SHA.checkout"
  git checkout --detach "$SHA" > "$OUT/$SHA.checkout.raw" 2>&1
  echo $? > "$OUT/$SHA.checkout"
  [ "$(cat "$OUT/$SHA.checkout")" = "0" ] || { echo "checkout $SHA FAILED"; continue; }
  echo "sha=$(git rev-parse HEAD)" > "$OUT/$SHA.head"
  for N in 1 2 3 4 5; do
    powershell -NoProfile -ExecutionPolicy Bypass -File .spt-holders.ps1 > "$OUT/$SHA.$N.holders" 2>&1
    grep -q "holders-remaining: 0" "$OUT/$SHA.$N.holders" || { echo "REFUSE: holders at $SHA run $N"; exit 5; }
    # BOX STATE, measured beside the run rather than remembered afterwards.
    powershell -NoProfile -Command "@(Get-CimInstance Win32_Process -Filter \"Name='cargo.exe' OR Name='rustc.exe' OR Name='cargo-nextest.exe'\").Count" \
      > "$OUT/$SHA.$N.box" 2>&1
    echo "VOID:unfinished" > "$OUT/$SHA.$N.exit"
    cargo nextest run -p spt --no-fail-fast -E "test($FN)" --test-threads=1 \
      --failure-output immediate-final --success-output final > "$OUT/$SHA.$N.raw" 2>&1
    echo $? > "$OUT/$SHA.$N.exit"
  done
done

{
  printf '%-10s %-5s %-6s %-5s %-5s %-9s %-9s %s\n' SHA RUN EXIT PASS FAIL LIVE-MISS BACKLOG-MISS BUILDERS
  for SHA in fd296557 2f422990 4be9e5c9 110c7c4c; do
    for N in 1 2 3 4 5; do
      e=$(cat "$OUT/$SHA.$N.exit" 2>/dev/null); r="$OUT/$SHA.$N.raw"
      case "$e" in ''|*[!0-9]*) printf '%-10s %-5s %s\n' "$SHA" "$N" "EXIT=VOID($e) -- REFUSED"; continue;; esac
      # DISTINCT cell names: nextest prints each verdict twice (inline + final list).
      pass=$(grep -oE '^ *PASS .*' "$r" | sed 's/.*) //' | sort -u | wc -l)
      fail=$(grep -oE '^ *FAIL .*' "$r" | sed 's/.*) //' | sort -u | wc -l)
      live=$(grep -c 'live message reached the receiver' "$r")
      back=$(grep -c 'backlog reached the receiver' "$r")
      box=$(cat "$OUT/$SHA.$N.box" 2>/dev/null | tr -d '\r')
      printf '%-10s %-5s %-6s %-5s %-5s %-9s %-9s %s\n' "$SHA" "$N" "$e" "$pass" "$fail" "$live" "$back" "${box:-?}"
    done
  done
} > "$OUT/matrix.txt"
git checkout test/272-relay-live-window > /dev/null 2>&1
echo "MATRIX-DONE"
