From a884c62098bc421fd61950d67d0f0be6e2a499ba Mon Sep 17 00:00:00 2001 From: Sylpheed RE agent Date: Mon, 24 Aug 2026 15:25:17 +0000 Subject: [PATCH] re: player death bounds every run; fix a harness bug that shortened the windows Correction first. The sed used to derive each session script from the last stripped the probe's arguments, so wave5, census and wave6 sessions invoked their probes with no arguments and every derived probe has been running on its own defaults. The previous iteration's claim that the run was "cut at 240 s by the turn timeout, not the planned 330 s" is therefore wrong: the probe used its default of 240. The pilot got the requested duration while the probe watched for a different one, and the numbers were plausible enough that it went unnoticed. No earlier conclusion is invalidated -- the windows were real, just shorter than intended and misattributed. All three sessions now pass SECS and EVERY. First n -> 0 ever observed: the player's own record went 2 -> 0 at t=83 s and deployed fell 41 to 40. The signal does register elimination, not just damage. No arrival followed, which is weak evidence against the squadron-elimination trigger since the record eliminated was the player rather than an enemy squadron. Two other turret records dropped from 18 in the same sample; noted without interpretation. The important finding is what came after. For the remaining 220 seconds the mission was frozen -- exactly 288 craft, zero losses, zero arrivals, across 18 consecutive samples. So the usable observation window is not the probe duration but however long the player survives. A 340 s probe that loses its pilot at 83 s yields 83 s of evidence and 257 s of nothing, and several earlier "nothing over 240 s" results may have been much shorter in practice than they look. That also explains why pilot.py was written to survive rather than to shoot. The SYLPH_HUNT mode added two iterations ago drops TURRET_KEEPOUT from 2500 to 600, buying kills at the cost of exactly the survival the run depends on. The elimination test itself did not run: the squadron reached 14, not 0, before the pilot died. What is needed is a pilot that kills and survives -- hunt turrets but keep the evade and retire behaviour, or a keep-out between the two extremes. That is tuning, not discovery. --- docs/re/BACKLOG.md | 14 ++++-- docs/re/mission-arrival-watch.md | 71 ++++++++++++++++++++++++++++++ tools/re-capture/census_session.sh | 2 +- tools/re-capture/wave5_session.sh | 2 +- tools/re-capture/wave6_session.sh | 2 +- 5 files changed, 85 insertions(+), 6 deletions(-) diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index 3c8587cd..978b13c3 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -373,9 +373,17 @@ search cannot find a *schedule*. longer covers those (it still covers t=170/210/240; the run was cut at 240 s by the turn timeout, not the planned 330 s). 🟔 **Sharper hypothesis:** the squadron ended at **2, never 0** — no squadron has ever been eliminated in any - run, so the trigger may be *elimination*, not damage. **Next: run ~60–90 s - longer so that squadron reaches 0, and watch for `0→n`** — a direct test of the - event-gated model. + run, so the trigger may be *elimination*, not damage. šŸ”“ **Elimination test UNRUN (2026-08-24)**: the hunting + pilot died at t=83 s with the squadron at 14. āœ… But the player's own record hit + `2→0` — first `n→0` ever seen, so the signal does register elimination (no + arrival followed; weak, it was the player not an enemy squadron). āœ… **KEY: + after player death the mission is frozen** — 288 craft, zero losses, zero + arrivals for 220 s / 18 samples. **The usable window is player survival, not + probe duration.** šŸ”“ Harness bug found+fixed: a `sed` had stripped the probe + args, so every derived probe ran on defaults — the previous "cut by the turn + timeout" claim was wrong (it hit its own 240 s default). + **Next: a pilot that kills AND survives** (hunt turrets but keep evade/retire; + keep-out between 600 and 2500) — tuning, not discovery. āš ļø The ~210 s title movie at boot is the binding constraint on observable game time per turn. Earlier framing: diff --git a/docs/re/mission-arrival-watch.md b/docs/re/mission-arrival-watch.md index 970adc23..1349ac71 100644 --- a/docs/re/mission-arrival-watch.md +++ b/docs/re/mission-arrival-watch.md @@ -129,3 +129,74 @@ event-gated model rather than another null result. The binding constraint remains the ~210 s title movie at boot, which leaves only about 350 s of observation per turn. + +--- + +# Player death bounds every run — and a harness bug (2026-08-24) + +Status: šŸ”“ a harness bug means earlier windows were shorter than reported; +āœ… a record reaching 0 was observed for the first time; āœ… **after the player +dies the mission is completely static**, so observation is bounded by survival, +not by probe duration; šŸ”“ the elimination test did not complete. + +## šŸ”“ Correction: the previous run was not "cut by the turn timeout" + +The `sed` used to derive each session script from the last stripped the probe's +arguments, so line 14 of `wave5/census/wave6_session.sh` invoked the probe with +**no arguments at all**. Every derived probe has been running on its own +defaults, ignoring the durations passed on the command line. + +So the previous iteration's claim that the run "was cut at 240 s by the turn +timeout, not the planned 330 s" is **wrong**: the probe simply used its default +of 240 s. The pilot received the requested 330 s while the probe watched for 240, +a mismatch that went unnoticed because the numbers were plausible. + +No earlier conclusion is invalidated — the windows were real, just shorter than +intended and misattributed. Fixed: all three sessions now pass `"$SECS" "$EVERY"`. + +## āœ… First observed `n → 0`: the player + +``` +t= 83s loss UN_f001_TCAF_DeltaSaber_T_Player 2 -> 0 + loss UN_e007_ADAN_Turret 18 -> 16 + loss UN_e007_ADAN_Turret 18 -> 14 +``` + +`deployed` fell 41 → 40. This is the first time in eight runs that any record has +reached zero, and it confirms the signal registers elimination, not just damage. + +**No arrival followed.** That is weak evidence at best against the +squadron-elimination trigger, since the record eliminated was the *player*, not +an enemy squadron. + +Two other turret records dropped from 18 in the same sample, which is noted +without interpretation — it may be the death explosion, or simply three changes +landing in one 13 s bucket. + +## āœ… The real constraint: nothing happens after the player dies + +For the remaining **220 seconds** the mission was frozen: craft held at exactly +288, zero losses, zero arrivals, across 18 consecutive samples. + +That reframes every run in this file. **The usable observation window is not the +probe duration — it is however long the player survives.** A 340 s probe that +loses its pilot at 83 s yields 83 s of evidence and 257 s of nothing. Several +earlier "no arrivals over 240 s" results may have been much shorter in practice +than they appear. + +It also explains why `pilot.py` was written to survive rather than to shoot: the +`SYLPH_HUNT=1` mode added two iterations ago drops `TURRET_KEEPOUT` from 2500 to +600, which buys kills at the cost of exactly the survival the run depends on. + +## šŸ”“ The elimination test did not complete + +The target squadron reached 14, not 0, before the pilot died. The test — does +wiping out an enemy squadron release a wave — remains **unrun**. + +## What is needed + +A pilot that kills *and* survives. The two existing modes sit at opposite +extremes: survival mode kills nothing in 240 s, hunt mode kills steadily and dies +at 83 s. A middle setting — hunt turrets but keep the evade/retire behaviour, or +a keep-out between 600 and 2500 — is the obvious next step, and it is a tuning +change rather than a new discovery. diff --git a/tools/re-capture/census_session.sh b/tools/re-capture/census_session.sh index e46d01b1..30c2b29c 100755 --- a/tools/re-capture/census_session.sh +++ b/tools/re-capture/census_session.sh @@ -11,6 +11,6 @@ if python3 "$SD/entities2.py" self 0x130 "$CFG" >/dev/null 2>&1; then /tmp/live-pilot.log 2>&1 & PILOT=$!; echo "--- pilot (SYLPH_HUNT=$HUNT)" else PILOT=""; echo "--- BIND FAILED, no pilot"; fi -python3 "$SD/census_probe.py" ; rc=$? +python3 "$SD/census_probe.py" "$SECS" "$EVERY"; rc=$? [ -n "$PILOT" ] && kill "$PILOT" 2>/dev/null echo "LIVENESS DONE rc=$rc" diff --git a/tools/re-capture/wave5_session.sh b/tools/re-capture/wave5_session.sh index a35d47e9..955b2f3a 100755 --- a/tools/re-capture/wave5_session.sh +++ b/tools/re-capture/wave5_session.sh @@ -11,6 +11,6 @@ if python3 "$SD/entities2.py" self 0x130 "$CFG" >/dev/null 2>&1; then /tmp/live-pilot.log 2>&1 & PILOT=$!; echo "--- pilot (SYLPH_HUNT=$HUNT)" else PILOT=""; echo "--- BIND FAILED, no pilot"; fi -python3 "$SD/wave5_probe.py" ; rc=$? +python3 "$SD/wave5_probe.py" "$SECS" "$EVERY"; rc=$? [ -n "$PILOT" ] && kill "$PILOT" 2>/dev/null echo "LIVENESS DONE rc=$rc" diff --git a/tools/re-capture/wave6_session.sh b/tools/re-capture/wave6_session.sh index 830204a6..d4a2497c 100755 --- a/tools/re-capture/wave6_session.sh +++ b/tools/re-capture/wave6_session.sh @@ -11,6 +11,6 @@ if python3 "$SD/entities2.py" self 0x130 "$CFG" >/dev/null 2>&1; then /tmp/live-pilot.log 2>&1 & PILOT=$!; echo "--- pilot (SYLPH_HUNT=$HUNT)" else PILOT=""; echo "--- BIND FAILED, no pilot"; fi -python3 "$SD/wave6_probe.py" ; rc=$? +python3 "$SD/wave6_probe.py" "$SECS" "$EVERY"; rc=$? [ -n "$PILOT" ] && kill "$PILOT" 2>/dev/null echo "LIVENESS DONE rc=$rc"