acdream/tests/AcDream.App.Tests/UI/Layout/fixtures
Erik 1aa7709988 fix(chat): CH6a/b rework — grip media, retail window-id model, floaty fixture
Applies docs/research/2026-08-10-ch6ab-review-findings.md in full:

- BLOCKER 1: UiResizeGrip now carries its ElementInfo/resolve pair and
  draws its own authored DirectState media (a synthetic parameterless
  grip still draws nothing, preserving existing resize-drag tests).
  DatWidgetFactory.BuildResizeGrip threads resolve through. All seven
  live grips on the main chat window now resolve a non-zero sprite,
  restoring the visible borders/corners CH6a silently dropped.

- SHOULD-FIX 2: ChatWindowState gains BroadcastTargetWindow, a sentinel
  distinct from every real window id (0-4), fixing the bug where the
  main window's explicit-addressing branch coincided with the broadcast
  check (both were literal 0). SetFilter's main-window no-op is dropped
  — the main window's filter is now genuinely settable. ChatWindowController
  .Bind takes a ChatWindowState (the same canonical instance the floating
  windows already share) and GetTranscriptLines builds a real accept
  predicate instead of accept:null. Verified safe: ClientLocal (0x1A)
  never reaches ChatLog (AddText routes it to the SpewBox and returns),
  so nothing observable regresses.

- SHOULD-FIX 3: UiButton.SuppressSelfToggle stops the four chat-window
  indicator buttons (DAT property 0x0B=true, no retail click handler)
  from flipping their own Selected mirror on a stray click.

- SHOULD-FIX 4: generated and committed chat_floaty_2100005b.json from
  the real installed dats; added the permanent RetailLayoutFixtureGenerator
  entry. All three flagged FloatingChatWindowController assumptions
  (input field, title bar, close button) are confirmed correct against
  real data — no controller code changes needed. New finding: unlike the
  main window, ALL EIGHT floaty border/corner elements are live Type-9
  grips (the floaty's own title bar is its move handle), so a floaty
  window resizes from every edge and corner.

- SHOULD-FIX 5: register row AP-189 documents the shared-500-entry/
  200-line-tail vs retail's per-window 10,000-line scrollback depth gap.

- NITs 1-5: documented the filter-persistence-only-on-/saveautoui
  asymmetry and the reconnect-preserves-filters intent; corrected the
  research doc's modifier-mask mislabel and the "ONLY function" false
  superlative; moved WrapText off ChatWindowController onto
  ChatTranscriptRenderer, closing the circular dependency.

Full Release suite: 12,420 passed / 4 skipped / 0 failed (baseline
12,392/4/0 at 22020ef2; net +28 tests, zero regressions).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 13:09:32 +02:00
..
character_2100002E.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
character_info_2100006E_10000183.json fix(ui): complete retail indicator detail panels 2026-07-17 11:36:43 +02:00
chat_2100006f.json feat(chat): Campaign CH slice CH6a — retail chat-window layout + 8-grip resize 2026-08-10 09:38:27 +02:00
chat_floaty_2100005b.json fix(chat): CH6a/b rework — grip media, retail window-id model, floaty fixture 2026-08-10 13:09:32 +02:00
combat_21000073.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
component_category_21000033_10000466.json feat(ui): port retail component book rows 2026-07-15 17:38:24 +02:00
component_row_21000033_10000467.json feat(ui): port retail component book rows 2026-07-15 17:38:24 +02:00
dialogs_2100003C.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
effects_negative_2100001B.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
effects_positive_2100001B.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
effects_row_2100001B_10000128.json fix(ui): complete retail indicator detail panels 2026-07-17 11:36:43 +02:00
examine_2100006B_100005F2.json feat(ui): port retail appraisal panel 2026-07-23 11:34:08 +02:00
examine_component_2100006B_1000032E.json fix(ui): keep spell components in authored foreground 2026-07-24 08:08:29 +02:00
examine_row_2100006B_10000166.json feat(ui): port retail creature appraisal presentation 2026-07-23 12:55:24 +02:00
indicators_21000071.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
inventory_21000023.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
link_status_2100001D.json feat(ui): share indicator detail panels 2026-07-17 10:27:41 +02:00
mini_game_2100001E.json feat(ui): share indicator detail panels 2026-07-17 10:27:41 +02:00
paperdoll_21000024.json feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
powerbar_21000072.json feat(ui): port retail jump power bar 2026-07-13 10:22:12 +02:00
radar_21000074.json feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
smartbox_fps_2100000F.json fix #213: complete suicide and framerate presentation 2026-07-13 15:50:47 +02:00
spellbook_21000034.json fix(ui): restore retail spell tabs and spellbook 2026-07-15 15:54:11 +02:00
toolbar_21000016.json feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
vendor_21000012_100000B7.json feat(ui): Slice 5.4 — the authored vendor browse panel (LayoutDesc 0x21000012) 2026-08-07 17:00:21 +02:00
vitae_21000020.json feat(ui): share indicator detail panels 2026-07-17 10:27:41 +02:00
vitals_2100006C.json feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00