docs: file #358 — Ctrl+M mute chord never fires from the dispatcher

Deferred by user direction. The mute mechanism (2cf94dbc) is fine; the
chord never fires: 101 [input] actions logged in the session, zero for
AcdreamToggleAudioMute. Hypotheses ranked in the issue — merged-binding
absence (the suspicious stable '152 bindings' count), dispatcher modifier
matching, retained-UI Ctrl-chord consumption.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-09 14:14:51 +02:00
parent 2cf94dbcd2
commit d2b4f0d66f

View file

@ -37,6 +37,44 @@ null-guard with `CanExecuteLiveMovement` (the exact lifecycle set the throw
helper accepts); cursor restore still runs unconditionally, and
published-controller behaviour is unchanged.
## #358 — Ctrl+M mute keybind never fires from the dispatcher
**Status:** OPEN — filed 2026-08-08, deferred by user direction ("we can carry
that on for later"). The mute mechanism itself is implemented and untested
only for want of a working trigger.
**Symptom:** pressing Ctrl+M in a live session does nothing. The downstream
chain is NOT the problem — evidence from the session log:
- `[input]` action logging was live (101 fired actions: movement, selection,
UseSelected) and recorded **zero** events for `AcdreamToggleAudioMute`
the chord never fired from `InputDispatcher`, so the
`GameplayInputCommandController` switch case and the engine's `Muted`
property (verified paths, commit `2cf94dbc`) were never reached.
- `KeyBindings.LoadOrDefault`'s merge-over-defaults was read and looks
correct (an action with defaults but absent from the saved file picks up
the default binding), so a stale `keybinds.json` SHOULD have gained the
new binding. Unverified whether it actually did: the client logged
"loaded 152 bindings" both before AND after the binding was added, which
is suspicious — either the pre-change default count was 151 (then 152 is
right) or the merge did not add it (then the count should have grown).
Nobody has printed the default count or dumped the merged set yet.
**Hypotheses, in order:** (1) the merged set genuinely lacks the binding
(count question above — cheapest to check first: log `RetailDefaults().Count`
or grep the saved json after a save); (2) the dispatcher's modifier matching
does not fire a Ctrl+M chord — e.g. exact-vs-subset modifier semantics, or
the bare `M` binding (`SelectionNextFellow`, no modifiers) shadowing it; note
the log shows no `SelectionNextFellow` firing on the press either, which
leans against simple shadowing and toward the chord matching nothing at all;
(3) the retained UI consuming Ctrl-chords before the dispatcher.
**The mechanism behind the key** (already landed, `2cf94dbc`): engine
`Muted` sets the AL listener gain 0/1 — unused since A2 moved mixing to the
CPU, so it silences already-playing voices instantly without touching the
retail mixing math or persisted volumes. Once the trigger works, no further
audio-side work is needed.
## #357 — Login stalls: reveal reaches ready=True but the player is never placed; UI + sky render, world never opens
**Status:** CLOSED 2026-08-08 — root-caused and fixed same session (see the