acdream/tests/AcDream.App.Tests/UI/Layout
Erik ed652ed8ad feat(ui): Campaign CT slice CT4 — header identity block retail-exact
Retires the rest of AP-109's UI half: the character panel's Name/Heritage/
PkStatus/Level header identity block is now live and DAT-faithful on both
Attributes and Skills pages (verified: CharacterStatController.Bind already
scopes Label/LabelAuthoredColor to the ONE physically-visible page container,
so both tabs share the same bound widgets).

- Name/Heritage/PkStatus/Level switch from hand-picked Body/Gold runtime
  colors to the widget's own authored DefaultColor (LabelAuthoredColor) —
  CT1's live-DAT pin (HeaderElements_AuthorExpectedFontsAndColors) confirmed
  all four already carry the correct FontColor (white/white/white/pale-gold
  with Outline); the former "runtime color, dat carries none" comment was
  false.
- PkStatus resolves through StringTable 0x23000001 by key
  (ID_StatManagement_Header_PKStatus_PK/_PKL/_NPK) with a bitwise
  IsPK/IsPKLite test (gmStatManagementUI::UpdatePKStatus @0x004F00A0) instead
  of the prior exact-equality switch, which silently dropped combined-flag
  PlayerKillerStatus values. Live-DAT-verified strings: "Player Killer" /
  "Player Killer Lite" / "Non-Player Killer" (new InstalledDat pin
  PkStatusKeys_ResolveExpectedAuthoredStrings).
- Level shows "%d"-formatted InqInt(0x19) or the PE-recovered literal "???"
  when absent (CharacterSheet.Level is now int?).
- Heritage line appends CT2/CT3's resolved RuntimeCharacterTitleState
  display title through CharacterTitleResolver, refreshing live on both
  TableReplaced (0x0029) and DisplayTitleChanged (0x002B) —
  CharacterSheetProvider's ChangeBinding now subscribes to both.
