acdream/src/AcDream.App/Composition
Erik 067cbea8a5 feat: secure trade with other players - wire, RuntimeTradeState, the
authored gmSecureTradeUI window, and both retail open paths

Three-lane research first (docs/research/2026-08-14-trade-lane{A,B,C}):
retail gmSecureTradeUI decode, the byte-exact ACE/decomp/holtburger
three-way wire agreement, and the acdream seam map (which found both
open paths ALREADY classified by the ported policy - OpenSecureTrade on
Use-a-player, StartSecureTrade on drag-item-onto-player with the
DragItemOnPlayerOpensSecureTrade option - dead-ending at a stub toast).

- Core.Net: TradeRequests builders (0x1F6-0x204, retail's CM_Trade
  senders byte-checked against ACE's readers; the ACE-discarded
  AcceptTrade echo carries zero-count item lists - AD-94), corrected +
  completed inbound parsers (0x1FD-0x208; the old AddToTrade parser
  missed the SIDE dword, TradeFailure missed the reason), delegate-hole
  registrars, six WorldSession sends. 10 golden-byte tests.
- Runtime: RuntimeTradeState, the third sibling J-owner (fellowship/
  allegiance shape): session-scoped, clears at generation reset (new
  stage Trade=14), staged teardown stage 11 (Identity/EntityObjects
  shift 12/13, TeardownStageCount 14 - the FA2-era per-stage-flag test
  caught the mapping exactly as designed), combined ownership ledger,
  event routing with ACE's wrong-initiator RegisterTrade landmine
  honored (partner = whichever guid is not mine). 7 conformance tests.
- App: SecureTradeUiController binds the dedicated authored LayoutDesc
  0x2100000D (root 0x1000007A - gmSecureTradeUI::PostInit's exact ids):
  partner name/status/count/grid, the authored 'Trade' accept toggle
  (accept <-> decline withdraw), 'Clear All' (ACE clears BOTH sides -
  surfaced honestly), the X close, drop-on-your-grid staging, per-mode
  accept cues (partner icon's authored Highlight state + Trade button
  Selected latch). Mounted via the vendor recipe (nine-slice chrome,
  hidden until RegisterTrade). ItemInteractionController's two policy
  arms now raise SecureTradeRequested instead of the stub toast; the
  drag path queues the dragged item until the window registers
  (ClientTradeSystem::AttemptToTradeItem @0x0056DF80's shape).

Register: AD-94 (accept-echo zero-count lists), AD-95 (numeric-only
count texts pending template verification).

Suites: App 4,990/3, Core.Net 905, Runtime 1,626 - all green. The
panel itself is user-gate acceptance (two-client connected trade), the
#372-class lesson: fixture-green alone is not acceptance for a mount.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:49:13 +02:00
..
AnimationHookRegistrationSet.cs refactor(app): compose live presentation startup 2026-07-22 17:55:15 +02:00
CompositionAcquisitionScope.cs feat(render): Campaign V slice V6h — the Vulkan composition host 2026-07-28 11:47:37 +02:00
ContentEffectsAudioComposition.cs feat(audio): Campaign A slice A5 — retail's region ambient soundscape 2026-08-08 22:53:41 +02:00
FrameRootComposition.cs feat(ui): Campaign OP slice OP4 — the Character tab 2026-08-11 04:31:34 +02:00
GameWindowCompositionPipeline.cs refactor(app): close ordered startup composition 2026-07-22 19:20:20 +02:00
GameWindowGraphics.cs feat(render): Vulkan campaign V11 step 2 — delete the OpenGL backend 2026-07-29 02:19:53 +02:00
GameWindowPlatformAcquisition.cs refactor(app): define ordered composition contract 2026-07-22 15:03:40 +02:00
HostInputCameraComposition.cs feat(render): Vulkan campaign V11 step 2 — delete the OpenGL backend 2026-07-29 02:19:53 +02:00
InteractionRetainedUiComposition.cs feat: secure trade with other players - wire, RuntimeTradeState, the 2026-08-14 11:49:13 +02:00
InteractionUiRuntimeSources.cs feat(ui): FA5 -- allegiance page fully live: CF-1 subscription, blocks, roster, swear/break/kick 2026-08-12 08:40:07 +02:00
LivePresentationComposition.cs feat(ui): Campaign OP slice OP4 — the Character tab 2026-08-11 04:31:34 +02:00
LivePresentationRuntimeBindings.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
PreparedSetupResolver.cs perf(content): remove exception-driven setup probes 2026-07-24 15:12:21 +02:00
SessionPlayerComposition.cs fix #389 review round: settings v3 FOV migration + live apply; AD-90 2026-08-13 17:27:15 +02:00
SessionPlayerRuntimeBindings.cs refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
SessionStartComposition.cs feat(runtime): define borrowed views commands and ordered events 2026-07-25 19:08:42 +02:00
SettingsDevToolsComposition.cs refactor(settings): OP9 — retire the dead F11 settings surface + fully-superseded GameplaySettings 2026-08-11 13:18:53 +02:00
VulkanHostInputCameraCompositionFactory.cs fix #387: window resize never recreated the Vulkan swapchain (stretch) 2026-08-13 09:05:13 +02:00
WorldRenderComposition.cs feat(render): Vulkan campaign V11 step 3 — drop the GL packages and shaders 2026-07-29 02:58:15 +02:00