From 1a57f96efed6d6b6815b4ae65a4789fb9199b423 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 11 Aug 2026 12:42:25 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20OP8=20merged=20=E2=80=94=20ledger=20COD?= =?UTF-8?q?E-COMPLETE,=20file=20#373=20(ConflictingMaps)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge 1c5cd969 lands OP8 on the campaign tip after 057d8cd7, so the #372 viewport fix covers OP8's six ListBoxes (the re-review's merge precondition). Post-merge full Release suite: 13,155 / 4 skips / 0 failures. #373 captures the deferred DAT ActionMap.ConflictingMaps consultation the OP8 round-2 conflict-universe fix scoped out. Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 32 +++++++++++++++++++ .../2026-08-10-options-panel-campaign.md | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 502a0686..aa026acf 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -24,6 +24,38 @@ What does NOT go here: - Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed. +## #373 — Configure Keyboard: DAT `ActionMap.ConflictingMaps` not consulted — the combat cluster raises false conflict prompts + +**Status:** OPEN — filed 2026-08-11 at Campaign OP slice OP8's re-review +round 2 (R1's scope boundary). + +The DAT ActionMap (DID `0x26000000`) carries a `ConflictingMaps` table +retail's `UIOption_ActionKeyMap` consults when deciding whether two rows +that share a chord ACTUALLY conflict: contexts the table marks as +non-conflicting may legitimately share a key. acdream's +`KeyboardConfigController.FindConflicts` +(`src/AcDream.App/UI/Layout/KeyboardConfigController.cs`) ignores the +table entirely — it treats ANY two live rows sharing a chord as a +conflict and opens the N-way overwrite confirm dialog. The visible +symptom is the **combat cluster**: Insert/Delete/End/PageUp/PageDown are +retail-authored onto multiple rows across contexts the ConflictingMaps +table permits to coexist, so rebinding one of those keys (or binding a +new action to one) prompts "overwrite N bindings?" where retail prompts +for fewer or none. Accepting the prompt then strips retail-default +bindings that should have survived. + +The OP8 round-2 fix already excluded store-only rows (`MappedAction is +null`) from the conflict universe — those cannot collide because they +never reach the InputDispatcher — but retail-mapped cross-context +sharing needs the real table. **Fix:** parse `ConflictingMaps` in +`RetailActionMap` (the reader already round-trips the field — +`RetailActionMapReaderTests` constructs it), and make `FindConflicts` +consult it: two rows sharing a chord conflict only if their contexts' +ConflictingMaps entries say so. Conformance-test against the combat +cluster's authored defaults (five keys, multi-row each, zero prompts on +a no-op rebind). The gate script's §OP8 warns the user off treating the +false prompts as new breakage until this lands. + ## #372 — Options panel: Character/Chat/Config tabs render BLANK on screen and most Gameplay buttons do nothing (connected-gate failure) **Status:** BLANK-TABS ROOT-CAUSED + FIXED (`c3ed32fb` probe, fix this diff --git a/docs/plans/2026-08-10-options-panel-campaign.md b/docs/plans/2026-08-10-options-panel-campaign.md index 1674d587..83484d29 100644 --- a/docs/plans/2026-08-10-options-panel-campaign.md +++ b/docs/plans/2026-08-10-options-panel-campaign.md @@ -424,5 +424,5 @@ before anything builds on them. | OP5 | CODE-COMPLETE, gate READY | `e71e5a96` (AP-195 retired) → fixes `6d0b0f92` → residuals `67b0815c` | combined APPROVE-WITH-FIXES (`2026-08-11-op5-review.md`) → re-check CLOSED (`2026-08-11-op5-recheck.md`) → coordinator drag residuals landed | connected gate OWED (script §OP5) | | OP6 | CODE-COMPLETE, gate READY | `f5ac1742` (REJECTED) → rework `472525b9` → doc residuals (coordinator) | REJECT (`2026-08-11-op6-review.md`) → re-review CLOSED, all six caption sites byte-decoded (`2026-08-11-op6-rereview.md`) | connected gate OWED (script §OP6) | | OP7 | CLOSED | `09cb548a` → fixes in `7b60e71b` (shared commit, see its message) | combined-lens APPROVE-WITH-FIXES (`2026-08-11-op7-review.md`); all nine findings closed | live bot-vs-ACE gate PASSED 2026-08-11 (coordinator; evidence in script §OP7) | -| OP8 | CODE-COMPLETE, gate READY | (this branch's commit) | not yet reviewed | connected gate OWED (script §OP8) | +| OP8 | CODE-COMPLETE, gate READY | `b4edee97` (REJECTED) → rework `b1968ce9` → residuals `f1d50207` → merge `1c5cd969` | dual REJECT (`2026-08-11-op8-review-{mechanism,blast}.md`) → rework → re-review REOPEN-narrow (`2026-08-11-op8-rereview.md`) → coordinator round-2 residuals (inert-row conflict exclusion, DAT-default display, injectivity pin; #373 filed) | connected gate OWED (script §OP8) — merged onto the campaign tip AFTER `057d8cd7` per the re-review's merge note, so the #372 viewport fix covers OP8's six ListBoxes | | OP9 | — | | | |