acdream/tests/AcDream.App.Tests/UI/Layout
Erik 34d8a3c0e7 fix(chat): CH1 review fixes — sbb-idiom channel catch-all, command-output typing
Applies the Opus review findings on CH1 (172c6f9a), the exact retail chat
color table. Two blockers plus should-fixes/nits, one commit:

BLOCKER 1 — LegacyChannelChatType.Resolve's channel-bit table was wrong.
Binary Ninja renders retail's `neg esi; sbb esi, esi` idiom (a branchless
select between Channel 0x08 and Channel_Send 0x09) as the trivial pseudo-C
`esi - esi` (always 0), hiding the real values. Corrected by decoding the
raw bytes at the PDB-paired binary: HEAR sbb site VA 0x00570F0A (mask -6 ->
0x08), SEND sbb site VA 0x00570D4F (mask -5 -> 0x09). The generic
admin/audit/sentinel catch-all is Channel/Channel_Send, NOT Abuse (0x0E) —
Abuse is retail's ONLY 0x0E producer (bit 0x0001). The unnamed
FellowBroadcast bit (0x4000000) is hear=Channel(0x08)/send=Fellowship(0x13),
not a flat 0x13. ACE's PDB-sourced Channel enum corroborates. Introduces
`RetailLogTextType`, the 34-value named enum for the wire LogTextType space
(values only, no color — Core stays presentation-free).

BLOCKER 2 — three ChatLog.OnSystemMessage sinks (ChatVM.ShowSystemMessage,
LiveSessionRuntimeFactory's ShowSystemMessage delegate,
HeadlessGameplayOperations.DisplayMessage) were typing ALL
ClientCommandController output 0x1A (bright red), including informational
command output (@version, /loc, friends list, usage lines). Retail types
the great majority of that output 0x00 Default (green) and reserves 0x1A
for genuine refusals/errors. Reverted to 0x00 with a comment noting the
refusal-vs-info split lands with CH2's SpewBox producer rewiring. The five
App composition sites that pass 0x1A for actual refusal text
(InteractionRetainedUiComposition, SessionPlayerComposition) were already
correct and are untouched (aside from converting the literal to the new
enum).

Also: AP-176 divergence-register row for OnWeenieError/OnCombatLine's
single-type approximation of retail's per-code/per-message dispatch; a
carry-forward test for the out-of-range LogTextType color fallback in
ChatWindowController; decomp-confirmed anchors replacing ACE-inferred
citations in CombatChatTranslator and ChatLog.OnPlayerKilled; required
(non-optional) logTextType parameters on OnLocalSpeech/OnTellReceived/
OnCombatLine/OnSelfSent since no production caller relied on a default;
LegacyChannelChatType.Resolve's parameter renamed channelBit -> channelId
with a doc note on multi-bit ids; corrections to the color-table research
doc's §3.3 wire tables; and issue #359 for the pre-existing (not
CH1-introduced) 0x019E PlayerKilled participant-suppression gap retail has
and acdream lacks.

