diff --git a/.gitattributes b/.gitattributes index 9e3c6e61..95c59b8f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -13,6 +13,7 @@ *.jpg binary *.zip binary harness/scenario-selection-evidence-20260924/** -text whitespace=cr-at-eol +harness/scenario-group-spacing-evidence-20260924/** -text whitespace=cr-at-eol # Exact source/recovery oracles and archived ledgers retain their measured bytes. # Keep ordinary text diffs; only disable checkout/check-in newline conversion. diff --git a/harness/scenario-group-spacing-20260924.md b/harness/scenario-group-spacing-20260924.md new file mode 100644 index 00000000..850cb3c7 --- /dev/null +++ b/harness/scenario-group-spacing-20260924.md @@ -0,0 +1,76 @@ +# Saved Scenario group spacing + +Branch-specific continuation of Scenario selection, tracked in [Gitea #29](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/29). Final source `8d6fac4701933c7ada13cc7e6e07060662aa7465`; spacing operation logic is unchanged from `3b113e5316724eca001cd92c5b8efed0a48ccc86`. Intervening `67534ce4a5fab29cb69b461f00d447eca2e7d12b` and `4a27c8ef0b8f4954e208fdfda5efd2b41c240577` change tests only; final 8d6fac47 revises four help/refusal/menu text locations. This work is outside the frozen #37 Windows prerelease and does not complete #29. + +## Implemented behavior + +In a supported saved Scenario view, dragging a selected lifeline header moves the selected local lifelines horizontally; dragging a selected message body or label moves the selected local messages vertically. A group must contain only rendered local members of one kind. Pressing any selected member starts the whole-group operation on that first press and preserves the existing primary. Message groups may span local operands without changing their parent or semantic order. + +Each member moves from its own original displayed coordinate by the common world-space delta. The preview retains the complete selection and primary, shows the count, and reports geometry refusals. Release prepares one batch and commits model/source together through Document. Semantic order, unselected presentation records and other views remain untouched; Undo/Redo use the normal single transaction. + +A stationary plain click collapses a group to the clicked member even when that group cannot move. Mixed or unsupported groups retain their complete selection and refuse actual motion; no eligible subset is moved. The three-pixel group threshold is Euclidean in screen space. After crossing it, a supported group's off-axis movement or return to origin is a no-op that retains selection and history. An ineligible group refuses the whole motion even after returning to origin. Escape cancels the captured gesture. + +Admission checks the complete Scenario representation/visit Context, camera lifetime, selection generation, session token and captured full Snapshot before effects. Current terminal or failed-start input retires its lifetime; old packets cannot cancel a newer session. Source-update failure leaves the accepted model/source/history and stored camera unchanged. Ordinary singleton spacing remains supported. + +This is presentation movement. The separate [semantic group reorder policy](scenario-group-reorder-policy-20260924.md) still governs sequence reorder; its user-facing gesture and destination design remain unresolved. No saved-view semantic reorder arm is introduced. + +## Review and first gate + +Independent implementation review found a click regression: immediate rejection of mixed-group spacing prevented stationary click-to-collapse. The corrected controller retains a full-snapshot click session, using the pressed singleton only as an unchanged display/hit/camera witness. Its retained group refusal prevents any partial preparation; stationary Finish collapses, crossed motion refuses. The correction and frozen pure planner received static reinspection with no unresolved material finding. The scoped review is retained beside the evidence; static review is distinct from runtime acceptance. + +The first Scenario gate at `3b113e53` closed with exit 101: **286 passed, 3 failed, 1 ignored**, with all 811 captured inputs unchanged. Preserve that run as a failure. The three failed tests concerned a literal lane oracle that assumed an order for randomly generated IDs, a synthetic packet that omitted current selection generation, and an expected direct Collapse message superseded by the captured spacing Finish path. + +Test-only correction `67534ce4` explicitly authors the initial geometry for the literal oracle, captures the current generation, and checks the new event path while retaining actual selection outcomes. Independent review confirmed that exact Project/source, primary/set, camera/visit, history and reopen assertions remain; pure tests retain missing-override coverage. No production fix is attributed to this test-only commit. + +Scenario repeat `group-spacing-scenario-2` at **67534ce4** passed **289 tests, zero failed, one ignored**, exit 0 with all 811 captured inputs unchanged. Strict lint `group-spacing-clippy-1` at that source then failed on two redundant `f64::from` conversions in the test oracle. Commit 4a27c8ef adds only explicit `f32` types to the two literal starting-coordinate variables. Values 148, 240, 160 and 400 are exact in both formats; promotion back to f64 preserves the exact prior addition and final f32 cast. Independent review found numeric equivalence and no production change. Final 8d6fac47 distinguishes unavailable semantic group reordering/removal from available saved spacing and adds a saved-group drag hint; it changes no operation admission or command path. Reusing the 67534ce4 executed-test evidence alongside final-source all-target lint/build/native evidence is proportionate; **the 289 tests were not executed at 4a27c8ef or 8d6fac47**. + +## Verification record + +| Evidence | Closed result | +| --- | --- | +| Scenario repeat at `67534ce4` | 289 passed, 0 failed, 1 ignored; closed exit 0, unchanged 811-input capture and exact source proof retained in the evidence package. | +| Formatting at `4a27c8ef` | `group-spacing-format-3` passed, closed exit 0 with unchanged inputs. | +| Strict desktop lint at `4a27c8ef` | `group-spacing-clippy-2` passed, closed exit 0 with unchanged inputs. | +| Formatting at `8d6fac47` | `group-spacing-format-4` passed, closed exit 0 with unchanged inputs. | +| Windows Studio/CLI build at `8d6fac47` | `group-spacing-build-1` passed, exit 0, 811 unchanged inputs; both executable artifacts pinned. | +| Strict desktop lint at `8d6fac47` | `group-spacing-clippy-3` passed, exit 0, 811 unchanged inputs. | +| Native saved-group exercise at `8d6fac47` | Two fresh processes, normal exits 0 and empty logs; nine run-1 saved snapshots and one fresh-process reopened snapshot pass exact declared phases. | +| Portable evidence | [Package index and replay commands](scenario-group-spacing-evidence-20260924/README.md); raw failed gates, old-CLI preflight and all native captures retained. | + +The passing Scenario filter includes pure whole-Project transformations, both pressed members, deterministic command order, local cross-operand groups, typed/mixed/foreign/latent refusal, simultaneous call/reply and lane geometry, zero/subprecision no-op, exact source Undo/Redo/reopen, stale input and selection ABA, source-failure atomicity, and mounted modifier/input coverage. Filters overlap and must not be summed as unique tests; the existing timing diagnostic remains ignored. + +## Native observations and source checks + +Windows 11, existing user profile, maximized 1605×872 window, actual-size 100% during measured movements. Both isolated processes use the closed build's Studio executable (119,703,552 bytes, SHA-256 `e74342f3e06a28f91d378a429661fc88e5b009ce60549b3a2611160d48d16cdc`) with `libunwind.dll`, a system-only PATH and an otherwise empty working directory. The matching current CLI validates all three immutable fixtures with exit 0 and only three expected unallocated-activity advisory warnings. Preflight 1 used an obsolete CLI lacking saved-layout syntax and failed; it remains historical evidence, not a current-source failure. + +The original fixture has three local messages and lanes in two saved views. Run 1 selected Gamma then contextually added Alpha, making Alpha primary. Dragging nonprimary Gamma by +24 screen/world Y moved both selected messages: A Alpha 160→184 and Gamma 360→384; Beta stayed 260. One Undo returned the entire file to baseline bytes; one Redo restored both positions. A horizontal-only message drag retained the full group and made no source edit. + +Selecting Intake and adding Review made Review primary. Dragging nonprimary Intake +32 X changed A Intake 140→172 and Review 400→432; Archive stayed 660. One Undo reverted this whole lane edit. A vertical-only lane drag preserved the group and available Redo; Redo restored both lanes. A→B→A navigation showed B's unchanged spacing and A's edits; the group reduced to the visible Review singleton, not an empty selection. Semantic Alpha/Beta/Gamma order and all B records remained byte-identical. + +A mixed Alpha/Intake selection refused message-body and lane-header drags with explicit feedback and both members retained. Stationary message and header clicks each collapsed the mixed group correctly. Dragging a supported lane group outside the canvas cancelled the whole edit and retained selection. Final Save exactly matched the declared combined phase. Run 2 copied that actual saved source, opened it in a fresh process, selected saved A and actual size, visually retained both edits, and saved the same bytes again. Both processes closed through Alt+F4 with exit 0, empty stdout/stderr and unchanged immutable inputs. + +The whole-source oracle permits only exact Decimal-equivalent spelling of the four predeclared changed A coordinate tokens (for example `184.0` versus `184`); it has no numeric tolerance. Every other byte must match the intended phase. Final saved source is 3,554 bytes, SHA-256 `360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5`. Original expected fixtures were never rewritten from observed output. + +Native selection used contextual Add, not held Shift; mounted modifier tests remain separate evidence. Native Escape during a held drag, out-and-back drag, dirty Properties, stale packets and intermediate preview frames were not exercised. Labels remain ellipsized, and the narrowed Review→Archive gap lets Beta's white label background obscure a short section of Archive's lifeline. Names remain identifiable and semantic/source checks pass; broad readability/accessibility acceptance is not claimed. Initial navigation/focus retries, one disallowed JavaScript eval and an undeclared local binding error are tool/harness recovery history, not asserted product failures. Raw captures preserve the actual observations; filename labels alone are not assertions. + +## Reproduction + +Use a Windows checkout at the stated source with the recorded GNU/LLVM toolchain and matching dependency cache. The first gate used `stable-x86_64-pc-windows-gnullvm`, `CARGO_BUILD_JOBS=1`, `CARGO_INCREMENTAL=0`, and the captured Cargo home/target directory. Retain the complete environment receipt with final results. Linux checks remain excluded for this prerelease workflow. + +The first Scenario command, also suitable for the corrected-source repeat, is: + +```powershell +cargo test -p oa-desktop scenario --message-format=json -- --nocapture +``` + +Additional completed gate commands: + +```powershell +cargo fmt --all -- --check +cargo clippy -p oa-desktop --all-targets --message-format=json -- -D warnings +cargo build -p oa-desktop -p oa-cli --message-format=json +``` + +## Limits + +This increment does not provide automatic-view group semantic reorder, arbitrary mixed-group movement, referenced-definition movement, aggregate removal, or complete Scenario authoring/accessibility acceptance. Unsupported or fallback geometry cannot be edited through spacing. The native observations above establish only the stated bounded workflows. This is branch-specific contribution evidence; no combined integration, new release or full-workspace gate is claimed. Current prerelease #37 is separately delivered and excludes this work. diff --git a/harness/scenario-group-spacing-evidence-20260924/README.md b/harness/scenario-group-spacing-evidence-20260924/README.md new file mode 100644 index 00000000..55f74214 --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/README.md @@ -0,0 +1,21 @@ +# Saved Scenario group spacing evidence + +Branch-specific evidence for [the implementation report](../scenario-group-spacing-20260924.md). Executed Scenario tests belong to `67534ce4`; final lint, format, Studio/CLI build and native runs belong to `8d6fac47`. The report explains the intervening test annotations and UI text changes. This is not combined integration or release acceptance. + +| Archive | Bytes | SHA-256 | +| --- | ---: | --- | +| `checks/evidence.zip` | 12897498 | `d3de224502a2b7f8236d2ad82af6d6c57bb3a349468aebeea7369c3c3c267342` | +| `native/native-evidence.zip` | 6069072 | `27e0e189053fdfdbfcecd8c91ae718849448b090aab557afc7d9445af1ceaba8` | + +Run from a checkout with Python 3.11+; these checks need no Cargo, Git, network or installed Studio: + +```powershell +python -B harness/scenario-group-spacing-evidence-20260924/checks/verify.py +python -B harness/scenario-group-spacing-evidence-20260924/native/verify.py harness/scenario-group-spacing-evidence-20260924/native +``` + +Checks contain ten closed runs, two preserved failures, ten exact source proofs and four deduplicated source capsules. Explicit run names are `group-spacing-format-1`, `group-spacing-scenario-1`, `group-spacing-format-2`, `group-spacing-scenario-2`, `group-spacing-clippy-1`, `group-spacing-format-3`, `group-spacing-clippy-2`, `group-spacing-format-4`, `group-spacing-build-1` and `group-spacing-clippy-3`. The reused checks helper README's selection example/title and manifest kind are historical schema names; the actual run inventory and report govern this package. Failed-run consistency is not a passing test result. + +Native evidence retains both normal-exit processes, all 67 captures, actual saved snapshots, immutable expected fixtures, current and obsolete-CLI preflights, receipts and original helpers. The helpers' archived preparation notes saying “not run” describe their original preparation stage; the subsequent closed receipts establish execution. Executable/DLL bytes are excluded explicitly, with exact pins and source/build bindings retained. This is a portable evidence archive, not a runnable distribution. The offline checker independently compares actual saved source with declared phases and validates fresh-reopen provenance; it does not judge visual usability or rehash excluded binaries. + +The [independent review](review.md) distinguishes source review, native observations and package consistency. Reproduction/environment and visual/input limitations are in the implementation report. Raw screenshot labels are identifiers, not assertions (run-1 capture35 clears the group to one visible member, not zero selection). diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/README.md b/harness/scenario-group-spacing-evidence-20260924/checks/README.md new file mode 100644 index 00000000..4ce6c714 --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/checks/README.md @@ -0,0 +1,14 @@ +# Scenario selection captured checks + +These tools package explicitly named, completed runs from `CHECKOUT/.local/scenario-group-gates` without executing archived source or running Cargo. Adapted only in input-directory and manifest-kind names from the published prerelease Connection/Route evidence tools at `93d2a6f9af40061bf92cd81ba33d5648d0181cb1`. + +```powershell +python -B prepare.py --root CHECKOUT --runs selection-scenario-1 selection-scenario-2 selection-format-1 --output NEW_DIRECTORY +python -B NEW_DIRECTORY/verify.py +``` + +The manifest is authoritative for the selected runs. Failed runs remain failures: archive consistency is not a test pass. Every raw stream and receipt retains its original bytes. Identical input maps and ZIPs are stored by hash; the logical-file map preserves their original run paths. Historical capture helpers and exact source comparators are included as data, never executed by verification. + +Source proofs compare every captured input with a named Git commit; the offline package verifier checks those receipts and their pinned comparator identity but does not repeat the Git comparison. The captured HEAD and the named proof commit retain their respective meanings. The verifier checks archive inventory, hashes, input ZIP contents, process/command/result consistency and executable artifact relationships. It does not establish hermetic builds, native workflow acceptance, UI integration, or release acceptance. + +Use `--check-only` instead of `--output` for an in-memory consistency check. Existing output directories refuse. Python 3.11+ standard library is sufficient; `-B` avoids bytecode writes. diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/evidence.zip b/harness/scenario-group-spacing-evidence-20260924/checks/evidence.zip new file mode 100644 index 00000000..2aec8cee Binary files /dev/null and b/harness/scenario-group-spacing-evidence-20260924/checks/evidence.zip differ diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/files.json b/harness/scenario-group-spacing-evidence-20260924/checks/files.json new file mode 100644 index 00000000..f06e89d6 --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/checks/files.json @@ -0,0 +1,22 @@ +{ + "prepare.py": { + "bytes": 6308, + "sha256": "2d500f5d43a49893abb3936f880e61b8adc623531e26f0288983502e386894db" + }, + "verify.py": { + "bytes": 11436, + "sha256": "ea8e781003bec21f2ac4af23e21b68ca5639a98eb31505c10b2869f57565e917" + }, + "README.md": { + "bytes": 1641, + "sha256": "4c5c582cbdf02c8704b9add656d273c275b10eed87219131e3bba639a4c4bd8a" + }, + "manifest.json": { + "bytes": 28330, + "sha256": "42bfa9a3a0f62ab82efecff040851347411873bfcb670c214928841939cb6c16" + }, + "evidence.zip": { + "bytes": 12897498, + "sha256": "d3de224502a2b7f8236d2ad82af6d6c57bb3a349468aebeea7369c3c3c267342" + } +} diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/manifest.json b/harness/scenario-group-spacing-evidence-20260924/checks/manifest.json new file mode 100644 index 00000000..987a72b0 --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/checks/manifest.json @@ -0,0 +1,611 @@ +{ + "schema": 1, + "kind": "scenario-selection-cargo-gates", + "runs": { + "group-spacing-format-1": { + "command": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "head": "3b113e5316724eca001cd92c5b8efed0a48ccc86", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "3b113e5316724eca001cd92c5b8efed0a48ccc86", + "pin": { + "bytes": 601, + "sha256": "a177782dfa1c85efc817350537b965c11b40fdcec09fe01850442c86017289f5" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-scenario-1": { + "command": [ + "cargo", + "test", + "-p", + "oa-desktop", + "scenario", + "--message-format=json", + "--", + "--nocapture" + ], + "head": "3b113e5316724eca001cd92c5b8efed0a48ccc86", + "exitCode": 101, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "3b113e5316724eca001cd92c5b8efed0a48ccc86", + "pin": { + "bytes": 603, + "sha256": "3bd14b592fab993457a5770d1894f442d57103d662334994d8f7ed84ba08b3bc" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-format-2": { + "command": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "head": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "pin": { + "bytes": 601, + "sha256": "2a88c77c7275472a74ce3a97f8dfebc38c87793bfbee4388fe4c52b2345c73c8" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-scenario-2": { + "command": [ + "cargo", + "test", + "-p", + "oa-desktop", + "scenario", + "--message-format=json", + "--", + "--nocapture" + ], + "head": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "pin": { + "bytes": 603, + "sha256": "059b06d427f3bc1a505f0ff612d54df5da01a1545f49eff0842c2d92851e42dc" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-clippy-1": { + "command": [ + "cargo", + "clippy", + "-p", + "oa-desktop", + "--all-targets", + "--message-format=json", + "--", + "-D", + "warnings" + ], + "head": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "exitCode": 101, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "67534ce4a5fab29cb69b461f00d447eca2e7d12b", + "pin": { + "bytes": 601, + "sha256": "afd1a8066f2906ef5362dfb4a63b6d412e2e83b9461f14d7a00572ea40128c84" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-format-3": { + "command": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "head": "4a27c8ef0b8f4954e208fdfda5efd2b41c240577", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "4a27c8ef0b8f4954e208fdfda5efd2b41c240577", + "pin": { + "bytes": 601, + "sha256": "0232c97e7a02b7971ae078ed2d4c3257e56e42e6bb9f031e195c3e7f895d166a" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-clippy-2": { + "command": [ + "cargo", + "clippy", + "-p", + "oa-desktop", + "--all-targets", + "--message-format=json", + "--", + "-D", + "warnings" + ], + "head": "4a27c8ef0b8f4954e208fdfda5efd2b41c240577", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "4a27c8ef0b8f4954e208fdfda5efd2b41c240577", + "pin": { + "bytes": 601, + "sha256": "8ece8f2bf1e1ca5a5df2f5983a65573b046c84ddaa396906dc79269823fb698f" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-format-4": { + "command": [ + "cargo", + "fmt", + "--all", + "--", + "--check" + ], + "head": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "pin": { + "bytes": 601, + "sha256": "a303f7255ae967155885e704c842ba578e888d2f11a78b3cf95d6722ea357893" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-build-1": { + "command": [ + "cargo", + "build", + "-p", + "oa-desktop", + "-p", + "oa-cli", + "--message-format=json" + ], + "head": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "pin": { + "bytes": 600, + "sha256": "27a0e2d80704a592ba280b6079e985e2b52f0b1aedd6eb84b79fba8469be9e9d" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + }, + "group-spacing-clippy-3": { + "command": [ + "cargo", + "clippy", + "-p", + "oa-desktop", + "--all-targets", + "--message-format=json", + "--", + "-D", + "warnings" + ], + "head": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "exitCode": 0, + "inputCount": 811, + "helper": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "sourceProof": { + "commit": "8d6fac4701933c7ada13cc7e6e07060662aa7465", + "pin": { + "bytes": 601, + "sha256": "5932a0cba7607647967c84a8c8ac582bbfabc2e1c00b89242a14445924ea92a6" + }, + "comparator": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py" + } + } + }, + "captureHelpers": { + "gate.py": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "source-proof.py": "helpers/c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1.py" + }, + "logicalFiles": { + "cargo/group-spacing-build-1/inputs.json": "capsules/c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381.json", + "cargo/group-spacing-build-1/inputs.zip": "capsules/bd67f0bd33451482a69ae2972846c472f309393b378da34b004acbdbd89001e6.zip", + "cargo/group-spacing-build-1/process.json": "cargo/group-spacing-build-1/process.json", + "cargo/group-spacing-build-1/result.json": "cargo/group-spacing-build-1/result.json", + "cargo/group-spacing-build-1/source-proof.json": "cargo/group-spacing-build-1/source-proof.json", + "cargo/group-spacing-build-1/started.json": "cargo/group-spacing-build-1/started.json", + "cargo/group-spacing-build-1/stderr.log": "cargo/group-spacing-build-1/stderr.log", + "cargo/group-spacing-build-1/stdout.log": "cargo/group-spacing-build-1/stdout.log", + "cargo/group-spacing-clippy-1/inputs.json": "capsules/775bffd4103c646e5a854e67b1782eeadc529e6fb968695cd9f68e7dec584a0b.json", + "cargo/group-spacing-clippy-1/inputs.zip": "capsules/0965e5df5fc02fc861f5e7daee471f0cfc341ed35afb7c98a0fd3469843664ad.zip", + "cargo/group-spacing-clippy-1/process.json": "cargo/group-spacing-clippy-1/process.json", + "cargo/group-spacing-clippy-1/result.json": "cargo/group-spacing-clippy-1/result.json", + "cargo/group-spacing-clippy-1/source-proof.json": "cargo/group-spacing-clippy-1/source-proof.json", + "cargo/group-spacing-clippy-1/started.json": "cargo/group-spacing-clippy-1/started.json", + "cargo/group-spacing-clippy-1/stderr.log": "cargo/group-spacing-clippy-1/stderr.log", + "cargo/group-spacing-clippy-1/stdout.log": "cargo/group-spacing-clippy-1/stdout.log", + "cargo/group-spacing-clippy-2/inputs.json": "capsules/7b53a6a3fe17ddf8e212b071b598b1566eff54e5f6d4551ae9215dbb00bd0e95.json", + "cargo/group-spacing-clippy-2/inputs.zip": "capsules/9869cf9ab485d4ce5e80dc69f71a959d5e3d4bdc6b6f633c7148640455f3c217.zip", + "cargo/group-spacing-clippy-2/process.json": "cargo/group-spacing-clippy-2/process.json", + "cargo/group-spacing-clippy-2/result.json": "cargo/group-spacing-clippy-2/result.json", + "cargo/group-spacing-clippy-2/source-proof.json": "cargo/group-spacing-clippy-2/source-proof.json", + "cargo/group-spacing-clippy-2/started.json": "cargo/group-spacing-clippy-2/started.json", + "cargo/group-spacing-clippy-2/stderr.log": "cargo/group-spacing-clippy-2/stderr.log", + "cargo/group-spacing-clippy-2/stdout.log": "cargo/group-spacing-clippy-2/stdout.log", + "cargo/group-spacing-clippy-3/inputs.json": "capsules/c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381.json", + "cargo/group-spacing-clippy-3/inputs.zip": "capsules/bd67f0bd33451482a69ae2972846c472f309393b378da34b004acbdbd89001e6.zip", + "cargo/group-spacing-clippy-3/process.json": "cargo/group-spacing-clippy-3/process.json", + "cargo/group-spacing-clippy-3/result.json": "cargo/group-spacing-clippy-3/result.json", + "cargo/group-spacing-clippy-3/source-proof.json": "cargo/group-spacing-clippy-3/source-proof.json", + "cargo/group-spacing-clippy-3/started.json": "cargo/group-spacing-clippy-3/started.json", + "cargo/group-spacing-clippy-3/stderr.log": "cargo/group-spacing-clippy-3/stderr.log", + "cargo/group-spacing-clippy-3/stdout.log": "cargo/group-spacing-clippy-3/stdout.log", + "cargo/group-spacing-format-1/inputs.json": "capsules/68fb2028446c3760010886a1cb839224616672d5916d467e6d4e177b8d07e2a0.json", + "cargo/group-spacing-format-1/inputs.zip": "capsules/cfe694b469443b2922d2a76400d306a54bf179426d2c318ba6ccfdd26441959a.zip", + "cargo/group-spacing-format-1/process.json": "cargo/group-spacing-format-1/process.json", + "cargo/group-spacing-format-1/result.json": "cargo/group-spacing-format-1/result.json", + "cargo/group-spacing-format-1/source-proof.json": "cargo/group-spacing-format-1/source-proof.json", + "cargo/group-spacing-format-1/started.json": "cargo/group-spacing-format-1/started.json", + "cargo/group-spacing-format-1/stderr.log": "cargo/group-spacing-format-1/stderr.log", + "cargo/group-spacing-format-1/stdout.log": "cargo/group-spacing-format-1/stdout.log", + "cargo/group-spacing-format-2/inputs.json": "capsules/775bffd4103c646e5a854e67b1782eeadc529e6fb968695cd9f68e7dec584a0b.json", + "cargo/group-spacing-format-2/inputs.zip": "capsules/0965e5df5fc02fc861f5e7daee471f0cfc341ed35afb7c98a0fd3469843664ad.zip", + "cargo/group-spacing-format-2/process.json": "cargo/group-spacing-format-2/process.json", + "cargo/group-spacing-format-2/result.json": "cargo/group-spacing-format-2/result.json", + "cargo/group-spacing-format-2/source-proof.json": "cargo/group-spacing-format-2/source-proof.json", + "cargo/group-spacing-format-2/started.json": "cargo/group-spacing-format-2/started.json", + "cargo/group-spacing-format-2/stderr.log": "cargo/group-spacing-format-2/stderr.log", + "cargo/group-spacing-format-2/stdout.log": "cargo/group-spacing-format-2/stdout.log", + "cargo/group-spacing-format-3/inputs.json": "capsules/7b53a6a3fe17ddf8e212b071b598b1566eff54e5f6d4551ae9215dbb00bd0e95.json", + "cargo/group-spacing-format-3/inputs.zip": "capsules/9869cf9ab485d4ce5e80dc69f71a959d5e3d4bdc6b6f633c7148640455f3c217.zip", + "cargo/group-spacing-format-3/process.json": "cargo/group-spacing-format-3/process.json", + "cargo/group-spacing-format-3/result.json": "cargo/group-spacing-format-3/result.json", + "cargo/group-spacing-format-3/source-proof.json": "cargo/group-spacing-format-3/source-proof.json", + "cargo/group-spacing-format-3/started.json": "cargo/group-spacing-format-3/started.json", + "cargo/group-spacing-format-3/stderr.log": "cargo/group-spacing-format-3/stderr.log", + "cargo/group-spacing-format-3/stdout.log": "cargo/group-spacing-format-3/stdout.log", + "cargo/group-spacing-format-4/inputs.json": "capsules/c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381.json", + "cargo/group-spacing-format-4/inputs.zip": "capsules/bd67f0bd33451482a69ae2972846c472f309393b378da34b004acbdbd89001e6.zip", + "cargo/group-spacing-format-4/process.json": "cargo/group-spacing-format-4/process.json", + "cargo/group-spacing-format-4/result.json": "cargo/group-spacing-format-4/result.json", + "cargo/group-spacing-format-4/source-proof.json": "cargo/group-spacing-format-4/source-proof.json", + "cargo/group-spacing-format-4/started.json": "cargo/group-spacing-format-4/started.json", + "cargo/group-spacing-format-4/stderr.log": "cargo/group-spacing-format-4/stderr.log", + "cargo/group-spacing-format-4/stdout.log": "cargo/group-spacing-format-4/stdout.log", + "cargo/group-spacing-scenario-1/inputs.json": "capsules/68fb2028446c3760010886a1cb839224616672d5916d467e6d4e177b8d07e2a0.json", + "cargo/group-spacing-scenario-1/inputs.zip": "capsules/cfe694b469443b2922d2a76400d306a54bf179426d2c318ba6ccfdd26441959a.zip", + "cargo/group-spacing-scenario-1/process.json": "cargo/group-spacing-scenario-1/process.json", + "cargo/group-spacing-scenario-1/result.json": "cargo/group-spacing-scenario-1/result.json", + "cargo/group-spacing-scenario-1/source-proof.json": "cargo/group-spacing-scenario-1/source-proof.json", + "cargo/group-spacing-scenario-1/started.json": "cargo/group-spacing-scenario-1/started.json", + "cargo/group-spacing-scenario-1/stderr.log": "cargo/group-spacing-scenario-1/stderr.log", + "cargo/group-spacing-scenario-1/stdout.log": "cargo/group-spacing-scenario-1/stdout.log", + "cargo/group-spacing-scenario-2/inputs.json": "capsules/775bffd4103c646e5a854e67b1782eeadc529e6fb968695cd9f68e7dec584a0b.json", + "cargo/group-spacing-scenario-2/inputs.zip": "capsules/0965e5df5fc02fc861f5e7daee471f0cfc341ed35afb7c98a0fd3469843664ad.zip", + "cargo/group-spacing-scenario-2/process.json": "cargo/group-spacing-scenario-2/process.json", + "cargo/group-spacing-scenario-2/result.json": "cargo/group-spacing-scenario-2/result.json", + "cargo/group-spacing-scenario-2/source-proof.json": "cargo/group-spacing-scenario-2/source-proof.json", + "cargo/group-spacing-scenario-2/started.json": "cargo/group-spacing-scenario-2/started.json", + "cargo/group-spacing-scenario-2/stderr.log": "cargo/group-spacing-scenario-2/stderr.log", + "cargo/group-spacing-scenario-2/stdout.log": "cargo/group-spacing-scenario-2/stdout.log", + "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py": "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py", + "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py": "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py", + "helpers/c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1.py": "helpers/c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1.py" + }, + "members": { + "capsules/0965e5df5fc02fc861f5e7daee471f0cfc341ed35afb7c98a0fd3469843664ad.zip": { + "bytes": 3246619, + "sha256": "0965e5df5fc02fc861f5e7daee471f0cfc341ed35afb7c98a0fd3469843664ad" + }, + "capsules/68fb2028446c3760010886a1cb839224616672d5916d467e6d4e177b8d07e2a0.json": { + "bytes": 136196, + "sha256": "68fb2028446c3760010886a1cb839224616672d5916d467e6d4e177b8d07e2a0" + }, + "capsules/775bffd4103c646e5a854e67b1782eeadc529e6fb968695cd9f68e7dec584a0b.json": { + "bytes": 136196, + "sha256": "775bffd4103c646e5a854e67b1782eeadc529e6fb968695cd9f68e7dec584a0b" + }, + "capsules/7b53a6a3fe17ddf8e212b071b598b1566eff54e5f6d4551ae9215dbb00bd0e95.json": { + "bytes": 136196, + "sha256": "7b53a6a3fe17ddf8e212b071b598b1566eff54e5f6d4551ae9215dbb00bd0e95" + }, + "capsules/9869cf9ab485d4ce5e80dc69f71a959d5e3d4bdc6b6f633c7148640455f3c217.zip": { + "bytes": 3246622, + "sha256": "9869cf9ab485d4ce5e80dc69f71a959d5e3d4bdc6b6f633c7148640455f3c217" + }, + "capsules/bd67f0bd33451482a69ae2972846c472f309393b378da34b004acbdbd89001e6.zip": { + "bytes": 3246686, + "sha256": "bd67f0bd33451482a69ae2972846c472f309393b378da34b004acbdbd89001e6" + }, + "capsules/c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381.json": { + "bytes": 136196, + "sha256": "c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381" + }, + "capsules/cfe694b469443b2922d2a76400d306a54bf179426d2c318ba6ccfdd26441959a.zip": { + "bytes": 3246346, + "sha256": "cfe694b469443b2922d2a76400d306a54bf179426d2c318ba6ccfdd26441959a" + }, + "cargo/group-spacing-build-1/process.json": { + "bytes": 153, + "sha256": "e04b54ec8ed3f28af0e21715462a1824cecb39ff08feff25fabc5ade6c7143d4" + }, + "cargo/group-spacing-build-1/result.json": { + "bytes": 4455, + "sha256": "0fc72640a3bbb4bc3743009fbc196d2b6f25f41cb2b6db4bb0cc8d5182638289" + }, + "cargo/group-spacing-build-1/source-proof.json": { + "bytes": 600, + "sha256": "27a0e2d80704a592ba280b6079e985e2b52f0b1aedd6eb84b79fba8469be9e9d" + }, + "cargo/group-spacing-build-1/started.json": { + "bytes": 1527, + "sha256": "b6438a7289b98d139b87168ce8a3800e3f4b77d3d77192dd816e117cc401a451" + }, + "cargo/group-spacing-build-1/stderr.log": { + "bytes": 199, + "sha256": "b69e70aaaff6ba2aa6abc8dc858968eccdfcaea7f71af664477548675c0538ee" + }, + "cargo/group-spacing-build-1/stdout.log": { + "bytes": 285564, + "sha256": "8dcb4708b37a826caf8f127183df013dd6dd43a4e92257aa39e1001dfb42cbec" + }, + "cargo/group-spacing-clippy-1/process.json": { + "bytes": 179, + "sha256": "f33cd462f337f293df9f5f1d8b543133c0292f674d805637edb889a5d0dc8bf0" + }, + "cargo/group-spacing-clippy-1/result.json": { + "bytes": 1961, + "sha256": "8fd72a2a7149498a2b392d7fd06d633817588625eee28b077e923027fe6314df" + }, + "cargo/group-spacing-clippy-1/source-proof.json": { + "bytes": 601, + "sha256": "afd1a8066f2906ef5362dfb4a63b6d412e2e83b9461f14d7a00572ea40128c84" + }, + "cargo/group-spacing-clippy-1/started.json": { + "bytes": 1563, + "sha256": "82bf44bf6ec5bf39408e9898f8ddcb561b59ed9df44a1835de1b1f34209bedd0" + }, + "cargo/group-spacing-clippy-1/stderr.log": { + "bytes": 164, + "sha256": "c2a1fb944bc1ae35fa3131726dd7a717a5cbd95a7d955cbc155e94bd79772c8a" + }, + "cargo/group-spacing-clippy-1/stdout.log": { + "bytes": 272239, + "sha256": "a9296b7e3c41f33f4cf1435e89a535d55f2dc27be38cef72b4c7cded398c5e99" + }, + "cargo/group-spacing-clippy-2/process.json": { + "bytes": 179, + "sha256": "e4a8b8e0cdb1c1ed837b64fb1accc71dc5569a418ed5cfe70d77e89e85f7740b" + }, + "cargo/group-spacing-clippy-2/result.json": { + "bytes": 1958, + "sha256": "74cfa66be75b6011d05ba016be1fa2365652ec012979d3ef17ec5c4c60b2301b" + }, + "cargo/group-spacing-clippy-2/source-proof.json": { + "bytes": 601, + "sha256": "8ece8f2bf1e1ca5a5df2f5983a65573b046c84ddaa396906dc79269823fb698f" + }, + "cargo/group-spacing-clippy-2/started.json": { + "bytes": 1563, + "sha256": "0f2a6bacc4a494ad3e753ed2608d0bd03c161fb27ac426378b4b237b3e059e8a" + }, + "cargo/group-spacing-clippy-2/stderr.log": { + "bytes": 134, + "sha256": "0eaa0a26ef167caa5fc820dac39622d5aae74e3048fb5dec488713638bb1ed08" + }, + "cargo/group-spacing-clippy-2/stdout.log": { + "bytes": 269431, + "sha256": "ed058495aca1b23078917c312823a8a55a488a0d51eb2a2a2d1029b0dc04aee0" + }, + "cargo/group-spacing-clippy-3/process.json": { + "bytes": 179, + "sha256": "b885c9043fa1163a1f82f47fc63ce4f8bc6f8f07dd261c0c8fcbc542fd3b983b" + }, + "cargo/group-spacing-clippy-3/result.json": { + "bytes": 1958, + "sha256": "4c84853553eaa155ed56ec313cddac59db1452e8d39424c41a0de52a2e023520" + }, + "cargo/group-spacing-clippy-3/source-proof.json": { + "bytes": 601, + "sha256": "5932a0cba7607647967c84a8c8ac582bbfabc2e1c00b89242a14445924ea92a6" + }, + "cargo/group-spacing-clippy-3/started.json": { + "bytes": 1563, + "sha256": "7bf0f106625864d432f8064645e692a1f635ede6bcb1f9d73e869cfcf33dfd26" + }, + "cargo/group-spacing-clippy-3/stderr.log": { + "bytes": 134, + "sha256": "44c893a9fb01c36a19bb50efb4135844cf54a67f0b63b871effdf20f0235c5ea" + }, + "cargo/group-spacing-clippy-3/stdout.log": { + "bytes": 269431, + "sha256": "89a806be408c3dae92647c6e6215d8597cd980e5926486787804f0d0a823ea37" + }, + "cargo/group-spacing-format-1/process.json": { + "bytes": 116, + "sha256": "27be7eb0aa17687d8a9db613084b89de8a2911151af8b3cea39066e136e55dbb" + }, + "cargo/group-spacing-format-1/result.json": { + "bytes": 1869, + "sha256": "461160515ff0551161c8f666976c7781f108a73d94346ab0b6a5b5cd944aab92" + }, + "cargo/group-spacing-format-1/source-proof.json": { + "bytes": 601, + "sha256": "a177782dfa1c85efc817350537b965c11b40fdcec09fe01850442c86017289f5" + }, + "cargo/group-spacing-format-1/started.json": { + "bytes": 1480, + "sha256": "ca53e726e096e24c6ce7501d622ddb32a6145385e4e6244b6e45a09ab2142533" + }, + "cargo/group-spacing-format-1/stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-1/stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-2/process.json": { + "bytes": 116, + "sha256": "048bd326f3e14074bbf620b4e94ea7cc6ee1ee7099bbb02c6fd7cd4828a4ed0e" + }, + "cargo/group-spacing-format-2/result.json": { + "bytes": 1869, + "sha256": "8c3e25b4c9270a65fa0b5b2ea0e819569a8f714baa73282ab49a40f604c475ad" + }, + "cargo/group-spacing-format-2/source-proof.json": { + "bytes": 601, + "sha256": "2a88c77c7275472a74ce3a97f8dfebc38c87793bfbee4388fe4c52b2345c73c8" + }, + "cargo/group-spacing-format-2/started.json": { + "bytes": 1480, + "sha256": "6c8e2f298186c70b1d5a06b68fb10530b70852278b65704b6bcf3de667872333" + }, + "cargo/group-spacing-format-2/stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-2/stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-3/process.json": { + "bytes": 116, + "sha256": "5a5957fa2bd4ee626f9442c680a59af4f5da200cd7d2c2c769ba8dfa8eda13a2" + }, + "cargo/group-spacing-format-3/result.json": { + "bytes": 1869, + "sha256": "1f9ccb94189574eb595fd4941985dd85592ca50fde65c5e89444b1e64d4230f6" + }, + "cargo/group-spacing-format-3/source-proof.json": { + "bytes": 601, + "sha256": "0232c97e7a02b7971ae078ed2d4c3257e56e42e6bb9f031e195c3e7f895d166a" + }, + "cargo/group-spacing-format-3/started.json": { + "bytes": 1480, + "sha256": "5c8f9417834a579bb4cbff7a25fb89f283a7d4563fca0cf9d9ed972a065dee3b" + }, + "cargo/group-spacing-format-3/stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-3/stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-4/process.json": { + "bytes": 116, + "sha256": "95e6cbf35c191284c49fba65aa6028382edaf3c146ee959223ec1c0269692474" + }, + "cargo/group-spacing-format-4/result.json": { + "bytes": 1869, + "sha256": "6c174fe42df8c36b78f48395bf5e5185e8d968212c0074afc2eb1e0305488f5e" + }, + "cargo/group-spacing-format-4/source-proof.json": { + "bytes": 601, + "sha256": "a303f7255ae967155885e704c842ba578e888d2f11a78b3cf95d6722ea357893" + }, + "cargo/group-spacing-format-4/started.json": { + "bytes": 1480, + "sha256": "c7c6eef0b25668b4a3850b13678b6742274382c2b8f83bf4a62bcc00e8386ffd" + }, + "cargo/group-spacing-format-4/stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-format-4/stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "cargo/group-spacing-scenario-1/process.json": { + "bytes": 169, + "sha256": "bfd663721b39df60de39c248fb053a67f364a6725bbb4a83227974519217c1e5" + }, + "cargo/group-spacing-scenario-1/result.json": { + "bytes": 3277, + "sha256": "a191bdc36a671f6c2a675d19870236cde7e86af2ce30651d2d499803b77c9c2b" + }, + "cargo/group-spacing-scenario-1/source-proof.json": { + "bytes": 603, + "sha256": "3bd14b592fab993457a5770d1894f442d57103d662334994d8f7ed84ba08b3bc" + }, + "cargo/group-spacing-scenario-1/started.json": { + "bytes": 1548, + "sha256": "e061e076acd292132f51c800856e0457a3d51f4519b15feb8187692eda780251" + }, + "cargo/group-spacing-scenario-1/stderr.log": { + "bytes": 8066, + "sha256": "8f09e83cb1970d3e72bd50813c8d4ad64a63ac0dd968dfcd190fdf5091f963fd" + }, + "cargo/group-spacing-scenario-1/stdout.log": { + "bytes": 329799, + "sha256": "3e1112c810ab2ba3d598fb05a0526a3596719629f82dcd503e1ceb4c275f7ebe" + }, + "cargo/group-spacing-scenario-2/process.json": { + "bytes": 169, + "sha256": "33a5142748cf6d90a3e99d07658110c091d6748d77b9ab436c81bfc8804e4079" + }, + "cargo/group-spacing-scenario-2/result.json": { + "bytes": 3273, + "sha256": "20c5b05b3819b84b875b388493588c471e742926288ea02f394b26908fef485a" + }, + "cargo/group-spacing-scenario-2/source-proof.json": { + "bytes": 603, + "sha256": "059b06d427f3bc1a505f0ff612d54df5da01a1545f49eff0842c2d92851e42dc" + }, + "cargo/group-spacing-scenario-2/started.json": { + "bytes": 1548, + "sha256": "54df040b57a3258bc78cc1acc3ec73bd0234fe468642304f48b154e45b286d6b" + }, + "cargo/group-spacing-scenario-2/stderr.log": { + "bytes": 626, + "sha256": "c88cd5be27a7aae243f25d1ff24766313f7d97a32df7fac17da95a99f8574637" + }, + "cargo/group-spacing-scenario-2/stdout.log": { + "bytes": 329364, + "sha256": "22f9cbc1fa2dd02a653aa2eab1741a1f3198ae32a2495aa2fbf4a6b172e84a9e" + }, + "comparators/7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a.py": { + "bytes": 10094, + "sha256": "7805832d5f563ab2d7a50dd3de700792b5d6f459c68f7b1d8bcfcc9800fa0c3a" + }, + "helpers/3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2.py": { + "bytes": 3778, + "sha256": "3e4cd38fd3807a4010a5a7102354f9139cab236ca55163c96090e416161e5fd2" + }, + "helpers/c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1.py": { + "bytes": 1396, + "sha256": "c86f51d9b8465341dab73d045923ec306b15ebabf7c97b81beac7afe73bd72a1" + } + } +} diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/prepare.py b/harness/scenario-group-spacing-evidence-20260924/checks/prepare.py new file mode 100644 index 00000000..10667b2b --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/checks/prepare.py @@ -0,0 +1,110 @@ +"""Package explicitly selected closed gate captures without running Cargo.""" +from pathlib import Path +import argparse +import json +import zipfile +from verify import RAW_FILES, pin, parsed, need, run_name, verify_data, verify_package + +HERE = Path(__file__).resolve().parent + + +def collect(root, runs, helpers, comparators=()): + gates = root / ".local/scenario-group-gates" + candidates = [gates / name for name in ("gate.py", "source-proof.py")] + helpers + helper_bytes = [path.read_bytes() for path in candidates] + comparator_paths = [root / ".local/process-source-evidence-tools/verify.py", *comparators] + comparator_bytes = [path.read_bytes() for path in comparator_paths if path.is_file()] + payload, logical, specs = {}, {}, {} + def add(name, data): + stored = ("capsules/" + pin(data)["sha256"] + Path(name).suffix + if name.rsplit("/", 1)[1] in {"inputs.json", "inputs.zip"} else name) + need(stored not in payload or payload[stored] == data, "deduplication collision") + payload[stored] = data + logical[name] = stored + helper_catalog = {} + for name, data in zip(("gate.py", "source-proof.py"), helper_bytes): + helper = "helpers/" + pin(data)["sha256"] + ".py" + add(helper, data) + helper_catalog[name] = helper + for run in runs: + folder = gates / run + need(folder.is_dir(), "run directory missing: " + run) + paths = list(folder.iterdir()) + names = {path.name for path in paths} + need(all(path.is_file() and not path.is_symlink() for path in paths) + and names in (RAW_FILES, RAW_FILES | {"source-proof.json"}), "exact closed raw files required: " + run) + raw = {path.name: path.read_bytes() for path in paths} + result = parsed(raw["result.json"]) + need("finish" in result and result["inputsUnchanged"] is True, "unfinished/changed run refused: " + run) + matches = [data for data in helper_bytes if pin(data) == result["helper"]] + need(bool(matches), "exact historical helper unavailable for " + run + "; supply --helper PATH") + helper = "helpers/" + result["helper"]["sha256"] + ".py" + add(helper, matches[0]) + for name, data in sorted(raw.items()): + add("cargo/" + run + "/" + name, data) + specs[run] = {key: result[key] for key in ("command", "head", "exitCode", "inputCount")} + specs[run]["helper"] = helper + if "source-proof.json" in raw: + proof = parsed(raw["source-proof.json"]) + matches = [data for data in comparator_bytes if pin(data) == proof["comparator"]] + need(bool(matches), "exact source comparator unavailable for " + run + "; supply --comparator PATH") + comparator = "comparators/" + proof["comparator"]["sha256"] + ".py" + add(comparator, matches[0]) + specs[run]["sourceProof"] = {"commit": proof["commit"], "pin": pin(raw["source-proof.json"]), "comparator": comparator} + manifest = {"schema": 1, "kind": "scenario-selection-cargo-gates", "runs": specs, + "captureHelpers": helper_catalog, + "logicalFiles": dict(sorted(logical.items())), + "members": {name: pin(data) for name, data in sorted(payload.items())}} + summary = verify_data(manifest, payload.__getitem__) + return payload, manifest, summary + + +def write_json(path, value): + with path.open("xb") as output: + output.write((json.dumps(value, indent=2) + "\n").encode("utf-8")) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True, help="checkout holding .local/scenario-group-gates") + parser.add_argument("--runs", nargs="+", required=True, help="explicit run names, including failures to retain") + parser.add_argument("--helper", type=Path, action="append", default=[], help="additional exact historical helper (repeatable)") + parser.add_argument("--comparator", type=Path, action="append", default=[], help="additional exact historical source comparator (repeatable)") + parser.add_argument("--output", type=Path, help="fresh, nonexistent package directory (required unless --check-only)") + parser.add_argument("--check-only", action="store_true", help="validate raw captures in memory without creating an archive") + args = parser.parse_args() + need(all(run_name(run) for run in args.runs) and len(args.runs) == len(set(args.runs)), "unique safe run names required") + need(args.check_only or args.output is not None, "--output is required unless --check-only") + if not args.check_only: + need(not args.output.exists(), "output must be a fresh directory: " + str(args.output)) + payload, manifest, summary = collect(args.root.resolve(), args.runs, args.helper, args.comparator) + if args.check_only: + print("PASS raw consistency; no package written:", summary) + return + out = args.output.resolve() + out.mkdir(parents=True, exist_ok=False) + for name in ("evidence.zip", "manifest.json", "files.json"): + need(not (out / name).exists(), "existing package output refused: " + name) + for name in ("prepare.py", "verify.py", "README.md"): + data = (HERE / name).read_bytes() + destination = out / name + if destination.exists(): + need(destination.read_bytes() == data, "different existing package tool: " + name) + else: + with destination.open("xb") as output: + output.write(data) + with zipfile.ZipFile(out / "evidence.zip", "x", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as archive: + for name, data in sorted(payload.items()): + info = zipfile.ZipInfo(name, date_time=(2026, 9, 23, 0, 0, 0)) + info.compress_type = zipfile.ZIP_DEFLATED + info.external_attr = 0o100644 << 16 + archive.writestr(info, data) + write_json(out / "manifest.json", manifest) + names = ("prepare.py", "verify.py", "README.md", "manifest.json", "evidence.zip") + write_json(out / "files.json", {name: pin((out / name).read_bytes()) for name in names}) + need(verify_package(out) == summary, "written package differs from validated captures") + print("PASS package readback:", out, summary) + + +if __name__ == "__main__": + main() diff --git a/harness/scenario-group-spacing-evidence-20260924/checks/verify.py b/harness/scenario-group-spacing-evidence-20260924/checks/verify.py new file mode 100644 index 00000000..618390ee --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/checks/verify.py @@ -0,0 +1,194 @@ +"""Offline consistency checks only; never execute or extract archived inputs.""" +from pathlib import Path, PurePosixPath +from datetime import datetime +import argparse +import hashlib +import io +import json +import math +import re +import stat +import zipfile + +RAW_FILES = {"started.json", "process.json", "result.json", "stdout.log", "stderr.log", "inputs.json", "inputs.zip"} +OUTER_FILES = {"prepare.py", "verify.py", "README.md", "manifest.json", "evidence.zip"} + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def pin(data): + return {"bytes": len(data), "sha256": hashlib.sha256(data).hexdigest()} + + +def valid_pin(value): + return (isinstance(value, dict) and set(value) == {"bytes", "sha256"} + and type(value["bytes"]) is int and value["bytes"] >= 0 + and isinstance(value["sha256"], str) + and re.fullmatch(r"[0-9a-f]{64}", value["sha256"]) is not None) + + +def safe(name): + return (isinstance(name, str) and bool(name) and "\\" not in name and ":" not in name + and all(ord(char) >= 32 for char in name) + and not PurePosixPath(name).is_absolute() + and all(part not in ("", ".", "..") for part in name.split("/"))) + + +def run_name(name): + return isinstance(name, str) and re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._-]*", name) is not None + + +def parsed(data): + def pairs(items): + result = {} + for key, value in items: + need(key not in result, "duplicate JSON key: " + key) + result[key] = value + return result + def constant(value): + raise ValueError("nonfinite JSON constant: " + value) + return json.loads(data, object_pairs_hook=pairs, parse_constant=constant) + + +def inventory(archive, expected): + names = archive.namelist() + need(len(names) == len(set(names)) and set(names) == set(expected), "exact ZIP membership") + for entry in archive.infolist(): + need(safe(entry.filename) and not entry.is_dir(), "unsafe ZIP member: " + entry.filename) + need(not stat.S_ISLNK(entry.external_attr >> 16), "ZIP symlink: " + entry.filename) + need(valid_pin(expected[entry.filename]), "invalid member pin: " + entry.filename) + need(entry.file_size == expected[entry.filename]["bytes"], "ZIP recorded size: " + entry.filename) + + +def ordered_times(*values): + times = [datetime.fromisoformat(value) for value in values] + return all(value.utcoffset() is not None for value in times) and times == sorted(times) + + +def verify_data(manifest, read): + """Shared read-only verifier for packaged bytes or prepare's in-memory payload.""" + need(manifest["schema"] == 1 and manifest["kind"] == "scenario-selection-cargo-gates", "manifest schema") + runs, logical, stored = manifest["runs"], manifest["logicalFiles"], manifest["members"] + helpers = manifest["captureHelpers"] + need(isinstance(helpers, dict) and set(helpers) == {"gate.py", "source-proof.py"}, "capture helper names") + need(all(isinstance(name, str) and re.fullmatch(r"helpers/[0-9a-f]{64}\.py", name) + for name in helpers.values()), "capture helper mapping") + need(isinstance(runs, dict) and bool(runs) and all(run_name(run) for run in runs), "explicit run inventory") + need(all(safe(name) for name in logical) and all(safe(name) for name in stored), "unsafe manifest path") + need(set(logical.values()) == set(stored), "unreferenced or absent stored members") + for name, expected in stored.items(): + need(valid_pin(expected) and pin(read(name)) == expected, "stored member hash: " + name) + expected_logical = {"cargo/" + run + "/" + name for run in runs for name in RAW_FILES} + expected_logical.update(spec["helper"] for spec in runs.values()) + expected_logical.update(helpers.values()) + for run, spec in runs.items(): + if "sourceProof" in spec: + proof_spec = spec["sourceProof"] + need(set(proof_spec) == {"commit", "pin", "comparator"}, run + ": exact source proof spec") + need(isinstance(proof_spec["commit"], str) and re.fullmatch(r"[0-9a-f]{40}", proof_spec["commit"]), run + ": named full source commit") + need(valid_pin(proof_spec["pin"]), run + ": source proof pin") + need(isinstance(proof_spec["comparator"], str) and re.fullmatch(r"comparators/[0-9a-f]{64}\.py", proof_spec["comparator"]), run + ": comparator path") + expected_logical.update({"cargo/" + run + "/source-proof.json", proof_spec["comparator"]}) + need(set(logical) == expected_logical, "exact logical raw/helper inventory") + for name, destination in logical.items(): + if name.startswith("cargo/") and name.rsplit("/", 1)[1] in {"inputs.json", "inputs.zip"}: + expected = "capsules/" + stored[destination]["sha256"] + PurePosixPath(name).suffix + need(destination == expected, "input capsule mapping: " + name) + else: + need(destination == name, "only input maps/archives may be deduplicated: " + name) + def raw(name): + return read(logical[name]) + for name, helper in helpers.items(): + need(helper == "helpers/" + pin(raw(helper))["sha256"] + ".py", "named helper hash: " + name) + seen_capsules = set() + for run, spec in runs.items(): + prefix = "cargo/" + run + "/" + start = parsed(raw(prefix + "started.json")) + process = parsed(raw(prefix + "process.json")) + result = parsed(raw(prefix + "result.json")) + required_start = {"start", "command", "cwd", "head", "scope", "inputs", "archive", + "inputCount", "environment", "helper", "cargo", "rustc"} + need(required_start <= start.keys(), run + ": incomplete start receipt") + need(all(result.get(key) == value for key, value in start.items()), run + ": start/result relationship") + command = result["command"] + need(isinstance(command, list) and command and command[0] == "cargo" + and all(isinstance(arg, str) for arg in command), run + ": Cargo command") + need(command == process["command"] == spec["command"], run + ": command relationship") + need(result["head"] == spec["head"] and re.fullmatch(r"(?:[0-9a-f]{40}|[0-9a-f]{64})", result["head"]), run + ": HEAD") + need(type(result["exitCode"]) is int and result["exitCode"] == spec["exitCode"], run + ": recorded exit") + need(result["inputsUnchanged"] is True, run + ": changed inputs refused") + need(type(result["seconds"]) in (int, float) and math.isfinite(result["seconds"]) + and result["seconds"] >= 0, run + ": duration") + need(type(process["pid"]) is int and process["pid"] > 0, run + ": process identity") + need(ordered_times(start["start"], process["observed"], result["finish"]), run + ": completed timestamp order") + for field, filename in [("inputs", "inputs.json"), ("archive", "inputs.zip"), ("stdout", "stdout.log"), ("stderr", "stderr.log")]: + need(result[field] == pin(raw(prefix + filename)), run + ": " + field + " pin") + need(valid_pin(result["helper"]) and result["helper"] == pin(raw(spec["helper"])), run + ": helper pin") + need(spec["helper"] == "helpers/" + result["helper"]["sha256"] + ".py", run + ": helper mapping") + inputs = parsed(raw(prefix + "inputs.json")) + need(isinstance(inputs, dict) and all(safe(name) for name in inputs), run + ": safe input inventory") + need(type(result["inputCount"]) is int and len(inputs) == result["inputCount"] == spec["inputCount"], run + ": input counts") + if "sourceProof" in spec: + proof_spec = spec["sourceProof"] + proof_bytes = raw(prefix + "source-proof.json") + proof = parsed(proof_bytes) + need(pin(proof_bytes) == proof_spec["pin"], run + ": source proof pinned bytes") + need(proof["run"] == run and proof["commit"] == proof_spec["commit"], run + ": proof run/commit identity") + need(proof["status"] == "PASS exact captured input inventory and Git blob bytes", run + ": source proof status") + need(proof["inputCount"] == len(inputs) and proof["inputMap"] == result["inputs"], run + ": proof input relationship") + need(proof["result"] == pin(raw(prefix + "result.json")), run + ": proof result relationship") + need(ordered_times(result["finish"], proof["verified"]), run + ": proof time after closed gate") + comparator = proof_spec["comparator"] + need(valid_pin(proof["comparator"]) and pin(raw(comparator)) == proof["comparator"], run + ": comparator bytes") + need(comparator == "comparators/" + proof["comparator"]["sha256"] + ".py", run + ": comparator identity") + need(sum(name.startswith("crates/vendor/iced_widget/") for name in inputs) == 71, run + ": vendor count") + capsule = (logical[prefix + "inputs.json"], logical[prefix + "inputs.zip"]) + if capsule not in seen_capsules: + with zipfile.ZipFile(io.BytesIO(raw(prefix + "inputs.zip"))) as source: + inventory(source, inputs) + for name, expected in inputs.items(): + need(pin(source.read(name)) == expected, run + ": source hash " + name) + seen_capsules.add(capsule) + artifacts = [] + for line in raw(prefix + "stdout.log").decode("utf-8", errors="replace").splitlines(): + try: + value = json.loads(line) + except json.JSONDecodeError: + continue + if isinstance(value, dict) and value.get("reason") == "compiler-artifact" and value.get("executable"): + artifacts.append(value) + need(isinstance(result["artifacts"], list), run + ": artifact records") + need(artifacts == [record["cargo"] for record in result["artifacts"]], run + ": Cargo JSON artifact relationship") + for record in result["artifacts"]: + need(set(record) == {"cargo", "readback"} + and (record["readback"] is None or valid_pin(record["readback"])), run + ": artifact readback pin") + print(run, "recorded exit", result["exitCode"], "inputs", len(inputs), "executable records", len(artifacts)) + return {"runs": len(runs), "recordedFailures": sum(spec["exitCode"] != 0 for spec in runs.values()), + "logicalFiles": len(logical), "storedMembers": len(stored), "sourceCapsulePairs": len(seen_capsules), + "captureHelpers": helpers, "sourceProofs": sum("sourceProof" in spec for spec in runs.values())} + + +def verify_package(root): + files = parsed((root / "files.json").read_bytes()) + need(set(files) == OUTER_FILES, "outer file inventory") + for name, expected in files.items(): + need(valid_pin(expected) and pin((root / name).read_bytes()) == expected, "outer hash: " + name) + manifest = parsed((root / "manifest.json").read_bytes()) + with zipfile.ZipFile(root / "evidence.zip") as archive: + inventory(archive, manifest["members"]) + return verify_data(manifest, archive.read) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("package", nargs="?", type=Path, default=Path(__file__).resolve().parent) + args = parser.parse_args() + print("PASS offline consistency:", verify_package(args.package)) + print("Historical receipts only; no source/binary execution or native acceptance claim.") + + +if __name__ == "__main__": + main() diff --git a/harness/scenario-group-spacing-evidence-20260924/native/manifest.json b/harness/scenario-group-spacing-evidence-20260924/native/manifest.json new file mode 100644 index 00000000..777d64ce --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/native/manifest.json @@ -0,0 +1,1333 @@ +{ + "kind": "scenario-group-spacing-native-evidence", + "archive": { + "bytes": 6069072, + "sha256": "27e0e189053fdfdbfcecd8c91ae718849448b090aab557afc7d9445af1ceaba8" + }, + "members": { + "fixtures/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "fixtures/expected-messages-and-lanes.arcadia": { + "bytes": 3546, + "sha256": "549683124b29612124445e5c0bd78146d4020ffcaa303d2c02ce616b49ac9a4c" + }, + "fixtures/expected-messages.arcadia": { + "bytes": 3546, + "sha256": "e1e799db0cb5cec4b47cfc1d03ac6e70f6b8f88aed8c4fff19ac2ba9f40abe8b" + }, + "fixtures/fixture-manifest.json": { + "bytes": 700, + "sha256": "70d5ba6a509688d393b8e9537abd6d11a063355988775faecbe44b31a10a60b2" + }, + "helpers/EVIDENCE.md": { + "bytes": 4431, + "sha256": "b77133253d378087a143db24cb4923fb40774925454d2b27808e64400d399ed1" + }, + "helpers/HARNESS.md": { + "bytes": 5016, + "sha256": "9bfe8cfc86759ef991cc0a433f73c6fc5d052aba6475a5c09ad0b568cdf18d52" + }, + "helpers/README.md": { + "bytes": 7709, + "sha256": "d07f3d79fdb528229679d7e962b18bf33cf284aa4860870c946d9bcfaa7ca8f5" + }, + "helpers/capture.js": { + "bytes": 1596, + "sha256": "8c07d1882567603b02c4a83857c3e8d32c5f6406436f0715e8e2dabd6daa9698" + }, + "helpers/cli-preflight.py": { + "bytes": 4976, + "sha256": "977ce27a0b5fd440bceb3eefdfc01473f44e8e8300fd723e703ee542b28ab7c7" + }, + "helpers/evaluate.py": { + "bytes": 1822, + "sha256": "84944be37b66453909bb5c6f226befeabf0c06cf57bbbdccbdf0af5ee6b17ab1" + }, + "helpers/localhelper-check-result.json": { + "bytes": 2291, + "sha256": "f3e3c38b49e7320a18028e1b2ce3801c053360bdb482c3fe7cb1c9710cdeb67e" + }, + "helpers/native-evidence-package.py": { + "bytes": 4111, + "sha256": "b806090efe6cf23bba3f5fcfc3d81514412606178243ded73c3b3c683e097868" + }, + "helpers/native-evidence-verify.py": { + "bytes": 9938, + "sha256": "f15508c979b4d9261ffa400a754ce8e6ae7fadd0dc30bac0258addcb11c2830a" + }, + "helpers/native-harness.py": { + "bytes": 12196, + "sha256": "67d5f723b74a3ca147f531a859cfe6a6544e7c97c38ccbbc9727c03db07700c3" + }, + "helpers/verify-captured.py": { + "bytes": 4926, + "sha256": "c3b78c02d931763215e53c6147ea6a953e53b4d916a0a4cd7f8bc83dbd0c5752" + }, + "preflight/fixture-preflight-1/baseline.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-1/baseline.arcadia.stdout.json": { + "bytes": 701, + "sha256": "64c27eae087cd0b563d878aa7f09f314bbb16ea84dad228e1898b120d73e318c" + }, + "preflight/fixture-preflight-1/expected-messages-and-lanes.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-1/expected-messages-and-lanes.arcadia.stdout.json": { + "bytes": 739, + "sha256": "d9677117242854e118af5c76a924ae1db4c6901328845fbcce7bda8ee0cdf8e6" + }, + "preflight/fixture-preflight-1/expected-messages.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-1/expected-messages.arcadia.stdout.json": { + "bytes": 719, + "sha256": "a8092a21e104069fb6849d5ef63d1471d6bb08fa153c18cd885bed82445fd64c" + }, + "preflight/fixture-preflight-1/result.json": { + "bytes": 1652, + "sha256": "e1f8ef6eff6eaa36d337e781cfe715309b01375bf50dbfab5cdc784f2d6c498f" + }, + "preflight/fixture-preflight-2/baseline.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-2/baseline.arcadia.stdout.json": { + "bytes": 2024, + "sha256": "c2f0eb71c9291b017d415d85dc3509b5be60ee5108823dcfedabd13dbb9f492f" + }, + "preflight/fixture-preflight-2/evidence/cli-preflight.py": { + "bytes": 4976, + "sha256": "977ce27a0b5fd440bceb3eefdfc01473f44e8e8300fd723e703ee542b28ab7c7" + }, + "preflight/fixture-preflight-2/evidence/fixture-manifest.json": { + "bytes": 700, + "sha256": "70d5ba6a509688d393b8e9537abd6d11a063355988775faecbe44b31a10a60b2" + }, + "preflight/fixture-preflight-2/evidence/inputs.json": { + "bytes": 136196, + "sha256": "c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381" + }, + "preflight/fixture-preflight-2/evidence/native-harness.py": { + "bytes": 12196, + "sha256": "67d5f723b74a3ca147f531a859cfe6a6544e7c97c38ccbbc9727c03db07700c3" + }, + "preflight/fixture-preflight-2/evidence/result.json": { + "bytes": 4455, + "sha256": "0fc72640a3bbb4bc3743009fbc196d2b6f25f41cb2b6db4bb0cc8d5182638289" + }, + "preflight/fixture-preflight-2/evidence/source-proof.json": { + "bytes": 600, + "sha256": "27a0e2d80704a592ba280b6079e985e2b52f0b1aedd6eb84b79fba8469be9e9d" + }, + "preflight/fixture-preflight-2/expected-messages-and-lanes.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-2/expected-messages-and-lanes.arcadia.stdout.json": { + "bytes": 2100, + "sha256": "6c4b05ecbf0fa5aac59927fbff670187e15d68a68ce1d03ab45ece6fe439af4d" + }, + "preflight/fixture-preflight-2/expected-messages.arcadia.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "preflight/fixture-preflight-2/expected-messages.arcadia.stdout.json": { + "bytes": 2060, + "sha256": "405b1371b657664df6acb89519701e0ac9633b1581a2785b3e858758900d9243" + }, + "preflight/fixture-preflight-2/fixtures/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "preflight/fixture-preflight-2/fixtures/expected-messages-and-lanes.arcadia": { + "bytes": 3546, + "sha256": "549683124b29612124445e5c0bd78146d4020ffcaa303d2c02ce616b49ac9a4c" + }, + "preflight/fixture-preflight-2/fixtures/expected-messages.arcadia": { + "bytes": 3546, + "sha256": "e1e799db0cb5cec4b47cfc1d03ac6e70f6b8f88aed8c4fff19ac2ba9f40abe8b" + }, + "preflight/fixture-preflight-2/result.json": { + "bytes": 3713, + "sha256": "880658407f2d55ed9975a264d8344c770f089f22003447bbca5c0534612bc689" + }, + "preflight/fixture-preflight-2/started.json": { + "bytes": 1419, + "sha256": "21a67e813ee1e2532949cf05d8cd1759db2b9df59b4ab62f271569413ff04f80" + }, + "preparation/cli-preflight-preparation.json": { + "bytes": 257, + "sha256": "80c1dd0938b49ad6f10b11092e2f4192a4ff3e3ae4379472f810fd0928f5f93d" + }, + "preparation/harness-source-update-4a27c8e.json": { + "bytes": 619, + "sha256": "d65b9597fb848d6610a26d6f1a282257f96a967982ca0c2d93d4192e4e294542" + }, + "preparation/harness-source-update-8d6fac4.json": { + "bytes": 609, + "sha256": "0255e813c77e0c6321ebafd0561b3a2b2b8207929f16d4add19f00ca3703651c" + }, + "preparation/native-evidence-preparation.json": { + "bytes": 455, + "sha256": "7db4f34b0041a6d8dd1b5541c0cbffd7740266a66e1bd7fb5e9de51fadf8799b" + }, + "preparation/native-harness-syntax-2.json": { + "bytes": 222, + "sha256": "7009ad2e7b40fe23f2e21d30a279f3f0324f7e7dfe6163f9e62e9475122d6206" + }, + "preparation/native-harness-syntax.json": { + "bytes": 380, + "sha256": "4bb5bfd540c8c2563716cbcd7a407256fa2a561fa1f8645f3820c6b6989fd591" + }, + "preparation/native-harness-working-before-preparation.json": { + "bytes": 238, + "sha256": "af72e4c8e2a61be70cc1dc8d4debcf77bc9726fbbc236c9d4c422c8f79b2b84a" + }, + "preparation/portable-review-config.json": { + "bytes": 192, + "sha256": "d13b067e67f42699ecee8478d72638262114d893fd91c3b62ff2c69ffcb7ef38" + }, + "review-config.json": { + "bytes": 301, + "sha256": "5ea1b50bc8d6d088ecdc2d176835fb793ad0df912abb227fd87b5fe7ef400a18" + }, + "runs/run-1/01-launched-0.jpg": { + "bytes": 101409, + "sha256": "e8a1f0cfc2bca08e2254f5989346498bd91f8e684c8860e3c3afcca76ae14112" + }, + "runs/run-1/01-launched.json": { + "bytes": 917, + "sha256": "5f5478ed099e25109b5cb3e847d045e564706d9526e56293dab5e8d69cc37408" + }, + "runs/run-1/02-opened-model-0.jpg": { + "bytes": 88703, + "sha256": "d8e7c08a0386aaf554237a0a33ee1dc4f32d34f750082dd77e6a6139a1971112" + }, + "runs/run-1/02-opened-model.json": { + "bytes": 969, + "sha256": "6d591ea0e06e1efbe2ea6fb41688689a3a9cdbc98958d266cecdb65fac251728" + }, + "runs/run-1/03-behavior-0.jpg": { + "bytes": 88407, + "sha256": "a4a01281f9cd7352b7f3e3d65e6fde476de42c06cbb6fba9eddfa532090c7ac9" + }, + "runs/run-1/03-behavior.json": { + "bytes": 977, + "sha256": "88e6470b35d23f49ad581ed59cfee3b85b538c5d3be3aaa9da0915ed671c5989" + }, + "runs/run-1/04-behavior-settled-0.jpg": { + "bytes": 88423, + "sha256": "64647fbd929ee56c5adc61e92bc100c1f00c35a7d6879f4a35ab1f57af5f03fe" + }, + "runs/run-1/04-behavior-settled.json": { + "bytes": 985, + "sha256": "df83b9f23917d462417ae51fbe773aa212284303b613b282de471597a61c119c" + }, + "runs/run-1/05-behavior-retry-0.jpg": { + "bytes": 111670, + "sha256": "1d1c9eb5e0da489618861c1b654a945a49849366795978b5a15d37c050896c08" + }, + "runs/run-1/05-behavior-retry.json": { + "bytes": 983, + "sha256": "53c84670050f63e6d1865f719edc2caeec9ac639f7ddc9ab8ff743b7fadb09b5" + }, + "runs/run-1/06-view-choices-0.jpg": { + "bytes": 112000, + "sha256": "583623ed47b4b880b81e1a878d7734ead20504ae4483ac8f326cf80b01ee987e" + }, + "runs/run-1/06-view-choices.json": { + "bytes": 981, + "sha256": "9683ac7e0cdf7584d256394cd5185a6094454998b12a2c593db6763fa601887d" + }, + "runs/run-1/07-view-choices-settled-0.jpg": { + "bytes": 111948, + "sha256": "ca9bad56f88936312e24aa485e2571744f82e83b02155d5c636e5462e4f71a9c" + }, + "runs/run-1/07-view-choices-settled.json": { + "bytes": 989, + "sha256": "ab0c65ffce471cdfa3f49a155defa026309ff683784cc38b4c7e23ff5d6627b1" + }, + "runs/run-1/08-active-window-0.jpg": { + "bytes": 112113, + "sha256": "3c21c923879c8b5164e25f73b3291ea6795da39794721d50d9a8771c02c208ce" + }, + "runs/run-1/08-active-window.json": { + "bytes": 982, + "sha256": "4ad6884428a85432534685f3bfb6ab8b0dc6f3a010d01a0e2d461e704a5eceb8" + }, + "runs/run-1/09-maximized-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/09-maximized-1.jpg": { + "bytes": 121655, + "sha256": "b0706feadad9c0cad0ffe67323e49c1b13a4396a1a0906d15d1e410f2c9506ae" + }, + "runs/run-1/09-maximized.json": { + "bytes": 1092, + "sha256": "a27d7d5683d8ac203c88f33ea6466445a94d63fc045aff73cc5cf37500e7ce55" + }, + "runs/run-1/10-saved-view-menu-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/10-saved-view-menu-1.jpg": { + "bytes": 123394, + "sha256": "69ad51f89665e5c3c4a97f0f7c7021b026e19d03f8af8d4a474599f6eed1b5d7" + }, + "runs/run-1/10-saved-view-menu.json": { + "bytes": 1104, + "sha256": "f42e2822d85381b2a6fd4ff34d95586a83a752de39d4b635d068c957647a4548" + }, + "runs/run-1/11-saved-a-baseline-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/11-saved-a-baseline-1.jpg": { + "bytes": 120499, + "sha256": "054fc396cf9cdb4ed5aef17355166e71dd78bbdd022102e6cba0eb3a9b1956f0" + }, + "runs/run-1/11-saved-a-baseline.json": { + "bytes": 1106, + "sha256": "d2b29592565e0aa45558c82dd2913c536e9a8596aac39168a3f287bb21d0355e" + }, + "runs/run-1/12-baseline-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/12-baseline-save-1.jpg": { + "bytes": 118922, + "sha256": "09e584cb080252ba4bafff9309d8be7f56c99e30efa2203192b72132c998e707" + }, + "runs/run-1/12-baseline-save.json": { + "bytes": 1100, + "sha256": "cb0c40089e8f8fecfc7fb5b063f913904c7a4768f145291bbbdb22934b9977b8" + }, + "runs/run-1/13-gamma-selected-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/13-gamma-selected-1.jpg": { + "bytes": 127824, + "sha256": "c32272173b1c0bb3e7a71fa6edf2f44ed2b8970a48a957aba5e87843a1528195" + }, + "runs/run-1/13-gamma-selected.json": { + "bytes": 1102, + "sha256": "ddb639edb7fd8d3a546218f1a8f97df2e054647154affe25000d374faf8a5875" + }, + "runs/run-1/14-alpha-context-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/14-alpha-context-1.jpg": { + "bytes": 135479, + "sha256": "e65815d1dcd0bb459d022924f4a8a61a2430626ed9ad33ee4620f31bd54bb619" + }, + "runs/run-1/14-alpha-context.json": { + "bytes": 1100, + "sha256": "e4047d5a4386b6bd8d9761d670ecb9e3e34f4a6b2e6378594297c26f22c58020" + }, + "runs/run-1/15-message-group-primary-alpha-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/15-message-group-primary-alpha-1.jpg": { + "bytes": 132583, + "sha256": "c0e556b2184102df51270f5a67c7007efb07d4ae6e3654dd1c9919ee8bcb63e1" + }, + "runs/run-1/15-message-group-primary-alpha.json": { + "bytes": 1128, + "sha256": "730a876c015cc263ba32447527ff88532163e9bf2a610329ddad5955c65fef9f" + }, + "runs/run-1/16-message-group-drag-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/16-message-group-drag-1.jpg": { + "bytes": 133147, + "sha256": "c2bef0ffbeeacc2d04c4eacd41bd32894438cec8e05785ff79dfb710ba747b9c" + }, + "runs/run-1/16-message-group-drag.json": { + "bytes": 1120, + "sha256": "a3c743e3cc9667b5f6cf9919ecba4fb1d7e7ed2c77b309f27c7343bccf74c5ee" + }, + "runs/run-1/17-message-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/17-message-save-1.jpg": { + "bytes": 131573, + "sha256": "e53040418d1d65a5ae3b0514993b949c099ff3b47c8f065b79c6689252ec5d9f" + }, + "runs/run-1/17-message-save.json": { + "bytes": 1098, + "sha256": "5aa306cd462e2d2a8c4b4292c65f88d128de3914603ccbd29327ed594f849752" + }, + "runs/run-1/18-message-undo-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/18-message-undo-1.jpg": { + "bytes": 132758, + "sha256": "8dcec83b29b28482c83b47c0cd06c923036947dfdb06ab174e471c1cb56f2ba7" + }, + "runs/run-1/18-message-undo.json": { + "bytes": 1106, + "sha256": "a48e35592ef8ff2d40bd6f6aab8cec56938691f75cbc68ebefcc6e5535fd8562" + }, + "runs/run-1/19-message-undo-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/19-message-undo-save-1.jpg": { + "bytes": 132786, + "sha256": "4db8f87025c3972592355b64680724914a23c4f5afcc6cc4059934d0f8b64371" + }, + "runs/run-1/19-message-undo-save.json": { + "bytes": 1108, + "sha256": "1f88cd07f3940d81ab6eba7af9bff6e4aa1edceefb5da99fd4e4ca0d47841e5c" + }, + "runs/run-1/20-message-redo-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/20-message-redo-1.jpg": { + "bytes": 131465, + "sha256": "139d0ee8a2f3b3f118cc63fc490e781cdae21f8dc57009b2e4f443e7614fd96f" + }, + "runs/run-1/20-message-redo.json": { + "bytes": 1106, + "sha256": "79725936fff6e4839d01414879beef518229acedd46181528463bbe5dbed16fd" + }, + "runs/run-1/21-message-redo-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/21-message-redo-save-1.jpg": { + "bytes": 131573, + "sha256": "e53040418d1d65a5ae3b0514993b949c099ff3b47c8f065b79c6689252ec5d9f" + }, + "runs/run-1/21-message-redo-save.json": { + "bytes": 1108, + "sha256": "4d9571de9fe6217b7729480d0cebd3ff635dae60dc969907b2be4caae0f40576" + }, + "runs/run-1/22-message-offaxis-noop-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/22-message-offaxis-noop-1.jpg": { + "bytes": 132674, + "sha256": "02115a84e167b6a94572c2394b3d3a4b83f21af274d512447dac6314b79ef5c4" + }, + "runs/run-1/22-message-offaxis-noop.json": { + "bytes": 1114, + "sha256": "9249c18dc4954be2ccdb319b2a64cf76f592afa0324880f7c36c50afbcdbb9db" + }, + "runs/run-1/23-offaxis-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/23-offaxis-save-1.jpg": { + "bytes": 131413, + "sha256": "557939b25bb2ea76382e427898bb936a8caa913271cee4ae513b5dc704ee9dec" + }, + "runs/run-1/23-offaxis-save.json": { + "bytes": 1098, + "sha256": "afd95357fb829b78e9466e1cd9beaedccac914b1edd4c652d8f41e72ca09d089" + }, + "runs/run-1/24-intake-selected-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/24-intake-selected-1.jpg": { + "bytes": 132767, + "sha256": "1b1ff74f41f051346a4eb0209affcba1909046d47667539c29ef145e7e902052" + }, + "runs/run-1/24-intake-selected.json": { + "bytes": 1104, + "sha256": "5e7c9e9955a552a882c791aebb10bf7b2a1d697640624c1b8ba6c46b758fa909" + }, + "runs/run-1/25-review-context-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/25-review-context-1.jpg": { + "bytes": 140875, + "sha256": "e70d93fa9f677807278bfb3ffcff5d3dff0a8c00930368acfc194ec4b125792d" + }, + "runs/run-1/25-review-context.json": { + "bytes": 1102, + "sha256": "d40ac9b1e2b1675d946e6dcdb54b929a3fe7e0a10a7b5426d802d018d8c7c2fd" + }, + "runs/run-1/26-lane-group-primary-review-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/26-lane-group-primary-review-1.jpg": { + "bytes": 131791, + "sha256": "c3314c059e9264fec030a1c3230d5be8a9b64c3a5dffda75825e4b149beb3f79" + }, + "runs/run-1/26-lane-group-primary-review.json": { + "bytes": 1124, + "sha256": "dbfa78376f679b7c1dd297e8e2f2946d7200a96b5ad140457d0db44f0789cf1e" + }, + "runs/run-1/27-lane-group-drag-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/27-lane-group-drag-1.jpg": { + "bytes": 133305, + "sha256": "c131351e94833a7b953c6d4c0d7dea5edb44fbabfb43e33e971ffeb309c6d3fb" + }, + "runs/run-1/27-lane-group-drag.json": { + "bytes": 1112, + "sha256": "86ea71832a45af8a4f98ec17de50cacb12ecbef8089671db50357603b3b009c9" + }, + "runs/run-1/28-lane-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/28-lane-save-1.jpg": { + "bytes": 131544, + "sha256": "7075778dc2bdc0e7ba1019447f985f4a230fa501f7586c05e2e5d27dd6f520fa" + }, + "runs/run-1/28-lane-save.json": { + "bytes": 1094, + "sha256": "49365c2d9346a57dbb83eb5ca53a269564e1dc9468eec745cf53f279f02e8b43" + }, + "runs/run-1/29-lane-undo-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/29-lane-undo-1.jpg": { + "bytes": 131740, + "sha256": "0df3518d2882b262f19d833893761771bdad2d0ff077b78b53e1b3bacb513fce" + }, + "runs/run-1/29-lane-undo.json": { + "bytes": 1100, + "sha256": "3cd71dfe18bba8458e9a248d84fae10958f2fbae1d82fb5fabe51f994a8afe96" + }, + "runs/run-1/30-lane-undo-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/30-lane-undo-save-1.jpg": { + "bytes": 131813, + "sha256": "e5892c628c7ad82cb2932ed0d5936a298ab9be3d649c233226f0c6aed19ee0e3" + }, + "runs/run-1/30-lane-undo-save.json": { + "bytes": 1102, + "sha256": "8a87d303c196fb9945c0452a6cf0a2b069b3e7cea6ef586ac3da680bbd1c18b5" + }, + "runs/run-1/31-lane-offaxis-with-redo-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/31-lane-offaxis-with-redo-1.jpg": { + "bytes": 132886, + "sha256": "2d093f22c9d2bc35a5f94343a3b3e9e237ad3d630c75aa687cab73d28effce28" + }, + "runs/run-1/31-lane-offaxis-with-redo.json": { + "bytes": 1118, + "sha256": "de5142e4963c34e4a791c754fb4604c7b93fa0fbfa5c5310a6fe92122892ebaa" + }, + "runs/run-1/32-lane-redo-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/32-lane-redo-1.jpg": { + "bytes": 131609, + "sha256": "11c61402286d22698bdef679babb13ac4c74a86fdc72781877e893861c138ca0" + }, + "runs/run-1/32-lane-redo.json": { + "bytes": 1100, + "sha256": "0558eafd01111271b2e1a0ac3500a84e820c77fc1c0197895fc8cbc0d14152ab" + }, + "runs/run-1/33-lane-redo-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/33-lane-redo-save-1.jpg": { + "bytes": 131675, + "sha256": "5b8c71045b54124e8d82da0c5fd7f59eb9818a14ed7f8234e3ba095c13c5e3d8" + }, + "runs/run-1/33-lane-redo-save.json": { + "bytes": 1102, + "sha256": "f6469721820ca5eb5040fffb76d36af7c2cd8eacc4d6b7d0047363754272331b" + }, + "runs/run-1/34-switch-view-menu-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/34-switch-view-menu-1.jpg": { + "bytes": 135407, + "sha256": "648945437743eeca068ad390ae7f709c613fc5ce27955aad23f4e91321d3703d" + }, + "runs/run-1/34-switch-view-menu.json": { + "bytes": 1106, + "sha256": "f7714edfb1388e4d134439f630fba38f920fa4b770987f1006eb3d50ffef044e" + }, + "runs/run-1/35-view-b-selection-cleared-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/35-view-b-selection-cleared-1.jpg": { + "bytes": 134243, + "sha256": "eaf579f0d9c76ee3fefac4e1d993814a8ad8c80b4a8b723b27d0270780e067ff" + }, + "runs/run-1/35-view-b-selection-cleared.json": { + "bytes": 1122, + "sha256": "425eea7e08503de19b1702befd9bdc24aafe991236a26241d21238df74c8eefe" + }, + "runs/run-1/36-view-b-actual-size-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/36-view-b-actual-size-1.jpg": { + "bytes": 137938, + "sha256": "ecf93a7f5bc13fe4ef1b28af4273806ebc948b5d80c898dc284eec07da699359" + }, + "runs/run-1/36-view-b-actual-size.json": { + "bytes": 1110, + "sha256": "6ea939ecf4700065a4c8f5f1d648b08e00d03e2b4010c72d56e57c95cee2452a" + }, + "runs/run-1/37-return-a-menu-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/37-return-a-menu-1.jpg": { + "bytes": 137609, + "sha256": "a73e85fad7c06ce1231fea6b6395d7900bdf479bc1e4dd4e4571cb60f46f4790" + }, + "runs/run-1/37-return-a-menu.json": { + "bytes": 1100, + "sha256": "89545cfc952a85d03c593063802d9691325fbc0f3fb8b2ac44fc76b28f343f7d" + }, + "runs/run-1/38-return-a-edited-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/38-return-a-edited-1.jpg": { + "bytes": 132739, + "sha256": "034408ee42ad0663694476277480296a24b56bc495d92adeb2f8ce6a3bf72c7d" + }, + "runs/run-1/38-return-a-edited.json": { + "bytes": 1104, + "sha256": "5abc1ecc7f3df3dafd51a64c6274b276ef88d2d6c43fa8caa88f39137abc373c" + }, + "runs/run-1/39-return-a-actual-size-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/39-return-a-actual-size-1.jpg": { + "bytes": 136202, + "sha256": "087de58d7adbdc726e14d95f7c3c371dff3e0bba5817a6a2b8bd78ee8bf9ee20" + }, + "runs/run-1/39-return-a-actual-size.json": { + "bytes": 1114, + "sha256": "f3601966a6fb7ad4989ee107680d1c96a5a46d2b636048799c398094eab5ba49" + }, + "runs/run-1/40-alpha-for-mixed-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/40-alpha-for-mixed-1.jpg": { + "bytes": 134734, + "sha256": "7b3d980fea58e7402b1071bf90e681d87416ec4ceb9453142f96e903fbb00dda" + }, + "runs/run-1/40-alpha-for-mixed.json": { + "bytes": 1104, + "sha256": "b8233c7f0ad8d7b9f314dd39e74f341a513d3f4cd1a751e52e71e1865bd06748" + }, + "runs/run-1/41-intake-mixed-context-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/41-intake-mixed-context-1.jpg": { + "bytes": 140963, + "sha256": "1ba0d0d8f63e5a5f58caaa9f6e10e4c68840fbe39a35279d1d4fd5dc3cc10f47" + }, + "runs/run-1/41-intake-mixed-context.json": { + "bytes": 1114, + "sha256": "d1159797059fa959030b2f2a07f1897903c2ae95a63a92d9ecdb39bed7ef3e49" + }, + "runs/run-1/42-mixed-primary-intake-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/42-mixed-primary-intake-1.jpg": { + "bytes": 134434, + "sha256": "dbb0c19575d33326bd547529f6c0da4ec2f2f103c53f79bbaf8e7b113d3f2367" + }, + "runs/run-1/42-mixed-primary-intake.json": { + "bytes": 1114, + "sha256": "cdccd3bfe8792a19d28c4659b22fcfcf52b50a91c726441aa246b1474647e95c" + }, + "runs/run-1/43-mixed-message-drag-refused-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/43-mixed-message-drag-refused-1.jpg": { + "bytes": 138637, + "sha256": "424256cc12e78b5c4820225004c1d229ad25f393c9f45d578633dae221674a4e" + }, + "runs/run-1/43-mixed-message-drag-refused.json": { + "bytes": 1126, + "sha256": "9ff64cd701bda186801b7329512d8d120cb630e3db8b6cebc02149ec6110e3f4" + }, + "runs/run-1/44-mixed-lane-drag-refused-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/44-mixed-lane-drag-refused-1.jpg": { + "bytes": 138657, + "sha256": "52216cac15d903fe34cb4be9d16f370a34461725d836ea2b674487b65238440f" + }, + "runs/run-1/44-mixed-lane-drag-refused.json": { + "bytes": 1120, + "sha256": "02aa4e4779c914b735b5d568dc99555131f5b72fa2e009ef72795ae6c16b113f" + }, + "runs/run-1/45-mixed-click-alpha-collapse-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/45-mixed-click-alpha-collapse-1.jpg": { + "bytes": 137679, + "sha256": "3f0bd24097d9f7c70ba6db2ce6c79821b1cb2aff86e73ff7215d6f91a1127980" + }, + "runs/run-1/45-mixed-click-alpha-collapse.json": { + "bytes": 1126, + "sha256": "9fbb0f635971ea091443265afe58155459f04810929079b40c53a4b5e918f79e" + }, + "runs/run-1/46-mixed-recreate-menu-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/46-mixed-recreate-menu-1.jpg": { + "bytes": 143869, + "sha256": "41c7cd291f41852275775f3231de03acc7ec354c82b54da93c0fc9975f4f7809" + }, + "runs/run-1/46-mixed-recreate-menu.json": { + "bytes": 1112, + "sha256": "b5c94c2be14fa1adbc818d67f4e391a6b875d18bd5bd8d06c76b3e8671342e33" + }, + "runs/run-1/47-mixed-recreated-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/47-mixed-recreated-1.jpg": { + "bytes": 137424, + "sha256": "020d2b50574dd83d659f62265a7fb175f49ccbdb768c4b273add51c3696be635" + }, + "runs/run-1/47-mixed-recreated.json": { + "bytes": 1104, + "sha256": "403ff89b162da681ec1667748f0cc73e7015fd712b436e93b39ee4e308c431bb" + }, + "runs/run-1/48-mixed-click-lane-collapse-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/48-mixed-click-lane-collapse-1.jpg": { + "bytes": 138369, + "sha256": "0c4b7dadb7f559abdf72b85192724019a9fb6b5a1b0ead9098ce5c4c86c0d16f" + }, + "runs/run-1/48-mixed-click-lane-collapse.json": { + "bytes": 1124, + "sha256": "2eb7a2310907241d41f30935609ba39a64dde36e4d7568d5f012746e33004ce2" + }, + "runs/run-1/49-cancel-group-menu-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/49-cancel-group-menu-1.jpg": { + "bytes": 146287, + "sha256": "ad3d096404ce2c7f2c88b158e530f01dd7b66d4269a583a1fbb713e5bd20ece8" + }, + "runs/run-1/49-cancel-group-menu.json": { + "bytes": 1108, + "sha256": "47ad9878ba558ca3d2ace0a823e99394dce0ba14c148617470fb1867badc15ea" + }, + "runs/run-1/50-cancel-lane-group-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/50-cancel-lane-group-1.jpg": { + "bytes": 136993, + "sha256": "0247f6eba8c0b2955072681893b8373d79fda4fb8644cebafcb2bfbb539d06ba" + }, + "runs/run-1/50-cancel-lane-group.json": { + "bytes": 1108, + "sha256": "aff716b9e12f98eddbc81fcc975343cd41388609205e25ad7aeb4d58bb77ecf2" + }, + "runs/run-1/51-lane-outside-release-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/51-lane-outside-release-1.jpg": { + "bytes": 138173, + "sha256": "366d8a34a808e2cc7809847c75ae4abcf94fef3dbe71e1998bbb653360393acc" + }, + "runs/run-1/51-lane-outside-release.json": { + "bytes": 1114, + "sha256": "136c0d5183a5b21ead0c5b41114aea1c2f036941fe494661b6944ea8842d8060" + }, + "runs/run-1/52-final-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-1/52-final-save-1.jpg": { + "bytes": 134012, + "sha256": "128f615354098ab9637481a19d290ab43dd453a0862fd1db1fdc00204e69fc56" + }, + "runs/run-1/52-final-save.json": { + "bytes": 1094, + "sha256": "4deda0e1574915d22d12365715bf7a4b163a781ac731cc1f5899413de17d00aa" + }, + "runs/run-1/app.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/app.stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-1/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/cversions.2.db": { + "bytes": 16384, + "sha256": "de800ec458c404e412158787a7bc6660fe54a2bc3b6903b31d07a661325056f0" + }, + "runs/run-1/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.ver0x0000000000000001.db": { + "bytes": 307760, + "sha256": "8c39c0f94044df6360f160a936cdebdd957dacf8da660cca02951181775ed226" + }, + "runs/run-1/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db": { + "bytes": 660376, + "sha256": "2b67a249b6048fe0d0ccf1d8623de840b17bc8579c75fcb8f2689f6c19115c31" + }, + "runs/run-1/evidence/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-1/evidence/expected-messages-and-lanes.arcadia": { + "bytes": 3546, + "sha256": "549683124b29612124445e5c0bd78146d4020ffcaa303d2c02ce616b49ac9a4c" + }, + "runs/run-1/evidence/expected-messages.arcadia": { + "bytes": 3546, + "sha256": "e1e799db0cb5cec4b47cfc1d03ac6e70f6b8f88aed8c4fff19ac2ba9f40abe8b" + }, + "runs/run-1/evidence/fixture-manifest.json": { + "bytes": 700, + "sha256": "70d5ba6a509688d393b8e9537abd6d11a063355988775faecbe44b31a10a60b2" + }, + "runs/run-1/evidence/inputs.json": { + "bytes": 136196, + "sha256": "c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381" + }, + "runs/run-1/evidence/native-harness.py": { + "bytes": 12196, + "sha256": "67d5f723b74a3ca147f531a859cfe6a6544e7c97c38ccbbc9727c03db07700c3" + }, + "runs/run-1/evidence/result.json": { + "bytes": 4455, + "sha256": "0fc72640a3bbb4bc3743009fbc196d2b6f25f41cb2b6db4bb0cc8d5182638289" + }, + "runs/run-1/evidence/source-proof.json": { + "bytes": 600, + "sha256": "27a0e2d80704a592ba280b6079e985e2b52f0b1aedd6eb84b79fba8469be9e9d" + }, + "runs/run-1/evidence/verify-captured.py": { + "bytes": 4926, + "sha256": "c3b78c02d931763215e53c6147ea6a953e53b4d916a0a4cd7f8bc83dbd0c5752" + }, + "runs/run-1/finished.json": { + "bytes": 452, + "sha256": "fb828f8b1d349259620979ee01beda1820107a91a86c2949efca6fdd030b8667" + }, + "runs/run-1/prepared.json": { + "bytes": 3317, + "sha256": "3096614014427d2c4d7d8bda0f41fb8008b032a49ffd69d3cc01c7801f3d04f6" + }, + "runs/run-1/snapshots/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-1/snapshots/baseline.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/baseline.evaluator.stdout.json": { + "bytes": 443, + "sha256": "1e54e702d775707d7e37ff5891ab227a2e3a79a93befefb2d426a9cfdab9ff4c" + }, + "runs/run-1/snapshots/baseline.json": { + "bytes": 785, + "sha256": "663d7d37f5431275ce3e721347bea4c55e3b8a4f215ffa445bd94a6ccc998506" + }, + "runs/run-1/snapshots/final-after-refusal-cancel.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + }, + "runs/run-1/snapshots/final-after-refusal-cancel.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/final-after-refusal-cancel.evaluator.stdout.json": { + "bytes": 848, + "sha256": "854a44bf3681b68a1203f8bf61ae9468a26a6744afdd2234a8633283e9fd8707" + }, + "runs/run-1/snapshots/final-after-refusal-cancel.json": { + "bytes": 823, + "sha256": "aa34ad67c659fee2ac2004586b4edd49f1149eca8d0cff031c781524d02d265d" + }, + "runs/run-1/snapshots/lane-move.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + }, + "runs/run-1/snapshots/lane-move.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/lane-move.evaluator.stdout.json": { + "bytes": 831, + "sha256": "3781abbab8e725b4225ce01254702d2981689f0d01211c919019172189b652f9" + }, + "runs/run-1/snapshots/lane-move.json": { + "bytes": 806, + "sha256": "0ef6330566252fc2f36b06afbaf99c7e93e5677ac2baee37f20e7376365efb70" + }, + "runs/run-1/snapshots/lane-redo.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + }, + "runs/run-1/snapshots/lane-redo.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/lane-redo.evaluator.stdout.json": { + "bytes": 831, + "sha256": "7ccb56562e906f6712795c8b606063bb7adeac31bbb11443b876ad99d4c6884b" + }, + "runs/run-1/snapshots/lane-redo.json": { + "bytes": 806, + "sha256": "471c3da22bcef9cb1a9bc16976c5b40d64909b37fdff0e664f0fa2bf1e6a1c46" + }, + "runs/run-1/snapshots/lane-undo.arcadia": { + "bytes": 3550, + "sha256": "89d180f4fb87882531a0a8ce7efe60d5b561ad06a4d54e364151d22d4167f7cd" + }, + "runs/run-1/snapshots/lane-undo.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/lane-undo.evaluator.stdout.json": { + "bytes": 633, + "sha256": "62f3340de4d97153fcbf54088e16d9fba7c7f08c76aa9099795db24f4f4857d8" + }, + "runs/run-1/snapshots/lane-undo.json": { + "bytes": 786, + "sha256": "0689de14971669c51e55bda418f84b46ecb110686da13616e770f9d2bd7a3ffb" + }, + "runs/run-1/snapshots/message-move.arcadia": { + "bytes": 3550, + "sha256": "89d180f4fb87882531a0a8ce7efe60d5b561ad06a4d54e364151d22d4167f7cd" + }, + "runs/run-1/snapshots/message-move.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/message-move.evaluator.stdout.json": { + "bytes": 636, + "sha256": "2679cf2f0422f366b8e3ac66ae44a9360f225b5ff4d1414ab6ffcecf49237458" + }, + "runs/run-1/snapshots/message-move.json": { + "bytes": 789, + "sha256": "c4cc7d359abf18fabfd29528a0cef349d08198a92d5f6ffd292d89584089a349" + }, + "runs/run-1/snapshots/message-offaxis.arcadia": { + "bytes": 3550, + "sha256": "89d180f4fb87882531a0a8ce7efe60d5b561ad06a4d54e364151d22d4167f7cd" + }, + "runs/run-1/snapshots/message-offaxis.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/message-offaxis.evaluator.stdout.json": { + "bytes": 639, + "sha256": "6cd4f5baa5efe01399613bffa21cf284bcc4511f0726ddfed555ea73e7de6f2f" + }, + "runs/run-1/snapshots/message-offaxis.json": { + "bytes": 792, + "sha256": "0415c17a5c1a062ba4e44650cbfb1a3177be6f7e56cc5c7a961f4c69c1cf26eb" + }, + "runs/run-1/snapshots/message-redo.arcadia": { + "bytes": 3550, + "sha256": "89d180f4fb87882531a0a8ce7efe60d5b561ad06a4d54e364151d22d4167f7cd" + }, + "runs/run-1/snapshots/message-redo.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/message-redo.evaluator.stdout.json": { + "bytes": 636, + "sha256": "bcfb793f4b87cbcb66b6786156764e64084301d6e22f5d8d738ce0566da02012" + }, + "runs/run-1/snapshots/message-redo.json": { + "bytes": 789, + "sha256": "8dfc5343a13cd1abbc5e6e33422d13dcf8b62edb4f5d0f96a39453f889dbcff7" + }, + "runs/run-1/snapshots/message-undo.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-1/snapshots/message-undo.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-1/snapshots/message-undo.evaluator.stdout.json": { + "bytes": 447, + "sha256": "614954b26dce6d0315b8cb712fa257ee05d442a47778a1f3ea06e4585d5d6931" + }, + "runs/run-1/snapshots/message-undo.json": { + "bytes": 789, + "sha256": "b190c228a9b3e36170a76f1e2b3f2020dfe9b54ec7a5c63b3ca7611967116dc9" + }, + "runs/run-1/started.json": { + "bytes": 758, + "sha256": "64dddc5458e707e2561b5bd1ba3b82f86a547fdce28c239060b3e6c0b100ad02" + }, + "runs/run-1/working.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + }, + "runs/run-2/01-reopen-process-0.jpg": { + "bytes": 100442, + "sha256": "de624844dcf72724ab93a3d8194ae02a18e33e38a3b28ddefdd4e1c281e27993" + }, + "runs/run-2/01-reopen-process.json": { + "bytes": 923, + "sha256": "e61eacbb8988211927f836d37ab87ce1984a303d935e5d533320c6985ecbb4f6" + }, + "runs/run-2/02-system-menu-0.jpg": { + "bytes": 99742, + "sha256": "d1eb511c6649bf47eb0655e5d829fa4d8009766fa06ba5549b403dc3ec81acc5" + }, + "runs/run-2/02-system-menu-1.jpg": { + "bytes": 4956, + "sha256": "1b33fc34741438282edbd352299d4844fb6762b3ed434365e302e03f408dfc04" + }, + "runs/run-2/02-system-menu.json": { + "bytes": 1539, + "sha256": "2192d1a3abb6185340e674c3a08e0fc344eae64f82555513a10aedf06e2fd600" + }, + "runs/run-2/03-maximized-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/03-maximized-1.jpg": { + "bytes": 107473, + "sha256": "bb921cdd6e61161cf5ba7ecee2ad65f7cdc0b3204772e883e4452d069185e593" + }, + "runs/run-2/03-maximized.json": { + "bytes": 1032, + "sha256": "9edf6e404e4739f4965af5f8853a556667dc16b97db45ea77233f78cfe4bbfab" + }, + "runs/run-2/04-open-request-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/04-open-request-1.jpg": { + "bytes": 105163, + "sha256": "18c267faa02b673eeb906c4e934c4827d617fb6fb237bc28a0fcdff2809cad48" + }, + "runs/run-2/04-open-request.json": { + "bytes": 1038, + "sha256": "09ea4dc733f9683b7652d912e912097ef7a9bb35f3ccd72e53fc7a21270fd612" + }, + "runs/run-2/05-file-picker-0.jpg": { + "bytes": 696, + "sha256": "1c553708713a77fe378f38300c5e1888c4bb165058359b8b5739b84f7d1f97e7" + }, + "runs/run-2/05-file-picker-1.jpg": { + "bytes": 100202, + "sha256": "c976f6cb87406a4a708f28d8ed565a54acca56ad995f43f0ffafb8d5c6f58921" + }, + "runs/run-2/05-file-picker.json": { + "bytes": 10101, + "sha256": "c6784c7f94c4e52174b0f63834939912212f3e2574ace90de9b8f2571104524c" + }, + "runs/run-2/06-filename-focus-0.jpg": { + "bytes": 696, + "sha256": "1c553708713a77fe378f38300c5e1888c4bb165058359b8b5739b84f7d1f97e7" + }, + "runs/run-2/06-filename-focus-1.jpg": { + "bytes": 100483, + "sha256": "e3ab7c65691c31e72735b5252311a4e42359ddbc6fda137cb90f929025b077a5" + }, + "runs/run-2/06-filename-focus.json": { + "bytes": 10107, + "sha256": "55e7a0a14327e35576fafb5ab8a777d4e72158219b92e202db710cf0bd1ddd57" + }, + "runs/run-2/07-reopen-path-0.jpg": { + "bytes": 696, + "sha256": "1c553708713a77fe378f38300c5e1888c4bb165058359b8b5739b84f7d1f97e7" + }, + "runs/run-2/07-reopen-path-1.jpg": { + "bytes": 100483, + "sha256": "e3ab7c65691c31e72735b5252311a4e42359ddbc6fda137cb90f929025b077a5" + }, + "runs/run-2/07-reopen-path.json": { + "bytes": 10101, + "sha256": "63415f66c3a1f6bac0c03ce8ba6ecf75eb660eecc84098c23b9c15618decdaae" + }, + "runs/run-2/08-refocus-filename-0.jpg": { + "bytes": 696, + "sha256": "1c553708713a77fe378f38300c5e1888c4bb165058359b8b5739b84f7d1f97e7" + }, + "runs/run-2/08-refocus-filename-1.jpg": { + "bytes": 100528, + "sha256": "554ae37a1f2778522c9dee0e7fe1fea567e9e0e0d07211144e38dc8a2e5ffc70" + }, + "runs/run-2/08-refocus-filename.json": { + "bytes": 10111, + "sha256": "197bccb01edba391e227cdff2f15f1606073788c391be92545a77fdc6d6e9dfb" + }, + "runs/run-2/09-reopen-path-retry-0.jpg": { + "bytes": 696, + "sha256": "1c553708713a77fe378f38300c5e1888c4bb165058359b8b5739b84f7d1f97e7" + }, + "runs/run-2/09-reopen-path-retry-1.jpg": { + "bytes": 103499, + "sha256": "8993ffc284a124492de1ec930e158ec4dccc5e3ac27391c1178bb2ac3a359ca0" + }, + "runs/run-2/09-reopen-path-retry.json": { + "bytes": 10113, + "sha256": "1091c9b99dad35754df80980fe1f4e529dba6a64974fe7fa9b8a1983f2c4b344" + }, + "runs/run-2/10-reopened-source-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/10-reopened-source-1.jpg": { + "bytes": 95273, + "sha256": "811c31962f7a788f54f5cd1fcb9389fcd11632f8fae9148734414bd1315863d4" + }, + "runs/run-2/10-reopened-source.json": { + "bytes": 1044, + "sha256": "ed3cd32c6bb148049104a83e1f4c579f92e2727a5caec9c45fd9a24759dc5fb3" + }, + "runs/run-2/11-reopened-behavior-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/11-reopened-behavior-1.jpg": { + "bytes": 121227, + "sha256": "7e229890fef4ab8c2e51bd3dd61f4aef83f0f6b3d5e080fe7a5ca34d84963409" + }, + "runs/run-2/11-reopened-behavior.json": { + "bytes": 1108, + "sha256": "5b20d004a2c93692047920c666a2fcbbf86479f979ebe96223dedbad3edd6c39" + }, + "runs/run-2/12-reopened-view-list-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/12-reopened-view-list-1.jpg": { + "bytes": 123372, + "sha256": "6f1435a8942a6bd37182ebb70efcb5047c104b1efacce4ec27724e86d0f50c43" + }, + "runs/run-2/12-reopened-view-list.json": { + "bytes": 1110, + "sha256": "23e4604a2bafd8bf8f05df0478637b548c672bd12bd33f0e9a08a0e2363010a9" + }, + "runs/run-2/13-reopened-saved-a-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/13-reopened-saved-a-1.jpg": { + "bytes": 120793, + "sha256": "5b3b3faf6d22d284761d6b7016f3557404028d80a3074390577c43fe98e57883" + }, + "runs/run-2/13-reopened-saved-a.json": { + "bytes": 1106, + "sha256": "492a8e6b062a18fa41693395451bd811e56ef5f969c097a4f99d4ec2a218cb58" + }, + "runs/run-2/14-reopened-actual-size-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/14-reopened-actual-size-1.jpg": { + "bytes": 124420, + "sha256": "fcf3351fdba3ad20444b29903ca704c3ac621a502a978c4ffb6b390d33a6c0e9" + }, + "runs/run-2/14-reopened-actual-size.json": { + "bytes": 1114, + "sha256": "5d88923b65a8b394faaf680ee20ffc3e8e2ff203283d3430d941a61440bf9931" + }, + "runs/run-2/15-reopened-save-0.jpg": { + "bytes": 722, + "sha256": "d89da17fb8517188426907d542e2b5f91098a2e8d121506b6e65506e40de865d" + }, + "runs/run-2/15-reopened-save-1.jpg": { + "bytes": 122546, + "sha256": "3e2e827ade04110a2c8a367c27f95fdda3d05890a6442e53a241d8cec37cc253" + }, + "runs/run-2/15-reopened-save.json": { + "bytes": 1100, + "sha256": "d0f291602e97418754003d12c551bb4adb9e0ab47387c8a3fcfb21beff263c80" + }, + "runs/run-2/app.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-2/app.stdout.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-2/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-2/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/cversions.2.db": { + "bytes": 16384, + "sha256": "de800ec458c404e412158787a7bc6660fe54a2bc3b6903b31d07a661325056f0" + }, + "runs/run-2/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.ver0x0000000000000001.db": { + "bytes": 307760, + "sha256": "8c39c0f94044df6360f160a936cdebdd957dacf8da660cca02951181775ed226" + }, + "runs/run-2/cwd/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db": { + "bytes": 660376, + "sha256": "2b67a249b6048fe0d0ccf1d8623de840b17bc8579c75fcb8f2689f6c19115c31" + }, + "runs/run-2/evidence/baseline.arcadia": { + "bytes": 3546, + "sha256": "b63d52fb32bb8f52a2ced83c1dbaa1b45cff915d8eb14cdf3c8eff561cfea8ad" + }, + "runs/run-2/evidence/expected-messages-and-lanes.arcadia": { + "bytes": 3546, + "sha256": "549683124b29612124445e5c0bd78146d4020ffcaa303d2c02ce616b49ac9a4c" + }, + "runs/run-2/evidence/expected-messages.arcadia": { + "bytes": 3546, + "sha256": "e1e799db0cb5cec4b47cfc1d03ac6e70f6b8f88aed8c4fff19ac2ba9f40abe8b" + }, + "runs/run-2/evidence/fixture-manifest.json": { + "bytes": 700, + "sha256": "70d5ba6a509688d393b8e9537abd6d11a063355988775faecbe44b31a10a60b2" + }, + "runs/run-2/evidence/inputs.json": { + "bytes": 136196, + "sha256": "c834d8403b9b82e5d17a0be38df288194cd9180c707744feeefec6d7465d8381" + }, + "runs/run-2/evidence/native-harness.py": { + "bytes": 12196, + "sha256": "67d5f723b74a3ca147f531a859cfe6a6544e7c97c38ccbbc9727c03db07700c3" + }, + "runs/run-2/evidence/result.json": { + "bytes": 4455, + "sha256": "0fc72640a3bbb4bc3743009fbc196d2b6f25f41cb2b6db4bb0cc8d5182638289" + }, + "runs/run-2/evidence/source-proof.json": { + "bytes": 600, + "sha256": "27a0e2d80704a592ba280b6079e985e2b52f0b1aedd6eb84b79fba8469be9e9d" + }, + "runs/run-2/evidence/verify-captured.py": { + "bytes": 4926, + "sha256": "c3b78c02d931763215e53c6147ea6a953e53b4d916a0a4cd7f8bc83dbd0c5752" + }, + "runs/run-2/finished.json": { + "bytes": 452, + "sha256": "747f32475677ef9e224bf0cd65fa01b26770cc94a74db65d168c932c55a1518a" + }, + "runs/run-2/prepared.json": { + "bytes": 3317, + "sha256": "6a2b36b1e1f1a8456af7b2dff9a33f854f12ae356cdce6f74e343785a662c97c" + }, + "runs/run-2/reopen-origin.json": { + "bytes": 316, + "sha256": "f1673e4cde0bc52ee71a7c4e6160c074343e63d6a9a7d2a2c100ac60830f2159" + }, + "runs/run-2/snapshots/reopened-save.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + }, + "runs/run-2/snapshots/reopened-save.evaluator.stderr.log": { + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "runs/run-2/snapshots/reopened-save.evaluator.stdout.json": { + "bytes": 835, + "sha256": "fc0c341835a200d1477ae1af0f7946e5292413f7bcee45b3b8aea30dcb0ab55e" + }, + "runs/run-2/snapshots/reopened-save.json": { + "bytes": 810, + "sha256": "9a143544eebe3a6d2553b7443ad00360e2aff6e2918f13ec94724a624ffa2401" + }, + "runs/run-2/started.json": { + "bytes": 758, + "sha256": "4abf4809242d2412ee5c5d6dd4254c11335531f839bf32c407d1e0e45970fecc" + }, + "runs/run-2/working.arcadia": { + "bytes": 3554, + "sha256": "360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5" + } + }, + "excluded_binary_bytes": { + "runs/run-1/bin/arcadia-studio.exe": { + "bytes": 119703552, + "sha256": "e74342f3e06a28f91d378a429661fc88e5b009ce60549b3a2611160d48d16cdc" + }, + "runs/run-1/bin/libunwind.dll": { + "bytes": 190976, + "sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4" + }, + "runs/run-2/bin/arcadia-studio.exe": { + "bytes": 119703552, + "sha256": "e74342f3e06a28f91d378a429661fc88e5b009ce60549b3a2611160d48d16cdc" + }, + "runs/run-2/bin/libunwind.dll": { + "bytes": 190976, + "sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4" + }, + "preflight/fixture-preflight-2/bin/arcadia.exe": { + "bytes": 20719104, + "sha256": "2044a6057b565069bcfe457e644ed3d527f3607ca9c0f8313d036d188d73796c" + }, + "preflight/fixture-preflight-2/bin/libunwind.dll": { + "bytes": 190976, + "sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4" + } + }, + "runs": [ + { + "name": "run-1", + "accepted": true, + "source_phases": { + "working.arcadia": "messages-and-lanes" + } + }, + { + "name": "run-2", + "accepted": true, + "source_phases": { + "working.arcadia": "messages-and-lanes" + } + } + ], + "limits": [ + "Executable/DLL bytes excluded; their hashes/build receipts retained. Offline verifier cannot rehash omitted binaries.", + "accepted is an explicit reviewer designation, checked against structural/source evidence; screenshots still need human review.", + "Failed closed attempts remain separate and are never silently relabelled accepted.", + "No native Shift claim unless separately evidenced; no release-publication assertion." + ] +} diff --git a/harness/scenario-group-spacing-evidence-20260924/native/native-evidence.zip b/harness/scenario-group-spacing-evidence-20260924/native/native-evidence.zip new file mode 100644 index 00000000..bfcbe8be Binary files /dev/null and b/harness/scenario-group-spacing-evidence-20260924/native/native-evidence.zip differ diff --git a/harness/scenario-group-spacing-evidence-20260924/native/verify.py b/harness/scenario-group-spacing-evidence-20260924/native/verify.py new file mode 100644 index 00000000..4cf5b19a --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/native/verify.py @@ -0,0 +1,99 @@ +"""Offline archive/source/lifetime evidence checks. Screenshots require independent human review.""" +from pathlib import Path,PurePosixPath +from decimal import Decimal +import argparse,hashlib,json,re,zipfile + +def pin(data):return {'bytes':len(data),'sha256':hashlib.sha256(data).hexdigest()} +def main(): + parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('directory',type=Path);args=parser.parse_args();root=args.directory.resolve() + manifest=json.loads((root/'manifest.json').read_text(encoding='utf-8'));raw=(root/'native-evidence.zip').read_bytes();assert pin(raw)==manifest['archive'],'Archive pin mismatch' + with zipfile.ZipFile(root/'native-evidence.zip') as archive: + names=archive.namelist();assert len(names)==len(set(names)) and set(names)==set(manifest['members']),'Archive member inventory mismatch' + for name in names: + p=PurePosixPath(name);assert not p.is_absolute() and '..' not in p.parts and '\\' not in name and ((archive.getinfo(name).external_attr>>16)&0o170000)!=0o120000,'Unsafe member' + files={name:archive.read(name) for name in names} + for name,data in files.items():assert pin(data)==manifest['members'][name],name + assert not any(PurePosixPath(n).suffix.lower() in ('.exe','.dll') for n in files),'Binary bytes unexpectedly included' + assert (root/'verify.py').read_bytes()==files['helpers/native-evidence-verify.py'],'External verifier differs from archived exact helper' + def js(name):return json.loads(files[name].decode('utf-8-sig')) + fixture=js('fixtures/fixture-manifest.json') + for name,expected in fixture['files'].items():assert pin(files['fixtures/'+name])==expected,'Fixture pin mismatch' + phase_names={'baseline':'baseline.arcadia','messages':'expected-messages.arcadia','messages-and-lanes':'expected-messages-and-lanes.arcadia'} + number=rb'[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?' + fields=[(rb'(occurrence @alpha_report; \}; send_y )('+number+rb')(;)',Decimal(184)),(rb'(occurrence @gamma_report; \}; send_y )('+number+rb')(;)',Decimal(384)),(rb'(lifeline @intake_lane; x )('+number+rb')(;)',Decimal(172)),(rb'(lifeline @review_lane; x )('+number+rb')(;)',Decimal(432))] + def check_source(actual,phase): + expected=files['fixtures/'+phase_names[phase]] + if phase=='baseline':assert actual==expected,'Baseline source differs';return + def section(data): + a=b' diagram trial_a ';b=b' diagram trial_b ';assert data.count(a)==data.count(b)==1 + start=data.index(a);end=data.index(b);assert start0,'No native capture observations retained') + reports.append({'run':run['name'],'reviewer_accepted':run['accepted'],'checks_pass':not problems,'problems':problems,'capture_records':captures}) + if run['accepted']:assert not problems,json.dumps(reports[-1],indent=2) + old=js('preflight/fixture-preflight-1/result.json') # Retained as history, never promoted to a pass. + current=js('preflight/fixture-preflight-2/result.json');assert current['status'].startswith('PASS') and current['cliUnchanged'] is True + cp='preflight/fixture-preflight-2/';cr=js(cp+'evidence/result.json');proof=js(cp+'evidence/source-proof.json') + assert current['receipt']==proof['result']==pin(files[cp+'evidence/result.json']) and current['proof']==pin(files[cp+'evidence/source-proof.json']) + cli=[a for a in cr['artifacts'] if a['cargo']['target']['name']=='arcadia' and not a['cargo']['profile']['test']];assert len(cli)==1 and cli[0]['readback']==current['cli']==manifest['excluded_binary_bytes'][cp+'bin/arcadia.exe'] + assert {check['fixture'] for check in current['checks']}==set(fixture['files']) and len(current['checks'])==3,'All three fixture preflights required' + assert cr['exitCode']==0 and cr['inputsUnchanged'] is True and current['source']==cr['head']==proof['commit'],'Current CLI closed source binding' + for check in current['checks']: + name=check['fixture'];assert check['exitCode']==0 and check['json_report'] and check['fixtureUnchanged'] + assert pin(files[cp+name+'.stdout.json'])==check['stdout'] and pin(files[cp+name+'.stderr.log'])==check['stderr'] + assert pin(files[cp+'fixtures/'+name])==fixture['files'][name] + report=js(cp+name+'.stdout.json');assert isinstance(report,dict) and report['operation']=='check' and report['exit_code']==0 and report['written'] is False and not any(d['severity']=='error' for d in report['diagnostics']),'Raw CLI report must independently confirm valid read-only check' + print(json.dumps({'status':'PASS offline archive, source and receipt consistency checks','runs':reports,'old_preflight_retained':True,'limitations':['Human visual/interaction claims not inferred from screenshots.','Omitted executable/DLL bytes cannot be rehashed offline.','Build input map/source proof consistency checked; Git blobs not independently available offline.','Failed attempts retained with accepted=false are reported, not silently asserted passing.']},indent=2)) +if __name__=='__main__': main() diff --git a/harness/scenario-group-spacing-evidence-20260924/review.md b/harness/scenario-group-spacing-evidence-20260924/review.md new file mode 100644 index 00000000..a55ce519 --- /dev/null +++ b/harness/scenario-group-spacing-evidence-20260924/review.md @@ -0,0 +1,87 @@ +# Scenario group spacing implementation review + +2026-09-24. Read-only review of the local, uncommitted extension outside prerelease #37. No Cargo, Git, network or GUI operation. Tests authored independently have not been executed by this reviewer. Reviewed the frozen pure implementation and the completed controller click correction. **No unresolved material finding in this reviewed implementation; build/test and native evidence remain separate.** + +## Addressed material finding + +**[P2] Preserve stationary click-to-collapse for mixed and unsupported groups.** `behavior.rs:2236-2248` classifies a saved-view hit as a group spacing hit solely by coordinate capability and the pressed role. Therefore an existing mixed selection containing a local lifeline and local message, plain-clicked on either selected spacing-role object, bypasses `ScenarioGroupPress`. The widget immediately publishes spacing Begin (`:2330-2349`). `spacing/controller.rs` routes the original set to `capture_group`, which correctly rejects mixed membership. `app/scenario_spacing.rs` consumes that failed Begin by advancing `canvas_epoch`, making the later release inert. The result is refusal without collapsing to the clicked member, whereas the prior deferred group-press path emits `Intent::Collapse` on a stationary release (`behavior.rs:2384-2404`). + +Rejecting the drag as a whole is required, but eligibility for moving the group should not remove the established selection-only click operation. Preserve a pending click/collapse route for ineligible groups, using exact original Context/Snapshot and Euclidean movement tracking; actual motion should refuse the whole group. A whole-set role preflight that retains the existing group_press path is one possible bounded fix. Add mounted tests for a lane+message group and a message+unsupported occurrence group: stationary click on each selected spacing-role member selects only it without a source/history change; motion retains the whole set and refuses; stale release after Context/selection change is inert. + +**Correction reinspected:** the final controller stores `group_refusal` with the full original Snapshot. An eligibility refusal may use a successfully captured pressed singleton only to establish the unchanged full-scene geometry and actual camera/hit witness. `Session::update` returns before `Drag::prepare` whenever that refusal exists, so neither a partial preview nor a singleton command can be constructed from this fallback. Finish returns Click if the Euclidean threshold was never crossed; after crossing it returns the retained whole-set refusal, including off-axis/out-and-back motion. Invalid actual baseline, camera or hit still fails Begin and retires its epoch through App. Group paint retains original membership and primary. This resolves the identified click regression without making movement eligibility a selection requirement. The newly read App tests cover mixed stationary clicks on both roles, whole-set drag refusal/replay, malformed Begin retirement and source-write failure; execution is pending outside this review. + +## Adapter findings without a defect so far + +- App admission checks complete Scenario Context and camera epoch, then shared selection context/generation before any status, session or model side effect. Non-Begin packets additionally require exact session token/stamp and `Selection::matches` against the immutable captured Snapshot, including ordered typed targets and primary. +- A valid Begin captures the complete current Snapshot. A selected nonprimary spacing-role hit reaches Begin without replacing the group or its primary. Group capture receives the original typed target slice rather than an eligible subset. +- Cancel, Finish, and otherwise admitted failed Begin retire the canvas epoch; old mismatched packets return before touching a newer session. Current disabled input cancels its own admitted session. This preserves the camera visit rather than treating a selection-only change as a camera navigation event. +- Session preview configures the full group Snapshot and captured primary in both original and prepared scenes. The workspace retains the Canvas structure and displays selected count with spacing feedback. +- Group threshold is Euclidean in screen pixels while spacing delta remains axis-specific. `ever_crossed` survives a return to origin: off-axis or out-and-back motion can finish with no prepared command rather than collapse. An actually stationary supported group click collapses to the pressed member. +- Finish takes the session and retires its epoch before execution. Group success restores the captured primary before synchronization/reconciliation; only successful document execution accepts the frozen camera. `Document::execute` prepares the candidate and source update before committing, so source-update failure leaves model/source/history uncommitted while the gesture is retired. + +## Frozen pure implementation review + +No additional concrete finding in `behavior/scenario/spacing.rs`. The typed group entrypoint rejects empty, duplicate, wrong-target-type, mixed-role, missing, and unpressed-member sets before planning. Every captured origin then requires exact local ownership, appropriate semantic role, and a unique actually rendered header/message; the message path checks actual sequence/operand membership and blocks cycles or foreign references. Cross-operand local groups remain permitted without changing parents. + +Planning uses frozen original display origins and the original Project, applies one common axis delta, deterministically orders commands independently of primary/pressed member/insertion order, and validates the final batch geometry. Any invalid member or final geometry refuses the whole plan. Skipping a member whose f32 coordinate is unchanged is a representational no-op, not an eligibility subset; it preserves missing/explicit overrides rather than manufacturing equivalent records. Zero/out-and-back input returns no command. Final candidate execution and source synchronization remain atomic through `Document::execute`. + +Challenged the newly shared singleton origin checks: direct local lifeline ownership and unique rendered message path are stricter than merely selecting a drawing by ID, but I found no valid preexisting local singleton spacing workflow excluded. They intentionally reject malformed, repeated, referenced or unrendered input; rendered unassigned local headers remain supported. This conclusion is static and still depends on the singleton regression gates passing. + +## Verification still needed + +Run the parent's focused evaluators. In particular retain coverage for first-press nonprimary group drag, primary/order preservation, mixed/unsupported full-set refusal, current failed-Begin retirement, stale terminal packets against newer sessions, selection/representation ABA, Euclidean off-axis and out-and-back behavior, source-failure atomicity, and unchanged camera/visit. Supported groups return Noop after off-axis/out-and-back motion; movement-ineligible groups refuse the whole set after crossing, and neither collapses. The Scene's existing cached-pointer event policy is retained: this review does not claim a new position source for a release lacking CursorMoved. This review is not build, native usability, or release acceptance. + +## Test-only correction review at 67534ce4 + +Independently compared `67534ce4a5fab29cb69b461f00d447eca2e7d12b` with failed source `3b113e5316724eca001cd92c5b8efed0a48ccc86` and read the retained run-1 failures (exit 101, unchanged inputs; 286 passed, 3 failed, 1 ignored). Only two test files changed. **No concrete concern that these three corrections hide a production defect.** No Cargo was run; the parent's run-2 result was not assumed. + +- The complete-group movement test previously assigned fixed expected X values to randomly generated lane identities. Its failure shows exactly those expected X values reversed between the two lane IDs; actual automatic lane positions follow identity order (`behavior.rs:1468`). The correction authors explicit starting lane/message positions before capture. The expected complete Project remains independently constructed from those literal positions plus the screen-to-world delta; it does not copy the production result. Both pressed members, lane/message cases, preview nonmutation, captured Snapshot, primary/set preservation, exact Undo/Redo source restoration and reopen checks remain. This particular App test now covers explicit initial layout; unchanged pure tests still cover absent overrides and group movement from automatically resolved origins. +- The Properties cancellation test used the controller-only packet helper's generation zero against a live App selection. Filling its stamp from the current Snapshot matches real workspace packet construction and the existing App packet helper; it does not bypass production admission. The test still requires a real held session and moved preview before opening Properties, then checks session cancellation, unchanged stored camera, inert late Finish, pointer-identical document snapshot and no history entries. +- The mounted modifier test now expects a spacing Finish for a stationary saved group click instead of the retired direct `Intent::Collapse` transport. It retains the actual singleton target assertion immediately afterward and the later exact primary, representation/visit, camera, original document/source and empty history/session assertions. Shift toggle counts and absence of spacing/reorder for Shift input remain checked. This changes an internal message expectation while preserving the selection-only behavior oracle. + +## Numeric annotation and evidence reuse at 4a27c8ef + +Compared final `4a27c8ef0b8f4954e208fdfda5efd2b41c240577` with 67534ce4: only the two test-oracle variables `x` and `y` acquire explicit `f32` annotations. Previously inferred f64 literal values 148, 240, 160 and 400 are exactly representable in f32, and `f64::from` then restores the same exact f64 values before the unchanged f64 delta addition and f32 result cast. There is no numeric change in the oracle and no production change. No material finding. + +Read the actual closed run-2 receipt/log: 289 passed, 0 failed, 1 ignored at 67534ce4, exit 0, inputs unchanged. Read the preserved clippy-1 failure at 67534ce4: two `useless_conversion` errors, exit 101, inputs unchanged. Final format-3 passes at 4a27c8ef. Clippy-2 had no closed receipt at review time. Reusing the executed 67534ce4 test evidence with final-source all-target lint (which checks the edited test code), product build and native exercise is proportionate for this exact annotation-only correction. Those final checks must actually pass and retain their own source pins; this conclusion neither invents their results nor represents the 289 tests as executed at 4a27c8ef. Further production edits or a concrete gate failure would require reassessing reuse. No Cargo was run by this reviewer. + +## Copy-only follow-up at 8d6fac47 + +Reviewed all four changed production files between 4a27c8ef and `8d6fac4701933c7ada13cc7e6e07060662aa7465` (7 insertions, 4 deletions). Three refusal/menu strings replace the obsolete blanket movement-unavailable wording with unavailable reordering/removal or current-selection movement refusal. The fourth adds a saved-group Select tooltip; its new conditional selects text only. No operation admission, captured-state lifecycle, command or geometry path changes. No material defect found, and reuse of the 67534ce4 executed-test result remains proportionate with final source gates and native verification kept distinct. + +Nonblocking wording observation sent to the parent: the saved-group tooltip is also shown for mixed/unsupported/fallback selections. “Drag a group of messages vertically or lifelines horizontally” would make homogeneous-group intent clearer than the current generic “Drag messages vertically or lifelines horizontally”; the actual full-set refusal remains enforced. + +Read the newly closed clippy-2 receipt: exit 0, unchanged inputs at 4a27c8ef. Format-4 likewise closed exit 0 at 8d6fac47. Build-1 has started for `cargo build -p oa-desktop -p oa-cli --message-format=json` at 8d6fac47; no closed build, final lint or native result is claimed here. The 289 tests remain an execution result at 67534ce4 only. + +## Native run-1 and helper audit + +Reviewed `native-evidence-package.py`, `native-evidence-verify.py` (the file copied as portable `verify.py`), run-1 launch/close/build/fixture records and selected original screenshots. **No material helper/schema or run-1 evidence mismatch found.** Run-2 fresh reopen was still separate ongoing work, and no final portable package had yet been audited. + +Independently rehashed every run-1 prepared immutable input, including the copied executable and DLL. The GUI is 119,703,552 bytes, SHA256 `e74342f3e06a28f91d378a429661fc88e5b009ce60549b3a2611160d48d16cdc`; it equals the uniquely identified non-test Studio artifact in the closed successful unchanged build at 8d6fac47. Source-proof/result/input-map bindings and the 811-input count agree. Started binds the exact prepared receipt. Finished records normal exit 0, immutable inputs unchanged, empty stdout/stderr, and final working source 3,554 bytes, SHA256 `360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5`. + +All nine actual source files outside immutable evidence (eight saved snapshots plus final working file) pass their declared phases. The checker permits only exact Decimal-equivalent numeric spelling at the predeclared changed A coordinates; baseline remains byte-exact, and every other byte, including B, must match the pinned expected fixture. This is explicit numeric spelling handling, not float tolerance or a claim that the whole moved source has identical raw bytes to the integer-spelled expectation. + +Exercised the complete offline verifier against an in-memory package assembled from actual run-1 records, both preflights, fixtures and helpers with the intended schema. It passed with no run problems and 52 capture records, including validation of all three current raw CLI check reports and retention of the differently shaped old failed preflight. This rehearsal wrote no archive/files and is not a final-package integrity result. The packager is create-only; actual final archive/member equality and run-2 origin binding still require their delivery audit. + +Viewed full original screenshots 15/16: both selected message lines move down while count two and Alpha primary remain; unselected Beta stays in place and the final status reports two-object spacing. Screenshot 43 shows count two, mixed Intake primary, and full-set refusal feedback. Screenshot 45 shows count one and Alpha primary after stationary collapse. These establish visible endpoints; precise first-press input sequence is the executing agent's observation, and exact model/source claims come from the byte checks. No native Shift, Escape key, full preview timing, or fresh-reopen outcome is inferred by this review. + +The original helper README/HARNESS/EVIDENCE files retain historical “prepared only/not run” statements. Keep those raw notes unchanged, but label them as preparation history in the final package's current report so they are not mistaken for the final run status. Executed tests remain 289/0/1 at 67534ce4; the final 8d6fac47 binary incorporates only the already reviewed test annotations and UI copy beyond that tested source. No product launch, build, or production edit occurred during this audit. + +## Final native reopen and delivered-package audit + +**No material package integrity or final-report overclaim found within this bounded audit.** Reviewed the final implementation report and root evidence index. They distinguish the 289 executed tests at 67534ce4 from final 8d6fac47 lint/build/native evidence, retain the two failed gates and obsolete-CLI preflight, explain historical helper names/preparation notes, and explicitly exclude combined integration, release and broad usability acceptance. + +Correction to the run-1 paragraph above: the retained directory contains **nine** `.arcadia` snapshots (baseline, final-after-refusal-cancel, lane-move, lane-redo, lane-undo, message-move, message-offaxis, message-redo and message-undo), plus the working file: **ten** actual source files. The earlier eight-snapshot/nine-file count was a review wording error. The final package verifier checks all nine snapshots and working source; all declared phases pass. Run 2 adds one reopened-save snapshot. + +Run 2 started at 2026-09-24T23:25:23.494008Z as PID 1036, after run 1 had closed, and finished normally at 23:27:42.098383Z with exit 0 and empty stdout/stderr. Independently rehashed its immutable files and checked the prepared/start bindings, distinct process, reopen-origin source/copy pins, snapshot sidecar and final receipt. The copied origin, launch input, reopened-save snapshot and final working source match run 1's actual saved 3,554-byte source SHA256 `360b9e24564a10cce3379a097bf30f33db5c583cceaaaf595fc595f662b556d5`. Both edited A groups therefore survive this fresh-process reopen/save without further source changes. + +Viewed run-2 original actual-size screenshot 14. Saved A visibly retains the two moved message/lane groups at 100%; exact coordinates are established by the source comparison. The Review-to-Archive gap is now 228, and Beta's white label backing visibly interrupts a short Archive lifeline section above Beta. Labels remain ellipsized. These are bounded visual/readability limitations, not evidence that stored group coordinates failed; the report discloses them and appropriately avoids broad readability/accessibility acceptance. Screenshot 09 shows the intended run-2 path after filename refocus/retry. The failed local binding attempt before any action is the executing agent's reported tool recovery; neither that nor the recorded dialog focus retry supports a product-failure claim. + +Ran both delivered portable verifiers successfully without launching Studio or Cargo. Checks: **10 closed runs, 2 preserved failures, 10 source proofs, 4 deduplicated source capsule pairs, 83 logical files and 71 stored members**, with 811 inputs per run. Native: **2 accepted closed runs, 67 capture records (52 + 15), 319 ZIP members and 6 explicitly excluded executable/DLL pins**. Independently compared all 80 archived raw Cargo/run files with their actual `.local/scenario-group-gates` originals. Independently verified all native member hashes and exact byte equality of its 318 retained raw/helper files to their local originals; the remaining member is generated review configuration matching the manifest. Also rehashed all six locally retained excluded binaries against their pins. This local binary rehash is additional review evidence; portable replay cannot rehash omitted bytes. Source proofs and artifact links were checked for internal agreement; this audit does not claim a new Git comparison of every captured input. + +Audited archive identities: + +- `checks/evidence.zip`: 12,897,498 bytes, SHA256 `d3de224502a2b7f8236d2ad82af6d6c57bb3a349468aebeea7369c3c3c267342`. +- `native/native-evidence.zip`: 6,069,072 bytes, SHA256 `27e0e189053fdfdbfcecd8c91ae718849448b090aab557afc7d9445af1ceaba8`. + +The root index resolves the nonblocking historical checks-README title/example mismatch by identifying reused schema names and listing the actual group-spacing runs; original pinned bytes remain untouched. The archived preparation notes are explicitly historical. Review remains limited to source reasoning, selected visual endpoints, retained receipts/source bytes and packaging consistency; it does not independently reproduce the executing agent's complete input sequence or exercise native Shift/Escape, intermediate preview frames, accessibility, or another platform. No production edits, builds, native actions, Git mutations or network operations were performed for this final audit.