Files
BT411/scratchpad/night18/gaithang_bench.sh
T
Joe DiPrimaandClaude Fable 5 f597f76a30 #102 FIXED + benched: the Owens run->reverse 'hang' was the port missing the machine's whole HARD-BRAKE system -- master perf @0x4aa158-0x4aa365 (raw part_013.c:3353-95): a forward gait meeting a negative demand latches +0x3f4 (the recon's 'airborneSelect' -- another jump-jet-family misread: it is the BRAKE flag) and swaps the gait slew to the model's SuperStopAcceleration (+0x5bc, ex-'airborneCycleRate'), kicks the gyro with a random-sign Z lurch, judders the cab 0.2 every 0.4s while braking above walk speed (gyroRumbleTimer@0x5c4), ships the flag on the type-8 record, restores the ground rate on release. Content: heavies brake harder than they drive (10->20); the sprinters brake WEAKER -- owens 50->25, blkhawk 30->10 -- the Owens' long coast into reverse is AUTHORED, and the pod communicated it through the seat; the un-ported port coasted with zero feedback = the felt hang. Ported to the mech4 drive block ([brake] receipts under BT_GAIT_TRACE) + the replicant rate select restored in the peer motion path (the binary's IntegrateMotion:298 line -- dead TU in the port, Simulate bypassed). Plus gotcha 35: the binary's SM switch re-reads the state cell after the wind-down-gate/death-latch preamble (one cell: @0x3b0/@0x728 == the alarm level); the recon's split alarm/int pair dispatched the STALE pre-gate state for a frame -- re-synced, both channels. The 'leg in the air until you twist' statue is the MACHINE's own trn turn-stop MID-PIVOT park, authentically INVISIBLE on the pod (no external self-view existed; the chase cam is a port addition) -- bench-reproduced at trn legFrm=10 + twist rescue, documented not-a-bug (Owens reads worst: deepest mid-swing of the 8 chassis, thigh -43deg vs madcat -27). Reverse-input truth [T1]: reverse is the red button 0x3F/LALT held with the throttle OPEN (manual p7); demand = -runSpeed*throttle (NO fwdScale term in reverse); the throttle channel is [0,1] like the pod lever, so brake keys can NEVER produce reverse -> handout education line. Bench rig: BT_KEYSIM/_REV/_TURN drive the REAL lever+detent+SM chain headlessly (scratchpad/night18/gaithang_bench.sh). Benched (owens/grass): LALT flip at full run -> [brake] ENGAGE rate=25 (ground 50) -> 12->15->6->9->0->16->18<->19 back cycles at the authored -14.1 cadence -> clean recovery on release; held brake key -> authored stand park, ZERO brake engagements (authentic: no button, no brake). Side-find filed: hardware-RIO cab reverse is DEAD (AddOrErase stubs; open-questions row). 674 forensic: that build boots GLASS by default -> reverse was exclusively LALT in the field.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 17:55:08 -05:00

81 lines
2.9 KiB
Bash

#!/usr/bin/env bash
# =========================================================================
# ISSUE #102 -- OWENS RUN->REVERSE GAIT HANG (night18)
# Solo expert Owens, grass/day. BT_KEYSIM drives the REAL virtual-controls
# chain (lever integrator + ZERO DETENT + gait SM) on a schedule -- the
# forcedThrottle harnesses bypass the lever, which is where the suspect
# lives (mech4.cpp zero detent: a held sweep that crosses 0 latches at 0
# until BOTH keys rest -> demand pinned to exactly 0.0 while reverse held).
#
# run A (repro): 3s rest, 10s full fwd (run), 20s HOLD BACK -- the
# Lynx shape. Twist pulse at t=38 (the rescue leg).
# run B (control): same but RELEASE 1.5s then re-press back -- the
# documented detent recovery; reverse must engage.
#
# Receipts: [gaitSM] per frame (legState/legCycle/legFrm/spd), [vctl] 1Hz
# (keys + lever). Park signature: legState=0 with legFrm frozen mid-clip,
# spd=0 while back key held; reverse states (16-19) never entered.
# usage: gaithang_bench.sh <A|B> [extra env pairs...]
# =========================================================================
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 2
VARIANT=$1; shift
bt_expert_egg MP.EGG GH102.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/; 0,/^vehicle=.*/s//vehicle=owens/" GH102.EGG
LOG=gaithang_${VARIANT}.log
rm -f "$LOG"
if [ "$VARIANT" = "A" ]; then
# S-key sweep shape (keyboard-bridge rigs only; dead channel on glass)
KS="0:3,0.7:10,-0.7:20,0:8"
KT="38:2.5"
KR=""
XTRA=""
DUR=55
elif [ "$VARIANT" = "C" ]; then
# THE AUTHENTIC LALT SHAPE (glass rig = what Lynx flies): full forced
# throttle, REVERSE BUTTON held t=14..34 (gBTReverseHeld -> reverseThrust
# sign-flip), release at 34 = the recovery probe (a Standing-class park
# recovers on the demand flip; a frozen-clip park stays parked).
KS="0:1"
KT=""
KR="14:20"
XTRA="BT_AUTODRIVE=1.0"
DUR=55
elif [ "$VARIANT" = "D" ]; then
# THE GLASS S-KEY SHAPE: demand pinned at EXACTLY 0 after a full run
# (PadRIO throttle clamps [0,1] -- S can never reverse; the keyboard-
# bridge detent pins the same way). BT_KEY_BRIDGE=1 forces the bridge
# so BT_KEYSIM's lever drives the mapper. Twist pulse at t=38 = the
# Lynx rescue. Park signature: legState=0, legFrm frozen != 0, spd=0.
KS="0:3,0.7:10,-0.7:20,0:10"
KT="38:2.5"
KR=""
XTRA="BT_KEY_BRIDGE=1"
DUR=55
else
KS="0:3,0.7:10,-0.7:2,0:1.5,-0.7:15"
KT=""
KR=""
XTRA=""
DUR=45
fi
( export BT_GAIT_TRACE=1 BT_KEY_LOG=1 BT_KEYSIM="$KS"
[ -n "$KT" ] && export BT_KEYSIM_TURN="$KT"
[ -n "$KR" ] && export BT_KEYSIM_REV="$KR"
[ -n "$XTRA" ] && export $XTRA
for kv in "$@"; do export "$kv"; done
bt_launch "$LOG" GH102.EGG 0x03 )
sleep $DUR
bt_kill_ours
sleep 3
taskkill //F //IM btl4.exe > /dev/null 2>&1
echo "--- $LOG"
grep -ac "gaitSM" "$LOG"
grep -a "vctl" "$LOG" | head -40