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"