Native saved-motion scope comparator (local preparation)
Frozen production target: b10b28cefd1d0794073ba241a0c8de9a83e85f68.
This fresh sibling adapts ../scenario-spacing-oracle-8bf7607-20260913/oracle.
That directory's name describes ancestry; its reviewed build-b10-01 targets b10.
The predecessor scripts, source, fixture, binaries and receipts remain untouched.
No compilation, oracle execution, GUI action, native checkpoint edit, commit or publication was performed in this preparation. PowerShell parser inspection passed; copied exact Rust helpers/main behavior were mechanically checked unchanged except early dispatch into two new modes. Rust self-checks are prepared, not yet executed.
Scope and independent inputs
scoped-motion BASE ACTUAL OUT VIEW_UUID TARGET_UUID FIELD DIRECTION admits both source files using the existing frozen incident loader. FIELD is exactly message.send_y (direct occurrence target) or lane.x (lifeline target); DIRECTION is exactly increase or decrease. Choose view, target, field and direction independently before reading the saved result. Both baseline and actual must contain exactly one matching target in the selected saved Scenario view. No coordinate insertion or duplicate target is permitted.
The comparator reads the selected before/after coordinate and requires finite, bounded endpoints and a finite, strictly correctly signed delta. It clones Actual, restores only that selected coordinate to Baseline's original value, and compares the entire canonical serialized Project against Baseline. Every other scalar, signed zero, array order, semantic value, address and saved layout must remain exact. Canonicalization sorts object keys only. Admission failure is fatal.
Success reports coordinate scope and direction accepted and all other Project values exact. The endpoint/delta and float bits are explicitly observed values; independently_exact_final_coordinate is always false. There is no constructed exact expected endpoint and no full_project_exact claim in scoped mode. This check alone cannot establish drag distance, visual pointer tracking, zoom independence, native event packet coordinates, runtime Scene, camera or history behavior. Combine it with independent native visual tracking at two zooms and exact same comparisons for Undo/Redo/reopen. Existing controller/core tests retain predetermined fractional arithmetic evidence; mounted/App tests cover integer displacement and transaction behavior.
The copied same, repair-c, lane, message, and self-check Rust paths retain their existing exact semantics. Exact lane/message require an independently predetermined final coordinate. Never feed them a value learned from Actual.
motion-self-check BASE OUT requires the byte-exact embedded incident fixture. It prepares positive fractional motion for both fields and both directions and refusal probes for no-op, opposite motion, NaN/infinities, missing/duplicate targets, wrong view/target, additional changes, semantic edits, array reorder, unrelated signed zero, invalid fields/directions, and malformed baseline coordinates. In-memory malformed probes test the core independently of loader rejection. self-check remains separate so original exact-mode evidence stays distinct.
Binding and proposed commands
Build/check use new scenario_native_motion_oracle_build_v1 / scenario_native_motion_oracle_run_v1 schemas, so an older executable receipt cannot be reused. All predecessor source/helper, five-stage native GUI gate, desktop-to-core-to-serde Cargo fingerprint, compiler/linker, dependency/import library, DLL, before/after manifest and immutable output guards are retained. The current oracle paths must be present exactly once in the build source records. preparation-manifest.json records preparation inputs and hashes; it is not build or native acceptance.
Review these commands before running them. Pure script guard checks do not compile or run the oracle:
$root = 'C:/Users/User/Documents/Git/ARCADIA-Studio'
$motion = "$root/.local/scenario-native-motion-oracle-b10-20260913"
& "$motion/oracle/build.ps1" -ValidateOnly
& "$motion/oracle/check.ps1" -ValidateOnly
& "$motion/oracle/build.ps1" `
-SourcePin 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' `
-Gate "$root/.local/scenario-validation-gates-b10b28c-20260913" `
-NativeVerifier "$root/.local/scenario-validation-native-b10b28c-20260913/verify.ps1" `
-NativeVerifierSha256 '8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d' `
-RuntimeDll "$root/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin/libunwind.dll" `
-CoreRlib "$root/target/debug/deps/liboa_core-3835d3237ee22542.rlib" `
-SerdeJsonRlib "$root/target/debug/deps/libserde_json-39fc764f03e68759.rlib" `
-WindowsImportLibDirectory "$root/.local/toolchain/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/windows_x86_64_gnullvm-0.52.6/lib" `
-Output "$motion/build-b10-01"
Those dependency paths came from the existing b10 comparator receipt; fresh build admission must still pass every binding. After reviewing the new build and its actual hashes, supply them explicitly:
$bound = @{ SourcePin='b10b28cefd1d0794073ba241a0c8de9a83e85f68'; OracleExe="$motion/build-b10-01/incident-source-oracle.exe"; OracleSha256=$ReviewedNewExeHash; BuildReceipt="$motion/build-b10-01/build-receipt.json"; BuildReceiptSha256=$ReviewedNewReceiptHash }
& "$motion/oracle/check.ps1" @bound -Mode self-check -Baseline "$motion/incident-workspace.arcadia" -Output "$motion/exact-self-check-01"
& "$motion/oracle/check.ps1" @bound -Mode motion-self-check -Baseline "$motion/incident-workspace.arcadia" -Output "$motion/motion-self-check-01"
& "$motion/oracle/check.ps1" @bound -Mode scoped-motion -Baseline $BeforeMessage -Actual $AfterMessage -View '70200000-0000-4000-8000-000000000040' -Target '70200000-0000-4000-8000-000000000021' -Field message.send_y -Direction increase -Output $FreshMessageEvidence
& "$motion/oracle/check.ps1" @bound -Mode scoped-motion -Baseline $BeforeLane -Actual $AfterLane -View '70200000-0000-4000-8000-000000000040' -Target '70200000-0000-4000-8000-000000000012' -Field lane.x -Direction increase -Output $FreshLaneEvidence
& "$motion/oracle/check.ps1" @bound -Mode same -Baseline $ImmutableCheckpoint -Actual $UndoRedoOrReopenCheckpoint -Output $FreshExactEvidence
The example increase direction is a planned downward/rightward action, not a discovered result. Use decrease for independently planned upward/leftward action. Preserve all outputs and failed runs; select fresh output directories on reruns.