Distinguish obstructed native picks from grabbed detours
This commit is contained in:
@@ -62,7 +62,13 @@ function LiftMergeRoute([int]$Stage,[string]$Name,$Board,[int]$SourceCount=0,[in
|
||||
Check "$Name-unsafe-endpoint-board-unchanged" ($null-ne$actual-and(Same $board $actual)) 'No native touch: the complete revealed board, counts and manual pose remain exact'
|
||||
return [pscustomobject]@{State=$unchanged;Before=$board;SourceId=$id}
|
||||
}
|
||||
$confirmed=Save "$Name-first-hit-before"
|
||||
Check "$Name-current-source-projection" (Same $board (Board $confirmed $Stage)) 'The intended ID uses the exact currently confirmed board and manual projection'
|
||||
$after=NativeMoveAndHold $Name $board $id $end
|
||||
if(IsNativeOrbitMiss $confirmed $after $Stage){
|
||||
$commands.Add(@{command='Actual first-hit miss: background orbit only, never a grabbed detour or merge';intendedSourceId=$id;utc=[DateTime]::UtcNow.ToString('o')})
|
||||
return [pscustomobject]@{State=$after;Before=$board;BeforeState=$confirmed;SourceId=$id;Outcome='MissedGrabOrbit'}
|
||||
}
|
||||
$actual=Board $after $Stage;if(!$actual){$actual=$after.latestFreePlay}
|
||||
Check "$Name-detour-manual-camera-preserved" (Same $board.camera $actual.camera) 'Every detour outcome retains the exact confirmed manual pose'
|
||||
if($actual.groups.Count-lt$board.groups.Count){AssertNativeMerge $Name $board $actual $id $TargetCount;return [pscustomobject]@{State=$after;Before=$board;SourceId=$id}}
|
||||
@@ -97,6 +103,13 @@ function MergeReal([int]$Stage,[string]$Name,[int]$SourceCount=0,[int]$TargetCou
|
||||
$routed=LiftMergeRoute $Stage "$Name-upward-route" $board $SourceCount $TargetCount
|
||||
if(!$routed){break}
|
||||
$routedBoard=Board $routed.State $Stage
|
||||
if($routed.Outcome-eq'MissedGrabOrbit'){
|
||||
Check "$Name-actual-first-hit-miss-only" (IsNativeOrbitMiss $routed.BeforeState $routed.State $Stage) 'Actual board and all independent records unchanged; only the expected clamped UP120 manual orbit occurred'
|
||||
$unchanged=$routed.State|ConvertTo-Json -Depth 20|ConvertFrom-Json
|
||||
(Board $unchanged $Stage).camera=(Board $before $Stage).camera
|
||||
Check "$Name-miss-global-records-unmodified" (Same $before $unchanged) 'Reveal and missed pointer input preserve the whole original save except this stage manual view'
|
||||
$board=$routedBoard;continue
|
||||
}
|
||||
if(!$routedBoard-or$routedBoard.groups.Count-lt$routed.Before.groups.Count){
|
||||
$actual=if($routedBoard){$routedBoard}else{$routed.State.latestFreePlay}
|
||||
if(!$routedBoard){Check "$Name-route-completed-stage" ($routed.State.completedStageIds-contains$Stage-and$actual.sourceStageId-eq$Stage) 'A missing puzzle requires actual completion and its own free-play board'}
|
||||
|
||||
Reference in New Issue
Block a user