fix(ui): OP3 re-review residuals R1/R2/R3 (coordinator pass)

R1: the gate script no longer promises a timestamp prefix on the Magic
macro lines — acdream renders no chat timestamps yet (the Display
Timestamps consumer is OP4 scope; no chat-log file exists, TS-69). A
bare light-blue transcript line is the CORRECT gate outcome.

R2: IsGrounded yields null (silent) for a NULL controller in player
mode — the prior pattern returned false and fired the mid-air refusal
retail cannot produce in that state; comments now match the code.

R3: the dormant-ActivePageChanged pin now applies the real stimulus —
every authored tab button on a dormant host must carry NO click handler
(RetailTabBinding.SetClick never ran), which is AD-73's actual dormancy
mechanism; SwitchTo deliberately has no guard.

OP3 is CLOSED: dual APPROVE-WITH-FIXES -> fix round 386076af ->
re-review REOPEN(narrow) -> this pass. Connected gate now READY.

Full Release suite: 12,956 passed / 4 skipped / 0 failed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-11 03:25:40 +02:00
parent 7b60e71b85
commit cb3346907d
3 changed files with 33 additions and 8 deletions

View file

@ -811,9 +811,15 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
// into "not grounded", which fired the mid-air message
// outside player mode — the opposite of retail and the
// opposite of what the old comment here claimed.
IsGrounded: () => !d.PlayerMode.IsPlayerMode
? (bool?)null
: d.PlayerController.Controller is { IsAirborne: false },
// R2 (OP3 re-review, 2026-08-11): a NULL controller in
// player mode must ALSO yield null (silent) — the prior
// `is { IsAirborne: false }` pattern returned false for
// null and fired the refusal retail cannot produce.
IsGrounded: () =>
d.PlayerMode.IsPlayerMode
&& d.PlayerController.Controller is { } liveController
? !liveController.IsAirborne
: (bool?)null,
IsUseMouseTurningEnabled: () =>
CharacterOptionTable.TryGet(
CharacterOptionId.UseMouseTurning,