diff --git a/SVSim.BattleNode/Sessions/Dispatch/Handlers/PlayActionsHandler.cs b/SVSim.BattleNode/Sessions/Dispatch/Handlers/PlayActionsHandler.cs
index 9f22097..6d76df4 100644
--- a/SVSim.BattleNode/Sessions/Dispatch/Handlers/PlayActionsHandler.cs
+++ b/SVSim.BattleNode/Sessions/Dispatch/Handlers/PlayActionsHandler.cs
@@ -5,8 +5,8 @@ namespace SVSim.BattleNode.Sessions.Dispatch.Handlers;
/// PvP PlayActions translator (vanilla deck-card slice). Synthesizes the opponent-facing
/// knownList from the sender's idx->cardId map + the orderList move op, renames targetList ->
-/// oppoTargetList, drops orderList, consumes keyAction. Token plays (idx>deck) degrade to
-/// {playIdx,type} with a debug log. Scripted/Bot drop (no rule).
+/// oppoTargetList, drops orderList, consumes keyAction. Token plays (idx>deck) degrade silently to
+/// {playIdx,type} (no knownList). Scripted/Bot drop (no rule).
internal sealed class PlayActionsHandler : IFrameHandler
{
public IReadOnlyList Handle(FrameDispatchContext ctx)
diff --git a/SVSim.BattleNode/Sessions/Dispatch/KnownListBuilder.cs b/SVSim.BattleNode/Sessions/Dispatch/KnownListBuilder.cs
index 7735d8f..c0e3084 100644
--- a/SVSim.BattleNode/Sessions/Dispatch/KnownListBuilder.cs
+++ b/SVSim.BattleNode/Sessions/Dispatch/KnownListBuilder.cs
@@ -20,8 +20,11 @@ internal static class KnownListBuilder
return new KnownCardEntry(Idx: playIdx, CardId: cardId, To: to.Value, Spellboost: 0, AttachTarget: "");
}
- /// The to place-state of the move op whose idx list contains
- /// , or null if absent.
+ /// The to place-state of the FIRST move op whose idx list contains
+ /// (the played card's own move; later add/alter ops are the deferred
+ /// token slice), or null if absent. NOTE: the sender-side to is passed through verbatim —
+ /// for the vanilla slice we assume send-side and recv-side place-state codes match, pending
+ /// recv-capture confirmation.
public static int? ExtractMoveTo(object? orderList, int playIdx)
{
if (orderList is not IEnumerable