fix(interaction): close selection lifecycle review gaps

Bind queued actions and pending inventory requests to exact live incarnations, separate optimistic placement from authoritative responses, and serialize retail-style inventory ownership across UI surfaces.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-21 09:01:02 +02:00
parent d2bb5af453
commit 5acc3f01cf
23 changed files with 2635 additions and 168 deletions

View file

@ -85,6 +85,27 @@ public sealed class MoveToManagerCompletionSeamTests
Assert.Empty(h.MoveToCompleteCalls);
}
[Fact]
public void CancelMoveTo_FiresCancellationCompanionOnlyForAnActiveMove()
{
var h = new MoveToManagerHarness();
var cancellations = new List<WeenieError>();
h.Manager.MoveToCancelled = cancellations.Add;
h.Manager.CancelMoveTo(WeenieError.ActionCancelled);
Assert.Empty(cancellations);
h.WorldPosition = new Position(1u, Vector3.Zero, Quaternion.Identity);
h.Manager.MoveToPosition(
new Position(1u, new Vector3(20f, 0f, 0f), Quaternion.Identity),
new MovementParameters { UseSpheres = false });
h.Manager.CancelMoveTo(WeenieError.ObjectGone);
h.Manager.CancelMoveTo(WeenieError.ActionCancelled);
Assert.Equal(new[] { WeenieError.ObjectGone }, cancellations);
Assert.Empty(h.MoveToCompleteCalls);
}
[Fact]
public void StickyCompletion_FiresMoveToComplete_AfterStickToHandoff()
{