docs: OP8 merged — ledger CODE-COMPLETE, file #373 (ConflictingMaps)

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 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-11 12:42:25 +02:00
parent 1c5cd969b4
commit 1a57f96efe
2 changed files with 33 additions and 1 deletions

View file

@ -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