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:
parent
7b60e71b85
commit
cb3346907d
3 changed files with 33 additions and 8 deletions
|
|
@ -108,11 +108,14 @@ for this slice, not a bug.
|
||||||
session sees zero lines (everything already at the macro's target).
|
session sees zero lines (everything already at the macro's target).
|
||||||
**These six lines are byte-verified `RetailLogTextType.Magic` (0x07),
|
**These six lines are byte-verified `RetailLogTextType.Magic` (0x07),
|
||||||
NOT the client-local refusal type** — expect LIGHT BLUE text in the
|
NOT the client-local refusal type** — expect LIGHT BLUE text in the
|
||||||
SCROLLING CHAT TRANSCRIPT (not the transient SpewBox overlay), with
|
SCROLLING CHAT TRANSCRIPT (not the transient SpewBox overlay). Do
|
||||||
a timestamp prefix, same as any other Magic-colored system line. If
|
NOT expect a timestamp prefix: acdream renders no chat timestamps
|
||||||
you see bright red text in a transient 5-second overlay instead (the
|
yet (the Display Timestamps consumer is OP4 scope, and there is no
|
||||||
ClientLocal/SpewBox look used by the mid-air refusal and UA/RA
|
chat-log file — TS-69), so a bare light-blue line is CORRECT here
|
||||||
above), that is the pre-fix-round bug — report it.
|
(OP3 re-review R1). If you see bright red text in a transient
|
||||||
|
5-second overlay instead (the ClientLocal/SpewBox look used by the
|
||||||
|
mid-air refusal and UA/RA above), that is the pre-fix-round bug —
|
||||||
|
report it.
|
||||||
**Known, registered gap (TS-74): acdream has no persistent
|
**Known, registered gap (TS-74): acdream has no persistent
|
||||||
"turn to face camera" mouse-turning MODE yet, so this button changes
|
"turn to face camera" mouse-turning MODE yet, so this button changes
|
||||||
stored preferences and sends the wire bit, but you will not see the
|
stored preferences and sends the wire bit, but you will not see the
|
||||||
|
|
|
||||||
|
|
@ -811,9 +811,15 @@ internal sealed class RetailInteractionRetainedUiCompositionFactory
|
||||||
// into "not grounded", which fired the mid-air message
|
// into "not grounded", which fired the mid-air message
|
||||||
// outside player mode — the opposite of retail and the
|
// outside player mode — the opposite of retail and the
|
||||||
// opposite of what the old comment here claimed.
|
// opposite of what the old comment here claimed.
|
||||||
IsGrounded: () => !d.PlayerMode.IsPlayerMode
|
// R2 (OP3 re-review, 2026-08-11): a NULL controller in
|
||||||
? (bool?)null
|
// player mode must ALSO yield null (silent) — the prior
|
||||||
: d.PlayerController.Controller is { IsAirborne: false },
|
// `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: () =>
|
IsUseMouseTurningEnabled: () =>
|
||||||
CharacterOptionTable.TryGet(
|
CharacterOptionTable.TryGet(
|
||||||
CharacterOptionId.UseMouseTurning,
|
CharacterOptionId.UseMouseTurning,
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,22 @@ public class OP2ReworkBlastRadiusConformanceTests
|
||||||
host.ActivePageChanged += (_, _) => raised++;
|
host.ActivePageChanged += (_, _) => raised++;
|
||||||
|
|
||||||
Assert.False(host.BehaviorActive);
|
Assert.False(host.BehaviorActive);
|
||||||
|
|
||||||
|
// R3 (OP3 re-review, 2026-08-11): a subscribe-then-assert-zero pin
|
||||||
|
// passes even with dormancy fully broken. The REAL dormancy
|
||||||
|
// mechanism is that ActivateTabBehavior (via RetailTabBinding.
|
||||||
|
// SetClick) was never called, so the authored tab BUTTONS carry no
|
||||||
|
// click handler — clicking a dormant host's tab can invoke nothing.
|
||||||
|
// SwitchTo itself deliberately has no dormancy guard (a controller
|
||||||
|
// may drive it directly), so the button wiring IS the contract.
|
||||||
|
foreach (UiTabTableEntry tab in host.Tabs)
|
||||||
|
{
|
||||||
|
var button = layout.FindElement(tab.ButtonElementId);
|
||||||
|
Assert.NotNull(button);
|
||||||
|
Assert.False(button!.HandlesClick,
|
||||||
|
$"dormant tab button 0x{tab.ButtonElementId:X8} has a click "
|
||||||
|
+ "handler — import-time activation regressed (AD-73)");
|
||||||
|
}
|
||||||
Assert.Equal(0, raised);
|
Assert.Equal(0, raised);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue