docs: CH6 research landed — chat-window shell plan (CH6a/b/c)

Wrong-LayoutDesc root cause (0x21000006 vs retail 0x2100006F), resident
floating windows toggled by keybind, 8 authored resize grips, global
opacity options 0x10000080/81.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-10 07:48:38 +02:00
parent 47e40900f3
commit 81f53bfd46
2 changed files with 746 additions and 3 deletions

View file

@ -107,9 +107,36 @@ implementer per slice against a pinned contract (per
- **CH5 — closeout.** Register sweep, ledger flip, ISSUES updates,
in-client test script for the user gate.
- **CH6 — chat-window shell parity (filed 2026-08-09 at user gate round
1).** Retail multi-window chat, per-window type filters + PostInit
defaults (see color research §4), all-corner resize, opacity; research
first.
1; research complete:
`docs/research/2026-08-09-chat-retail-window-shell.md`).** Three
sub-slices:
- **CH6a — correct main-window import + resize.** Swap the wrong
LayoutDesc `0x21000006` for retail's `0x2100006F` and delete the
downstream compensations (hand-cropped 490px ContentWidth, dropped
800px resize bar, the 9px transcript patch, orphan-sibling pruning);
teach `LayoutImporter` element type 9 (`UIElement_Resizebar`, 8
authored grips: 4 edges + 4 corners via bools 0x2A0x2D); fix the
resize mask that excludes Top. Expected to also clear the round-1
artifact report.
- **CH6b — floating windows 14.** Mount `0x2100005B` ×4 as
always-resident children per `gmGamePlayUI::SetupChildren
@0x004E9EC0` (ids 0x10000505/0x1000050E/0x1000050F/0x10000510);
keybind actions `ToggleFloatingChatWindow1..4` (retail defaults at
`retail-default.keymap.txt:150-153`) through the dispatcher; the
main window's 1/2/3/4 buttons are one-directional state mirrors
(`gmMainChatUI::RecvNotice_SetPanelVisibility @0x004CCD80`), not
the toggle; per-window PostInit filter defaults (color research §4)
with the `windowId == m_eWindowID OR (windowId==0 && TypeIsActive)`
display rule.
- **CH6c — opacity.** Implement `UiRenderContext.AlphaMod`
consumption (whole-composited-window alpha per
`ChatInterface::SetOpacity @0x004F3120`); the two GLOBAL retail
options `0x10000080` (unfocused) / `0x10000081` (focused,
active >= default); retail defaults now, the user-facing Settings
slider in the settings track. Persistence: local settings first —
the retail per-window option array `0x1000008C` is stored by ACE as
an opaque byte[] it never parses, so the wire format is its own
deferred slice.
## Gates