- Name-line ruling: ships the PLAIN-NAME case only. Retail's allegiance
  rank-title prefix (AllegianceData::GetFullName @0x005B6950 ->
  AllegianceSystem::GetTitle @0x005B8DD0) needs a ~200-string, 22-function
  heritage x gender table (verbatim decomp literals, e.g.
  GetAluvianMaleTitle @0x005B7BC0's Yeoman/Baronet/.../High King) judged out
  of reasonable size for this slice. RuntimeAllegianceState already carries
  the local player's own rank; only the string table is missing. Registered,
  not silently omitted.
- Luminance pair (0x100005C5/0x100005C6): CharacterSheet.AvailableLuminance/
  MaximumLuminance (PropertyInt64 6/7) already flow generically through both
  the PlayerDescription snapshot and the live 0x02CF private-update parsers
  (no wiring gap). The retail show/hide gate (Level >= 200 &&
  MaximumLuminance != 0, UpdateExperience @0x004F0A70) is wired and toggles
  Visible on both elements every sheet refresh; the exact caption/value text
  could not be recovered this slice (retail's SetText source resolves
  through a Binary-Ninja-mislabeled data pointer, not a StringTable key — a
  DAT string-table sweep found no match), so content stays unbound rather
  than guessed.
- AP-109 narrowed accordingly (register row amended in the same commit).

Tests: CharacterStatControllerTests (heritage composition + live title
update, name stays plain, level int/"???" with authored — not constant —
color across 3 cases, PK line shows resolved text in authored color across
3 statuses, luminance visibility across 5 level/luminance combinations) and
CharacterSheetProviderTests (PK key-by-status resolution including a
combined-flag case, no-resolver leaves PkStatus null, Level null-vs-present,
title resolution + live refresh on both title events + unsubscribe-on-
dispose, luminance Int64 read-through). Full hermetic solution suite green
under Release (0 failures across all 14 test projects); InstalledDat pins
green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 00:02:11 +02:00
..
fixtures fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +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
CharacterCreationAppearancePageSwatchColorTests.cs fix(chargen): Campaign CC gate round 1 re-test 2 — R3-5/R3-6 color-key swatch/gradient textures 2026-08-16 17:20:31 +02:00
CharacterCreationLiveDatTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
CharacterCreationUiControllerTests.cs fix(ui): systemic escape normalization at the string source 2026-08-17 13:26:25 +02:00
CharacterLayoutImportProbe.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
CharacterManagementLiveDatTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
CharacterManagementUiControllerTests.cs feat(chargen): Campaign CC slice CC7 — end-to-end create flow + connected checklist 2026-08-16 02:35:21 +02:00
CharacterOptionsPageControllerTests.cs feat(ui): vitals — Side By Side Vitals swaps retail's two vitals windows 2026-08-17 10:40:49 +02:00
CharacterPanelLiveDatTests.cs feat(ui): Campaign CT slice CT4 — header identity block retail-exact 2026-08-25 00:02:11 +02:00
CharacterScreensFixedCanvasArbiterTests.cs fix(chargen): Campaign CC CC7 review fix round — F1-F9 — REVIEW-CLOSED 2026-08-16 03:13:02 +02:00
CharacterSheetProviderTests.cs feat(ui): Campaign CT slice CT4 — header identity block retail-exact 2026-08-25 00:02:11 +02:00
CharacterStatControllerTests.cs feat(ui): Campaign CT slice CT4 — header identity block retail-exact 2026-08-25 00:02:11 +02:00
CharacterTitleResolverLiveDatTests.cs fix(CT): CT2 fix round — dedupe client-side title add, drop retail-inexact send guard 2026-08-24 22:27:07 +02:00
CharacterTitlesControllerTests.cs fix(CT): CT3 fix round — port Refresh's unconditional selection clear, drop unresolvable-id rows 2026-08-24 23:28:28 +02:00
ChargenColorSpotComposerTests.cs fix(chargen): Campaign CC gate round 1 re-test 2 — R3-5/R3-6 color-key swatch/gradient textures 2026-08-16 17:20:31 +02:00
ChatIndicatorButtonLiveMountProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ChatLayoutConformanceTests.cs fix(ui): talk-button caption centers per the authored label child 2026-08-24 20:47:01 +02:00
ChatOptionsDatDefaultsTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ChatOptionsPageControllerTests.cs test: replace campaign labels with behavior names 2026-08-18 12:25:00 +02:00
ChatStringsLiveDatTests.cs fix(ui): chat window retail parity — focus rails, authored captions, menu flick, drag-stable text 2026-08-24 20:27:04 +02:00
ChatTagClickTests.cs feat(chat): CT-A5 — clicking a speaker's name opens a tell 2026-08-21 07:34:58 +02:00
ChatTranscriptRendererTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +02:00
ChatTranscriptRunsTests.cs feat(chat): CT-C2 Escape leaves the entry; CT-C3 the timestamp is grey 2026-08-21 08:28:45 +02:00
ChatWindowControllerTests.cs fix(ui): chat window retail parity — focus rails, authored captions, menu flick, drag-stable text 2026-08-24 20:27:04 +02:00
CombatLayoutConformanceTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
CombatUiControllerTests.cs fix: powerbar mode captions - jump 'Height' + combat 'Power'/'Accuracy' 2026-08-14 08:14:14 +02:00
ConfigOptionsPageControllerTests.cs feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
CreatureAppraisalRowsTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DatRichTextTests.cs fix(ui): systemic escape normalization at the string source 2026-08-17 13:26:25 +02:00
DatStringEscapeSweepTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
DatStringResolverTemplateTests.cs build: make release restore reproducible 2026-08-18 10:29:00 +02:00
DatWidgetFactoryFontResolveTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DatWidgetFactoryTests.cs fix(ui): chat window retail parity — focus rails, authored captions, menu flick, drag-stable text 2026-08-24 20:27:04 +02:00
DormantDatWidgetConformanceTests.cs test: remove final campaign labels 2026-08-18 13:50:31 +02:00
EffectsUiControllerTests.cs fix(ui): effects list stayed pinned at its authored height in a taller window 2026-08-20 21:00:16 +02:00
ElementReaderTests.cs feat(ui): #409 — client-wide retail tooltip system 2026-08-16 20:03:24 +02:00
ExternalContainerControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
FaPanelSlotProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
FixtureLoader.cs feat(ui): Map/House panel — slices 2+3, panel shell + Map tab 2026-08-17 02:04:19 +02:00
FloatingChatLayoutConformanceTests.cs fix(chat): CH6a/b rework — grip media, retail window-id model, floaty fixture 2026-08-10 13:09:32 +02:00
FloatingChatWindowControllerTests.cs feat(chat): Campaign CH slice CH6b — floating chat windows 1-4 2026-08-10 12:10:20 +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(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
InventoryFrameImportProbe.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ItemAppraisalTextFormatterTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ItemCooldownUiControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ItemListCellTemplateTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
JournalContractsPageControllerTests.cs fix(journal): the location readout is a FIELD, refresh at the click, and Abandon works 2026-08-21 16:19:18 +02:00
JournalNotesPageControllerTests.cs fix(journal): the timer's unit labels hide with their boxes 2026-08-21 18:29:58 +02:00
JournalPageListControllerTests.cs feat(journal): QJ3/QJ4/QJ5 — both remaining tabs are live 2026-08-21 15:42:05 +02:00
JournalPanelBoundWidgetTypesTests.cs fix(journal): the location readout is a FIELD, refresh at the click, and Abandon works 2026-08-21 16:19:18 +02:00
JournalPanelButtonsAreClickableTests.cs test(ui): pin every Journal-panel button as enabled and reachable 2026-08-21 15:59:19 +02:00
JournalPanelLiveBindTests.cs fix(journal): the timer's unit labels hide with their boxes 2026-08-21 18:29:58 +02:00
JournalPanelSlotProbeTests.cs feat(quest): QT5/QT6 — the Journal panel, and the button that was already there 2026-08-21 15:12:05 +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
KeyboardConfigControllerTests.cs fix #394 #395 #396: OP8 re-gate round — caption font, retail key names, capture dialog 2026-08-14 13:45:55 +02:00
KeyboardConfigLiveMountProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
LayoutConformanceTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
LayoutImporterMediaBearingChildSweepTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
LayoutImporterTests.cs feat(ui): #409 — client-wide retail tooltip system 2026-08-16 20:03:24 +02:00
MapHousePanelControllerTests.cs fix(ui): morning gate — map town markers: green rollover highlight + the authored map-note tooltip skin/font 2026-08-17 09:22:46 +02:00
MapHousePanelLiveDatMountTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
MapHousePanelSlotProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
MapNoteLiveDatTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
MapPageControllerTests.cs fix(ui): Map tab player/house icon resolution — build the button-swallowed icons from the panel-slot resolve tree, detached from the per-frame layout pass 2026-08-17 05:58:17 +02:00
MouseTurningSettingsMacroTests.cs feat(ui): Campaign OP slice OP3 — Options panel shell, open paths, Gameplay tab 2026-08-11 02:14:40 +02:00
OptionPageModelTests.cs feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
OptionsPanelControllerTests.cs fix #381: Options-panel footer needs an opaque backing field 2026-08-11 23:01:43 +02:00
OptionsPanelLayoutConformanceTests.cs test: remove final campaign labels 2026-08-18 13:50:31 +02:00
OptionsPanelLiveMountProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
PaperdollClickMapTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
PaperdollControllerTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
PaperdollSlotBackgroundTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +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
PowerbarLayoutProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
RadarControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
RadarLayoutConformanceTests.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 fix(ui,net): Campaign LA gate round 2 — char-select exit confirmation, authored row justify, world name 2026-08-15 11:50:45 +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
RetailKeyNamesTests.cs fix #394 #395 #396: OP8 re-gate round — caption font, retail key names, capture dialog 2026-08-14 13:45:55 +02:00
RetailLayoutFixtureGenerator.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
RetailPanelUiControllerTests.cs fix(ui): OP3 review fixes — byte-verified Magic chat lines, Gameplay/OptionPage shape, mid-air tri-state, shared geometry 2026-08-11 03:05:27 +02:00
RetailStringEscapesTests.cs fix(ui): systemic escape normalization at the string source 2026-08-17 13:26:25 +02:00
RetailTooltipPresenterTests.cs fix #430: tooltip wrap and draw honor the text child's authored margins 2026-08-24 18:44:28 +02:00
RetailWindowFrameTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
RowTemplateResolverTests.cs feat(ui): FA4 -- fellowship page fully live 2026-08-12 04:40:53 +02:00
ScrollbarSkinLiveDatTests.cs fix(ui): retail scrollbar parity — button seating, full-track thumb, hover/pressed states 2026-08-24 19:20:43 +02:00
SelectedObjectControllerTests.cs test: remove final campaign labels 2026-08-18 13:50:31 +02:00
SocialFellowshipPageControllerTests.cs fix: social panel completion batch (user gate 2026-08-13, "fix all") 2026-08-13 19:30:51 +02:00
SocialPanelControllerTests.cs fix: social panel completion batch (user gate 2026-08-13, "fix all") 2026-08-13 19:30:51 +02:00
SocialPanelLiveMountProbeTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
SpellbookRowStyleTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
SpellbookWindowControllerTests.cs feat: regen buffs, wand aura, spellbook assess, indicator press flash 2026-08-20 20:38:28 +02:00
SpellcastingUiControllerTests.cs fix(ui): night-round review — F3/F4/F7 cast-button tooltip strings 2026-08-17 04:39:17 +02:00
SpellExamineComponentTemplateFactoryTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
ToolbarControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
ToolbarInputControllerTests.cs feat(ui): complete retail quick-slot input 2026-07-11 08:59:49 +02:00
TooltipLiveDatTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
TooltipSkinLiveDatTests.cs fix #430: tooltip wrap and draw honor the text child's authored margins 2026-08-24 18:44:28 +02:00
UiButtonCorpusSweepTests.cs test: separate non-hermetic release lanes 2026-08-18 10:49:22 +02:00
UiDatElementTests.cs fix #416 #415: the retail button state/media machine — roster hover highlight clears; probe wait verbs bind without an artifact dir 2026-08-17 16:25:36 +02:00
UiMediaSequenceTests.cs feat(ui): authored state media animates, so the unseen-text indicator blinks 2026-08-21 11:14:53 +02:00
UiPropertyBagTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +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: retail text and golden-string tests must not follow the machine's locale 2026-08-19 19:56:09 +02:00
VitalsBindingTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
VitalsDetailToggleTests.cs fix(ui): gate — no void frames around the login wormhole; vitals icons centered 2026-08-17 12:30:51 +02:00
VitalsSideBySideControllerTests.cs feat(ui): vitals — Side By Side Vitals swaps retail's two vitals windows 2026-08-17 10:40:49 +02:00
VividTargetIndicatorLayoutTests.cs feat(selection): port retail offscreen target indicator 2026-07-18 07:41:12 +02:00