Glass 'keymap regression' triage: stale build-glass exe, not code — rebuild + full re-verify

The live-reported glass regressions (arrows dead / lever+detent missing /
V+J/K/L+N inert / weapons into the ground) were build-glass/Release/btl4.exe
built at 07:47 running the pre-5dd3536 image: no suppression tables, no V/J/K/L
keys, unpinned RIO ids.  content\bindings.txt already carried the merged map
(arrows = W/S lever + A/D pedals) and parsed clean.  Clean rebuild closed every
symptom; SendInput re-verification: lever holds on release + stops at zero,
LEFT/RIGHT turn in MID (wire-sign correct), V toggles with BT_SHOT pair, level
boresight at spawn, R/F elevation drive; pod build rebuilt + smoked un-regressed.

Code delta: BT_MPPR_TRACE [mppr-c] line enriched with mode/pedals/stick/turn/elev
so one env-gated line proves the whole control surface.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-20 10:36:16 -05:00
co-authored by Claude Fable 5
parent 80c9394131
commit 1535e3e48d
3 changed files with 58 additions and 2 deletions
+10 -1
View File
@@ -84,7 +84,16 @@ copied from them.
pattern — ended the glass double-dispatch: 'w'=pilot-select, numpad/F-key key-up aliases);
unbound keys keep their authentic meanings (5/z presets, t-o pilot select, +/- zoom).
In BAS control mode the pod turns with the STICK (Q/E) and pedals are inactive — authentic;
A/D turn in MID/ADV. Full audit + census: `docs/GLASS_COCKPIT.md` §2026-07-20.
A/D turn in MID/ADV. Arrow keys mirror the drive cluster (UP/DOWN = the W/S throttle lever,
LEFT/RIGHT = the A/D pedals). Full audit + census: `docs/GLASS_COCKPIT.md` §2026-07-20.
- **2026-07-20 live "keymap regression" report: STALE EXE [T2].** The human-reported glass
regressions (arrows/lever/detent dead, V/J/K/L/N inert, ground-fire) were a
`build-glass/Release/btl4.exe` built BEFORE 5dd3536 landed — relaunched without rebuilding.
No input-code change was needed; a clean rebuild + full SendInput re-verification (lever
holds + zero stop, MID turns, V toggle shot-pair, level boresight, pod smoke) closed every
symptom, and V's edge is now [T2]. `BT_MPPR_TRACE` now prints mode/pedals/stick/turn/elev.
Procedural rule: rebuild every live build dir after landing an input/engine commit.
Detail: `docs/GLASS_COCKPIT.md` §2026-07-20 (later).
## Key Relationships
- Extends: [[pod-hardware]] (RIO input path) · Uses: [[gauges-hud]] dev-gauge modes ·
+35
View File
@@ -243,6 +243,41 @@ pre-btinput double-dispatch, back on the glass side.
- Un-regression: build-pod (gates OFF) compiles 0 errors; forced-walk run drives
(speedDemand=61.501, 32 subsystems, streamed ids 3→+0xdc / 4→+0xe4 unchanged).
### 2026-07-20 (later) — the "keymap regression" live report: STALE EXE, not code [T2]
**Report (human, live glass session):** arrows dead/half-dead (UP accelerated, no detent;
LEFT/RIGHT no turn), throttle not a lever, V no view toggle, J/K/L/N inert, weapons firing into
the ground. **Root cause: `build-glass/Release/btl4.exe` was built 07:47 — BEFORE commit
`5dd3536` (08:35) landed the whole audit fix set** (SuppressKey tables, V/J/K/L hardcoded keys,
the RIO-id pinning that makes 0x15/N work) — the session was relaunched without rebuilding, and
kept running the pre-audit image. `content\bindings.txt` (08:23) already WAS the merged map and
the loader parsed it fine (`[padrio] bindings loaded: 40 keys, 10 pad buttons, 5 pad axes`), so
every bindings-file symptom analysis was a red herring; the binary was simply old. The
ground-fire symptom is the same session: with the R/F/X semantic chaos of the unsuppressed typed
channel, the torso elevation had been driven down and nothing recentered it.
**Fix:** `rm build-glass/Release/btl4.exe && cmake --build build-glass --config Release` (0
`error C`). No input-code change was needed — arrows/lever/detent/V were all already correct at
HEAD. One diagnostic enrichment landed: the `BT_MPPR_TRACE` `[mppr-c]` line now also prints
`mode/pedals/stick/turn/elev`, so one env-gated line proves the whole control surface.
**Re-verification (build-glass, DEV.EGG solo, SendInput-injected keys, own PID only):**
- UP hold 0.9 s → thr 0→0.63, dmd 38.70; released → **holds** 0.63 for 3 s (persistent lever).
- DOWN hold 2.5 s → thr 0.36→0.0028→0, rev=0 throughout — **stops at zero, no reverse
crash-through** (the wire throttle is the authentic 0..1 lever; reverse is the 0x3F button).
- M → `[mode] control mode -> 1`; LEFT → pedals +1 / turnDemand +1 (CCW=left, the wire sign);
RIGHT → pedals 1 / turnDemand 1; both auto-center on release. (In BAS the pedals are
authentically inactive — turns are the stick, Q/E.)
- R/F → stick.y ±1, torso elev 0→+0.349→−0.195, holds where released (positional torso,
matches the btinput path); **boresight level at spawn (elev=0)**.
- V → `[view] COCKPIT eyepoint``[view] external chase`, BT_SHOT pair confirms
(chase mech ↔ canopy + reticle). Closes the audit's one T3 (V edge) as [T2].
- SPACE → `[emitter] FIRED #1`. Pod build rebuilt + smoked: BT_AUTODRIVE=0.8 →
dmd=49.2008, clean log, no cross-contamination.
**Lesson (procedural):** after landing an engine/input commit, REBUILD every live build dir
before relaunching — a stale `build-glass` exe reproduces "the whole keymap is broken" exactly.
## 2026-07-18 — Merge origin/master (commit f889e24): btinput meets PadRIO
Master's 33-commit run landed (D1 relay/operator-console line, CONTROLS.MAP+XInput binding
+13 -1
View File
@@ -886,7 +886,19 @@ void
DEBUG_STREAM << "[mppr-c] thr=" << throttlePosition << " rev=" << reverseThrust
<< " topSpd=" << mech->reverseStrideLength
<< " fScale=" << mech->forwardThrottleScale
<< " -> dmd=" << speedDemand << "\n" << std::flush; }
<< " -> dmd=" << speedDemand
// glass-regression verification 2026-07-20: the same trace
// carries the turn/aim scalars so one gated line proves the
// whole control surface (mode, pedals->turnDemand, stick,
// torso elevation). turnDemand prints the value computed
// BELOW this block last frame (member state) -- adequate for
// a 0.5 s cadence trace.
<< " mode=" << controlMode
<< " pedals=" << pedalsPosition
<< " stick=(" << stickPosition.x << "," << stickPosition.y << ")"
<< " turn=" << turnDemand
<< " elev=" << (torso ? torso->CurrentElevation() : 0.0f)
<< "\n" << std::flush; }
}
}