fix(ui): gate — no void frames around the login wormhole; vitals icons centered
The login tunnel now covers from the first world-facing frame (the sky-void backdrop can never present pre-tunnel) and holds through an atomic tunnel-to-world swap at reveal completion — the void is structurally unreachable on both edges, pinned by frame-sequence tests across WorldSceneRenderer/WorldRevealCoordinator/LocalPlayerTeleport- Controller/RuntimeWorldTransitState. Vitals detail icons draw at their authored centered offsets in both stacked and side-by-side layouts. Implemented and live-probed by the fix agent; finalized by the lead after the agent parked post-verification (gates re-run green: App 5512/3, Runtime 1747/0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
2f8c046aba
commit
fdc4fd496d
17 changed files with 649 additions and 66 deletions
|
|
@ -148,6 +148,21 @@ public sealed class RetailUiAutomationProbe
|
|||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raw synthetic drag between two canvas points (gate-fix round,
|
||||
/// 2026-08-17): the vitals icon-centering verify needs the vitals window
|
||||
/// RESIZED away from its authored width (the retail L3/R3 center anchors
|
||||
/// only become observable on a non-authored meter width), and window
|
||||
/// resize rides an edge-grip drag no element/item-addressed drag form can
|
||||
/// express. Same synthetic <see cref="UiRoot"/> pointer route as
|
||||
/// <see cref="DragItemToElement"/> — never the OS cursor.
|
||||
/// </summary>
|
||||
public bool DragAtPoint(int startX, int startY, int endX, int endY)
|
||||
{
|
||||
DragAt(startX, startY, endX, endY);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 2026-08-17 morning gate: synthetic pointer HOVER (no click) at an
|
||||
/// element's center, for rollover/tooltip verification. Deliberately
|
||||
|
|
|
|||
|
|
@ -286,8 +286,21 @@ public sealed class RetailUiAutomationScriptRunner : IDisposable
|
|||
private bool DoDrag(ScriptCommand command)
|
||||
{
|
||||
var p = command.Parts;
|
||||
if (p.Length >= 6
|
||||
&& string.Equals(p[1], "at", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// `drag at <x1> <y1> <x2> <y2>` — raw synthetic pointer drag in
|
||||
// canvas coordinates (gate-fix round 2026-08-17: window-resize
|
||||
// choreography for the vitals icon-centering verify; see
|
||||
// RetailUiAutomationProbe.DragAtPoint).
|
||||
if (!TryParseInt(p[2], out int x1) || !TryParseInt(p[3], out int y1)
|
||||
|| !TryParseInt(p[4], out int x2) || !TryParseInt(p[5], out int y2))
|
||||
return Stop(command, "usage: drag at <x1> <y1> <x2> <y2>");
|
||||
return _probe.DragAtPoint(x1, y1, x2, y2)
|
||||
|| Stop(command, "drag at failed");
|
||||
}
|
||||
if (p.Length < 5 || !string.Equals(p[1], "item", StringComparison.OrdinalIgnoreCase))
|
||||
return Stop(command, "usage: drag item <guid> element <datId> | drag item <guid> item <guid> | drag item <guid> outside <x> <y>");
|
||||
return Stop(command, "usage: drag item <guid> element <datId> | drag item <guid> item <guid> | drag item <guid> outside <x> <y> | drag at <x1> <y1> <x2> <y2>");
|
||||
if (!TryParseUInt(p[2], out uint sourceGuid)) return Stop(command, $"bad item guid '{p[2]}'");
|
||||
|
||||
string target = p[3].ToLowerInvariant();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue