re: add a hunting pilot; withdraw the "10 of 116 records are dynamic" result
The user asked for an actively hunting pilot, since a player who kills nothing cannot trigger an event-gated wave and both previous runs used the survival pilot. pilot.py gains SYLPH_HUNT=1. The substantive change is which contacts ENGAGE may shoot: it previously skipped every "hard" target -- "turrets and hulls are not the objective" -- and stood off 2500 units from turrets, on the assumption that an e007 Turret is an AA mount on a capital ship. It is a craft, one of the main enemy types of the first six missions, and at 100 HP the cheapest kill on the field. Under SYLPH_HUNT it is a target and the keep-out drops to 600. The run confirms the pilot engages: steady ENGAGE, fire=1, committed to an e010_ADAN_Attacker_S at ~2.2 km, hull and escorted asset untouched over 160 s. Withdrawn: "only 10 of 116 records ever changed a byte in 170 s". This run measured 41-56 records changing in every 10 s tick. The old figure does not reproduce. I cannot say why, because I changed two variables at once -- the record bound (fixed 0x200 to bounded-by-next-record) and the pilot (survival to hunting). Either explains it. That is a design error, and the honest outcome is a retraction without a replacement explanation rather than a story that fits. The conclusion it had supported is unaffected: the roster identity now rests on the exact 10-of-10 unit-composition match measured independently. Still open, and explicitly not concluded: the pilot's own entity scan shows ADAN drifting 147 -> 129 -> 142, and the late rise has the shape of an arrival, but the sample-to-sample swing is +/-10, the same size as the effect. AGENT.md warns that polling faster than the guest updates manufactures a curve out of noise, so no wave conclusion is drawn. The run probably did not kill anything either (fc=0, asset at 100%), so it does not test the event-gated model. A stable per-record liveness field and a working kill counter are both needed first; REMAINING OB at 0xbdb59668 still does not read as a counter.
This commit is contained in:
@@ -332,8 +332,11 @@ search cannot find a *schedule*.
|
||||
moves in one and not the other.
|
||||
* 🔴 **Diffing inside the 116 records did not find the arrival flag**
|
||||
(2026-08-24, same doc). 10 of 116 records are dynamic, 106 never change a byte
|
||||
in 170 s — more support for the pre-allocated roster — and STRONGER than
|
||||
first written: the "turrets don't move" hedge was withdrawn after the user
|
||||
in 170 s — 🔴 **the "10 of 116 dynamic" figure is WITHDRAWN** — a hunting
|
||||
run measured 41–56 records changing per tick; I had changed two variables at
|
||||
once (record bound and pilot) so the discrepancy is unattributed. The roster
|
||||
identity is unaffected: it now rests on the 10/10 unit-composition match.
|
||||
Earlier note, kept for history: the "turrets don't move" hedge was withdrawn after the user
|
||||
pointed out that early-mission "Turret" is a craft type, which the data
|
||||
confirms (`UN_e007_ADAN_Turret` flies under `AI_ADAN_CraftSquadron_*`, never
|
||||
`AI_Structure`). Lesson: check a unit's `AIID`, not its English name. No field transitions in groups of 3 at the
|
||||
|
||||
@@ -313,3 +313,76 @@ records it recurring in about 5 runs of 7), and this was one of the misses, so
|
||||
the run cannot say whether the pilot killed anything. Re-hunting the counter
|
||||
with `ob_hunt.py` is a precondition for the kill-versus-no-kill test, not an
|
||||
optional extra.
|
||||
|
||||
---
|
||||
|
||||
# Hunting run (2026-08-24) — and a withdrawal
|
||||
|
||||
Status: ✅ a hunting pilot exists and engages; 🔴 the "10 of 116 records are
|
||||
dynamic" result is **withdrawn**; ❔ the wave question is still open, and the
|
||||
entity scan is too noisy to settle it.
|
||||
|
||||
The user asked for an actively hunting pilot, with attention to the objectives,
|
||||
because the two previous runs used the *survival* pilot and a player who kills
|
||||
nothing cannot trigger an event-gated wave.
|
||||
|
||||
## ✅ `SYLPH_HUNT=1`
|
||||
|
||||
`pilot.py` gained a hunt mode. The change that matters is which contacts ENGAGE
|
||||
is allowed to shoot: it previously skipped every "hard" target with the comment
|
||||
*"turrets and hulls are not the objective"*, and kept 2500 units away from
|
||||
turrets. That was written on the assumption that an `e007` "Turret" is an
|
||||
anti-aircraft mount on a capital ship. It is not — it is a craft, one of the main
|
||||
enemy types of the first six missions
|
||||
(`AI_ADAN_CraftSquadron_*`, `Type = Squad`), and at 100 HP the cheapest kill on
|
||||
the field. Under `SYLPH_HUNT=1` turrets are targets and the keep-out drops to
|
||||
600.
|
||||
|
||||
The run confirms it flies and shoots: steady `ENGAGE`, `fire=1`, committed to
|
||||
`e010_ADAN_Attacker_S` at ~2.2 km, hull 1500/1500 and escorted asset at 100 %
|
||||
throughout 160 s.
|
||||
|
||||
## 🔴 Withdrawn: "only 10 of 116 records are dynamic"
|
||||
|
||||
The previous section reported that 10 of 116 records ever changed a byte in
|
||||
170 s, and used it as supporting evidence for the pre-allocated roster. **This
|
||||
run measured 41–56 records changing in every single 10 s tick.** The earlier
|
||||
figure does not reproduce and is withdrawn.
|
||||
|
||||
I cannot say why, because I changed two things at once — the record bound (fixed
|
||||
`0x200` → bounded by the next record's address, capped at `0x400`) *and* the
|
||||
pilot (survival → hunting). Either could explain it: the old window mis-framed
|
||||
every record whose true size is not `0x200`, and a hunting pilot flies into
|
||||
traffic that an evading one avoids. **That is a design error on my part**: a run
|
||||
that changes two variables cannot attribute its own result, and the honest
|
||||
outcome is that the old number is retracted without a replacement explanation.
|
||||
|
||||
The conclusion the retracted number was supporting is unaffected — the
|
||||
roster identity now rests on the exact 10-of-10 unit-composition match, which is
|
||||
far stronger evidence and was measured independently.
|
||||
|
||||
## ❔ The entity scan is too noisy to answer the wave question
|
||||
|
||||
`pilot.py`'s own scanner reports a live entity count each tick. Over the run:
|
||||
|
||||
```
|
||||
t=0s 168 (147 ADAN) t=56s 147 (131) t=101s 145 (129)
|
||||
t=20s 171 (147) t=76s 155 (131) t=137s 151 (129)
|
||||
t=30s 148 (132) t=86s 147 (131) t=157s 166 (142)
|
||||
```
|
||||
|
||||
ADAN drifts 147 → 129 and back to 142. The late rise is the shape an arrival
|
||||
would have, but the sample-to-sample swing is ±10 or more, which is the same
|
||||
size as the effect. This is exactly the trap `docker/agent/AGENT.md` warns about
|
||||
— polling faster than the guest updates manufactures a curve out of noise — so
|
||||
**no wave conclusion is drawn from it.**
|
||||
|
||||
Two things are needed before this run type can settle the question:
|
||||
|
||||
1. A *stable* liveness signal — a per-record field that means alive/dead, read
|
||||
from the 116 labelled records, rather than a re-scan whose population changes
|
||||
between samples.
|
||||
2. A kill count. `fc=0` in the pilot's telemetry and the asset at 100 % suggest
|
||||
the hunt did not actually destroy anything in 160 s, in which case this run
|
||||
does not test the event-gated model either. `REMAINING OB` at `0xbdb59668`
|
||||
still did not read as a counter, so that check remains unavailable.
|
||||
|
||||
Reference in New Issue
Block a user