dotnet build clean; full Release suite 11,835 passed / 4 skipped / 0 failed
(11,839 total), up from the CH1 baseline of 11,833/4/0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 16:03:13 +02:00
..
fixtures feat(ui): Slice 5.4 — the authored vendor browse panel (LayoutDesc 0x21000012) 2026-08-07 17:00:21 +02:00
AppraisalUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CharacterControllerTests.cs feat(render): Campaign V slice V11 commit 1 - delete ImGui, Studio, and the DevTools frontend 2026-07-28 23:56:04 +02:00
CharacterLayoutImportProbe.cs feat(player): port retail augmentation stat chain 2026-07-31 08:08:23 +02:00
CharacterSheetProviderTests.cs feat(player): port retail augmentation stat chain 2026-07-31 08:08:23 +02:00
CharacterStatControllerTests.cs fix(ui): refresh live skill rows 2026-07-31 08:22:46 +02:00
ChatLayoutConformanceTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ChatLayoutFixtureGenerator.cs test(D.2b): chat golden fixture + resolved-Type conformance (widget-generalization Task 1) 2026-06-16 16:55:51 +02:00
ChatWindowControllerTests.cs fix(chat): CH1 review fixes — sbb-idiom channel catch-all, command-output typing 2026-08-09 16:03:13 +02:00
CombatLayoutConformanceTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CombatUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CreatureAppraisalRowsTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DatWidgetFactoryFontResolveTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DatWidgetFactoryTests.cs feat(ui): port retail UIElement_Dragbar so authored drag strips move their windows 2026-07-29 21:04:33 +02:00
EffectsUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ElementReaderTests.cs feat(ui): D.2b item interaction + retail cursors + live character sheet 2026-07-03 09:18:43 +02:00
ExternalContainerControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
FixtureLoader.cs feat(ui): Slice 5.4 — the authored vendor browse panel (LayoutDesc 0x21000012) 2026-08-07 17:00:21 +02:00
IndicatorBarControllerTests.cs fix(movement): invalidate burden on enchantment changes 2026-07-31 10:16:27 +02:00
IndicatorDetailPanelControllerTests.cs fix(ui): restore effect detail scrolling 2026-07-17 13:28:18 +02:00
InventoryControllerTests.cs fix(movement): invalidate burden on enchantment changes 2026-07-31 10:16:27 +02:00
InventoryFrameImportProbe.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ItemAppraisalTextFormatterTests.cs fix(ui): preserve retail item titles and spacing 2026-07-24 05:21:01 +02:00
ItemCooldownUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ItemListCellTemplateTests.cs feat(items): port retail shared cooldown overlays 2026-07-23 10:41:16 +02:00
JumpPowerbarControllerTests.cs feat(ui): port retail jump power bar 2026-07-13 10:22:12 +02:00
JumpPowerbarLayoutConformanceTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LayoutConformanceTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
LayoutImporterTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PaperdollClickMapTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PaperdollControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PaperdollSlotBackgroundTests.cs fix(paperdoll): port quest-gated Aetheria slots 2026-07-13 09:55:20 +02:00
PaperdollToggleTests.cs feat(D.2b): Slice 2 — paperdoll armor/non-armor partition + Slots toggle state 2026-06-23 08:57:50 +02:00
RadarControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RadarLayoutConformanceTests.cs feat(ui): port retail radar and compass 2026-07-10 16:14:37 +02:00
RadarLayoutFixtureGenerator.cs feat(ui): port retail radar and compass 2026-07-10 16:14:37 +02:00
RadarSnapshotProviderTests.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
RetailDialogFactoryTests.cs refactor(net): converge live session state reset 2026-07-21 12:00:48 +02:00
RetailFixtureConformanceTests.cs feat(ui): port retail appraisal panel 2026-07-23 11:34:08 +02:00
RetailFpsControllerTests.cs fix #213: complete suicide and framerate presentation 2026-07-13 15:50:47 +02:00
RetailLayoutFixtureGenerator.cs feat(ui): Slice 5.4 — the authored vendor browse panel (LayoutDesc 0x21000012) 2026-08-07 17:00:21 +02:00
RetailPanelUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RetailWindowFrameTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
SelectedObjectControllerTests.cs feat(ui): double-click-to-buy (AP-171, user-approved) + #353 toolbar text fixes — authored right-justify and two-line name wrap (Fable) 2026-08-08 17:42:02 +02:00
SpellbookRowStyleTests.cs fix(ui): keep spellbook tab captions above chrome 2026-07-15 17:02:14 +02:00
SpellbookWindowControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
SpellcastingUiControllerTests.cs feat(ui): the spell-bar drop ring — retail's authored drag-accept state, and the ring exposed a real drop off-by-one 2026-08-08 20:18:51 +02:00
SpellExamineComponentTemplateFactoryTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ToolbarControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ToolbarInputControllerTests.cs feat(ui): complete retail quick-slot input 2026-07-11 08:59:49 +02:00
UiDatElementTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
UiPropertyBagTests.cs fix(combat): restore retail power bar layers 2026-07-12 21:14:14 +02:00
UiTextLayoutCacheTests.cs test(app): put every strict-zero site on the probe (#250) 2026-07-29 03:49:13 +02:00
UiViewportFactoryTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
VendorUiControllerTests.cs fix(vendor): re-gate residuals — MaxStackSize is the stack operand, wire-authored use radius, purse summaries 2026-08-08 15:23:10 +02:00
VitalsBindingTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
VividTargetIndicatorLayoutTests.cs feat(selection): port retail offscreen target indicator 2026-07-18 07:41:12 +02:00