fix(chat): consolidated-review fixes — retail /help Detail extraction, seam wiring test
SHOULD-FIX 1: RetailClientCommandCatalog's ~45 catalog leaf verbs were showing acdream-authored Summary text for /help <verb> instead of retail's own Detail_HelpType(2) text. Byte-swept every Help* handler against the PDB-paired acclient.exe (verified MATCH), confirmed each Detail/Summary branch by reading the actual decompiled if/else shape (address order and string length both proved unreliable alone), and fixed a sweep_weenie_strings.py 800-char truncation bug that silently dropped several longer Detail branches. Resolved every ambiguous CmdHashData-registered verb (hor/hr/hom/hoa/alh/ah/friends_add/ friends_remove/squelch/unsquelch) by reading for Binary Ninja's nullptr-4th-arg decompiler artifact instead of trusting it. Coverage: 42 of 47 distinct catalog Definitions verbatim-extracted, 4 confirmed-null (index/clist/on/off register with a genuinely null help pointer — DoHelp falls to UnknownCommand for these, now reproduced), 1 honest UNVERIFIED (messagetypes builds its text from a runtime enum table, not a static string). ChatCommandRouter now prefers retail Detail text over the catalog summary; RetailCommandHelpTable's class doc no longer overclaims its own scope. SHOULD-FIX 2: extracted the a5a7eb4f-class OnInterfaceText wiring into a testable CreateChatViewModel method and added ComposedChatViewModelWiresOnInterfaceTextToSpewBox, which the prior FakeFactory-based test suite could never exercise. SHOULD-FIX 3: retires register row AP-113. DoLifestone/DoMarketplace print their own 0x1A refusal text (byte-recovered, UTF-16LE) instead of falling through to the generic 0x26 fallback; ChatCommandRouter's comment corrected to state the fallback's real scope. SHOULD-FIX 4: corrected the divergence register's stale AP section header sentence about AP-190's opacity default (refuted bycc582899). NITs: (a) HeadlessStaticStateAudit routes through the injected HeadlessDiagnosticWriter instead of Console.WriteLine; (b) a bounded 300-pump liveness diagnostic on the IsQuiescent conductor gate (no retry, no behavior change); (c) fixed the #365 hydration test's doc comment contradiction against diagnosis §8; (d) the 0x26 fallback dispatches on WeenieErrorMessages' own Type instead of hardcoding ClientLocal. Full Release suite: 12,553 passed / 4 skipped / 0 failed (baseline03404b71: 12,542/4/0; net +11 tests, zero regressions). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
03404b7121
commit
f7a6f46ba0
15 changed files with 947 additions and 85 deletions
|
|
@ -419,6 +419,33 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
|
|||
incrementBusy: itemInteraction.IncrementBusyCount,
|
||||
canSend: () => late.Session.IsInWorld);
|
||||
|
||||
/// <summary>
|
||||
/// Consolidated-review round (2026-08-10), SHOULD-FIX 2: extracted out
|
||||
/// of <see cref="CreateRetainedUi"/> so this specific wiring — the
|
||||
/// composed <see cref="ChatVM.OnInterfaceText"/> hook that routes
|
||||
/// <c>ChatCommandRouter</c>'s <c>0x1A</c> refusals to
|
||||
/// <see cref="RuntimeCommunicationState.AddText"/>/SpewBox — is
|
||||
/// independently testable without the rest of <see cref="CreateRetainedUi"/>'s
|
||||
/// GPU/dat/UiHost dependencies (all null-safe in a pure unit test; this
|
||||
/// method only touches <see cref="InteractionRetainedUiDependencies.Communication"/>).
|
||||
/// The a5a7eb4f defect class (a composed hook wired but never
|
||||
/// transferred) is exactly what this seam existing untested let slip
|
||||
/// through — see <c>InteractionRetainedUiCompositionTests.ComposedChatViewModelWiresOnInterfaceTextToSpewBox</c>.
|
||||
/// </summary>
|
||||
internal static ChatVM CreateChatViewModel(InteractionRetainedUiDependencies d) =>
|
||||
new ChatVM(
|
||||
d.Communication.Chat,
|
||||
displayLimit: 200,
|
||||
commandTargets: d.Communication.CommandTargets)
|
||||
{
|
||||
// Issue #363 / #367: routes ChatCommandRouter's 0x1A
|
||||
// (ClientLocal) command refusals to the same SpewBox
|
||||
// chokepoint every other interface-text producer uses,
|
||||
// instead of the chat scroll.
|
||||
OnInterfaceText = text =>
|
||||
d.Communication.AddText(text, RetailLogTextType.ClientLocal),
|
||||
};
|
||||
|
||||
public RetainedUiComposition CreateRetainedUi(
|
||||
InteractionRetainedUiDependencies d,
|
||||
InteractionUiLateBindings late,
|
||||
|
|
@ -559,18 +586,7 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
|
|||
|
||||
host.Root.Width = d.Window.Size.X;
|
||||
host.Root.Height = d.Window.Size.Y;
|
||||
var chat = new ChatVM(
|
||||
d.Communication.Chat,
|
||||
displayLimit: 200,
|
||||
commandTargets: d.Communication.CommandTargets)
|
||||
{
|
||||
// Issue #363 / #367: routes ChatCommandRouter's 0x1A
|
||||
// (ClientLocal) command refusals to the same SpewBox
|
||||
// chokepoint every other interface-text producer uses,
|
||||
// instead of the chat scroll.
|
||||
OnInterfaceText = text =>
|
||||
d.Communication.AddText(text, RetailLogTextType.ClientLocal),
|
||||
};
|
||||
var chat = CreateChatViewModel(d);
|
||||
AcDream.UI.Abstractions.Panels.Settings.SettingsStore? layoutStore =
|
||||
d.Settings.LayoutStore;
|
||||
RetailUiPersistenceBindings? persistence = layoutStore is null
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue