From d2b4f0d66fc1c46d25efdec1b411d904ef25d83c Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 9 Aug 2026 14:14:51 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20file=20#358=20=E2=80=94=20Ctrl+M=20mute?= =?UTF-8?q?=20chord=20never=20fires=20from=20the=20dispatcher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docs/ISSUES.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index c5ff3ea1..be8276f4 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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