Files
BT411/docs/HANDOFF.md
T
arcattackandClaude Opus 5 afbbb7c59c road handoff: the state of every live investigation, checked against the machine and the tracker
Written for picking the work back up on a laptop. Facts verified rather than
recalled: the parked relay is NOT running (no listener on 1500/1501/1507), RDP
is up, Tailscale is not installed, and the tracker splits 24 genuinely-open /
26 awaiting-verification.

Also commits the tracker snapshot script so the issue split can be re-derived
from the road instead of trusting the numbers frozen in the doc.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 15:39:04 -05:00

6.0 KiB

Road Handoff — where the work stands

Snapshot: 2026-07-27 morning, at commit 39cb864. This is a living file; update it or delete it when the picture changes. Everything below was checked against the machine/tracker, not memory.


0. Operational state RIGHT NOW (read this first if you want to host)

Thing State
Parked relay NOT RUNNING. Ports 1500 / 1501 / 1507 have no listener.
Orphan pod one btl4.exe (OPERATOR.EGG -net 1501) left over from last night, connected to nothing. Safe to close.
RDP into the home machine enabled, 3389 listening, rules in place
Mesh VPN (Tailscale) not installed — the control port is not tunnelled
Release 4.11.600 cut, verified, not yet posted

To host from the road you must first get the relay up on the home machine — a remote console attaches, it cannot start one. Either RDP in and double-click tools\park_relay.cmd, or put it in shell:startup so it survives a reboot. Full runbook (what a remote console can and cannot do, the control-port table, the secret's working-directory trap): context/operator-console.md §Parked relay + remote console.

⚠️ Forwarding 1507 to the open internet puts the operator secret on the wire in cleartext. Leave the player ports (1500/1501) as they are and carry the control link over a tunnel.


1. The release

dist\BT411_4.11.600.zip (47.0 MB) + dist\RELEASE_NOTES_4.11.600_discord.md (1,915 chars).

Verified on the final artifact: doc audit 35/35, bats byte-identical to players/, exe identical to the build at 39cb864, clean-extract boot with 0 faults, bindings.txt generated with the # bindings-board 2 marker, and log rotation proven inside the shipped zip (solo run rotates solo.log, leaves a seeded join.log untouched).

Notes cover 584 → 600, since 584 is the build everyone actually installed. 599 was cut but never posted; its fixes are folded in. Nothing left to do but post it.


2. Live investigations (the real work)

24 issues are genuinely open; 26 more carry awaiting-verification — fix landed, no human has seen it work live. Snapshot script: scratchpad/tracker_snapshot.py (hits the Gitea API with your stored git credential; re-run it rather than trusting this list).

Blocked on someone else

  • #35 — Owens laser crash. Waiting on Conn Man's join.log. His last one was overwritten, which is exactly what 600's log rotation fixes, so the next occurrence should survive. Repro rig is committed: scratchpad/rig_killstorm.ps1 + the BT_MP_FORCE_DMG=<n> hook in game/reconstructed/mech4.cpp. Result so far is an honest negative — the kill-storm does not reproduce it; notes in scratchpad/crash_20260726_2316_notes.md. Best current lead: firing at a mech rather than a truck.

Ready to pick up

  • #52 — replicant legs "ski" (slide without walking). The natural sibling to the #67 torso work just finished: same replication path, same dead-reckoning clock. Start from torso.cpp's GetLastUpdateTime() fix and look for the equivalent on the leg/gait side.
  • #49 — radar/map does not draw the arena WALL geometry. Audited: there is no wall path at all, so this is a build-it, not a fix-it.
  • #43, #50, #56 — MFD/roster behaviour reported live but never reproduced on the bench.

Deferred with a stated reason (don't re-derive)

  • #55 remaining steps — the mechsub.cpp rename pair, deleting HeatableSubsystem::ResetToInitialState, deleting RespawnRepair. All three need a HeatableSubsystem vtable slot-10 pre-flight, and there is no binary image in the repo to dump it from. Steps 0/1/2/4 landed in ef8e449.

Two calls that are yours, not mine

  • #54 (David's three energy weapons dead) — probably superseded by #57; close it or say why not.
  • #66 (joyconfig.bat hangs after the wizard) — may be invalid; people report using it fine.

3. What landed in the last 24h and is unverified

#67 (both halves), #55, #62, close-means-quit, four lifecycle-window null-deref guards, the phantom-map filter, seat identity, console + launcher log rotation, console re-arm.

The gate is a live games night. House rule: nothing moves off awaiting-verification until a human confirms it in a real session — a passing bench test is not verification.


4. Recent findings worth remembering

  • The allocator was the bug. Memory::Allocate used plain operator new; the pod's MemoryBlock arenas carve OS-zeroed pages. Every 1995 field the constructor never stored read as zero on the pod and as garbage here. That is #67's root cause, and the same class will bite again — suspect it whenever a value is wrong only for remote entities. (mechrecon.hpp)
  • artrucks is an art sub-node, not a mission. Offering it in the operator's map list hung every pod at "mission starting" for a whole evening. Map anatomy: arena1 → {arenall → cavern, artrucks}.
  • The operator secret follows the relay's cwd. Two files with different values existed in this repo; a mismatch shows up as a dropped control connection on timeout, not a "wrong password". Always park from content\.

5. Picking up on the laptop

  1. git pull — everything above is committed, including scratchpad/ (the repro rigs and crash notes travel with the repo).
  2. The launcher bats only work from an extracted zip — they cd /d %~dp0 and need build\ and content\ beside them. Running them from the repo silently hits badpath. This has burned two verification attempts; extract dist\BT411_4.11.600.zip somewhere and test there.
  3. Uncommitted and intentionally left dirty: content/LAST.EGG, content/OPERATOR.EGG (session state), scratchpad/sim3.py.
  4. Orientation: CLAUDE.md (router) → context/*.md. For last night specifically: scratchpad/crash_20260726_2316_notes.md is the full incident ledger, and context/steam-networking.md has the first real multi-player field verification.