#!/usr/bin/env bash
# IR-156 leak arm, run 2: for the binaries that showed 0 survivors in run 1, sample the process census
# every 200 ms DURING the test, to tell "never started a daemon" from "started one that exited quickly".
# Every NEW pid seen is logged with its SPT_HOME, and that home's existence is recorded at +5 s and +30 s.
# gateway_e2e is re-run with its mock-session fixture pre-built (run 1 failed on the missing fixture: a rig defect).
set -u
. ~/.cargo/env
RIG=/home/reavus/projects/spt-core/spt-core/.worktrees/hertz-leak; O=/tmp/hertz-leak-out2
mkdir -p $O; cd $RIG || exit 9
cargo build -q -p mock-adapter --bin mock-session > $O/fixture.txt 2>&1; echo $? >> $O/fixture.txt
census() { pgrep -f '[ /]spt(\.exe)? (daemon|node) (run|brain)' | sort -n | tr '\n' ' '; }
for b in io_state_payload_e2e listen_seed_retry_e2e shell_hints_e2e shortform_dispatch_e2e gateway_e2e poll_envelope_e2e; do
  B=" $(census) "; : > $O/$b.seen
  cargo nextest run -p spt --test $b --no-fail-fast > $O/$b.nextest.txt 2>&1 &
  T=$!
  while kill -0 $T 2>/dev/null; do
    for p in $(census); do
      case "$B" in *" $p "*) continue;; esac
      grep -q "^$p " $O/$b.seen || echo "$p $(date +%s.%N | cut -c1-14) $(tr '\0' ' ' < /proc/$p/cmdline 2>/dev/null | awk '{print $2, $3}') $(tr '\0' '\n' < /proc/$p/environ 2>/dev/null | grep '^SPT_HOME=')" >> $O/$b.seen
    done
    sleep 0.2
  done
  wait $T; echo $? > $O/$b.exit
  sleep 5;  echo "after5_alive=$(for p in $(awk '{print $1}' $O/$b.seen); do kill -0 $p 2>/dev/null && printf '%s ' $p; done)" > $O/$b.after
  for h in $(awk '{print $NF}' $O/$b.seen | sed 's/^SPT_HOME=//' | sort -u); do echo "home $h exists5=$([ -d "$h" ] && echo y || echo n)" >> $O/$b.after; done
  sleep 25; A=$(for p in $(awk '{print $1}' $O/$b.seen); do kill -0 $p 2>/dev/null && printf '%s ' $p; done); echo "after30_alive=$A" >> $O/$b.after
  for h in $(awk '{print $NF}' $O/$b.seen | sed 's/^SPT_HOME=//' | sort -u); do echo "home $h exists30=$([ -d "$h" ] && echo y || echo n)" >> $O/$b.after; done
  for p in $A; do tr '\0' '\n' < /proc/$p/environ 2>/dev/null | grep -q '^SPT_HOME=/tmp/' && kill -9 $p 2>/dev/null; done
done
date -u +%T > $O/end.txt
