Files
BT411/scratchpad/night12/zonewalk_bhk.sh
T
Joe DiPrimaandClaude Fable 5 546aabd5ba #131 false lock FIXED: miss-means-miss -- the pick answers only for drawn geometry
Night-12 field report (Ronin/Conn Man/Oracle, blackhawk-correlated): lock
ring lit with the reticle visibly off the mech + no-reg complaints.  Root
cause: TWO port stand-ins answered where the 1995 card (which cast against
the DRAWN geometry) would miss -- the pick's any-object sphere fallback and
the caller's whole-mech AABB fallback.  The regime that exposes them: a
LEVEL boresight over a SHORT mech -- the blackhawk's mesh tops out below
eye-ray height, so the ray clears every triangle but pierces the fat cull
spheres; the ring lights with the reticle above the mech's head (the
operator watched exactly this on the sweep bench).  Careful aimed-down fire
rides triangles, which is why Oracle's per-panel audit passed on the same
build.

Fix: MechSegmentPick returns 1=drawn-geometry hit / 0=TRUE MISS / -1=no
render tree; the sphere may answer ONLY for a mesh the reader cannot parse
(pm==0 -- currently none exist: counters objs/invFail/noTri all clean);
the AABB survives ONLY as the pre-tree replicant grace.  A readable mesh
the ray misses is a MISS -- no lock.

Verified (2-node vs bhk1 at 100u, all runs on force-relinked string-
verified exes after today's stale-link flake):
- LEVEL lock-sweep: 0 locks all run (pre-fix: lock band from 168 sphere
  answers; picksrc tri=0 sphereFB=168).
- DOWN-PITCHED sweep: locks return 100%% tri-sourced (tri=158 sphereFB=0),
  landing on real parts (rarm/ldleg/rdleg) with honest gaps.
- Full zone-walk matrix: tri=18874 sphereFB=0 box=0; victim took 156 hits
  across 16 zones incl. both side torsos -- combat un-regressed.

New instruments (all env-gated): BT_LOCK_SWEEP=<axis> torso pan (the
operator-visible lock-envelope bench), [locksweep] transition log,
BT_LOCK_ENVELOPE synthetic unit-sweep probe, [picksrc]/[pickbox] source
telemetry with objs/invFail/noTri localization counters.
Bench: scratchpad/night12/zonewalk_bhk.sh.

NOTE for the field: locking is now strictly TIGHTER (ring = reticle truly
on the machine).  If era testers feel the pods were more forgiving,
Draco's "slight lock linger" memory becomes a deliberate investigation
(sourced hysteresis), not an accidental sphere halo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 11:12:43 -05:00

38 lines
1.5 KiB
Bash

#!/usr/bin/env bash
# #92 check: is the Loki foot un-hittable report (night 7, build 659) already
# cured by the #124 triangle-pick work? The zone-walk matrix vs a BLACKHAWK target (#131 false-lock forensics):
# shooter servo-aims every zone (feet included) through the real reticle path,
# 3 laser pulses each; read A's [walk] FIRE lines vs B's [dmghit] zone= lines.
# Same rig as scratchpad/night10/zonewalk.sh, target vehicle=loki, ~7 min tail.
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
bt_assert_player_env
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 2
rm -f zwb_a.log zwb_b.log
bt_expert_egg MP.EGG ZWB.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/" ZWB.EGG
# pilot 1 (node A, shooter) = madcat (proven servo constraints);
# pilot 2 (node B, target) = LOKI (the #92 chassis)
python - << 'EOF'
lines = open('ZWB.EGG').read().splitlines(True)
n = 0
for i, l in enumerate(lines):
if l.startswith('vehicle='):
n += 1
lines[i] = 'vehicle=madcat\n' if n == 1 else 'vehicle=bhk1\n'
open('ZWB.EGG', 'w').writelines(lines)
print('vehicles set:', n)
EOF
BT_SPIN_SELF=15 BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 \
bt_launch zwb_b.log ZWB.EGG 0x0C -net 1601
sleep 2
BT_ZONE_WALK=6 BT_PICK_LOG=1 BT_GOTO=enemy BT_GOTO_STOP=90 BT_KEY_NOFOCUS=1 \
BT_DMG_LOG=1 BT_RANGE_LOG=1 BT_MP_LOG=1 \
bt_launch zwb_a.log ZWB.EGG 0x03 -net 1501
sleep 5
python ../tools/btconsole.py ZWB.EGG 127.0.0.1:1501 127.0.0.1:1601 > zwb_relay.log 2>&1 &
sleep 300 # ~7 min: enough for a full zone walk incl. both feet