Record current scenario comparator and GUI build evidence

This commit is contained in:
2026-09-13 07:59:31 -07:00
parent f69897bbb8
commit 04129a75f3
92 changed files with 46542 additions and 0 deletions
@@ -0,0 +1 @@
* -text -whitespace
@@ -0,0 +1,54 @@
# Current b10 comparators and GUI build
Both saved-source comparators built successfully and passed their self-checks at **[b10b28cefd1d0794073ba241a0c8de9a83e85f68](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/b10b28cefd1d0794073ba241a0c8de9a83e85f68)**. The desktop GUI build also completed successfully. This archive contains no native workflow pass or actual native saved-output comparison.
The spacing recipe's original directory includes `8bf7607` in its name. That is preparation ancestry, **not its tested source identity**: its current build and self-check receipts explicitly bind b10. Historical preparation wording inside copied READMEs is preserved; the closed receipts below establish these later results.
## Closed results
| Artifact | Actual result | Exact before/after input records |
| --- | --- | --- |
| Details comparator build | Exit 0, strict `rustc -D warnings`, empty compile log | 1,607 |
| Details self-check | Exit 0, all 13 reported checks passed, empty stderr | 637 |
| Spacing comparator build | Exit 0, strict `rustc -D warnings`, empty compile log | 963 |
| Spacing self-check | Exit 0, all seven reported checks passed | 13 |
| Desktop GUI build | Exit 0, `cargo build -p oa-desktop --bin arcadia-studio --locked --offline` | 612 source records unchanged |
The [Details self-check](details/self-check-01/project-comparison/self-check.json) admits the incident and service fixtures; checks the Name-only candidate and all six approved typed checkpoints; and rejects wrong occurrence, alias, semantic sequence, layout, signed-zero, invalid target/no-op, wrong checkpoint/Project identity and unknown expected-field variants. The immutable [typed expectations](details/expected-catalog.json) retain their independently published core provenance; no native output supplied expected values.
The [spacing self-check](spacing/self-check-b10-01/project-comparison/self-check.json) checks exact repair C from 300 to 424 and its inverse, A-lane-only change and inverse, other-view/name/Steps corruption rejection, repeated exchange occurrence distinction and signed-zero sensitivity. Its source, fixture and comparison logic are preserved. Neither self-check inspects a native editor buffer, camera, Document history stack or source-writing action.
Both independently decoded incident baseline JSON files are byte-identical. The Details service baseline also equals the independently approved baseline JSON. These checks support comparator consistency; they do not establish a GUI interaction or saved native checkpoint.
## Binding and preserved evidence
The Details [build receipt](details/build-01/build-receipt.json) uses the successful b10 **LIST** and its exact test-executable/dependency fingerprint graph. Its compile prerequisite is deliberately smaller than native staging. The spacing [build receipt](spacing/build-b10-01/build-receipt.json) uses the completed five-stage GUI gate and its production desktop -> core -> serde graph. Their rlibs need not have the same filename: the recipes verify the respective actual graph, compiler, source and lock bindings.
Both runtime checks bind the actual adjacent `libunwind.dll` before and after execution. The spacing build additionally records the source DLL and copied runtime separately. Small selected [Cargo fingerprint and dep-info records](fingerprint-inputs/) are preserved; executable/library/toolchain caches are not copied.
The new [GUI build receipt](gui/build-receipt.json), raw build log and source captures extend these already published prerequisites:
- [b10 LIST, focused tests and strict preflight at b09d9d5](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/b09d9d506347e9a00353ed86bedb98702a426142/harness/experiments/scenario-validation-focused-b10b28c-20260913/README.md).
- [b10 full desktop and combined strict results at f69897b](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/f69897bbb85506c0e00ced4332e328606f4e98b1/harness/experiments/scenario-validation-full-strict-b10b28c-20260913/README.md).
[Published-prerequisite mapping](published-prerequisites.json) identifies 49 exact gate inputs already present there. Their local published bytes were compared against current receipt-bound originals; unrelated old gate history is not duplicated. The frozen [native verifier](native-verifier/verify.ps1) and [environment recipe](environment/env.ps1) are included.
[Archive manifest](archive-manifest.json) records 87 copied originals totaling 2,471,043 bytes. Archival checks verified every copied byte, build/run manifest equality, receipt hashes and reference links, all output artifact hashes, 632 unique current comparator-source records, 649 unique current run inputs, current GUI source records and the listed binaries. The complete transitive dependency caches were not redundantly rehashed during archival; their closed before/after records are preserved. No comparator, compiler, native UI or Git mutation was executed during archival.
| Omitted executable | Bytes | SHA-256 |
| --- | ---: | --- |
| Details comparator | 19,775,488 | `996803f938b7503db8508adf9b7fc2dd379852b5b603463edf6987dd1e5270a6` |
| Spacing comparator | 22,720,512 | `ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62` |
| Desktop GUI | 116,721,152 | `7ece85c6012ae0ae75fc56ed3c3aadb8bc116448ad1782be422ef34a629dc3ce` |
Each omitted adjacent runtime DLL is 190,464 bytes, SHA-256 `aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a`. The full binary records, build/self-check receipt hashes and verification scope are in [verified-results.json](verified-results.json).
## Reproduction boundary
Reconstructing the prerequisite gate files from the published mapping supports historical verification of these records. It does not make their original absolute paths, executable hashes or artifact bindings valid after relocation.
Executable reproduction on a different machine requires **fresh local b10 gates**, local compiler/linker and native-library inputs, and actual local fingerprint/rlib bindings. Review path-adapted copies of the [Details recipe](details/README.md) and [spacing recipe](spacing/README.md) before running them. Keep spacing's `oracle/main.rs` one level below its fixture so the unchanged `include_str!` resolves correctly. Local runs produce new receipts and executable hashes; never substitute relocated files for the original bound artifacts or weaken checks to admit the historical hashes. This archive supplies source and historical metadata, not a bundled runnable build/cache.
Build into fresh output directories using each reviewed local recipe's explicit parameters. Details requires its fresh successful local LIST, reviewed `ReferenceReceipt`/SHA, `NativeVerifier`/SHA, `RuntimeDll`, fingerprint and rlib paths. Spacing requires reviewed `SourcePin`, its fresh complete local `Gate`, verifier/SHA, runtime and rlibs. Use each checker with the newly reviewed local EXE and build-receipt SHA for `self-check`. The original command arrays remain historical evidence; they are not ready-to-run commands for another host. Never rerun into the archived output directories.
Actual `name`, `typed`, `lane`, `message`, `repair-c` and checkpoint `same` comparisons still require independently captured native input/output checkpoints. GUI launch, Properties recovery, drag behavior, Save/reopen and Undo/Redo observations belong to separate native evidence. Raw-evidence `.gitattributes` prevents line-ending normalization; publication must force-add ignored logs.
@@ -0,0 +1,529 @@
{
"status": "Closed b10 comparators and GUI build originals; no native acceptance",
"file_count": 87,
"bytes": 2471043,
"files": [
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\adaptation-provenance.json",
"path": "details/adaptation-provenance.json",
"bytes": 4348,
"sha256": "87671203d9b1f191202aada5c5934ea1a61234cc1f8824f57c355c237b958647"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\adaptation.diff",
"path": "details/adaptation.diff",
"bytes": 22663,
"sha256": "b27d599221d16b1111eedc45a30f292052bcca7bb31ea391fa8cf69e805ff9c1"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build.ps1",
"path": "details/build.ps1",
"bytes": 15401,
"sha256": "d7bc60f65cb4e4e8dbd59aea1a7c59cc3cf06f81cd2820817fcabe4d9c29b2b4"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\check.ps1",
"path": "details/check.ps1",
"bytes": 11551,
"sha256": "1b942aa0b7bfe5427a1b36833a9dd18c4f836fa3130f22f41939523d00959a78"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected-catalog.json",
"path": "details/expected-catalog.json",
"bytes": 1974,
"sha256": "5607c2f3cd44aeb18b923f6afc42f82a693e4320778be69f7d1ce1d616e21a1a"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\main.rs",
"path": "details/main.rs",
"bytes": 11873,
"sha256": "502b488eae0b7775cb01e7de4580dfa6efece63389d6fb57dc782df2fad48af0"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\preparation-manifest.json",
"path": "details/preparation-manifest.json",
"bytes": 3105,
"sha256": "5cf46868b1b82ad63d65bfa3209cdb9a108857447fcc711079eb135fb6692fb8"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\README.md",
"path": "details/README.md",
"bytes": 8764,
"sha256": "02b72d55ff90e877ec574222fc56ea6c2924c9ce3d5f95179082bb0a50ea0b00"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\script-validation.json",
"path": "details/script-validation.json",
"bytes": 1685,
"sha256": "e243c0d48d888cdbc30bcb7cea9928dc3b8ad7b1c5778cd6f550d5760e56910f"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\source-inputs.json",
"path": "details/source-inputs.json",
"bytes": 2432,
"sha256": "db7a27108034653acc84e498cb0df375ed38df3884fad66099be473a3eb4bbfa"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\validate-scripts.ps1",
"path": "details/validate-scripts.ps1",
"bytes": 5300,
"sha256": "a97db54f8ac0a48f25879cb6dfe3d72efabc452ea6504a24a5161f81ff92dcee"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\fixtures\\incident-workspace.arcadia",
"path": "details/fixtures/incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\fixtures\\service-details.arcadia",
"path": "details/fixtures/service-details.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\after-1.expected.project.json",
"path": "details/expected/after-1.expected.project.json",
"bytes": 10578,
"sha256": "c03cf59f83bc1ae4db64584abf1257efc775cc47b49f2b2db4ac47159dfb90a0"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\after-3a.expected.project.json",
"path": "details/expected/after-3a.expected.project.json",
"bytes": 10495,
"sha256": "ce3d58385815d0a1d01320bdd711d707cb4c530f0614545eca2b83533077b6f0"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\after-3b.expected.project.json",
"path": "details/expected/after-3b.expected.project.json",
"bytes": 10487,
"sha256": "81f16c54db0e7be1960be5de6a89a6e16a56d6c62d45e15aa7f59bc9d85c8925"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\after-3c.expected.project.json",
"path": "details/expected/after-3c.expected.project.json",
"bytes": 10565,
"sha256": "3c4521eef6cf2a6024275f8c6bf5e9a55d7f6e10cb58c9cc846be56cfa121aca"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\after-3d.expected.project.json",
"path": "details/expected/after-3d.expected.project.json",
"bytes": 10565,
"sha256": "36dfe596c1e2f39a82795237f545787996e9138d9c160217611b201da14ce66a"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\expected\\baseline.project.json",
"path": "details/expected/baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\build-receipt.json",
"path": "details/build-01/build-receipt.json",
"bytes": 183126,
"sha256": "5c700a6b63ce1060c0091d6370d6e07b824fd871adb6bf89fd8c4a155b1c1c18"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\compile.log",
"path": "details/build-01/compile.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\details-source-oracle.d",
"path": "details/build-01/details-source-oracle.d",
"bytes": 3844,
"sha256": "c0efb7f3ff2677c42afecda5be83fb02ee96d962d827fc2c782f2efaa8e867c3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\inputs-after.json",
"path": "details/build-01/inputs-after.json",
"bytes": 411982,
"sha256": "fcfe7662e39efdcab4b2b002039b924065759db7b49a462ddccacf4a9c3e31db"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\inputs-before.json",
"path": "details/build-01/inputs-before.json",
"bytes": 411982,
"sha256": "fcfe7662e39efdcab4b2b002039b924065759db7b49a462ddccacf4a9c3e31db"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\toolchain.json",
"path": "details/build-01/toolchain.json",
"bytes": 784,
"sha256": "adb5aa1df8f734cbe9be73a6520be2dc8e9a67a2372f3147ba5e3d323ad25f8c"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-0.arcadia",
"path": "details/self-check-01/input-0.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-1.arcadia",
"path": "details/self-check-01/input-1.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\inputs-after.json",
"path": "details/self-check-01/inputs-after.json",
"bytes": 175927,
"sha256": "4dfe507684a6f319a1c11049123ed79fc3726a05f7e342e881edd4474050c802"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\inputs-before.json",
"path": "details/self-check-01/inputs-before.json",
"bytes": 175927,
"sha256": "4dfe507684a6f319a1c11049123ed79fc3726a05f7e342e881edd4474050c802"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\incident.baseline.project.json",
"path": "details/self-check-01/project-comparison/incident.baseline.project.json",
"bytes": 9452,
"sha256": "60dab6b528c1f273d2b076897a6f95c492a74cdaa15bd27cd873bf12ce865391"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\self-check.json",
"path": "details/self-check-01/project-comparison/self-check.json",
"bytes": 484,
"sha256": "62471fe9fe92746dea9253eb3e0e5ac326f35e4ccf927fc877a19c26f6aaa928"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\service.baseline.project.json",
"path": "details/self-check-01/project-comparison/service.baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\receipt.json",
"path": "details/self-check-01/receipt.json",
"bytes": 4372,
"sha256": "c0661ef118c3916073258961be43dd6cadca52a9548f4c647f08a96495c7e736"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\request.json",
"path": "details/self-check-01/request.json",
"bytes": 129,
"sha256": "7b6d280159217b38f71a1a98e85b5d4c8f8311370bb05c2ef982cfee1165b752"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\stderr.log",
"path": "details/self-check-01/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\stdout.log",
"path": "details/self-check-01/stdout.log",
"bytes": 55,
"sha256": "e196f844e223e514c2d060617424d8468da244fda4c7d42f42962a22c48345ff"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\adaptation-provenance.json",
"path": "spacing/adaptation-provenance.json",
"bytes": 2174,
"sha256": "cdc29cca911962a2e82c86b76a6df1522bfc652fe0d6e792933b3c23c09c274d"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\adaptation.diff",
"path": "spacing/adaptation.diff",
"bytes": 28087,
"sha256": "99752da765f45a30ab96e887c813dc381c40c48a6f767200c4d1b438696294b7"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-validation.json",
"path": "spacing/build-validation.json",
"bytes": 500,
"sha256": "716d38363c4fe5e12d486622b525e04ab2b3ff53a0d77bda10f0ccac4f667a7b"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\check-validation.json",
"path": "spacing/check-validation.json",
"bytes": 719,
"sha256": "d02e08b4fd0a2f78d20f1df4517fbe7f9ef235fa0d44ddb263342da6d0f23293"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\incident-workspace.arcadia",
"path": "spacing/incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\preparation-manifest.json",
"path": "spacing/preparation-manifest.json",
"bytes": 1552,
"sha256": "365a3171e746fd2c41bd2f880a9be4acccd856e8cf847e9fe5630c7fb36caeff"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\README.md",
"path": "spacing/README.md",
"bytes": 6903,
"sha256": "3c6d5f2d0dffcbae011f45eb3ff7b117cc1eef48f1f8eec1ea156718239d2144"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\build.ps1",
"path": "spacing/oracle/build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\check.ps1",
"path": "spacing/oracle/check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"path": "spacing/oracle/main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\build-receipt.json",
"path": "spacing/build-b10-01/build-receipt.json",
"bytes": 5266,
"sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\compile.log",
"path": "spacing/build-b10-01/compile.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-after.json",
"path": "spacing/build-b10-01/inputs-after.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-before.json",
"path": "spacing/build-b10-01/inputs-before.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\toolchain.json",
"path": "spacing/build-b10-01/toolchain.json",
"bytes": 1052,
"sha256": "ff562ce278b7eb0f1c572548d6292f8226c38ca6dceb201c14e13d38a2ccb344"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\baseline.arcadia",
"path": "spacing/self-check-b10-01/baseline.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\inputs-after.json",
"path": "spacing/self-check-b10-01/inputs-after.json",
"bytes": 3314,
"sha256": "64db782129474f2c3849c254666f4d859eb8ca336d85110e24f30982cc319f64"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\inputs-before.json",
"path": "spacing/self-check-b10-01/inputs-before.json",
"bytes": 3314,
"sha256": "64db782129474f2c3849c254666f4d859eb8ca336d85110e24f30982cc319f64"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\oracle.log",
"path": "spacing/self-check-b10-01/oracle.log",
"bytes": 48,
"sha256": "5a023d24624c0f1f0caaf95272c57e8432ae92389727a2c271128d8d061c9ec4"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\project-comparison\\baseline.project.json",
"path": "spacing/self-check-b10-01/project-comparison/baseline.project.json",
"bytes": 9452,
"sha256": "60dab6b528c1f273d2b076897a6f95c492a74cdaa15bd27cd873bf12ce865391"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\project-comparison\\self-check.json",
"path": "spacing/self-check-b10-01/project-comparison/self-check.json",
"bytes": 373,
"sha256": "430976bea19febe21f17a54114aeb67a47311f1d07384f1f501077df9ec959b5"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\receipt.json",
"path": "spacing/self-check-b10-01/receipt.json",
"bytes": 6833,
"sha256": "3991d486e8f452b3d3d670c208c5295780e3fc952651945c07daa46fe081486b"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\request.json",
"path": "spacing/self-check-b10-01/request.json",
"bytes": 201,
"sha256": "d154a00917059001e59f76b72a5577d5f540961c4223ed2828adf30bb077f01f"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\inputs-complete-build-before.json",
"path": "gui/inputs-complete-build-before.json",
"bytes": 119379,
"sha256": "74517a74ed2a31c8338a20e300eed9292f5e3776fcdea2cb1b6015b50c601218"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\inputs-complete-build-after.json",
"path": "gui/inputs-complete-build-after.json",
"bytes": 119379,
"sha256": "338a5072cebc767d54557bf921e5f05104c0043519c7139a44166121149bff37"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\build.log",
"path": "gui/build.log",
"bytes": 486,
"sha256": "6dc6cc0f7746a93a5e40fb4a3bc0892c24135ada3e422cdf88e23ccb67b7a870"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\build-receipt.json",
"path": "gui/build-receipt.json",
"bytes": 7801,
"sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\env.ps1",
"path": "environment/env.ps1",
"bytes": 572,
"sha256": "be2226f08764bb6961b4be8513ce55bab076890cddd2fef0f54a4031f94a82d4"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"path": "native-verifier/verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-86a2622fbe014324\\lib-oa_core",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-86a2622fbe014324/lib-oa_core",
"bytes": 16,
"sha256": "5cb8733ace0940951bb627dc8c2d4509fdcaaffa8cd7f9e533c8516daf8c27c8"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-86a2622fbe014324\\lib-oa_core.json",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-86a2622fbe014324/lib-oa_core.json",
"bytes": 772,
"sha256": "88d96b0eb1bcda67560e0247bc68fd3ef42af920484d25e402d65e9ac4362b32"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-27db9628b266bf39\\test-bin-arcadia-studio.json",
"path": "fingerprint-inputs/debug/.fingerprint/oa-desktop-27db9628b266bf39/test-bin-arcadia-studio.json",
"bytes": 1150,
"sha256": "25febdfc33c90fdb5a4d3a3bb2e70b77f27954560e049af3a2030e6aacb2b580"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-da2c4f333fc47818\\lib-serde_json",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-da2c4f333fc47818/lib-serde_json",
"bytes": 16,
"sha256": "e8cfaf50bfe2915903f506b08dac38787bb055882151fe786a2c061f35685b93"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-da2c4f333fc47818\\lib-serde_json.json",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-da2c4f333fc47818/lib-serde_json.json",
"bytes": 838,
"sha256": "03eccf1185608696b40525cef5939679537f47f50165c2b392c88c56e382e6cf"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\oa_core-86a2622fbe014324.d",
"path": "fingerprint-inputs/debug/deps/oa_core-86a2622fbe014324.d",
"bytes": 7208,
"sha256": "c6888aaa878efb9926303207a653833c83e62ad15691d29011602055b8534332"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\serde_json-da2c4f333fc47818.d",
"path": "fingerprint-inputs/debug/deps/serde_json-da2c4f333fc47818.d",
"bytes": 10193,
"sha256": "6ba2e798884b186f9062b8814d28f408af2ea2092350665d77236538b01cc072"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-3835d3237ee22542\\dep-lib-oa_core",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-3835d3237ee22542/dep-lib-oa_core",
"bytes": 1284,
"sha256": "62e6d80329a4051a75ba3e6df4957be332776ac1524b65cd126d369dd327b774"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-3835d3237ee22542\\invoked.timestamp",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-3835d3237ee22542/invoked.timestamp",
"bytes": 48,
"sha256": "5a109e6643e8d3e88642e3f35e85d2a83e639d07523aa6e99166c48178e965c3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-3835d3237ee22542\\lib-oa_core",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-3835d3237ee22542/lib-oa_core",
"bytes": 16,
"sha256": "d3235e101a32f012cacf4e20c572d08e902a6f18f606088ad0831bbb2912e2a9"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-core-3835d3237ee22542\\lib-oa_core.json",
"path": "fingerprint-inputs/debug/.fingerprint/oa-core-3835d3237ee22542/lib-oa_core.json",
"bytes": 775,
"sha256": "7238c444dcec1d4474b060e7f9bce2388bac1283ca26b6c656a4486630e2efa1"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-93232a492cc801eb\\bin-arcadia-studio",
"path": "fingerprint-inputs/debug/.fingerprint/oa-desktop-93232a492cc801eb/bin-arcadia-studio",
"bytes": 16,
"sha256": "4f1690f6fa3445a54910bb50e36053c60530266ee6632fab0834adbb3e49655d"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-93232a492cc801eb\\bin-arcadia-studio.json",
"path": "fingerprint-inputs/debug/.fingerprint/oa-desktop-93232a492cc801eb/bin-arcadia-studio.json",
"bytes": 964,
"sha256": "790b5c876789272c92210495849ab4376b42f5f7f6c362f96c0c0cf2a4a7f6bd"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-93232a492cc801eb\\dep-bin-arcadia-studio",
"path": "fingerprint-inputs/debug/.fingerprint/oa-desktop-93232a492cc801eb/dep-bin-arcadia-studio",
"bytes": 4083,
"sha256": "98b626a3d478401265cb490b1493b2a1d598216c45dd42752c4a80a6b6b7199f"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-93232a492cc801eb\\invoked.timestamp",
"path": "fingerprint-inputs/debug/.fingerprint/oa-desktop-93232a492cc801eb/invoked.timestamp",
"bytes": 48,
"sha256": "5a109e6643e8d3e88642e3f35e85d2a83e639d07523aa6e99166c48178e965c3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-39fc764f03e68759\\dep-lib-serde_json",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-39fc764f03e68759/dep-lib-serde_json",
"bytes": 14,
"sha256": "93a4afc37518a1bf7830744017176e1d1946e5df993e47159069839f61fe49ab"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-39fc764f03e68759\\invoked.timestamp",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-39fc764f03e68759/invoked.timestamp",
"bytes": 48,
"sha256": "5a109e6643e8d3e88642e3f35e85d2a83e639d07523aa6e99166c48178e965c3"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-39fc764f03e68759\\lib-serde_json",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-39fc764f03e68759/lib-serde_json",
"bytes": 16,
"sha256": "2612b3fdb48fa98fab7968213f13a11d9932ba55ca583ea067511ce4218956ca"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\serde_json-39fc764f03e68759\\lib-serde_json.json",
"path": "fingerprint-inputs/debug/.fingerprint/serde_json-39fc764f03e68759/lib-serde_json.json",
"bytes": 825,
"sha256": "0c32384d23cdead1524307b8c3e07693d379d3f7727d021784cd9a052e5291a0"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-93232a492cc801eb.d",
"path": "fingerprint-inputs/debug/deps/arcadia_studio-93232a492cc801eb.d",
"bytes": 17120,
"sha256": "0d1b31f24762fa158bf44a11b14c87670c63c6825fbc6e7959a193d7e93fb020"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\oa_core-3835d3237ee22542.d",
"path": "fingerprint-inputs/debug/deps/oa_core-3835d3237ee22542.d",
"bytes": 7208,
"sha256": "2faf28837972491aec29f8d5df7b6e5ef42ee9ebb2343eff6e77ab1ee7dfc66d"
},
{
"source": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\serde_json-39fc764f03e68759.d",
"path": "fingerprint-inputs/debug/deps/serde_json-39fc764f03e68759.d",
"bytes": 9624,
"sha256": "38a48c08af17942c4d6e376465abd50bd4d3fa0bb6178767c98840bf43d9fd5c"
}
]
}
@@ -0,0 +1,61 @@
# Details saved-source comparator for b10 (prepared, uncompiled)
This is a fresh recipe copied from the previous comparator. The old directory, compiled executable and closed self-check evidence remain untouched. Rust main, two fixtures, six expected JSON files and catalog are byte-identical; their previous acceptance is historical, not a current-source run. No current LIST receipt or verifier hash is inferred from a filename.
This is a separate core-only evaluator. It does not change the spacing oracle or product. `name` compares an independently captured pre-edit incident source Project with an actual saved source, allowing only the supplied element's exact new Name. `typed` compares an actual saved service source with one of six independently authored, published core checkpoints. There is no generic ignore list and no field projection.
Both source inputs use actual `source_files::load_project`, `compile_bundle`, unchanged compiled-versus-input SourceBundle, exactly one reachable file, and empty-batch core admission. Full Project JSON object keys are sorted only; arrays and serialized scalars remain exact, including signed zero. UUIDs, aliases, scenario.steps, other records, replies, types and every saved view remain part of the comparison. Formatting/comments may differ between two source files, but neither parse may need migration or identity insertion. This does not inspect the desktop's accepted source buffer or history.
## Independent expectations
The exact incident Name task already declared by the native plan is element `70200000-0000-4000-8000-000000000020`, from `Initial incident report` to `Initial incident report [Details trial]`. Capture the pre-edit source and its SHA **before** that edit; do not derive a baseline or NewName from the result. Save the working fixture at the intended accepted Name checkpoint before comparing. Revert/Undo equality checks can continue using the existing spacing oracle's `same` mode. This new Name mode refuses unchanged names and Diagram IDs; the native SavedB case checks inspector access, not a Diagram-name mutation.
`expected/` contains exact baseline/1/3a/3b/3c/3d JSON bytes from the [published core evidence](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/698126e1a0b9ab37cb3cac4339ffcf3a6bf0a340/harness/experiments/scenario-service-details-core-20260913/README.md). These were produced independently of future native output. `expected-catalog.json` binds each checkpoint SHA and fixture identity. The runner rejects any other expected bytes; Rust also requires the exact embedded approved bytes, complete Project round-trip, correct service owner/view and core admission. The five edit checkpoints are cumulative as specified in that fixture: payload edit, Reply annotation removal, operation/field replacement, Reply annotation addition, final pressure edit. A rejected change after task1 compares to checkpoint1. No expected value is learned from Actual.
## Deferred build
No comparator compilation or execution has occurred. The builder requires the **closed successful exactb10 desktop LIST**, actual1095 names,301 focused membership, and its hash-bound `expected-inputs.json` with `base=b10`, `count=612` and exactly612 `files`, plus the bound test EXE and matching test fingerprint. The current gate has no `finalization.json`; the recipe does not invent or require one. It checks desktop -> core, desktop -> serde_json and core -> serde_json fingerprint edges, same compiler fingerprint, Cargo.lock/core/all source inputs, actual compiler/linker versions and link/search artifacts before/after. This is sufficient for the core-only evaluator; it does not invoke the native verifier's five-stage admission. The reused verifier supplies read-only source/membership helpers only. Its path and reviewed SHA256 are required explicit build arguments, as are the closed LIST path and reviewed SHA256. No hash is guessed or baked in before parent review. The new canonical source-path selection asserts every intended local/product source record is included before invoking the compiler; omitted or duplicate fixture records are rejected. Native staging still requires all five gates.
Only after the parent grants the exclusive compiler slot:
```powershell
./build.ps1 -SourcePin 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' `
-ReferenceReceipt $ReviewedB10ListReceipt -ReferenceReceiptSha256 $ReviewedB10ListReceiptSha256 `
-NativeVerifier $ReviewedB10NativeVerifier -NativeVerifierSha256 $ReviewedB10NativeVerifierSha256 `
-RuntimeDll $VerifiedToolchainRuntimeDll `
-DesktopFingerprint '<absolute actual oa-desktop-.../test-bin-arcadia-studio.json>' `
-CoreRlib '<absolute matching liboa_core-....rlib>' `
-SerdeJsonRlib '<absolute matching libserde_json-....rlib>' `
-WindowsImportLibDirectory '<absolute windows_x86_64_gnullvm-0.52.6/lib>' `
-Output '<fresh build evidence directory>'
```
RuntimeDll is required explicitly; use the verified toolchain libunwind.dll, exactly190464 bytes/SHA256 aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a. No old private-package default remains. The builder hashes it among inputs, copies it adjacent to the comparator only after successful linking, and records path/size/SHA. No global PATH or profile changes occur. Rlib names above are deliberately not guessed: the explicit paths must pass the actual closed-list/fingerprint checks. Build with `-D warnings`; preserve a failure rather than reuse its output directory.
## Deferred execution
The checker requires explicit reviewed EXE and build-receipt SHA256 values. It verifies the successful build, before/after manifests, compile/toolchain receipts, current comparator plus all bound source inputs, and the **actual adjacent libunwind.dll** before and after execution. It snapshots native source/expected input files before invoking the comparator with a child-only package/Windows PATH. Each run needs a fresh output directory and preserves stdout/stderr, decoded expected/actual JSON, request, before/after inputs and final receipt. It does not stage or run the desktop.
```powershell
# Define these from the successfully reviewed build receipt, never placeholders:
$exe = '<absolute details-source-oracle.exe>'
$exeSha = '<64-hex reviewed executable SHA>'
$receipt = '<absolute build-receipt.json>'
$receiptSha = '<64-hex reviewed receipt SHA>'
./check.ps1 -OracleExe $exe -OracleSha256 $exeSha -BuildReceipt $receipt -BuildReceiptSha256 $receiptSha `
-Mode self-check -Output '<fresh self-check directory>'
./check.ps1 -OracleExe $exe -OracleSha256 $exeSha -BuildReceipt $receipt -BuildReceiptSha256 $receiptSha `
-Mode name -Baseline '<immutable pre-edit incident.arcadia>' -BaselineSha256 '<previously recorded SHA>' `
-Actual '<saved named incident.arcadia>' -Target '70200000-0000-4000-8000-000000000020' `
-NewName 'Initial incident report [Details trial]' -Output '<fresh name comparison directory>'
./check.ps1 -OracleExe $exe -OracleSha256 $exeSha -BuildReceipt $receipt -BuildReceiptSha256 $receiptSha `
-Mode typed -ExpectedProject './expected/after-1.expected.project.json' -Checkpoint '1' `
-Actual '<saved service-details.arcadia after task1>' -Output '<fresh typed comparison directory>'
```
The prepared Rust self-check admits both real fixtures, checks all six approved typed checkpoints and the actual service baseline, and falsifies wrong occurrence, extra alias, reordered semantic steps, extra layout change, signed-zero collapse, non-element target, unchanged Name, wrong checkpoint, wrong expected Project identity and unknown expected fields. These assertions are **unexecuted** until the parent builds/runs the comparator. PowerShell syntax checks are not Rust compilation or fixture self-check acceptance. `./validate-scripts.ps1` also invokes only three pure definitions extracted from the actual builder: exact artifact-hash admission, current LIST metadata admission and canonical source-record selection. The preparation check reads the actual LIST-bound expected-inputs schema as its positive example; synthetic old counts/pin, missing/extra input records, failed/unbound LIST, wrong hashes and missing/unnormalized/duplicate fixture records must reject. It never invokes the builder body, native helper, compiler or comparator.
Scope: complete parsed saved Project and passive parse nonmutation only. No runtime Scene/camera/editor state, actual click/selection, draft recovery, Undo stack, source-writer transaction or native acceptance is established. Core command/history evidence remains the separate published probe; the desktop source-writing and native observations still have to be exercised.
@@ -0,0 +1,93 @@
{
"status": "Prepared only; no compiler/oracle/gate execution; current successful LIST and parent-reviewed verifier are required later",
"source_commit": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"expected_contract": {
"desktop": 1095,
"focused": 301,
"source_inputs": 612
},
"original_directory": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-20260913",
"byte_identical_files": [
{
"path": "main.rs",
"bytes": 11873,
"sha256": "502b488eae0b7775cb01e7de4580dfa6efece63389d6fb57dc782df2fad48af0"
},
{
"path": "expected-catalog.json",
"bytes": 1974,
"sha256": "5607c2f3cd44aeb18b923f6afc42f82a693e4320778be69f7d1ce1d616e21a1a"
},
{
"path": "fixtures/incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "fixtures/service-details.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"path": "expected/after-1.expected.project.json",
"bytes": 10578,
"sha256": "c03cf59f83bc1ae4db64584abf1257efc775cc47b49f2b2db4ac47159dfb90a0"
},
{
"path": "expected/after-3a.expected.project.json",
"bytes": 10495,
"sha256": "ce3d58385815d0a1d01320bdd711d707cb4c530f0614545eca2b83533077b6f0"
},
{
"path": "expected/after-3b.expected.project.json",
"bytes": 10487,
"sha256": "81f16c54db0e7be1960be5de6a89a6e16a56d6c62d45e15aa7f59bc9d85c8925"
},
{
"path": "expected/after-3c.expected.project.json",
"bytes": 10565,
"sha256": "3c4521eef6cf2a6024275f8c6bf5e9a55d7f6e10cb58c9cc846be56cfa121aca"
},
{
"path": "expected/after-3d.expected.project.json",
"bytes": 10565,
"sha256": "36dfe596c1e2f39a82795237f545787996e9138d9c160217611b201da14ce66a"
},
{
"path": "expected/baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
}
],
"original_scripts": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-20260913\\build.ps1",
"bytes": 13669,
"sha256": "eb4cea60c2b483b2507f792bf3e6feaa1c7d741a484f561e11a994e70e326e80"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-20260913\\check.ps1",
"bytes": 11515,
"sha256": "dba9dbad6ac27eead3334d913d303d92d5f406df30e317d18d708511ce2a8d48"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-20260913\\validate-scripts.ps1",
"bytes": 684,
"sha256": "94923b46cf98fcd03ad02e03bb433011b49727a8a1819b04374a560d5673d868"
}
],
"candidate_native_helper": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
},
"candidate_helper_status": "Source-read utility compatibility only; parent review pending; required parameter remains explicit, no helper invocation",
"reference_receipt": "No build receipt argument selected or hash adopted; LIST read only to verify expected-inputs binding for the preparation guard. Build still requires explicit reviewed ReferenceReceiptSha256.",
"changed_scope": "Fresh source/count guards, explicit reviewed LIST/verifier hashes and RuntimeDll, canonical source-record selection; preserved Rust/expected comparison and complete dependency/source/runtime binding",
"review_correction": "Use actual LIST-bound expected-inputs.json base/count/files schema (b10/612/612), not nonexistent finalization.json; pure tests read real positive schema and reject source/count/missing/extra variants.",
"expected_inputs_schema": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\expected-inputs.json",
"bytes": 114759,
"sha256": "f720f1e2f7f31bd4188e9b624cf0324439958ae23dcb7c48c9ecc16cc7ed6131"
}
}
@@ -0,0 +1,207 @@
--- old/build.ps1
+++ b10/build.ps1
@@ -3,18 +3,20 @@
param(
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{40}$')][string]$SourcePin,
[Parameter(Mandatory=$true)][string]$ReferenceReceipt,
+ [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$ReferenceReceiptSha256,
[Parameter(Mandatory=$true)][string]$DesktopFingerprint,
[Parameter(Mandatory=$true)][string]$CoreRlib,
[Parameter(Mandatory=$true)][string]$SerdeJsonRlib,
[Parameter(Mandatory=$true)][string]$Output,
[Parameter(Mandatory=$true)][string]$WindowsImportLibDirectory,
- [string]$NativeVerifier=(Join-Path $PSScriptRoot '../scenario-details-native-8bf7607-20260913/verify.ps1'),
- [string]$RuntimeDll='C:/Users/User/Documents/Git/ARCADIA-Studio/.local/navigation-rename-native-a49b0ec-20260913/package/libunwind.dll'
+ [Parameter(Mandatory=$true)][string]$NativeVerifier,
+ [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$NativeVerifierSha256,
+ [Parameter(Mandatory=$true)][string]$RuntimeDll
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
-$pin='8bf7607a3f3b53db0c36364f54f57674c64ea2f1'
-if($SourcePin -cne $pin){throw 'Exact reviewed8bf source required'}
+$pin='b10b28cefd1d0794073ba241a0c8de9a83e85f68'
+if($SourcePin -cne $pin){throw 'Exact reviewedb10 source required'}
$workspace=(Resolve-Path (Join-Path $PSScriptRoot '../scenario-spacing-ytr83r-20260913')).Path
$root=(Resolve-Path (Join-Path $PSScriptRoot '../..')).Path
$deps=[IO.Path]::GetFullPath((Join-Path $root 'target/debug/deps'))
@@ -27,25 +29,42 @@
$stream=[IO.File]::Open($path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read)
try{$bytes=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 20)+"`n");$stream.Write($bytes,0,$bytes.Length)}finally{$stream.Dispose()}
}
+function Assert-ReviewedHash([string]$Actual,[string]$Expected) {
+ if($Expected -cnotmatch '^[0-9a-f]{64}$' -or $Actual -cne $Expected){throw 'Explicit reviewed artifact hash differs'}
+}
+function Assert-ListPreparation($Reference,$Selection,$ExpectedInputs) {
+ if($Reference.base -cne 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' -or $Reference.stage -cne 'list' -or $Reference.cargoExitCode -ne 0 -or -not $Reference.selectionValid -or -not $Reference.inputsUnchanged -or -not $Reference.testBinaryBindingValid -or $null -ne $Reference.postflightFailure){throw 'Closed successful exactb10 LIST required'}
+ if($Selection.source_commit -cne $Reference.base -or $Selection.expected_desktop_count -ne 1095 -or $Selection.expected_count -ne 301 -or $ExpectedInputs.base -cne $Reference.base -or $ExpectedInputs.count -ne 612 -or @($ExpectedInputs.files).Count -ne 612){throw 'Wrong1095/301/612 list preparation'}
+ if(($Reference.listSummaries|Measure-Object tests -Sum).Sum -ne 1095 -or ($Reference.listSummaries|Measure-Object benchmarks -Sum).Sum -ne 0){throw 'Actual list totals differ'}
+}
+function Select-SourceRecords($Inputs,$Paths) {
+ if(@($Paths).Count -ne @($Paths|Sort-Object -Unique).Count){throw 'Duplicate expected source path'}
+ @(foreach($path in $Paths){
+ if([IO.Path]::GetFullPath($path) -cne $path){throw 'Noncanonical expected source path'}
+ $rows=@($Inputs|Where-Object {$_.path -ceq $path});if($rows.Count -ne 1){throw 'Missing or duplicate build source record'};$rows[0]
+ })
+}
function Assert-Source {
Push-Location -LiteralPath $workspace
try{if((git rev-parse HEAD) -cne $pin -or $LASTEXITCODE -ne 0){throw 'Wrong core reference source pin'};if(@(git status --porcelain).Count -or $LASTEXITCODE -ne 0){throw 'Reference source must be clean'}}finally{Pop-Location}
}
Assert-Source
$ReferenceReceipt=(Resolve-Path -LiteralPath $ReferenceReceipt).Path
+Assert-ReviewedHash (Hash $ReferenceReceipt) $ReferenceReceiptSha256
$reference=Json $ReferenceReceipt
-if($reference.base -cne $pin -or $reference.stage -cne 'list' -or $reference.workspace -ine $workspace -or [IO.Path]::GetFullPath($reference.target) -ine [IO.Path]::GetFullPath((Join-Path $root 'target'))){throw 'Reference must be the exact8bf LIST in the original spacing workspace/target'}
+if($reference.base -cne $pin -or $reference.stage -cne 'list' -or $reference.workspace -ine $workspace -or [IO.Path]::GetFullPath($reference.target) -ine [IO.Path]::GetFullPath((Join-Path $root 'target'))){throw 'Reference must be the exactb10 LIST in the original spacing workspace/target'}
if($reference.cargoExitCode -ne 0 -or -not $reference.selectionValid -or -not $reference.inputsUnchanged -or -not $reference.testBinaryBindingValid -or $null -ne $reference.postflightFailure){throw 'A closed successful desktop receipt with executable binding is required'}
$evidence=Split-Path $ReferenceReceipt
# Reuse read-only source/name helpers only. Do not require the five native stages here.
+$NativeVerifier=(Resolve-Path -LiteralPath $NativeVerifier).Path
+Assert-ReviewedHash (Hash $NativeVerifier) $NativeVerifierSha256
. $NativeVerifier
-$nativePin=$pin;$nativeInputCount=611
+$nativePin=$pin;$nativeInputCount=612
Assert-CurrentNativeSource $evidence
$selection=Json (Join-Path $evidence 'expected-tests.json')
-$final=Json (Join-Path $evidence 'finalization.json')
-if($selection.source_commit -cne $pin -or $selection.expected_desktop_count -ne 1089 -or $selection.expected_count -ne 295 -or $final.base -cne $pin -or $final.sourceCount -ne 611){throw 'Wrong1089/295/611 list preparation'}
+$expectedInputs=Json (Join-Path $evidence 'expected-inputs.json')
+Assert-ListPreparation $reference $selection $expectedInputs
Assert-NativeNames $selection.desktop_tests $reference.listedTests
-if(($reference.listSummaries|Measure-Object tests -Sum).Sum -ne 1089 -or ($reference.listSummaries|Measure-Object benchmarks -Sum).Sum -ne 0){throw 'Actual list totals differ'}
foreach($binding in $reference.boundScriptAndInputHashes.PSObject.Properties){if((Hash (Join-Path $evidence $binding.Name)) -cne $binding.Value){throw 'Bound listing recipe changed'}}
if((Hash (Join-Path $evidence 'list.log')) -cne $reference.rawLogSha256){throw 'Actual listing log changed'}
@@ -92,7 +111,7 @@
$coreSerdeEdge=@($coreJson.deps|Where-Object {$_[1] -ceq 'serde_json'})
if($coreSerdeEdge.Count -ne 1 -or [UInt64]$coreSerdeEdge[0][3] -ne [UInt64]$serdeEdge[0][3]){throw 'Core serde_json linkage differs from selected desktop dependency'}
$coreInputs=@((Json $capturePath).files)
-if($coreInputs.Count -ne 611){throw 'Closed receipt does not enumerate core source inputs'}
+if($coreInputs.Count -ne 612){throw 'Closed receipt does not enumerate core source inputs'}
foreach($inputFile in $coreInputs){if((Hash (Join-Path $workspace $inputFile.path)) -cne $inputFile.sha256){throw ('Core source differs from compiled reference: '+$inputFile.path)}}
if(Test-Path -LiteralPath $Output){throw 'Output must be a new evidence directory'}
$Output=[IO.Path]::GetFullPath($Output)
@@ -106,10 +125,11 @@
$sysroot=Join-Path $toolchain 'lib/rustlib/x86_64-pc-windows-gnullvm/lib'
$wrapper=Join-Path $PSScriptRoot 'main.rs'
$sourceManifest=Json (Join-Path $PSScriptRoot 'source-inputs.json')
-$sources=@(foreach($f in $sourceManifest.files){$p=Join-Path $PSScriptRoot $f.path;if((Get-Item -LiteralPath $p).Length -ne $f.bytes -or (Hash $p) -cne $f.sha256){throw 'Prepared comparator source changed'};$p})
+$sources=@(foreach($f in $sourceManifest.files){$p=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot $f.path)).Path;if((Get-Item -LiteralPath $p).Length -ne $f.bytes -or (Hash $p) -cne $f.sha256){throw 'Prepared comparator source changed'};$p})
$runtimeSourcePaths=@(($sources+@($PSCommandPath,$NativeVerifier,(Join-Path $PSScriptRoot 'source-inputs.json'))+@($coreInputs|ForEach-Object {Join-Path $workspace $_.path}))|ForEach-Object {(Resolve-Path -LiteralPath $_).Path}|Sort-Object -Unique)
$runtimeHash='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'
-if((Hash $RuntimeDll) -cne $runtimeHash){throw 'Wrong pinned runtime DLL'}
+$RuntimeDll=(Resolve-Path -LiteralPath $RuntimeDll).Path
+if((Get-Item -LiteralPath $RuntimeDll).Length -ne 190464 -or (Hash $RuntimeDll) -cne $runtimeHash){throw 'Wrong pinned runtime DLL'}
function Inputs {
$paths=@((Join-Path $PSScriptRoot 'source-inputs.json'),$NativeVerifier,$PSCommandPath,$ReferenceReceipt,$DesktopFingerprint,$versionPath,$capturePath,$testExe,$environment,$rustc,$clang,$RuntimeDll,(Join-Path $toolchain 'bin/rustc.exe'),(Join-Path $workspace 'Cargo.lock'),(Join-Path $workspace 'Cargo.toml'),(Join-Path $workspace 'crates/oa-core/Cargo.toml'))+$sources+$selectedRecords+@($coreInputs|ForEach-Object {Join-Path $workspace $_.path})
$paths+=@($reference.boundScriptAndInputHashes.PSObject.Properties|ForEach-Object {Join-Path $evidence $_.Name})+@((Join-Path $evidence 'list.log'),$beforeCapture)
@@ -117,7 +137,7 @@
@($paths|ForEach-Object {(Resolve-Path -LiteralPath $_).Path}|Sort-Object -Unique|ForEach-Object {$item=Get-Item -LiteralPath $_;[ordered]@{path=$item.FullName;bytes=$item.Length;sha256=(Hash $item.FullName)}})
}
[void][IO.Directory]::CreateDirectory($Output)
-$before=@(Inputs);Save 'inputs-before.json' $before
+$before=@(Inputs);$sourceRecords=@(Select-SourceRecords $before $runtimeSourcePaths);Save 'inputs-before.json' $before
$PSNativeCommandUseErrorActionPreference=$false
$rustcVersion=@(& $rustc --version --verbose 2>&1|ForEach-Object ToString);$rustcExit=$LASTEXITCODE
$clangVersion=@(& $clang --version 2>&1|ForEach-Object ToString);$clangExit=$LASTEXITCODE
@@ -131,7 +151,7 @@
$end=[DateTime]::UtcNow.ToString('o')
$unchanged=$false;$failure=$null
try{
- $after=@(Inputs);Save 'inputs-after.json' $after
+ $after=@(Inputs);[void](Select-SourceRecords $after $runtimeSourcePaths);Save 'inputs-after.json' $after
if(($before|ConvertTo-Json -Depth 6 -Compress) -cne ($after|ConvertTo-Json -Depth 6 -Compress)){throw 'A source/link input changed'}
Assert-Source
Assert-CurrentNativeSource $evidence
@@ -145,6 +165,6 @@
if($runtimeInput.Count -ne 1 -or (Hash (Join-Path $Output 'libunwind.dll')) -cne $runtimeInput[0].sha256){throw 'Staged runtime differs from bound input'}
}catch{$unchanged=$false;$failure=$_.Exception.Message}
}
-Save 'build-receipt.json' @{source_commit=$pin;reference_receipt=$ReferenceReceipt;reference_receipt_sha256=(Hash $ReferenceReceipt);command=@($rustc)+$argsForRustc;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;source_files=@($before|Where-Object {$_.path -cin $runtimeSourcePaths});runtime_path=(Join-Path $Output 'libunwind.dll');runtime_bytes=(Get-Item -LiteralPath $RuntimeDll).Length;runtime_sha256=(Hash $RuntimeDll);before_manifest_sha256=(Hash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path (Join-Path $Output 'inputs-after.json')){Hash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Hash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Hash (Join-Path $Output 'compile.log'));tests_executed=$false;scope='Core-only comparator compilation bound to the exact successful8bf desktop LIST, not a GUI/native gate. Source/cache link inputs are unchanged; execution remains separate.'}
+Save 'build-receipt.json' @{source_commit=$pin;native_verifier=@{path=$NativeVerifier;sha256=$NativeVerifierSha256};reference_receipt=$ReferenceReceipt;reference_receipt_sha256=(Hash $ReferenceReceipt);command=@($rustc)+$argsForRustc;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;source_files=$sourceRecords;runtime_path=(Join-Path $Output 'libunwind.dll');runtime_bytes=(Get-Item -LiteralPath $RuntimeDll).Length;runtime_sha256=(Hash $RuntimeDll);before_manifest_sha256=(Hash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path (Join-Path $Output 'inputs-after.json')){Hash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Hash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Hash (Join-Path $Output 'compile.log'));tests_executed=$false;scope='Core-only comparator compilation bound to the exact successfulb10 desktop LIST, not a GUI/native gate. Source/cache link inputs are unchanged; execution remains separate.'}
if($exit -ne 0 -or -not $unchanged -or $null -eq $binary -or $binary.bytes -le 0){throw 'Isolated compilation or input provenance failed; preserve evidence'}
Write-Output 'Details comparator compiled only; self-check and saved-source comparison remain separate. No GUI/native acceptance.'
--- old/check.ps1
+++ b10/check.ps1
@@ -27,12 +27,12 @@
$build=Read-Json $BuildReceipt
$exe=(Resolve-Path -LiteralPath $OracleExe).Path
$buildDir=Split-Path -Parent ((Resolve-Path -LiteralPath $BuildReceipt).Path)
-if($build.source_commit -cne '8bf7607a3f3b53db0c36364f54f57674c64ea2f1' -or $build.exit_code -ne 0 -or -not $build.inputs_unchanged -or $null -ne $build.postflight_failure -or $build.binary.path -ine $exe -or $build.binary.sha256 -cne $OracleSha256 -or (Get-Item -LiteralPath $exe).Length -ne $build.binary.bytes){throw 'Successful exact8bf comparator build required'}
+if($build.source_commit -cne 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' -or $build.exit_code -ne 0 -or -not $build.inputs_unchanged -or $null -ne $build.postflight_failure -or $build.binary.path -ine $exe -or $build.binary.sha256 -cne $OracleSha256 -or (Get-Item -LiteralPath $exe).Length -ne $build.binary.bytes){throw 'Successful exactb10 comparator build required'}
$proofFiles=@([ordered]@{name='inputs-before.json';sha=$build.before_manifest_sha256},[ordered]@{name='inputs-after.json';sha=$build.after_manifest_sha256},[ordered]@{name='toolchain.json';sha=$build.toolchain_sha256},[ordered]@{name='compile.log';sha=$build.compile_log_sha256})
foreach($f in $proofFiles){if((Hash (Join-Path $buildDir $f.name)) -cne $f.sha){throw 'Build evidence changed'}}
$buildBefore=@(Read-Json (Join-Path $buildDir 'inputs-before.json'));$buildAfter=@(Read-Json (Join-Path $buildDir 'inputs-after.json'))
if(($buildBefore|ConvertTo-Json -Depth 8 -Compress) -cne ($buildAfter|ConvertTo-Json -Depth 8 -Compress)){throw 'Build input manifests differ'}
-if(@($build.source_files).Count -lt 611){throw 'Complete source input binding missing'}
+if(@($build.source_files).Count -lt 612){throw 'Complete source input binding missing'}
$buildPaths=@{};foreach($f in $buildBefore){if($buildPaths.ContainsKey($f.path)){throw 'Duplicate build input'};$buildPaths[$f.path]=$f}
foreach($f in $build.source_files){if(-not $buildPaths.ContainsKey($f.path) -or $buildPaths[$f.path].bytes -ne $f.bytes -or $buildPaths[$f.path].sha256 -cne $f.sha256){throw 'Source record not bound by build manifest'}}
if((Hash $build.reference_receipt) -cne $build.reference_receipt_sha256){throw 'Closed list reference changed'}
@@ -40,11 +40,11 @@
$referenceCapture=Join-Path (Split-Path -Parent $build.reference_receipt) 'inputs-complete-list-after.json'
if($reference.base -cne $build.source_commit -or $reference.stage -cne 'list' -or $reference.cargoExitCode -ne 0 -or -not $reference.inputsUnchanged -or -not $reference.selectionValid -or (Hash $referenceCapture) -cne $reference.afterCaptureSha256){throw 'Exact successful list/source capture missing'}
$compiledSources=Read-Json $referenceCapture
-if($compiledSources.count -ne 611 -or @($compiledSources.files).Count -ne 611){throw 'Expected all611 compiled source inputs'}
+if($compiledSources.count -ne 612 -or @($compiledSources.files).Count -ne 612){throw 'Expected all612 compiled source inputs'}
foreach($f in $compiledSources.files){$path=(Resolve-Path -LiteralPath (Join-Path $reference.workspace $f.path)).Path;$match=@($build.source_files|Where-Object {$_.path -ieq $path});if($match.Count -ne 1 -or $match[0].bytes -ne $f.bytes -or $match[0].sha256 -cne $f.sha256){throw 'A compiled source file is missing from the build/runtime source binding'}}
Assert-Records $build.source_files
$runtime=Join-Path (Split-Path -Parent $exe) 'libunwind.dll'
-if($build.runtime_path -ine $runtime -or $build.runtime_sha256 -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a' -or (Hash $runtime) -cne $build.runtime_sha256 -or (Get-Item -LiteralPath $runtime).Length -ne $build.runtime_bytes){throw 'Actual adjacent runtime DLL differs from build binding'}
+if($build.runtime_bytes -ne 190464 -or $build.runtime_path -ine $runtime -or $build.runtime_sha256 -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a' -or (Hash $runtime) -cne $build.runtime_sha256 -or (Get-Item -LiteralPath $runtime).Length -ne $build.runtime_bytes){throw 'Actual adjacent runtime DLL differs from build binding'}
$catalog=Read-Json (Join-Path $PSScriptRoot 'expected-catalog.json')
$sourceManifest=Read-Json (Join-Path $PSScriptRoot 'source-inputs.json')
foreach($f in $sourceManifest.files){$path=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot $f.path)).Path;$matching=@($build.source_files|Where-Object {$_.path -ieq $path});if($matching.Count -ne 1 -or $matching[0].bytes -ne $f.bytes -or $matching[0].sha256 -cne $f.sha256){throw 'Current comparator source is not the compiled source'}}
--- old/validate-scripts.ps1
+++ b10/validate-scripts.ps1
@@ -6,4 +6,48 @@
if(@($errors).Count){throw ($errors|Out-String)}
[ordered]@{path=$name;bytes=(Get-Item -LiteralPath $path).Length;sha256=(Get-FileHash -LiteralPath $path -Algorithm SHA256).Hash.ToLowerInvariant()}
})
-[ordered]@{status='parsed';scripts=$records;compiler_executed=$false;oracle_executed=$false;scope='PowerShell syntax only. Rust self-checks prepared but unexecuted.'}|ConvertTo-Json -Depth 5
+# Load only the three pure guard definitions from the actual builder AST.
+$tokens=$null;$errors=$null
+$ast=[Management.Automation.Language.Parser]::ParseFile((Join-Path $PSScriptRoot 'build.ps1'),[ref]$tokens,[ref]$errors)
+foreach($name in @('Assert-ReviewedHash','Assert-ListPreparation','Select-SourceRecords')){
+ $nodes=@($ast.FindAll({param($n)$n -is [Management.Automation.Language.FunctionDefinitionAst] -and $n.Name -ceq $name},$true))
+ if($nodes.Count -ne 1){throw 'Pure guard definition missing/ambiguous'}
+ . ([scriptblock]::Create($nodes[0].Extent.Text))
+}
+$pin='b10b28cefd1d0794073ba241a0c8de9a83e85f68'
+$expectedPath=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot '../scenario-validation-gates-b10b28c-20260913/expected-inputs.json')).Path
+$actualExpected=Get-Content -Raw -LiteralPath $expectedPath|ConvertFrom-Json
+$expectedHash=(Get-FileHash -LiteralPath $expectedPath -Algorithm SHA256).Hash.ToLowerInvariant()
+$actualList=Get-Content -Raw -LiteralPath (Join-Path (Split-Path -Parent $expectedPath) 'list-receipt.json')|ConvertFrom-Json
+if($actualList.boundScriptAndInputHashes.'expected-inputs.json' -cne $expectedHash){throw 'Actual expected-inputs schema example is not LIST-bound'}
+$good=[ordered]@{reference=@{base=$pin;stage='list';cargoExitCode=0;selectionValid=$true;inputsUnchanged=$true;testBinaryBindingValid=$true;postflightFailure=$null;listSummaries=@(@{tests=1095;benchmarks=0})};selection=@{source_commit=$pin;expected_desktop_count=1095;expected_count=301};expected=$actualExpected}
+$json=$good|ConvertTo-Json -Depth 8
+Assert-ListPreparation $good.reference $good.selection $good.expected
+Assert-ReviewedHash ('a'*64) ('a'*64)
+$sourcePaths=@('C:\probe\main.rs','C:\probe\fixtures\incident.arcadia')
+$sourceRecords=@($sourcePaths|ForEach-Object {[pscustomobject]@{path=$_;bytes=1;sha256=('0'*64)}})
+if(@(Select-SourceRecords $sourceRecords $sourcePaths).Count -ne 2){throw 'Canonical source selection failed'}
+$cases=@(
+ @{name='old_source';mutate={param($v)$v.reference.base='8bf7607a3f3b53db0c36364f54f57674c64ea2f1'}},
+ @{name='not_list';mutate={param($v)$v.reference.stage='clippy'}},
+ @{name='failed_list';mutate={param($v)$v.reference.cargoExitCode=1}},
+ @{name='changed_inputs';mutate={param($v)$v.reference.inputsUnchanged=$false}},
+ @{name='missing_binary_binding';mutate={param($v)$v.reference.testBinaryBindingValid=$false}},
+ @{name='postflight_failure';mutate={param($v)$v.reference.postflightFailure='changed'}},
+ @{name='old_desktop_count';mutate={param($v)$v.selection.expected_desktop_count=1089}},
+ @{name='old_focused_count';mutate={param($v)$v.selection.expected_count=295}},
+ @{name='old_source_count';mutate={param($v)$v.expected.count=611}},
+ @{name='missing_source_record';mutate={param($v)$v.expected.files=@($v.expected.files|Select-Object -First 611)}},
+ @{name='extra_source_record';mutate={param($v)$v.expected.files=@($v.expected.files)+@($v.expected.files[0])}},
+ @{name='wrong_expected_source';mutate={param($v)$v.expected.base=('0'*40)}},
+ @{name='wrong_actual_listing';mutate={param($v)$v.reference.listSummaries[0].tests=1094}}
+)
+$rejections=@();foreach($case in $cases){$v=$json|ConvertFrom-Json;& $case.mutate $v;$rejected=$false;try{Assert-ListPreparation $v.reference $v.selection $v.expected}catch{$rejected=$true};if(-not $rejected){throw ('Admitted '+$case.name)};$rejections+=@($case.name)}
+foreach($hashes in @(@{actual=('b'*64);expected=('a'*64)},@{actual=('a'*64);expected=''})){
+ $rejected=$false;try{Assert-ReviewedHash $hashes.actual $hashes.expected}catch{$rejected=$true};if(-not $rejected){throw 'Unreviewed artifact hash admitted'};$rejections+=@('wrong_or_missing_reviewed_hash')
+}
+$badRecords=@([pscustomobject]@{path='C:\probe\main.rs';bytes=1;sha256=('0'*64)},[pscustomobject]@{path='C:\probe\oracle\..\fixtures\incident.arcadia';bytes=1;sha256=('0'*64)})
+foreach($case in @(@{name='missing_fixture';rows=@($sourceRecords[0])},@{name='uncanonical_fixture';rows=$badRecords},@{name='duplicate_fixture';rows=(@($sourceRecords)+@($sourceRecords[1]))})){
+ $rejected=$false;try{Select-SourceRecords $case.rows $sourcePaths|Out-Null}catch{$rejected=$true};if(-not $rejected){throw ('Admitted '+$case.name)};$rejections+=@($case.name)
+}
+[ordered]@{status='passed';scripts=$records;positive_cases=3;negative_cases=$rejections;actual_expected_inputs=@{path=$expectedPath;sha256=$expectedHash;base=$actualExpected.base;count=$actualExpected.count;file_count=@($actualExpected.files).Count};compiler_executed=$false;oracle_executed=$false;gate_admitted=$false;scope='AST and actual pure builder guards only, with synthetic metadata. Actual LIST-bound expected-inputs schema read; no full gate/fingerprint selection or source admission executed.'}|ConvertTo-Json -Depth 8
@@ -0,0 +1,13 @@
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\build-01\details-source-oracle.d: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\main.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/incident-workspace.arcadia C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/service-details.arcadia C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/baseline.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-1.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3a.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3b.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3c.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3d.expected.project.json
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\build-01\details-source-oracle.exe: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\main.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/incident-workspace.arcadia C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/service-details.arcadia C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/baseline.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-1.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3a.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3b.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3c.expected.project.json C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3d.expected.project.json
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\main.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/incident-workspace.arcadia:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\fixtures/service-details.arcadia:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/baseline.project.json:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-1.expected.project.json:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3a.expected.project.json:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3b.expected.project.json:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3c.expected.project.json:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-details-source-oracle-b10b28c-20260913\expected/after-3d.expected.project.json:
@@ -0,0 +1,20 @@
{
"clang": [
"clang version 23.1.1 (https://github.com/llvm/llvm-project.git 6dfe1677ab8dffbc6ec13d53a1e0215d75147689)",
"Target: x86_64-w64-windows-gnu",
"Thread model: posix",
"InstalledDir: C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin",
"Configuration file: C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin/x86_64-w64-windows-gnu.cfg"
],
"clang_exit": 0,
"rustc": [
"rustc 1.98.1 (48a229cea 2026-09-01)",
"binary: rustc",
"commit-hash: 48a229ceaefd4985c50990b14116b6d856af0985",
"commit-date: 2026-09-01",
"host: x86_64-pc-windows-gnullvm",
"release: 1.98.1",
"LLVM version: 22.1.8"
],
"rustc_exit": 0
}
@@ -0,0 +1,170 @@
#Requires -Version 7.0
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{40}$')][string]$SourcePin,
[Parameter(Mandatory=$true)][string]$ReferenceReceipt,
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$ReferenceReceiptSha256,
[Parameter(Mandatory=$true)][string]$DesktopFingerprint,
[Parameter(Mandatory=$true)][string]$CoreRlib,
[Parameter(Mandatory=$true)][string]$SerdeJsonRlib,
[Parameter(Mandatory=$true)][string]$Output,
[Parameter(Mandatory=$true)][string]$WindowsImportLibDirectory,
[Parameter(Mandatory=$true)][string]$NativeVerifier,
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$NativeVerifierSha256,
[Parameter(Mandatory=$true)][string]$RuntimeDll
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
$pin='b10b28cefd1d0794073ba241a0c8de9a83e85f68'
if($SourcePin -cne $pin){throw 'Exact reviewedb10 source required'}
$workspace=(Resolve-Path (Join-Path $PSScriptRoot '../scenario-spacing-ytr83r-20260913')).Path
$root=(Resolve-Path (Join-Path $PSScriptRoot '../..')).Path
$deps=[IO.Path]::GetFullPath((Join-Path $root 'target/debug/deps'))
$fingerprints=[IO.Path]::GetFullPath((Join-Path $root 'target/debug/.fingerprint'))
$native=(Resolve-Path -LiteralPath $WindowsImportLibDirectory).Path
function Hash([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
function Json([string]$Path){Get-Content -Raw -LiteralPath $Path|ConvertFrom-Json}
function Save([string]$Name,$Value){
$path=Join-Path $Output $Name
$stream=[IO.File]::Open($path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read)
try{$bytes=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 20)+"`n");$stream.Write($bytes,0,$bytes.Length)}finally{$stream.Dispose()}
}
function Assert-ReviewedHash([string]$Actual,[string]$Expected) {
if($Expected -cnotmatch '^[0-9a-f]{64}$' -or $Actual -cne $Expected){throw 'Explicit reviewed artifact hash differs'}
}
function Assert-ListPreparation($Reference,$Selection,$ExpectedInputs) {
if($Reference.base -cne 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' -or $Reference.stage -cne 'list' -or $Reference.cargoExitCode -ne 0 -or -not $Reference.selectionValid -or -not $Reference.inputsUnchanged -or -not $Reference.testBinaryBindingValid -or $null -ne $Reference.postflightFailure){throw 'Closed successful exactb10 LIST required'}
if($Selection.source_commit -cne $Reference.base -or $Selection.expected_desktop_count -ne 1095 -or $Selection.expected_count -ne 301 -or $ExpectedInputs.base -cne $Reference.base -or $ExpectedInputs.count -ne 612 -or @($ExpectedInputs.files).Count -ne 612){throw 'Wrong1095/301/612 list preparation'}
if(($Reference.listSummaries|Measure-Object tests -Sum).Sum -ne 1095 -or ($Reference.listSummaries|Measure-Object benchmarks -Sum).Sum -ne 0){throw 'Actual list totals differ'}
}
function Select-SourceRecords($Inputs,$Paths) {
if(@($Paths).Count -ne @($Paths|Sort-Object -Unique).Count){throw 'Duplicate expected source path'}
@(foreach($path in $Paths){
if([IO.Path]::GetFullPath($path) -cne $path){throw 'Noncanonical expected source path'}
$rows=@($Inputs|Where-Object {$_.path -ceq $path});if($rows.Count -ne 1){throw 'Missing or duplicate build source record'};$rows[0]
})
}
function Assert-Source {
Push-Location -LiteralPath $workspace
try{if((git rev-parse HEAD) -cne $pin -or $LASTEXITCODE -ne 0){throw 'Wrong core reference source pin'};if(@(git status --porcelain).Count -or $LASTEXITCODE -ne 0){throw 'Reference source must be clean'}}finally{Pop-Location}
}
Assert-Source
$ReferenceReceipt=(Resolve-Path -LiteralPath $ReferenceReceipt).Path
Assert-ReviewedHash (Hash $ReferenceReceipt) $ReferenceReceiptSha256
$reference=Json $ReferenceReceipt
if($reference.base -cne $pin -or $reference.stage -cne 'list' -or $reference.workspace -ine $workspace -or [IO.Path]::GetFullPath($reference.target) -ine [IO.Path]::GetFullPath((Join-Path $root 'target'))){throw 'Reference must be the exactb10 LIST in the original spacing workspace/target'}
if($reference.cargoExitCode -ne 0 -or -not $reference.selectionValid -or -not $reference.inputsUnchanged -or -not $reference.testBinaryBindingValid -or $null -ne $reference.postflightFailure){throw 'A closed successful desktop receipt with executable binding is required'}
$evidence=Split-Path $ReferenceReceipt
# Reuse read-only source/name helpers only. Do not require the five native stages here.
$NativeVerifier=(Resolve-Path -LiteralPath $NativeVerifier).Path
Assert-ReviewedHash (Hash $NativeVerifier) $NativeVerifierSha256
. $NativeVerifier
$nativePin=$pin;$nativeInputCount=612
Assert-CurrentNativeSource $evidence
$selection=Json (Join-Path $evidence 'expected-tests.json')
$expectedInputs=Json (Join-Path $evidence 'expected-inputs.json')
Assert-ListPreparation $reference $selection $expectedInputs
Assert-NativeNames $selection.desktop_tests $reference.listedTests
foreach($binding in $reference.boundScriptAndInputHashes.PSObject.Properties){if((Hash (Join-Path $evidence $binding.Name)) -cne $binding.Value){throw 'Bound listing recipe changed'}}
if((Hash (Join-Path $evidence 'list.log')) -cne $reference.rawLogSha256){throw 'Actual listing log changed'}
$versionPath=Join-Path $evidence 'toolchain-versions.json'
$versions=Json $versionPath
if((Hash $versionPath) -cne $reference.toolchainVersionsSha256){throw 'Changed toolchain record'}
$capturePath=Join-Path $evidence ('inputs-complete-'+$reference.stage+'-after.json')
if((Hash $capturePath) -cne $reference.afterCaptureSha256){throw 'Changed source capture'}
$beforeCapture=Join-Path $evidence 'inputs-complete-list-before.json'
if((Hash $beforeCapture) -cne $reference.beforeCaptureSha256){throw 'Changed before capture'}
Assert-InputPair (Json $beforeCapture) (Json $capturePath)
$locks=@((Json $capturePath).files|Where-Object path -CEQ 'Cargo.lock')
if($locks.Count -ne 1 -or (Hash (Join-Path $workspace 'Cargo.lock')) -cne $locks[0].sha256){throw 'Reference dependency graph differs from experiment lockfile'}
$DesktopFingerprint=(Resolve-Path -LiteralPath $DesktopFingerprint).Path
$desktop=Json $DesktopFingerprint
$folder=Split-Path $DesktopFingerprint -Parent
if((Split-Path $DesktopFingerprint -Leaf) -cne 'test-bin-arcadia-studio.json' -or (Split-Path $folder -Leaf) -cnotmatch '^oa-desktop-([0-9a-f]{16})$'){throw 'Explicit desktop test fingerprint required'}
if((Split-Path $folder -Parent) -ine $fingerprints -or @($reference.testExecutables).Count -ne 1){throw 'Fingerprint must be under the gated target and list exactly one test executable'}
$testExe=Join-Path $deps ('arcadia_studio-'+$Matches[1]+'.exe')
$bound=@($reference.testExecutables|Where-Object {$_.path -ieq $testExe})
if($bound.Count -ne 1 -or (Get-Item $testExe).Length -ne $bound[0].bytes -or (Hash $testExe) -cne $bound[0].sha256){throw 'Fingerprint must belong to the exact reference test executable'}
$selected=@{oa_core=$CoreRlib;serde_json=$SerdeJsonRlib}
$selectedRecords=@()
foreach($name in @('oa_core','serde_json')){
$file=(Resolve-Path -LiteralPath $selected[$name]).Path
if((Split-Path $file -Parent) -ine $deps -or (Split-Path $file -Leaf) -cnotmatch ('^lib'+$name+'-([0-9a-f]{16})\.rlib$')){throw "Wrong explicit rlib: $name"}
$package=if($name -ceq 'oa_core'){'oa-core'}else{$name}
$sidecar=Join-Path $fingerprints ($package+'-'+$Matches[1]+'/lib-'+$name)
$hex=(Get-Content -Raw -LiteralPath $sidecar).Trim()
if($hex -cnotmatch '^[0-9a-f]{16}$'){throw 'Invalid Cargo fingerprint sidecar'}
$bytes=[Convert]::FromHexString($hex);if(-not [BitConverter]::IsLittleEndian){[Array]::Reverse($bytes)}
$value=[BitConverter]::ToUInt64($bytes,0)
$edges=@($desktop.deps|Where-Object {$_[1] -ceq $name})
if($edges.Count -ne 1 -or [UInt64]$edges[0][3] -ne $value){throw "Reference dependency edge differs: $name"}
$record=Json ($sidecar+'.json')
if($record.rustc -ne $desktop.rustc){throw 'Mixed Cargo compiler fingerprints'}
$selected[$name]=$file
$selectedRecords+=@($sidecar,($sidecar+'.json'),(Join-Path $deps ($name+'-'+([IO.Path]::GetFileNameWithoutExtension($file).Split('-')[-1])+'.d')))
}
# Verify the selected core's serde_json edge as well as the desktop's two edges.
$coreName=[IO.Path]::GetFileNameWithoutExtension($selected.oa_core).Substring('lib'.Length)
$coreJson=Json (Join-Path $fingerprints ($coreName.Replace('oa_core-','oa-core-')+'/lib-oa_core.json'))
$serdeEdge=@($desktop.deps|Where-Object {$_[1] -ceq 'serde_json'})
$coreSerdeEdge=@($coreJson.deps|Where-Object {$_[1] -ceq 'serde_json'})
if($coreSerdeEdge.Count -ne 1 -or [UInt64]$coreSerdeEdge[0][3] -ne [UInt64]$serdeEdge[0][3]){throw 'Core serde_json linkage differs from selected desktop dependency'}
$coreInputs=@((Json $capturePath).files)
if($coreInputs.Count -ne 612){throw 'Closed receipt does not enumerate core source inputs'}
foreach($inputFile in $coreInputs){if((Hash (Join-Path $workspace $inputFile.path)) -cne $inputFile.sha256){throw ('Core source differs from compiled reference: '+$inputFile.path)}}
if(Test-Path -LiteralPath $Output){throw 'Output must be a new evidence directory'}
$Output=[IO.Path]::GetFullPath($Output)
$environment=$versions.externalEnvironmentPath
if((Hash $environment) -cne $versions.externalEnvironmentSha256){throw 'Changed compiler environment'}
. $environment
$rustc=(Get-Command rustc -CommandType Application).Source
$clang=(Get-Command clang -CommandType Application).Source
if($rustc -ine $versions.rustcPath -or $clang -ine $versions.clangPath){throw 'Compiler/linker paths differ from the reference'}
$toolchain=Join-Path $env:RUSTUP_HOME ('toolchains/'+$env:RUSTUP_TOOLCHAIN)
$sysroot=Join-Path $toolchain 'lib/rustlib/x86_64-pc-windows-gnullvm/lib'
$wrapper=Join-Path $PSScriptRoot 'main.rs'
$sourceManifest=Json (Join-Path $PSScriptRoot 'source-inputs.json')
$sources=@(foreach($f in $sourceManifest.files){$p=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot $f.path)).Path;if((Get-Item -LiteralPath $p).Length -ne $f.bytes -or (Hash $p) -cne $f.sha256){throw 'Prepared comparator source changed'};$p})
$runtimeSourcePaths=@(($sources+@($PSCommandPath,$NativeVerifier,(Join-Path $PSScriptRoot 'source-inputs.json'))+@($coreInputs|ForEach-Object {Join-Path $workspace $_.path}))|ForEach-Object {(Resolve-Path -LiteralPath $_).Path}|Sort-Object -Unique)
$runtimeHash='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'
$RuntimeDll=(Resolve-Path -LiteralPath $RuntimeDll).Path
if((Get-Item -LiteralPath $RuntimeDll).Length -ne 190464 -or (Hash $RuntimeDll) -cne $runtimeHash){throw 'Wrong pinned runtime DLL'}
function Inputs {
$paths=@((Join-Path $PSScriptRoot 'source-inputs.json'),$NativeVerifier,$PSCommandPath,$ReferenceReceipt,$DesktopFingerprint,$versionPath,$capturePath,$testExe,$environment,$rustc,$clang,$RuntimeDll,(Join-Path $toolchain 'bin/rustc.exe'),(Join-Path $workspace 'Cargo.lock'),(Join-Path $workspace 'Cargo.toml'),(Join-Path $workspace 'crates/oa-core/Cargo.toml'))+$sources+$selectedRecords+@($coreInputs|ForEach-Object {Join-Path $workspace $_.path})
$paths+=@($reference.boundScriptAndInputHashes.PSObject.Properties|ForEach-Object {Join-Path $evidence $_.Name})+@((Join-Path $evidence 'list.log'),$beforeCapture)
foreach($directory in @($deps,$native,$sysroot)){$paths+=@(Get-ChildItem -LiteralPath $directory -File|Where-Object {$_.Extension -in @('.rlib','.rmeta','.dll','.lib','.a')}|ForEach-Object FullName)}
@($paths|ForEach-Object {(Resolve-Path -LiteralPath $_).Path}|Sort-Object -Unique|ForEach-Object {$item=Get-Item -LiteralPath $_;[ordered]@{path=$item.FullName;bytes=$item.Length;sha256=(Hash $item.FullName)}})
}
[void][IO.Directory]::CreateDirectory($Output)
$before=@(Inputs);$sourceRecords=@(Select-SourceRecords $before $runtimeSourcePaths);Save 'inputs-before.json' $before
$PSNativeCommandUseErrorActionPreference=$false
$rustcVersion=@(& $rustc --version --verbose 2>&1|ForEach-Object ToString);$rustcExit=$LASTEXITCODE
$clangVersion=@(& $clang --version 2>&1|ForEach-Object ToString);$clangExit=$LASTEXITCODE
Save 'toolchain.json' @{rustc=$rustcVersion;rustc_exit=$rustcExit;clang=$clangVersion;clang_exit=$clangExit}
if($rustcExit -ne 0 -or $clangExit -ne 0 -or ($rustcVersion -join "`n") -cne (@($versions.rustc) -join "`n") -or ($clangVersion -join "`n") -cne (@($versions.clang) -join "`n")){throw 'Compiler/linker versions differ'}
$exe=Join-Path $Output 'details-source-oracle.exe'
$argsForRustc=@('--edition=2024','--crate-name','details_source_oracle','-D','warnings',$wrapper,'--extern',('oa_core='+$selected.oa_core),'--extern',('serde_json='+$selected.serde_json),'-L',('dependency='+$deps),'-L',('native='+$native),'-C',('linker='+$clang),'--emit',('link,dep-info='+(Join-Path $Output 'details-source-oracle.d')),'-o',$exe)
$start=[DateTime]::UtcNow.ToString('o')
& $rustc @argsForRustc *> (Join-Path $Output 'compile.log')
$exit=$LASTEXITCODE
$end=[DateTime]::UtcNow.ToString('o')
$unchanged=$false;$failure=$null
try{
$after=@(Inputs);[void](Select-SourceRecords $after $runtimeSourcePaths);Save 'inputs-after.json' $after
if(($before|ConvertTo-Json -Depth 6 -Compress) -cne ($after|ConvertTo-Json -Depth 6 -Compress)){throw 'A source/link input changed'}
Assert-Source
Assert-CurrentNativeSource $evidence
$unchanged=$true
}catch{$failure=$_.Exception.Message}
$binary=if(Test-Path -LiteralPath $exe){$item=Get-Item $exe;@{path=$exe;bytes=$item.Length;sha256=(Hash $exe)}}else{$null}
if($exit -eq 0 -and $unchanged){
try{
$runtimeInput=@($before|Where-Object {$_.path -ieq (Resolve-Path -LiteralPath $RuntimeDll).Path})
[IO.File]::Copy($RuntimeDll,(Join-Path $Output 'libunwind.dll'),$false)
if($runtimeInput.Count -ne 1 -or (Hash (Join-Path $Output 'libunwind.dll')) -cne $runtimeInput[0].sha256){throw 'Staged runtime differs from bound input'}
}catch{$unchanged=$false;$failure=$_.Exception.Message}
}
Save 'build-receipt.json' @{source_commit=$pin;native_verifier=@{path=$NativeVerifier;sha256=$NativeVerifierSha256};reference_receipt=$ReferenceReceipt;reference_receipt_sha256=(Hash $ReferenceReceipt);command=@($rustc)+$argsForRustc;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;source_files=$sourceRecords;runtime_path=(Join-Path $Output 'libunwind.dll');runtime_bytes=(Get-Item -LiteralPath $RuntimeDll).Length;runtime_sha256=(Hash $RuntimeDll);before_manifest_sha256=(Hash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path (Join-Path $Output 'inputs-after.json')){Hash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Hash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Hash (Join-Path $Output 'compile.log'));tests_executed=$false;scope='Core-only comparator compilation bound to the exact successfulb10 desktop LIST, not a GUI/native gate. Source/cache link inputs are unchanged; execution remains separate.'}
if($exit -ne 0 -or -not $unchanged -or $null -eq $binary -or $binary.bytes -le 0){throw 'Isolated compilation or input provenance failed; preserve evidence'}
Write-Output 'Details comparator compiled only; self-check and saved-source comparison remain separate. No GUI/native acceptance.'
@@ -0,0 +1,100 @@
#Requires -Version 7.0
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string]$OracleExe,
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$OracleSha256,
[Parameter(Mandatory=$true)][string]$BuildReceipt,
[Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$BuildReceiptSha256,
[Parameter(Mandatory=$true)][ValidateSet('self-check','name','typed')][string]$Mode,
[Parameter(Mandatory=$true)][string]$Output,
[string]$Baseline,
[ValidatePattern('^[0-9a-f]{64}$')][string]$BaselineSha256,
[string]$Actual,
[string]$Target,
[string]$NewName,
[string]$ExpectedProject,
[ValidateSet('baseline','1','3a','3b','3c','3d')][string]$Checkpoint
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
function Hash([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
function Record([string]$Path){$p=Get-Item -LiteralPath $Path;if($p.PSIsContainer -or ($p.Attributes -band [IO.FileAttributes]::ReparsePoint)){throw 'Plain file required'};[ordered]@{path=$p.FullName;bytes=$p.Length;sha256=(Hash $p.FullName)}}
function Read-Json([string]$Path){Get-Content -Raw -LiteralPath $Path|ConvertFrom-Json}
function Write-NewJson([string]$Path,$Value){$f=[IO.File]::Open($Path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read);try{$b=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 20)+"`n");$f.Write($b,0,$b.Length);$f.Flush($true)}finally{$f.Dispose()}}
function Assert-Records($Files){foreach($x in $Files){$y=Record $x.path;if($x.bytes -ne $y.bytes -or $x.sha256 -cne $y.sha256){throw ('Changed bound input: '+$x.path)}}}
if(Test-Path -LiteralPath $Output){throw 'Output must be new; preserve earlier evidence'}
if((Hash $OracleExe) -cne $OracleSha256 -or (Hash $BuildReceipt) -cne $BuildReceiptSha256){throw 'Reviewed EXE/build receipt hashes differ'}
$build=Read-Json $BuildReceipt
$exe=(Resolve-Path -LiteralPath $OracleExe).Path
$buildDir=Split-Path -Parent ((Resolve-Path -LiteralPath $BuildReceipt).Path)
if($build.source_commit -cne 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' -or $build.exit_code -ne 0 -or -not $build.inputs_unchanged -or $null -ne $build.postflight_failure -or $build.binary.path -ine $exe -or $build.binary.sha256 -cne $OracleSha256 -or (Get-Item -LiteralPath $exe).Length -ne $build.binary.bytes){throw 'Successful exactb10 comparator build required'}
$proofFiles=@([ordered]@{name='inputs-before.json';sha=$build.before_manifest_sha256},[ordered]@{name='inputs-after.json';sha=$build.after_manifest_sha256},[ordered]@{name='toolchain.json';sha=$build.toolchain_sha256},[ordered]@{name='compile.log';sha=$build.compile_log_sha256})
foreach($f in $proofFiles){if((Hash (Join-Path $buildDir $f.name)) -cne $f.sha){throw 'Build evidence changed'}}
$buildBefore=@(Read-Json (Join-Path $buildDir 'inputs-before.json'));$buildAfter=@(Read-Json (Join-Path $buildDir 'inputs-after.json'))
if(($buildBefore|ConvertTo-Json -Depth 8 -Compress) -cne ($buildAfter|ConvertTo-Json -Depth 8 -Compress)){throw 'Build input manifests differ'}
if(@($build.source_files).Count -lt 612){throw 'Complete source input binding missing'}
$buildPaths=@{};foreach($f in $buildBefore){if($buildPaths.ContainsKey($f.path)){throw 'Duplicate build input'};$buildPaths[$f.path]=$f}
foreach($f in $build.source_files){if(-not $buildPaths.ContainsKey($f.path) -or $buildPaths[$f.path].bytes -ne $f.bytes -or $buildPaths[$f.path].sha256 -cne $f.sha256){throw 'Source record not bound by build manifest'}}
if((Hash $build.reference_receipt) -cne $build.reference_receipt_sha256){throw 'Closed list reference changed'}
$reference=Read-Json $build.reference_receipt
$referenceCapture=Join-Path (Split-Path -Parent $build.reference_receipt) 'inputs-complete-list-after.json'
if($reference.base -cne $build.source_commit -or $reference.stage -cne 'list' -or $reference.cargoExitCode -ne 0 -or -not $reference.inputsUnchanged -or -not $reference.selectionValid -or (Hash $referenceCapture) -cne $reference.afterCaptureSha256){throw 'Exact successful list/source capture missing'}
$compiledSources=Read-Json $referenceCapture
if($compiledSources.count -ne 612 -or @($compiledSources.files).Count -ne 612){throw 'Expected all612 compiled source inputs'}
foreach($f in $compiledSources.files){$path=(Resolve-Path -LiteralPath (Join-Path $reference.workspace $f.path)).Path;$match=@($build.source_files|Where-Object {$_.path -ieq $path});if($match.Count -ne 1 -or $match[0].bytes -ne $f.bytes -or $match[0].sha256 -cne $f.sha256){throw 'A compiled source file is missing from the build/runtime source binding'}}
Assert-Records $build.source_files
$runtime=Join-Path (Split-Path -Parent $exe) 'libunwind.dll'
if($build.runtime_bytes -ne 190464 -or $build.runtime_path -ine $runtime -or $build.runtime_sha256 -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a' -or (Hash $runtime) -cne $build.runtime_sha256 -or (Get-Item -LiteralPath $runtime).Length -ne $build.runtime_bytes){throw 'Actual adjacent runtime DLL differs from build binding'}
$catalog=Read-Json (Join-Path $PSScriptRoot 'expected-catalog.json')
$sourceManifest=Read-Json (Join-Path $PSScriptRoot 'source-inputs.json')
foreach($f in $sourceManifest.files){$path=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot $f.path)).Path;$matching=@($build.source_files|Where-Object {$_.path -ieq $path});if($matching.Count -ne 1 -or $matching[0].bytes -ne $f.bytes -or $matching[0].sha256 -cne $f.sha256){throw 'Current comparator source is not the compiled source'}}
$paths=@($build.reference_receipt,$referenceCapture,$exe,$runtime,$BuildReceipt,$PSCommandPath,(Join-Path $PSScriptRoot 'source-inputs.json'))+@($proofFiles|ForEach-Object {Join-Path $buildDir $_.name})+@($build.source_files|ForEach-Object path)
# Only one admitted source file per native fixture; all successful parse inputs are bound.
$inputs=@();$extra=@();$request=[ordered]@{mode=$Mode;expected_origin='Declared before reading actual output; no expectation inferred from Actual'}
switch($Mode){
'self-check' {
if($Baseline -or $BaselineSha256 -or $Actual -or $Target -or $NewName -or $ExpectedProject -or $Checkpoint){throw 'Self-check accepts no native comparison inputs'}
$inputs=@((Join-Path $PSScriptRoot 'fixtures/incident-workspace.arcadia'),(Join-Path $PSScriptRoot 'fixtures/service-details.arcadia'))
}
'name' {
if([string]::IsNullOrWhiteSpace($Baseline) -or [string]::IsNullOrWhiteSpace($BaselineSha256) -or [string]::IsNullOrWhiteSpace($Actual) -or $Target -notmatch '^[0-9a-fA-F-]{36}$' -or [string]::IsNullOrEmpty($NewName) -or $ExpectedProject -or $Checkpoint){throw 'Name mode requires independent baseline SHA, Actual, exact element Target and predetermined NewName only'}
if((Hash $Baseline) -cne $BaselineSha256){throw 'Pre-edit baseline changed'}
$inputs=@($Baseline,$Actual);$extra=@($Target,$NewName);$request.element=$Target;$request.new_name=$NewName;$request.baseline_sha256=$BaselineSha256
}
'typed' {
if([string]::IsNullOrWhiteSpace($ExpectedProject) -or [string]::IsNullOrWhiteSpace($Actual) -or [string]::IsNullOrWhiteSpace($Checkpoint) -or $Baseline -or $BaselineSha256 -or $Target -or $NewName){throw 'Typed mode requires ExpectedProject, exact Checkpoint and Actual only'}
$approved=$catalog.checkpoints.$Checkpoint
if((Hash $ExpectedProject) -cne $approved.sha256 -or (Get-Item -LiteralPath $ExpectedProject).Length -ne $approved.bytes){throw 'Expected JSON is not the independently approved checkpoint bytes'}
$inputs=@($ExpectedProject,$Actual);$extra=@($Checkpoint);$request.checkpoint=$Checkpoint;$request.expected_sha256=$approved.sha256
}
}
$inputs=@($inputs|ForEach-Object {(Resolve-Path -LiteralPath $_).Path});$paths+=@($inputs)
$before=@($paths|ForEach-Object {(Resolve-Path -LiteralPath $_).Path}|Sort-Object -Unique|ForEach-Object {Record $_})
$Output=[IO.Path]::GetFullPath($Output);[void][IO.Directory]::CreateDirectory($Output)
$copies=@();for($i=0;$i -lt $inputs.Count;$i++){$copy=Join-Path $Output ('input-'+$i+[IO.Path]::GetExtension($inputs[$i]));[IO.File]::Copy($inputs[$i],$copy,$false);if((Hash $copy) -cne (Hash $inputs[$i])){throw 'Input snapshot copy differs'};$copies+=@($copy)}
Write-NewJson (Join-Path $Output 'request.json') $request
Write-NewJson (Join-Path $Output 'inputs-before.json') $before
$argsForOracle=@($Mode)+$copies+@((Join-Path $Output 'project-comparison'))+$extra
$start=[DateTime]::UtcNow.ToString('o');$exit=$null;$failure=$null;$process=$null;$stdout=$null;$stderr=$null;$unchanged=$false;$semantic=$false
try {
$info=[Diagnostics.ProcessStartInfo]::new();$info.FileName=$exe;$info.WorkingDirectory=$Output;$info.UseShellExecute=$false;$info.CreateNoWindow=$true;$info.WindowStyle=[Diagnostics.ProcessWindowStyle]::Hidden;$info.RedirectStandardOutput=$true;$info.RedirectStandardError=$true
foreach($arg in $argsForOracle){$info.ArgumentList.Add($arg)}
$info.Environment['PATH']=(Split-Path -Parent $exe)+';'+(Join-Path $env:SystemRoot 'System32')+';'+$env:SystemRoot
$stdout=[IO.File]::Open((Join-Path $Output 'stdout.log'),[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read)
$stderr=[IO.File]::Open((Join-Path $Output 'stderr.log'),[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read)
$process=[Diagnostics.Process]::new();$process.StartInfo=$info;if(-not $process.Start()){throw 'Comparator process did not start'}
$outCopy=$process.StandardOutput.BaseStream.CopyToAsync($stdout);$errCopy=$process.StandardError.BaseStream.CopyToAsync($stderr)
$process.WaitForExit();[Threading.Tasks.Task]::WaitAll([Threading.Tasks.Task[]]@($outCopy,$errCopy));$exit=$process.ExitCode
$stdout.Flush($true);$stderr.Flush($true)
} catch {$failure=$_.Exception.Message} finally {if($stdout){$stdout.Dispose()};if($stderr){$stderr.Dispose()};if($process){$process.Dispose()}}
try {
Assert-Records $before
for($i=0;$i -lt $copies.Count;$i++){if((Hash $copies[$i]) -cne (Hash $inputs[$i])){throw 'Comparison snapshot changed'}}
$after=@($before|ForEach-Object {Record $_.path});Write-NewJson (Join-Path $Output 'inputs-after.json') $after;$unchanged=$true
$result=Join-Path $Output ('project-comparison/'+$(if($Mode -eq 'self-check'){'self-check.json'}else{'comparison.json'}))
if(Test-Path -LiteralPath $result){$v=Read-Json $result;$semantic=$v.status -ceq 'passed';if($Mode -ne 'self-check'){$semantic=$semantic -and $v.mode -ceq $Mode -and $v.full_project_exact}}
} catch {if($null -eq $failure){$failure=$_.Exception.Message}}
$artifacts=@(Get-ChildItem -LiteralPath $Output -File -Recurse|ForEach-Object {Record $_.FullName})
Write-NewJson (Join-Path $Output 'receipt.json') ([ordered]@{source_commit=$build.source_commit;command=@($exe)+$argsForOracle;mode=$Mode;start_utc=$start;end_utc=[DateTime]::UtcNow.ToString('o');exit_code=$exit;failure=$failure;inputs_unchanged=$unchanged;semantic_pass=$semantic;runtime_binding=@($before|Where-Object {$_.path -ieq $runtime})[0];oracle_sha256=$OracleSha256;build_receipt_sha256=$BuildReceiptSha256;artifacts=$artifacts;scope='Complete admitted saved-source Project comparison only; no renderer, source editor, native action or runtime/history claim'})
if($exit -ne 0 -or -not $unchanged -or -not $semantic -or $null -ne $failure){throw 'Comparator or input stability failed; preserve outputs'}
Write-Output 'Saved-source Details comparison passed; runtime/history/native evidence remains separate.'
@@ -0,0 +1,43 @@
{
"status": "Exact independently expected core-run01 checkpoints, published and byte-verified by parent; native output not used",
"core_source": "0409a481c7571e887f8912f0a8cdb93cfdcc01a7",
"receipt_sha256": "9bceeddc309095d29ec8bb2942bc3e8a85d008917199a2502e4b64e22b830571",
"project": "80300000-0000-4000-8000-000000000000",
"scenario": "80300000-0000-4000-8000-000000000050",
"diagram": "80300000-0000-4000-8000-000000000070",
"checkpoints": {
"baseline": {
"path": "expected/baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
},
"1": {
"path": "expected/after-1.expected.project.json",
"bytes": 10578,
"sha256": "c03cf59f83bc1ae4db64584abf1257efc775cc47b49f2b2db4ac47159dfb90a0"
},
"3a": {
"path": "expected/after-3a.expected.project.json",
"bytes": 10495,
"sha256": "ce3d58385815d0a1d01320bdd711d707cb4c530f0614545eca2b83533077b6f0"
},
"3b": {
"path": "expected/after-3b.expected.project.json",
"bytes": 10487,
"sha256": "81f16c54db0e7be1960be5de6a89a6e16a56d6c62d45e15aa7f59bc9d85c8925"
},
"3c": {
"path": "expected/after-3c.expected.project.json",
"bytes": 10565,
"sha256": "3c4521eef6cf2a6024275f8c6bf5e9a55d7f6e10cb58c9cc846be56cfa121aca"
},
"3d": {
"path": "expected/after-3d.expected.project.json",
"bytes": 10565,
"sha256": "36dfe596c1e2f39a82795237f545787996e9138d9c160217611b201da14ce66a"
}
},
"published_commit": "698126e1a0b9ab37cb3cac4339ffcf3a6bf0a340",
"published_path": "harness/experiments/scenario-service-details-core-20260913/original/core-run-01/probe-output/",
"published_url": "http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/src/commit/698126e1a0b9ab37cb3cac4339ffcf3a6bf0a340/harness/experiments/scenario-service-details-core-20260913/README.md"
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,108 @@
arcadia 7;
project incident_workspace "Incident report review" id "70200000-0000-4000-8000-000000000001" {
// Two operational activities, with one lifeline appearance per Scenario.
oa_activity report_incident "Report incident" id "70200000-0000-4000-8000-000000000002" {}
oa_activity assess_incident "Assess incident" id "70200000-0000-4000-8000-000000000003" {}
interaction incident_report "Incident report" id "70200000-0000-4000-8000-000000000004" {
source @report_incident;
target @assess_incident;
}
oa_scenario incident_response "Review a reported incident" id "70200000-0000-4000-8000-000000000010" {
viewpoint OperationalActivity;
steps [@initial_report, @updated_report, @assess_call, @assess_reply, @unfinished_notice, @use_review];
}
oa_lifeline reporter "Reporting activity" id "70200000-0000-4000-8000-000000000011" {
parent @incident_response; represented @report_incident;
}
oa_lifeline assessor "Assessment activity" id "70200000-0000-4000-8000-000000000012" {
parent @incident_response; represented @assess_incident;
}
// Both appearances reuse one definition. Navigation must retain the occurrence.
oa_occurrence initial_report "Initial incident report" id "70200000-0000-4000-8000-000000000020" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
oa_occurrence updated_report "Updated incident report" id "70200000-0000-4000-8000-000000000021" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
// A correlated self call/reply with deliberately unassigned exchange definitions.
oa_occurrence assess_call "Assess report details" id "70200000-0000-4000-8000-000000000022" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Call; }; };
}
oa_occurrence assess_reply "Assessment ready" id "70200000-0000-4000-8000-000000000023" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Reply; reply_to @assess_call; }; };
}
// Intentional unfinished work: no receiver and therefore no fabricated arrow.
oa_occurrence unfinished_notice "Follow-up recipient undecided" id "70200000-0000-4000-8000-000000000024" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver none; message_kind Asynchronous; }; };
}
oa_occurrence use_review "Use the reviewed reporting procedure" id "70200000-0000-4000-8000-000000000025" {
parent @incident_response;
body { ScenarioUse {
bindings [{ local @reporter; referenced @review_reporter; }, { local @assessor; referenced @review_assessor; }];
scenario @reporting_review;
}; };
}
// This definition stays opaque in the caller. Open it, then Back to the saved view.
oa_scenario reporting_review "Reporting procedure detail" id "70200000-0000-4000-8000-000000000030" {
viewpoint OperationalActivity;
steps [@review_delivery];
}
oa_lifeline review_reporter "Reporting activity in detail" id "70200000-0000-4000-8000-000000000031" {
parent @reporting_review; represented @report_incident;
}
oa_lifeline review_assessor "Assessment activity in detail" id "70200000-0000-4000-8000-000000000032" {
parent @reporting_review; represented @assess_incident;
}
oa_occurrence review_delivery "Check the incident report" id "70200000-0000-4000-8000-000000000033" {
parent @reporting_review;
body { Exchange { exchange @incident_report; sender @review_reporter; receiver @review_assessor; message_kind Asynchronous; }; };
}
diagram incident_readable "A - Incident review readable" id "70200000-0000-4000-8000-000000000040" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x 160; }, { lifeline @assessor; x 640; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_wide "B - Incident review negative and far" id "70200000-0000-4000-8000-000000000041" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x -500; }, { lifeline @assessor; x 50000; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_repair "C - Incident review needs layout repair" id "70200000-0000-4000-8000-000000000042" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
// These valid authored lanes must remain saved during complete fallback.
lanes [{ lifeline @reporter; x 900; }, { lifeline @assessor; x -500; }];
messages [
// REPAIR: change only this 300 to 424, then Undo and Redo the edit.
{ address { references []; occurrence @assess_reply; }; send_y 300; },
// This authored value stays latent while the receiver is missing.
{ address { references []; occurrence @unfinished_notice; }; send_y 2000; }
];
}; };
}
}
@@ -0,0 +1,113 @@
arcadia 7;
project service_details "Valve service Details trial" id "80300000-0000-4000-8000-000000000000" {
sa_actor console "Operator console" id "80300000-0000-4000-8000-000000000001" {}
sa_system valve "Valve service" id "80300000-0000-4000-8000-000000000002" {}
sa_port caller_port "Console service client" id "80300000-0000-4000-8000-000000000003" {
parent @console; contract { Component { kind Standard; orientation Unset; }; };
}
sa_port provider_port "Valve service endpoint" id "80300000-0000-4000-8000-000000000004" {
parent @valve; contract { Component { kind Standard; orientation Unset; }; };
}
sa_data_type text_value "Service text" id "80300000-0000-4000-8000-000000000010" {
definition { String { minimum_length 0; maximum_length 128; }; };
}
sa_data_type pressure_value "Pressure in bar" id "80300000-0000-4000-8000-000000000011" {
definition { Real { minimum 0; maximum 100; }; }; unit "bar";
}
sa_data_type accepted_value "Acceptance flag" id "80300000-0000-4000-8000-000000000012" { definition Boolean; }
sa_exchange_item read_status "ReadStatus" id "80300000-0000-4000-8000-000000000020" {
kind Information; mechanism Operation;
}
sa_data_field read_scope "Scope" id "80300000-0000-4000-8000-000000000021" {
parent @read_status; type_ref { Named @text_value; }; direction In;
minimum 0; maximum 1; storage Value;
}
sa_data_field read_result "Status" id "80300000-0000-4000-8000-000000000022" {
parent @read_status; type_ref { Named @text_value; }; direction Return;
minimum 0; maximum 1; storage Value;
}
sa_exchange_item set_limit "SetLimit" id "80300000-0000-4000-8000-000000000030" {
kind Information; mechanism Operation;
}
sa_data_field limit_value "Pressure limit" id "80300000-0000-4000-8000-000000000031" {
parent @set_limit; type_ref { Named @pressure_value; }; direction In;
minimum 0; maximum 1; storage Value;
}
sa_data_field limit_accepted "Accepted" id "80300000-0000-4000-8000-000000000032" {
parent @set_limit; type_ref { Named @accepted_value; }; direction Return;
minimum 0; maximum 1; storage Value;
}
sa_interface valve_api "Valve commands" id "80300000-0000-4000-8000-000000000040" {}
interface_item_allocation read_allocation "ReadStatus allocation" id "80300000-0000-4000-8000-000000000041" {
source @valve_api; target @read_status; order 0;
transmission Synchronous; acquisition Accept;
}
interface_item_allocation limit_allocation "SetLimit allocation" id "80300000-0000-4000-8000-000000000042" {
source @valve_api; target @set_limit; order 1;
transmission Synchronous; acquisition Accept;
}
interface_requirement requires_api "Console requires Valve commands" id "80300000-0000-4000-8000-000000000043" {
source @caller_port; target @valve_api;
}
interface_provision provides_api "Valve provides Valve commands" id "80300000-0000-4000-8000-000000000044" {
source @provider_port; target @valve_api;
}
boundary_exchange service_channel "Valve service channel" id "80300000-0000-4000-8000-000000000045" {
source @caller_port; target @provider_port; oriented false;
items [@read_status, @set_limit];
}
sa_scenario service_review "Review service calls" id "80300000-0000-4000-8000-000000000050" {
viewpoint BoundaryInterface;
steps [@first_call, @first_reply, @control_call, @control_reply];
}
sa_lifeline caller "Console caller" id "80300000-0000-4000-8000-000000000051" {
parent @service_review; represented @console;
}
sa_lifeline provider "Valve provider" id "80300000-0000-4000-8000-000000000052" {
parent @service_review; represented @valve;
}
sa_occurrence first_call "Read primary status" id "80300000-0000-4000-8000-000000000060" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @caller; receiver @provider; message_kind Call;
operation { allocation @read_allocation; };
values [{ path []; field @read_scope; expression "\"primary\""; }];
}; };
}
sa_occurrence first_reply "Primary status response" id "80300000-0000-4000-8000-000000000061" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @provider; receiver @caller;
message_kind Reply; reply_to @first_call;
values [{ path []; field @read_result; expression "\"READY\""; }];
}; };
}
sa_occurrence control_call "Set reserve limit" id "80300000-0000-4000-8000-000000000062" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @caller; receiver @provider; message_kind Call;
operation { allocation @limit_allocation; };
values [{ path []; field @limit_value; expression "12.5"; }];
}; };
}
sa_occurrence control_reply "Reserve limit accepted" id "80300000-0000-4000-8000-000000000063" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @provider; receiver @caller;
message_kind Reply; reply_to @control_call;
values [{ path []; field @limit_accepted; expression "true"; }];
}; };
}
diagram service_details_view "Service calls - Details trial" id "80300000-0000-4000-8000-000000000070" {
layer Sa; projection { Scenario { scenario @service_review; }; };
layout { Scenario {
lanes [{ lifeline @caller; x 160; }, { lifeline @provider; x 650; }];
messages [
{ address { references []; occurrence @first_call; }; send_y 160; },
{ address { references []; occurrence @first_reply; }; send_y 270; },
{ address { references []; occurrence @control_call; }; send_y 390; },
{ address { references []; occurrence @control_reply; }; send_y 500; }
];
}; };
}
}
@@ -0,0 +1,317 @@
//! Saved-source Details comparator. No desktop renderer, controller or history inspection.
//! name BASELINE_SOURCE ACTUAL_SOURCE OUT ELEMENT NEW_NAME
//! typed EXPECTED_PROJECT_JSON ACTUAL_SOURCE OUT CHECKPOINT
//! self-check INCIDENT_SOURCE SERVICE_SOURCE OUT
use oa_core::{
DiagramLayout, Id, Project, execute_batch, source_files,
source_project::{ProjectLimits, compile_bundle},
validation::Severity,
};
use serde_json::{Value, json};
use std::{fs, io::Write, path::Path};
const INCIDENT: &str = include_str!("fixtures/incident-workspace.arcadia");
const SERVICE: &str = include_str!("fixtures/service-details.arcadia");
const EXPECTED: [(&str, &str); 6] = [
("baseline", include_str!("expected/baseline.project.json")),
("1", include_str!("expected/after-1.expected.project.json")),
(
"3a",
include_str!("expected/after-3a.expected.project.json"),
),
(
"3b",
include_str!("expected/after-3b.expected.project.json"),
),
(
"3c",
include_str!("expected/after-3c.expected.project.json"),
),
(
"3d",
include_str!("expected/after-3d.expected.project.json"),
),
];
fn incident(last: u128) -> Id {
Id::from_u128(0x70200000000040008000000000000000 | last)
}
fn service(last: u128) -> Id {
Id::from_u128(0x80300000000040008000000000000000 | last)
}
// Object order is irrelevant; array order and every serialized scalar remain exact.
// Scalar serialization distinguishes signed zero, unlike float PartialEq.
fn canonical(value: &Value) -> String {
match value {
Value::Object(map) => {
let mut keys: Vec<_> = map.keys().collect();
keys.sort();
format!(
"{{{}}}",
keys.into_iter()
.map(|k| format!(
"{}:{}",
serde_json::to_string(k).unwrap(),
canonical(&map[k])
))
.collect::<Vec<_>>()
.join(",")
)
}
Value::Array(a) => format!(
"[{}]",
a.iter().map(canonical).collect::<Vec<_>>().join(",")
),
_ => serde_json::to_string(value).unwrap(),
}
}
fn full(project: &Project) -> String {
canonical(&serde_json::to_value(project).unwrap())
}
fn put(path: &Path, bytes: &[u8]) {
let mut f = fs::OpenOptions::new()
.write(true)
.create_new(true)
.open(path)
.unwrap();
f.write_all(bytes).unwrap();
f.sync_all().unwrap();
}
fn load_source(path: &Path, project_id: Id) -> Project {
assert!(fs::symlink_metadata(path).unwrap().file_type().is_file());
let loaded = source_files::load_project(path, ProjectLimits::default()).unwrap();
assert!(
!loaded
.diagnostics
.iter()
.any(|d| d.diagnostic.severity == Severity::Error),
"source loader errors: {:?}",
loaded.diagnostics
);
let raw = loaded.reachable_bundle();
assert_eq!(
raw.files.len(),
1,
"Bound native fixtures require exactly one source file"
);
let compiled = compile_bundle(&raw, ProjectLimits::default()).unwrap();
assert_eq!(
compiled.bundle, raw,
"No migration, identity insertion or passive source rewrite is admitted"
);
let p = compiled.decoded.project;
execute_batch(&p, &[]).unwrap();
assert_eq!(p.id, project_id, "Wrong fixture Project identity");
p
}
fn renamed(base: &Project, selected: Id, name: &str) -> Result<Project, String> {
if base.id != incident(1) {
return Err("Name mode requires the incident fixture Project".into());
}
let mut p = base.clone();
let e = p
.elements
.get_mut(&selected)
.ok_or("Selected identity must be an existing element")?;
if name.is_empty() || e.name == name {
return Err("Name must be a predetermined nonempty change".into());
}
e.name = name.into();
execute_batch(&p, &[]).map_err(|e| format!("Invalid name candidate: {e:?}"))?;
Ok(p)
}
fn approved_expected(raw: &str, checkpoint: &str) -> Result<Project, String> {
let approved = EXPECTED
.iter()
.find(|(key, _)| *key == checkpoint)
.ok_or("Unknown approved checkpoint")?
.1;
let value: Value = serde_json::from_str(raw).map_err(|e| e.to_string())?;
let p: Project = serde_json::from_value(value.clone()).map_err(|e| e.to_string())?;
// Do not silently discard unknown/defaulted fields while decoding expected JSON.
if full(&p) != canonical(&value) {
return Err("Expected JSON does not round-trip as the complete Project".into());
}
if p.id != service(0)
|| !p.elements.contains_key(&service(0x50))
|| p.diagrams.len() != 1
|| p.diagrams
.get(&service(0x70))
.and_then(|d| d.projection.scenario())
!= Some(service(0x50))
{
return Err("Wrong expected service fixture identity".into());
}
let allowed: Value = serde_json::from_str(approved).map_err(|e| e.to_string())?;
if raw.as_bytes() != approved.as_bytes() || canonical(&value) != canonical(&allowed) {
return Err("Expected Project differs from independently approved checkpoint".into());
}
execute_batch(&p, &[]).map_err(|e| format!("Expected checkpoint is not admitted: {e:?}"))?;
Ok(p)
}
fn self_check(base: &Project, typed: &Project, out: &Path) {
assert_eq!(
base.elements[&incident(0x20)].name,
"Initial incident report"
);
let name = "Initial incident report [Details trial]";
let expected = renamed(base, incident(0x20), name).unwrap();
let expected_full = full(&expected);
assert_ne!(full(base), expected_full);
let wrong = renamed(base, incident(0x21), name).unwrap();
assert_ne!(
full(&wrong),
expected_full,
"Wrong occurrence must fail full comparison"
);
let mut alias = expected.clone();
alias
.elements
.get_mut(&incident(0x20))
.unwrap()
.alias
.push_str("_extra");
assert_ne!(
full(&alias),
expected_full,
"Extra alias change must not be ignored"
);
let mut reordered = serde_json::to_value(&expected).unwrap();
reordered
.pointer_mut(&format!(
"/elements/{}/body/Oa/Shared/Scenario/steps",
incident(0x10)
))
.unwrap()
.as_array_mut()
.unwrap()
.swap(0, 1);
let reordered: Project = serde_json::from_value(reordered).unwrap();
assert_ne!(
full(&reordered),
expected_full,
"Semantic order is not normalized away"
);
let mut geometry = expected.clone();
let Some(DiagramLayout::Scenario(layout)) =
&mut geometry.diagrams.get_mut(&incident(0x40)).unwrap().layout
else {
panic!("Scenario layout required")
};
layout.lanes[0].x += 1.;
assert_ne!(
full(&geometry),
expected_full,
"Extra layout mutation rejected"
);
let mut zeros = base.clone();
let Some(DiagramLayout::Scenario(layout)) =
&mut zeros.diagrams.get_mut(&incident(0x40)).unwrap().layout
else {
panic!("Scenario layout required")
};
layout.lanes[0].x = -0.;
let negative = full(&zeros);
let Some(DiagramLayout::Scenario(layout)) =
&mut zeros.diagrams.get_mut(&incident(0x40)).unwrap().layout
else {
unreachable!()
};
layout.lanes[0].x = 0.;
assert_ne!(negative, full(&zeros));
assert!(
renamed(base, incident(0x40), name).is_err(),
"Diagram identity is outside element-name mode"
);
assert!(renamed(base, incident(0x20), "Initial incident report").is_err());
let baseline = approved_expected(EXPECTED[0].1, "baseline").unwrap();
assert_eq!(
full(typed),
full(&baseline),
"Actual admitted fixture must equal approved baseline"
);
for (key, text) in EXPECTED {
assert!(approved_expected(text, key).is_ok());
}
assert!(
approved_expected(EXPECTED[1].1, "3a").is_err(),
"Wrong checkpoint rejected"
);
let mut wrong_id: Value = serde_json::from_str(EXPECTED[0].1).unwrap();
wrong_id["id"] = json!(incident(1));
assert!(approved_expected(&canonical(&wrong_id), "baseline").is_err());
let mut unknown: Value = serde_json::from_str(EXPECTED[0].1).unwrap();
unknown["unapproved_extra"] = json!(true);
assert!(approved_expected(&canonical(&unknown), "baseline").is_err());
put(
&out.join("incident.baseline.project.json"),
full(base).as_bytes(),
);
put(
&out.join("service.baseline.project.json"),
full(typed).as_bytes(),
);
put(&out.join("self-check.json"),serde_json::to_string_pretty(&json!({"status":"passed",
"checks":["name_only_candidate","wrong_occurrence","extra_alias","semantic_array_order","extra_layout",
"signed_zero","non_element_target","unchanged_name","admitted_service_baseline", "all_six_approved_checkpoints",
"wrong_checkpoint","wrong_expected_project_identity","unknown_expected_field"],
"scope":"Comparator self-check only; no saved native output or runtime/history acceptance"})).unwrap().as_bytes());
}
fn main() {
let args: Vec<String> = std::env::args().collect();
let mode = args.get(1).expect("Expected name, typed or self-check");
assert_eq!(
args.len(),
match mode.as_str() {
"name" => 7,
"typed" => 6,
"self-check" => 5,
_ => panic!("Unknown mode"),
}
);
let out = Path::new(&args[4]);
fs::create_dir(out).expect("Output must be fresh; preserve earlier evidence");
if mode == "self-check" {
assert_eq!(fs::read_to_string(&args[2]).unwrap(), INCIDENT);
assert_eq!(fs::read_to_string(&args[3]).unwrap(), SERVICE);
self_check(
&load_source(Path::new(&args[2]), incident(1)),
&load_source(Path::new(&args[3]), service(0)),
out,
);
println!("Details comparator self-check passed; no native result");
return;
}
let (expected, actual, change) = if mode == "name" {
let base = load_source(Path::new(&args[2]), incident(1));
put(&out.join("baseline.project.json"), full(&base).as_bytes());
let selected = args[5].parse::<Id>().unwrap();
let expected = renamed(&base, selected, &args[6]).unwrap();
let old = &base.elements[&selected].name;
(
expected,
load_source(Path::new(&args[3]), incident(1)),
json!({"element":selected,"before":old,"after":args[6]}),
)
} else {
let expected = approved_expected(&fs::read_to_string(&args[2]).unwrap(), &args[5]).unwrap();
(
expected,
load_source(Path::new(&args[3]), service(0)),
json!({"approved_checkpoint":args[5]}),
)
};
let expected = full(&expected);
let actual = full(&actual);
let equal = expected == actual;
put(&out.join("expected.project.json"), expected.as_bytes());
put(&out.join("actual.project.json"), actual.as_bytes());
put(&out.join("comparison.json"),serde_json::to_string_pretty(&json!({"status":if equal {"passed"}else{"failed"},
"mode":mode,"expected_change":change,"full_project_exact":equal,
"scope":"Complete admitted saved-source Project only; no runtime, editor-buffer, camera, Undo stack or native action claim"})).unwrap().as_bytes());
assert!(
equal,
"Complete Project differs; inspect preserved expected/actual outputs"
);
println!("Details saved-source comparison passed: {mode}");
}
@@ -0,0 +1,97 @@
{
"status": "Frozen preparation; no build or test execution",
"file_count": 18,
"bytes": 161595,
"files": [
{
"path": "adaptation-provenance.json",
"bytes": 4348,
"sha256": "87671203d9b1f191202aada5c5934ea1a61234cc1f8824f57c355c237b958647"
},
{
"path": "adaptation.diff",
"bytes": 22663,
"sha256": "b27d599221d16b1111eedc45a30f292052bcca7bb31ea391fa8cf69e805ff9c1"
},
{
"path": "build.ps1",
"bytes": 15401,
"sha256": "d7bc60f65cb4e4e8dbd59aea1a7c59cc3cf06f81cd2820817fcabe4d9c29b2b4"
},
{
"path": "check.ps1",
"bytes": 11551,
"sha256": "1b942aa0b7bfe5427a1b36833a9dd18c4f836fa3130f22f41939523d00959a78"
},
{
"path": "expected/after-1.expected.project.json",
"bytes": 10578,
"sha256": "c03cf59f83bc1ae4db64584abf1257efc775cc47b49f2b2db4ac47159dfb90a0"
},
{
"path": "expected/after-3a.expected.project.json",
"bytes": 10495,
"sha256": "ce3d58385815d0a1d01320bdd711d707cb4c530f0614545eca2b83533077b6f0"
},
{
"path": "expected/after-3b.expected.project.json",
"bytes": 10487,
"sha256": "81f16c54db0e7be1960be5de6a89a6e16a56d6c62d45e15aa7f59bc9d85c8925"
},
{
"path": "expected/after-3c.expected.project.json",
"bytes": 10565,
"sha256": "3c4521eef6cf2a6024275f8c6bf5e9a55d7f6e10cb58c9cc846be56cfa121aca"
},
{
"path": "expected/after-3d.expected.project.json",
"bytes": 10565,
"sha256": "36dfe596c1e2f39a82795237f545787996e9138d9c160217611b201da14ce66a"
},
{
"path": "expected/baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
},
{
"path": "expected-catalog.json",
"bytes": 1974,
"sha256": "5607c2f3cd44aeb18b923f6afc42f82a693e4320778be69f7d1ce1d616e21a1a"
},
{
"path": "fixtures/incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "fixtures/service-details.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"path": "main.rs",
"bytes": 11873,
"sha256": "502b488eae0b7775cb01e7de4580dfa6efece63389d6fb57dc782df2fad48af0"
},
{
"path": "README.md",
"bytes": 8764,
"sha256": "02b72d55ff90e877ec574222fc56ea6c2924c9ce3d5f95179082bb0a50ea0b00"
},
{
"path": "script-validation.json",
"bytes": 1685,
"sha256": "e243c0d48d888cdbc30bcb7cea9928dc3b8ad7b1c5778cd6f550d5760e56910f"
},
{
"path": "source-inputs.json",
"bytes": 2432,
"sha256": "db7a27108034653acc84e498cb0df375ed38df3884fad66099be473a3eb4bbfa"
},
{
"path": "validate-scripts.ps1",
"bytes": 5300,
"sha256": "a97db54f8ac0a48f25879cb6dfe3d72efabc452ea6504a24a5161f81ff92dcee"
}
]
}
@@ -0,0 +1,52 @@
{
"status": "passed",
"scripts": [
{
"path": "build.ps1",
"bytes": 15401,
"sha256": "d7bc60f65cb4e4e8dbd59aea1a7c59cc3cf06f81cd2820817fcabe4d9c29b2b4"
},
{
"path": "check.ps1",
"bytes": 11551,
"sha256": "1b942aa0b7bfe5427a1b36833a9dd18c4f836fa3130f22f41939523d00959a78"
},
{
"path": "validate-scripts.ps1",
"bytes": 5300,
"sha256": "a97db54f8ac0a48f25879cb6dfe3d72efabc452ea6504a24a5161f81ff92dcee"
}
],
"positive_cases": 3,
"negative_cases": [
"old_source",
"not_list",
"failed_list",
"changed_inputs",
"missing_binary_binding",
"postflight_failure",
"old_desktop_count",
"old_focused_count",
"old_source_count",
"missing_source_record",
"extra_source_record",
"wrong_expected_source",
"wrong_actual_listing",
"wrong_or_missing_reviewed_hash",
"wrong_or_missing_reviewed_hash",
"missing_fixture",
"uncanonical_fixture",
"duplicate_fixture"
],
"actual_expected_inputs": {
"file_count": 612,
"sha256": "f720f1e2f7f31bd4188e9b624cf0324439958ae23dcb7c48c9ecc16cc7ed6131",
"base": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\expected-inputs.json",
"count": 612
},
"compiler_executed": false,
"oracle_executed": false,
"gate_admitted": false,
"scope": "AST and actual pure builder guards only, with synthetic metadata. Actual LIST-bound expected-inputs schema read; no full gate/fingerprint selection or source admission executed."
}
@@ -0,0 +1,108 @@
arcadia 7;
project incident_workspace "Incident report review" id "70200000-0000-4000-8000-000000000001" {
// Two operational activities, with one lifeline appearance per Scenario.
oa_activity report_incident "Report incident" id "70200000-0000-4000-8000-000000000002" {}
oa_activity assess_incident "Assess incident" id "70200000-0000-4000-8000-000000000003" {}
interaction incident_report "Incident report" id "70200000-0000-4000-8000-000000000004" {
source @report_incident;
target @assess_incident;
}
oa_scenario incident_response "Review a reported incident" id "70200000-0000-4000-8000-000000000010" {
viewpoint OperationalActivity;
steps [@initial_report, @updated_report, @assess_call, @assess_reply, @unfinished_notice, @use_review];
}
oa_lifeline reporter "Reporting activity" id "70200000-0000-4000-8000-000000000011" {
parent @incident_response; represented @report_incident;
}
oa_lifeline assessor "Assessment activity" id "70200000-0000-4000-8000-000000000012" {
parent @incident_response; represented @assess_incident;
}
// Both appearances reuse one definition. Navigation must retain the occurrence.
oa_occurrence initial_report "Initial incident report" id "70200000-0000-4000-8000-000000000020" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
oa_occurrence updated_report "Updated incident report" id "70200000-0000-4000-8000-000000000021" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
// A correlated self call/reply with deliberately unassigned exchange definitions.
oa_occurrence assess_call "Assess report details" id "70200000-0000-4000-8000-000000000022" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Call; }; };
}
oa_occurrence assess_reply "Assessment ready" id "70200000-0000-4000-8000-000000000023" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Reply; reply_to @assess_call; }; };
}
// Intentional unfinished work: no receiver and therefore no fabricated arrow.
oa_occurrence unfinished_notice "Follow-up recipient undecided" id "70200000-0000-4000-8000-000000000024" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver none; message_kind Asynchronous; }; };
}
oa_occurrence use_review "Use the reviewed reporting procedure" id "70200000-0000-4000-8000-000000000025" {
parent @incident_response;
body { ScenarioUse {
bindings [{ local @reporter; referenced @review_reporter; }, { local @assessor; referenced @review_assessor; }];
scenario @reporting_review;
}; };
}
// This definition stays opaque in the caller. Open it, then Back to the saved view.
oa_scenario reporting_review "Reporting procedure detail" id "70200000-0000-4000-8000-000000000030" {
viewpoint OperationalActivity;
steps [@review_delivery];
}
oa_lifeline review_reporter "Reporting activity in detail" id "70200000-0000-4000-8000-000000000031" {
parent @reporting_review; represented @report_incident;
}
oa_lifeline review_assessor "Assessment activity in detail" id "70200000-0000-4000-8000-000000000032" {
parent @reporting_review; represented @assess_incident;
}
oa_occurrence review_delivery "Check the incident report" id "70200000-0000-4000-8000-000000000033" {
parent @reporting_review;
body { Exchange { exchange @incident_report; sender @review_reporter; receiver @review_assessor; message_kind Asynchronous; }; };
}
diagram incident_readable "A - Incident review readable" id "70200000-0000-4000-8000-000000000040" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x 160; }, { lifeline @assessor; x 640; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_wide "B - Incident review negative and far" id "70200000-0000-4000-8000-000000000041" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x -500; }, { lifeline @assessor; x 50000; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_repair "C - Incident review needs layout repair" id "70200000-0000-4000-8000-000000000042" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
// These valid authored lanes must remain saved during complete fallback.
lanes [{ lifeline @reporter; x 900; }, { lifeline @assessor; x -500; }];
messages [
// REPAIR: change only this 300 to 424, then Undo and Redo the edit.
{ address { references []; occurrence @assess_reply; }; send_y 300; },
// This authored value stays latent while the receiver is missing.
{ address { references []; occurrence @unfinished_notice; }; send_y 2000; }
];
}; };
}
}
@@ -0,0 +1,113 @@
arcadia 7;
project service_details "Valve service Details trial" id "80300000-0000-4000-8000-000000000000" {
sa_actor console "Operator console" id "80300000-0000-4000-8000-000000000001" {}
sa_system valve "Valve service" id "80300000-0000-4000-8000-000000000002" {}
sa_port caller_port "Console service client" id "80300000-0000-4000-8000-000000000003" {
parent @console; contract { Component { kind Standard; orientation Unset; }; };
}
sa_port provider_port "Valve service endpoint" id "80300000-0000-4000-8000-000000000004" {
parent @valve; contract { Component { kind Standard; orientation Unset; }; };
}
sa_data_type text_value "Service text" id "80300000-0000-4000-8000-000000000010" {
definition { String { minimum_length 0; maximum_length 128; }; };
}
sa_data_type pressure_value "Pressure in bar" id "80300000-0000-4000-8000-000000000011" {
definition { Real { minimum 0; maximum 100; }; }; unit "bar";
}
sa_data_type accepted_value "Acceptance flag" id "80300000-0000-4000-8000-000000000012" { definition Boolean; }
sa_exchange_item read_status "ReadStatus" id "80300000-0000-4000-8000-000000000020" {
kind Information; mechanism Operation;
}
sa_data_field read_scope "Scope" id "80300000-0000-4000-8000-000000000021" {
parent @read_status; type_ref { Named @text_value; }; direction In;
minimum 0; maximum 1; storage Value;
}
sa_data_field read_result "Status" id "80300000-0000-4000-8000-000000000022" {
parent @read_status; type_ref { Named @text_value; }; direction Return;
minimum 0; maximum 1; storage Value;
}
sa_exchange_item set_limit "SetLimit" id "80300000-0000-4000-8000-000000000030" {
kind Information; mechanism Operation;
}
sa_data_field limit_value "Pressure limit" id "80300000-0000-4000-8000-000000000031" {
parent @set_limit; type_ref { Named @pressure_value; }; direction In;
minimum 0; maximum 1; storage Value;
}
sa_data_field limit_accepted "Accepted" id "80300000-0000-4000-8000-000000000032" {
parent @set_limit; type_ref { Named @accepted_value; }; direction Return;
minimum 0; maximum 1; storage Value;
}
sa_interface valve_api "Valve commands" id "80300000-0000-4000-8000-000000000040" {}
interface_item_allocation read_allocation "ReadStatus allocation" id "80300000-0000-4000-8000-000000000041" {
source @valve_api; target @read_status; order 0;
transmission Synchronous; acquisition Accept;
}
interface_item_allocation limit_allocation "SetLimit allocation" id "80300000-0000-4000-8000-000000000042" {
source @valve_api; target @set_limit; order 1;
transmission Synchronous; acquisition Accept;
}
interface_requirement requires_api "Console requires Valve commands" id "80300000-0000-4000-8000-000000000043" {
source @caller_port; target @valve_api;
}
interface_provision provides_api "Valve provides Valve commands" id "80300000-0000-4000-8000-000000000044" {
source @provider_port; target @valve_api;
}
boundary_exchange service_channel "Valve service channel" id "80300000-0000-4000-8000-000000000045" {
source @caller_port; target @provider_port; oriented false;
items [@read_status, @set_limit];
}
sa_scenario service_review "Review service calls" id "80300000-0000-4000-8000-000000000050" {
viewpoint BoundaryInterface;
steps [@first_call, @first_reply, @control_call, @control_reply];
}
sa_lifeline caller "Console caller" id "80300000-0000-4000-8000-000000000051" {
parent @service_review; represented @console;
}
sa_lifeline provider "Valve provider" id "80300000-0000-4000-8000-000000000052" {
parent @service_review; represented @valve;
}
sa_occurrence first_call "Read primary status" id "80300000-0000-4000-8000-000000000060" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @caller; receiver @provider; message_kind Call;
operation { allocation @read_allocation; };
values [{ path []; field @read_scope; expression "\"primary\""; }];
}; };
}
sa_occurrence first_reply "Primary status response" id "80300000-0000-4000-8000-000000000061" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @provider; receiver @caller;
message_kind Reply; reply_to @first_call;
values [{ path []; field @read_result; expression "\"READY\""; }];
}; };
}
sa_occurrence control_call "Set reserve limit" id "80300000-0000-4000-8000-000000000062" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @caller; receiver @provider; message_kind Call;
operation { allocation @limit_allocation; };
values [{ path []; field @limit_value; expression "12.5"; }];
}; };
}
sa_occurrence control_reply "Reserve limit accepted" id "80300000-0000-4000-8000-000000000063" {
parent @service_review;
body { Exchange {
exchange @service_channel; sender @provider; receiver @caller;
message_kind Reply; reply_to @control_call;
values [{ path []; field @limit_accepted; expression "true"; }];
}; };
}
diagram service_details_view "Service calls - Details trial" id "80300000-0000-4000-8000-000000000070" {
layer Sa; projection { Scenario { scenario @service_review; }; };
layout { Scenario {
lanes [{ lifeline @caller; x 160; }, { lifeline @provider; x 650; }];
messages [
{ address { references []; occurrence @first_call; }; send_y 160; },
{ address { references []; occurrence @first_reply; }; send_y 270; },
{ address { references []; occurrence @control_call; }; send_y 390; },
{ address { references []; occurrence @control_reply; }; send_y 500; }
];
}; };
}
}
@@ -0,0 +1,19 @@
{
"checks": [
"name_only_candidate",
"wrong_occurrence",
"extra_alias",
"semantic_array_order",
"extra_layout",
"signed_zero",
"non_element_target",
"unchanged_name",
"admitted_service_baseline",
"all_six_approved_checkpoints",
"wrong_checkpoint",
"wrong_expected_project_identity",
"unknown_expected_field"
],
"scope": "Comparator self-check only; no saved native output or runtime/history acceptance",
"status": "passed"
}
@@ -0,0 +1,77 @@
{
"source_commit": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"command": [
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\details-source-oracle.exe",
"self-check",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-0.arcadia",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-1.arcadia",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison"
],
"mode": "self-check",
"start_utc": "2026-09-13T14:25:19.3291725Z",
"end_utc": "2026-09-13T14:25:22.0822974Z",
"exit_code": 0,
"failure": null,
"inputs_unchanged": true,
"semantic_pass": true,
"runtime_binding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
"oracle_sha256": "996803f938b7503db8508adf9b7fc2dd379852b5b603463edf6987dd1e5270a6",
"build_receipt_sha256": "5c700a6b63ce1060c0091d6370d6e07b824fd871adb6bf89fd8c4a155b1c1c18",
"artifacts": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-0.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\input-1.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\inputs-after.json",
"bytes": 175927,
"sha256": "4dfe507684a6f319a1c11049123ed79fc3726a05f7e342e881edd4474050c802"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\inputs-before.json",
"bytes": 175927,
"sha256": "4dfe507684a6f319a1c11049123ed79fc3726a05f7e342e881edd4474050c802"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\request.json",
"bytes": 129,
"sha256": "7b6d280159217b38f71a1a98e85b5d4c8f8311370bb05c2ef982cfee1165b752"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\stdout.log",
"bytes": 55,
"sha256": "e196f844e223e514c2d060617424d8468da244fda4c7d42f42962a22c48345ff"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\incident.baseline.project.json",
"bytes": 9452,
"sha256": "60dab6b528c1f273d2b076897a6f95c492a74cdaa15bd27cd873bf12ce865391"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\self-check.json",
"bytes": 484,
"sha256": "62471fe9fe92746dea9253eb3e0e5ac326f35e4ccf927fc877a19c26f6aaa928"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\self-check-01\\project-comparison\\service.baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
}
],
"scope": "Complete admitted saved-source Project comparison only; no renderer, source editor, native action or runtime/history claim"
}
@@ -0,0 +1,4 @@
{
"mode": "self-check",
"expected_origin": "Declared before reading actual output; no expectation inferred from Actual"
}
@@ -0,0 +1 @@
Details comparator self-check passed; no native result
@@ -0,0 +1,75 @@
{
"status": "Fresh b10 preparation source only; uncompiled/unexecuted",
"files": [
{
"path": "main.rs",
"bytes": 11873,
"sha256": "502b488eae0b7775cb01e7de4580dfa6efece63389d6fb57dc782df2fad48af0"
},
{
"path": "build.ps1",
"bytes": 15401,
"sha256": "d7bc60f65cb4e4e8dbd59aea1a7c59cc3cf06f81cd2820817fcabe4d9c29b2b4"
},
{
"path": "check.ps1",
"bytes": 11551,
"sha256": "1b942aa0b7bfe5427a1b36833a9dd18c4f836fa3130f22f41939523d00959a78"
},
{
"path": "validate-scripts.ps1",
"bytes": 5300,
"sha256": "a97db54f8ac0a48f25879cb6dfe3d72efabc452ea6504a24a5161f81ff92dcee"
},
{
"path": "README.md",
"bytes": 8764,
"sha256": "02b72d55ff90e877ec574222fc56ea6c2924c9ce3d5f95179082bb0a50ea0b00"
},
{
"path": "expected-catalog.json",
"bytes": 1974,
"sha256": "5607c2f3cd44aeb18b923f6afc42f82a693e4320778be69f7d1ce1d616e21a1a"
},
{
"path": "fixtures/incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "fixtures/service-details.arcadia",
"bytes": 6132,
"sha256": "0e4325222a451b9d4e503974ce86bb95a9931edd0d2d65b8cd9db8d0f99d69e5"
},
{
"path": "expected/after-1.expected.project.json",
"bytes": 10578,
"sha256": "c03cf59f83bc1ae4db64584abf1257efc775cc47b49f2b2db4ac47159dfb90a0"
},
{
"path": "expected/after-3a.expected.project.json",
"bytes": 10495,
"sha256": "ce3d58385815d0a1d01320bdd711d707cb4c530f0614545eca2b83533077b6f0"
},
{
"path": "expected/after-3b.expected.project.json",
"bytes": 10487,
"sha256": "81f16c54db0e7be1960be5de6a89a6e16a56d6c62d45e15aa7f59bc9d85c8925"
},
{
"path": "expected/after-3c.expected.project.json",
"bytes": 10565,
"sha256": "3c4521eef6cf2a6024275f8c6bf5e9a55d7f6e10cb58c9cc846be56cfa121aca"
},
{
"path": "expected/after-3d.expected.project.json",
"bytes": 10565,
"sha256": "36dfe596c1e2f39a82795237f545787996e9138d9c160217611b201da14ce66a"
},
{
"path": "expected/baseline.project.json",
"bytes": 10576,
"sha256": "e59d4f08fda2bae23ca2b84bda0c8679703b1b75a0b7c1916b2f49d2762a90c6"
}
]
}
@@ -0,0 +1,53 @@
#Requires -Version 7.0
$ErrorActionPreference='Stop'
$records=@(foreach($name in @('build.ps1','check.ps1','validate-scripts.ps1')){
$path=Join-Path $PSScriptRoot $name;$tokens=$null;$errors=$null
[void][Management.Automation.Language.Parser]::ParseFile($path,[ref]$tokens,[ref]$errors)
if(@($errors).Count){throw ($errors|Out-String)}
[ordered]@{path=$name;bytes=(Get-Item -LiteralPath $path).Length;sha256=(Get-FileHash -LiteralPath $path -Algorithm SHA256).Hash.ToLowerInvariant()}
})
# Load only the three pure guard definitions from the actual builder AST.
$tokens=$null;$errors=$null
$ast=[Management.Automation.Language.Parser]::ParseFile((Join-Path $PSScriptRoot 'build.ps1'),[ref]$tokens,[ref]$errors)
foreach($name in @('Assert-ReviewedHash','Assert-ListPreparation','Select-SourceRecords')){
$nodes=@($ast.FindAll({param($n)$n -is [Management.Automation.Language.FunctionDefinitionAst] -and $n.Name -ceq $name},$true))
if($nodes.Count -ne 1){throw 'Pure guard definition missing/ambiguous'}
. ([scriptblock]::Create($nodes[0].Extent.Text))
}
$pin='b10b28cefd1d0794073ba241a0c8de9a83e85f68'
$expectedPath=(Resolve-Path -LiteralPath (Join-Path $PSScriptRoot '../scenario-validation-gates-b10b28c-20260913/expected-inputs.json')).Path
$actualExpected=Get-Content -Raw -LiteralPath $expectedPath|ConvertFrom-Json
$expectedHash=(Get-FileHash -LiteralPath $expectedPath -Algorithm SHA256).Hash.ToLowerInvariant()
$actualList=Get-Content -Raw -LiteralPath (Join-Path (Split-Path -Parent $expectedPath) 'list-receipt.json')|ConvertFrom-Json
if($actualList.boundScriptAndInputHashes.'expected-inputs.json' -cne $expectedHash){throw 'Actual expected-inputs schema example is not LIST-bound'}
$good=[ordered]@{reference=@{base=$pin;stage='list';cargoExitCode=0;selectionValid=$true;inputsUnchanged=$true;testBinaryBindingValid=$true;postflightFailure=$null;listSummaries=@(@{tests=1095;benchmarks=0})};selection=@{source_commit=$pin;expected_desktop_count=1095;expected_count=301};expected=$actualExpected}
$json=$good|ConvertTo-Json -Depth 8
Assert-ListPreparation $good.reference $good.selection $good.expected
Assert-ReviewedHash ('a'*64) ('a'*64)
$sourcePaths=@('C:\probe\main.rs','C:\probe\fixtures\incident.arcadia')
$sourceRecords=@($sourcePaths|ForEach-Object {[pscustomobject]@{path=$_;bytes=1;sha256=('0'*64)}})
if(@(Select-SourceRecords $sourceRecords $sourcePaths).Count -ne 2){throw 'Canonical source selection failed'}
$cases=@(
@{name='old_source';mutate={param($v)$v.reference.base='8bf7607a3f3b53db0c36364f54f57674c64ea2f1'}},
@{name='not_list';mutate={param($v)$v.reference.stage='clippy'}},
@{name='failed_list';mutate={param($v)$v.reference.cargoExitCode=1}},
@{name='changed_inputs';mutate={param($v)$v.reference.inputsUnchanged=$false}},
@{name='missing_binary_binding';mutate={param($v)$v.reference.testBinaryBindingValid=$false}},
@{name='postflight_failure';mutate={param($v)$v.reference.postflightFailure='changed'}},
@{name='old_desktop_count';mutate={param($v)$v.selection.expected_desktop_count=1089}},
@{name='old_focused_count';mutate={param($v)$v.selection.expected_count=295}},
@{name='old_source_count';mutate={param($v)$v.expected.count=611}},
@{name='missing_source_record';mutate={param($v)$v.expected.files=@($v.expected.files|Select-Object -First 611)}},
@{name='extra_source_record';mutate={param($v)$v.expected.files=@($v.expected.files)+@($v.expected.files[0])}},
@{name='wrong_expected_source';mutate={param($v)$v.expected.base=('0'*40)}},
@{name='wrong_actual_listing';mutate={param($v)$v.reference.listSummaries[0].tests=1094}}
)
$rejections=@();foreach($case in $cases){$v=$json|ConvertFrom-Json;& $case.mutate $v;$rejected=$false;try{Assert-ListPreparation $v.reference $v.selection $v.expected}catch{$rejected=$true};if(-not $rejected){throw ('Admitted '+$case.name)};$rejections+=@($case.name)}
foreach($hashes in @(@{actual=('b'*64);expected=('a'*64)},@{actual=('a'*64);expected=''})){
$rejected=$false;try{Assert-ReviewedHash $hashes.actual $hashes.expected}catch{$rejected=$true};if(-not $rejected){throw 'Unreviewed artifact hash admitted'};$rejections+=@('wrong_or_missing_reviewed_hash')
}
$badRecords=@([pscustomobject]@{path='C:\probe\main.rs';bytes=1;sha256=('0'*64)},[pscustomobject]@{path='C:\probe\oracle\..\fixtures\incident.arcadia';bytes=1;sha256=('0'*64)})
foreach($case in @(@{name='missing_fixture';rows=@($sourceRecords[0])},@{name='uncanonical_fixture';rows=$badRecords},@{name='duplicate_fixture';rows=(@($sourceRecords)+@($sourceRecords[1]))})){
$rejected=$false;try{Select-SourceRecords $case.rows $sourcePaths|Out-Null}catch{$rejected=$true};if(-not $rejected){throw ('Admitted '+$case.name)};$rejections+=@($case.name)
}
[ordered]@{status='passed';scripts=$records;positive_cases=3;negative_cases=$rejections;actual_expected_inputs=@{path=$expectedPath;sha256=$expectedHash;base=$actualExpected.base;count=$actualExpected.count;file_count=@($actualExpected.files).Count};compiler_executed=$false;oracle_executed=$false;gate_admitted=$false;scope='AST and actual pure builder guards only, with synthetic metadata. Actual LIST-bound expected-inputs schema read; no full gate/fingerprint selection or source admission executed.'}|ConvertTo-Json -Depth 8
@@ -0,0 +1,9 @@
$taskToolchainRoot = $PSScriptRoot
$env:CARGO_HOME = Join-Path $taskToolchainRoot 'cargo'
$env:RUSTUP_HOME = Join-Path $taskToolchainRoot 'rustup'
$env:PATH = (Join-Path $taskToolchainRoot 'cargo\bin') + ';' + (Join-Path $taskToolchainRoot 'llvm-mingw-20260908-ucrt-x86_64\bin') + ';' + $env:PATH
$env:CARGO_BUILD_JOBS = '1'
$env:CARGO_INCREMENTAL = '0'
$env:CARGO_TARGET_X86_64_PC_WINDOWS_GNULLVM_LINKER = 'clang.exe'
$env:RC = Join-Path $taskToolchainRoot 'llvm-mingw-20260908-ucrt-x86_64\bin\llvm-windres.exe'
$env:RUSTUP_TOOLCHAIN = 'stable-x86_64-pc-windows-gnullvm'
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[]","declared_features":"[]","target":9792512432450288461,"profile":8378823585564974145,"path":10192304750368139731,"deps":[[4012234191921133045,"thiserror",false,6031038737999579872],[5330460842384404171,"serde_json",false,4753686476057189700],[6557439603276904804,"serde",false,12817500957184880713],[9723370144619655183,"tempfile",false,5243210545501344155],[11781824977070132858,"same_file",false,7694043416015497509],[14063412941180217548,"uuid",false,16344938119731331185],[14493392674156086091,"build_script_build",false,14243172334193605260]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\oa-core-3835d3237ee22542\\dep-lib-oa_core","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[]","declared_features":"[]","target":9792512432450288461,"profile":8378823585564974145,"path":10192304750368139731,"deps":[[4012234191921133045,"thiserror",false,6031038737999579872],[5330460842384404171,"serde_json",false,9111881576180166571],[6557439603276904804,"serde",false,4489617809821655082],[9723370144619655183,"tempfile",false,5243210545501344155],[11781824977070132858,"same_file",false,7694043416015497509],[14063412941180217548,"uuid",false,566484484131382191],[14493392674156086091,"build_script_build",false,14243172334193605260]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\oa-core-86a2622fbe014324\\dep-lib-oa_core","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[]","declared_features":"[]","target":15828655133253118522,"profile":6436925529677257388,"path":13524237816435861441,"deps":[[2145939652136225981,"tokio",false,13560941903633356403],[5330460842384404171,"serde_json",false,9111881576180166571],[6557439603276904804,"serde",false,4489617809821655082],[7624145794181254703,"build_script_build",false,8110375297666688273],[8044389799428693028,"oa_server",false,4198616448215590051],[9623115042005598317,"rfd",false,16535794335894872678],[9723370144619655183,"tempfile",false,5243210545501344155],[9842033052731393846,"axum",false,14094485974199511505],[14139690936951948003,"iced",false,16108679667981481544],[14493392674156086091,"oa_core",false,4419379373038517442],[16198203750081063573,"unicode_segmentation",false,5667086376135872355],[17208636416415396882,"iced_runtime",false,6482748531637498468],[17325453097244291330,"reqwest",false,13132300058919013496]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\oa-desktop-27db9628b266bf39\\dep-test-bin-arcadia-studio","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[]","declared_features":"[]","target":15828655133253118522,"profile":8378823585564974145,"path":13524237816435861441,"deps":[[2145939652136225981,"tokio",false,1367784247317589871],[5330460842384404171,"serde_json",false,4753686476057189700],[6557439603276904804,"serde",false,12817500957184880713],[7624145794181254703,"build_script_build",false,8110375297666688273],[9623115042005598317,"rfd",false,16535794335894872678],[9723370144619655183,"tempfile",false,5243210545501344155],[14139690936951948003,"iced",false,1041017771048386638],[14493392674156086091,"oa_core",false,7524056135498354342],[16198203750081063573,"unicode_segmentation",false,5667086376135872355],[17325453097244291330,"reqwest",false,15648853654114937432]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\oa-desktop-93232a492cc801eb\\dep-bin-arcadia-studio","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[\"default\", \"std\"]","declared_features":"[\"alloc\", \"arbitrary_precision\", \"default\", \"float_roundtrip\", \"indexmap\", \"preserve_order\", \"raw_value\", \"std\", \"unbounded_depth\"]","target":9592559880233824070,"profile":8378823585564974145,"path":9516600172453656966,"deps":[[5330460842384404171,"build_script_build",false,10302394721460756435],[5532778797167691009,"itoa",false,14930288972773478100],[11029742160753049355,"serde_core",false,12627368256302415275],[12613788554453945248,"memchr",false,1440409254891810238],[16226529040278277557,"zmij",false,18174765404489670566]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\serde_json-39fc764f03e68759\\dep-lib-serde_json","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1 @@
{"rustc":4368751908343638535,"features":"[\"default\", \"raw_value\", \"std\"]","declared_features":"[\"alloc\", \"arbitrary_precision\", \"default\", \"float_roundtrip\", \"indexmap\", \"preserve_order\", \"raw_value\", \"std\", \"unbounded_depth\"]","target":9592559880233824070,"profile":8378823585564974145,"path":9516600172453656966,"deps":[[5330460842384404171,"build_script_build",false,264710037775816092],[5532778797167691009,"itoa",false,14930288972773478100],[11029742160753049355,"serde_core",false,16671111125352116831],[12613788554453945248,"memchr",false,1440409254891810238],[16226529040278277557,"zmij",false,18174765404489670566]],"local":[{"CheckDepInfo":{"dep_info":"debug\\.fingerprint\\serde_json-da2c4f333fc47818\\dep-lib-serde_json","checksum":false}}],"rustflags":[],"config":1025291897514690248,"compile_kind":0}
@@ -0,0 +1,51 @@
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\oa_core-3835d3237ee22542.d: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\liboa_core-3835d3237ee22542.rlib: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\liboa_core-3835d3237ee22542.rmeta: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
crates\oa-core\src\lib.rs:
crates\oa-core\src\data.rs:
crates\oa-core\src\language.rs:
crates\oa-core\src\language\semantic_source.rs:
crates\oa-core\src\migration_v2\source.rs:
crates\oa-core\src\model.rs:
crates\oa-core\src\operations.rs:
crates\oa-core\src\persistence.rs:
crates\oa-core\src\migration_v2\mod.rs:
crates\oa-core\src\migration_v2\adapter.rs:
crates\oa-core\src\migration_v2\model.rs:
crates\oa-core\src\migration_v2\references.rs:
crates\oa-core\src\migration_v2\state_validation.rs:
crates\oa-core\src\migration_v2\transitions.rs:
crates\oa-core\src\migration_v2\validation.rs:
crates\oa-core\src\migration_v3\mod.rs:
crates\oa-core\src\migration_v4.rs:
crates\oa-core\src\ports.rs:
crates\oa-core\src\projection.rs:
crates\oa-core\src\projection\port_layout.rs:
crates\oa-core\src\projection\state.rs:
crates\oa-core\src\references.rs:
crates\oa-core\src\routing.rs:
crates\oa-core\src\scenario_layout.rs:
crates\oa-core\src\semantic.rs:
crates\oa-core\src\semantic\catalog.rs:
crates\oa-core\src\semantic\historical.rs:
crates\oa-core\src\semantic\linked.rs:
crates\oa-core\src\semantic\mutate.rs:
crates\oa-core\src\semantic\review.rs:
crates\oa-core\src\semantic\types.rs:
crates\oa-core\src\session.rs:
crates\oa-core\src\source_files.rs:
crates\oa-core\src\source_project.rs:
crates\oa-core\src\source_project\source_migration.rs:
crates\oa-core\src\source_project\source_structure.rs:
crates\oa-core\src\topology_context.rs:
crates\oa-core\src\topology_context\analysis.rs:
crates\oa-core\src\transitions.rs:
crates\oa-core\src\transitions\communication.rs:
crates\oa-core\src\validation.rs:
crates\oa-core\src\validation\coverage.rs:
crates\oa-core\src\view_options.rs:
crates\oa-core\src\demo.rs:
crates\oa-core\src\state_validation.rs:
@@ -0,0 +1,51 @@
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\oa_core-86a2622fbe014324.d: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\liboa_core-86a2622fbe014324.rlib: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\liboa_core-86a2622fbe014324.rmeta: crates\oa-core\src\lib.rs crates\oa-core\src\data.rs crates\oa-core\src\language.rs crates\oa-core\src\language\semantic_source.rs crates\oa-core\src\migration_v2\source.rs crates\oa-core\src\model.rs crates\oa-core\src\operations.rs crates\oa-core\src\persistence.rs crates\oa-core\src\migration_v2\mod.rs crates\oa-core\src\migration_v2\adapter.rs crates\oa-core\src\migration_v2\model.rs crates\oa-core\src\migration_v2\references.rs crates\oa-core\src\migration_v2\state_validation.rs crates\oa-core\src\migration_v2\transitions.rs crates\oa-core\src\migration_v2\validation.rs crates\oa-core\src\migration_v3\mod.rs crates\oa-core\src\migration_v4.rs crates\oa-core\src\ports.rs crates\oa-core\src\projection.rs crates\oa-core\src\projection\port_layout.rs crates\oa-core\src\projection\state.rs crates\oa-core\src\references.rs crates\oa-core\src\routing.rs crates\oa-core\src\scenario_layout.rs crates\oa-core\src\semantic.rs crates\oa-core\src\semantic\catalog.rs crates\oa-core\src\semantic\historical.rs crates\oa-core\src\semantic\linked.rs crates\oa-core\src\semantic\mutate.rs crates\oa-core\src\semantic\review.rs crates\oa-core\src\semantic\types.rs crates\oa-core\src\session.rs crates\oa-core\src\source_files.rs crates\oa-core\src\source_project.rs crates\oa-core\src\source_project\source_migration.rs crates\oa-core\src\source_project\source_structure.rs crates\oa-core\src\topology_context.rs crates\oa-core\src\topology_context\analysis.rs crates\oa-core\src\transitions.rs crates\oa-core\src\transitions\communication.rs crates\oa-core\src\validation.rs crates\oa-core\src\validation\coverage.rs crates\oa-core\src\view_options.rs crates\oa-core\src\demo.rs crates\oa-core\src\state_validation.rs
crates\oa-core\src\lib.rs:
crates\oa-core\src\data.rs:
crates\oa-core\src\language.rs:
crates\oa-core\src\language\semantic_source.rs:
crates\oa-core\src\migration_v2\source.rs:
crates\oa-core\src\model.rs:
crates\oa-core\src\operations.rs:
crates\oa-core\src\persistence.rs:
crates\oa-core\src\migration_v2\mod.rs:
crates\oa-core\src\migration_v2\adapter.rs:
crates\oa-core\src\migration_v2\model.rs:
crates\oa-core\src\migration_v2\references.rs:
crates\oa-core\src\migration_v2\state_validation.rs:
crates\oa-core\src\migration_v2\transitions.rs:
crates\oa-core\src\migration_v2\validation.rs:
crates\oa-core\src\migration_v3\mod.rs:
crates\oa-core\src\migration_v4.rs:
crates\oa-core\src\ports.rs:
crates\oa-core\src\projection.rs:
crates\oa-core\src\projection\port_layout.rs:
crates\oa-core\src\projection\state.rs:
crates\oa-core\src\references.rs:
crates\oa-core\src\routing.rs:
crates\oa-core\src\scenario_layout.rs:
crates\oa-core\src\semantic.rs:
crates\oa-core\src\semantic\catalog.rs:
crates\oa-core\src\semantic\historical.rs:
crates\oa-core\src\semantic\linked.rs:
crates\oa-core\src\semantic\mutate.rs:
crates\oa-core\src\semantic\review.rs:
crates\oa-core\src\semantic\types.rs:
crates\oa-core\src\session.rs:
crates\oa-core\src\source_files.rs:
crates\oa-core\src\source_project.rs:
crates\oa-core\src\source_project\source_migration.rs:
crates\oa-core\src\source_project\source_structure.rs:
crates\oa-core\src\topology_context.rs:
crates\oa-core\src\topology_context\analysis.rs:
crates\oa-core\src\transitions.rs:
crates\oa-core\src\transitions\communication.rs:
crates\oa-core\src\validation.rs:
crates\oa-core\src\validation\coverage.rs:
crates\oa-core\src\view_options.rs:
crates\oa-core\src\demo.rs:
crates\oa-core\src\state_validation.rs:
@@ -0,0 +1,22 @@
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\serde_json-39fc764f03e68759.d: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\libserde_json-39fc764f03e68759.rlib: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\libserde_json-39fc764f03e68759.rmeta: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs:
@@ -0,0 +1,23 @@
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\serde_json-da2c4f333fc47818.d: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\raw.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\libserde_json-da2c4f333fc47818.rlib: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\raw.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\target\debug\deps\libserde_json-da2c4f333fc47818.rmeta: C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\raw.rs
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\lib.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\macros.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\de.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\error.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\map.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\ser.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\mod.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\de.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\from.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\index.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\partial_eq.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\value\ser.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\io\mod.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\iter.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\number.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\read.rs:
C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\cargo\registry\src\index.crates.io-1949cf8c6b5b557f\serde_json-1.0.151\src\raw.rs:
@@ -0,0 +1,116 @@
{
"stage": "build",
"executionMode": "cargo-single-stage",
"batchReceipts": [],
"batchPlanSha256": "ae682377ada8fd4f0b4b5c2ed09ad81eb4800464b44e341f5bbccb3b482f66d9",
"command": "cargo build -p oa-desktop --bin arcadia-studio --locked --offline",
"arguments": [
"build",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"--locked",
"--offline"
],
"base": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"workspace": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-ytr83r-20260913",
"target": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target",
"startUtc": "2026-09-13T14:12:39.8502350Z",
"endUtc": "2026-09-13T14:19:15.0565122Z",
"cargoExitCode": 0,
"selectionValid": true,
"inputsUnchanged": true,
"postflightFailure": null,
"boundScriptAndInputHashes": {
"cache-policy.json": "68dfa3ec1c3ff7f0ef2cec55e27c163d5675026de354375e231e0e1ae37218b8",
"inputs-complete-focused-batch01-before.json": "9998c570359417c8350acdda43fe206aea0b60a6357baf5361887a540596084d",
"focused-batch03-receipt.json": "834047f8e3e3a8de969eb7dc490013f1d2a5ad7b24a1079f855fe8cffcaaa5b7",
"clippy-receipt.json": "a40b02c6e0904a70aab48bd1c20dfc926c4e194f4fb2e99f176b838e7a532d1d",
"inputs-complete-clippy-before.json": "9105d87076e514186adcf31d81b0102de8bb5644f54da0d90e14f569cd1a7a45",
"expected-tests.json": "869f6f79356bce44bdae8d453e3c31a720fdcfeec2298acf5311ebf3793d2054",
"inputs-complete-list-after.json": "c51c8d7820d586fed80047889c5a850ea7b7ab5c1fc60d6f32f773d04c8850c6",
"batches.json": "ae682377ada8fd4f0b4b5c2ed09ad81eb4800464b44e341f5bbccb3b482f66d9",
"all-receipt.json": "d1fe5a65170ca98889c1ca48f94b0531354eea32a0c139b18d8c442f23c342e2",
"inputs-complete-strict-preflight-after.json": "ba7a76af011191105f1909cf0a7dabde803eeac7a0493889cd150d68ff08f894",
"expected-inputs.json": "f720f1e2f7f31bd4188e9b624cf0324439958ae23dcb7c48c9ecc16cc7ed6131",
"strict-preflight-receipt.json": "90597fab687350816777480daa4bd9649b6b4e550cfe381b2af0eede0f1cadde",
"inputs-complete-before.json": "b3dff04a22e3c539b55229a4989a77cb17cde3f1e8f9e94fe13cd0f79ee4e312",
"inputs-complete-focused-batch01-after.json": "819d0519e4c4c2df9622ff0043f2097e38ff163b0a6cbac28b456fae2842151e",
"inputs-complete-all-before.json": "5b9e3aad6599e6dbf329243a80e5d979d38cbf3406d683e5c655774436d6e3b5",
"clippy.log": "50a70fc1fc43bbffffc23c5507808ecacdf898bee2a4f5f090023f15c527435c",
"source-provenance.json": "64868f108ae01e4298f0156db4ee500b1da4b8ecaff4e3c6c866ecba6aeb3fb1",
"inputs-complete-all-after.json": "3ed31db7dcf0ab9ed5870f20c8566bd229210b64ba96b7f89b8f62af6596f349",
"list.log": "3339d40caf4340b288730cdc9152d29b8650c5ea867e514f28f132387d2fcd03",
"verify-preparation.ps1": "fbfdebaa5d2d1e2cb7e595e3acd70392b89348b91eb2d95173e5c30cd0adc72a",
"inputs-complete-focused-batch03-before.json": "d0a8aed676692f80f243a7719044853ff055e8e099877b947ef53e4958b7caf4",
"inputs-complete-clippy-after.json": "e367ed3b9b3f49d54b795e7c1a182bbdc7e381e8558d746e8909aec38788e167",
"preparation-verification.json": "2851efe691173ab66111bd110eefff45780b90e21b350ea10583314e9240bf25",
"inputs-complete-focused-batch03-after.json": "b5cbcb8a2d65961c15fb528b26838f65539ae521e39de9886564272b96cb0f8a",
"inputs-complete-focused-before.json": "1273e88766d39ff21b20e517589386aa2a6f1c4825a546b5c258173c8ff29058",
"focused-receipt.json": "c289154fc76788de9e94524c18930b57f13f7f967794f5208a80c0c026f4a040",
"run.ps1": "9f3540a6984858448ad1f9bcf6e3326b6ec2b4b3ee897189876c56ebeaaea6cc",
"focused-batch03.log": "763c79f9e74ad48e835a11f81f67472b188c04636b2da6b1b3bb664fe0639b3f",
"strict-preflight.log": "e73fb8b3553c8b61f52f23cef787c1aa1f93f8dc7f78844df7e6129fac58e3f6",
"enumeration.json": "1cc1744effb1ee8dd555b2970e97d7849db6390945fb16e9ea28ef96db1fb2ec",
"strict-preflight.ps1": "152621fa4efe0a96adbeea43c4a08be21a63f5d4982846a9ad46de52ddbc725f",
"README.md": "e063a6708ce940324c08437bcc6a6ad2a5936cb00ac87294b0331b1d89230e57",
"capture.ps1": "c76278630e332757c4e68ff466211d02cdd585a60c325e760f6331e5ff39b6c1",
"external-inputs.json": "b02b917f584024c896573410c1c1ac1b786ff1cbd88a2771cbd2cf50aac87789",
"inputs-complete-list-before.json": "506fa0f9c7577620700296397ad2035f6d77cbd4c8c96a568942d9f19a05266a",
"toolchain-versions.json": "000d46684b18c2472b5f5c83b91c5870f3f67bc682ffea16b9191e1d2c9d7a2c",
"focused-batch01-receipt.json": "fc2d2cc53c4aeea68a09dba35508cdb9398bc015141940d07de163d8a63d868f",
"focused-batch02.log": "a0006a28cb1441434e712c51eb084da37d4e11f0695ecebebe2c405dc92b456b",
"binary-inputs.ps1": "58a185bddd852398bdc175faf05fce232ec77d2f0ebb1af31074d544339cc540",
"batch-helpers.ps1": "0990e168b3e6f037237cb1533827f2fb9245b48e481b9801a2f695dd7a1795c4",
"inputs-complete-focused-batch02-after.json": "c2dc3d856305e2a7ef7e4ed254b9bb72ee578e1e4a5c469b10912c73795bfb1c",
"all.log": "00ad4766b65e148bb05d8679fdb916c2f989cd8d137d3d9c993a734609146c84",
"inputs-complete-focused-batch02-before.json": "6520c7b731b461e5530950ec58629cff31025b446a525f9eb833eda21e405d46",
"focused-batch01.log": "6abd3ae6debbea53aaacf84b59a0b6273dacf8d1557bcbcfa9632a7c680f27ee",
"inputs-complete-strict-preflight-before.json": "0c82113eca231ed3dd0477d428129f0a651741d1c6a49ee62a4218452f73916d",
"list-receipt.json": "07fd88670a39bb3ed3614484066a383d46ce9e9aa637f753295a54f065558682",
"focused-batch02-receipt.json": "1a0f5ea48327763f1d631c8ec43f4ac000dbf586f134223547843ed8fc83c6c0",
"focused.log": "dbb7ee3d2c4599359e0143274c7547e356c861f3ebc9b0a3d4ad11369e286d4d",
"inputs-complete-focused-after.json": "04273c93962f2c8001f779669a05f7c75b09b1038f84d016761439810f320c63"
},
"priorStage": {
"stage": "clippy",
"receiptSha256": "a40b02c6e0904a70aab48bd1c20dfc926c4e194f4fb2e99f176b838e7a532d1d",
"rawLogSha256": "50a70fc1fc43bbffffc23c5507808ecacdf898bee2a4f5f090023f15c527435c"
},
"externalEnvironmentPath": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\env.ps1",
"externalEnvironmentSha256": "be2226f08764bb6961b4be8513ce55bab076890cddd2fef0f54a4031f94a82d4",
"toolchainVersionsSha256": "000d46684b18c2472b5f5c83b91c5870f3f67bc682ffea16b9191e1d2c9d7a2c",
"rawLogSha256": "6dc6cc0f7746a93a5e40fb4a3bc0892c24135ada3e422cdf88e23ccb67b7a870",
"beforeCaptureSha256": "74517a74ed2a31c8338a20e300eed9292f5e3776fcdea2cb1b6015b50c601218",
"afterCaptureSha256": "338a5072cebc767d54557bf921e5f05104c0043519c7139a44166121149bff37",
"listedTests": [],
"executedTests": [],
"testResultSummaries": [],
"matchedRegressionTests": [],
"ignoredTests": [],
"listSummaries": [],
"testExecutablesBefore": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-27db9628b266bf39.exe",
"bytes": 150552064,
"sha256": "e29934499fdc86d1fd3086a1c5eb5c34ddb3eebd44eed351409b2d862f4978f5",
"mtimeUtc": "2026-09-13T13:38:12.8192134Z"
}
],
"testExecutables": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-27db9628b266bf39.exe",
"bytes": 150552064,
"sha256": "e29934499fdc86d1fd3086a1c5eb5c34ddb3eebd44eed351409b2d862f4978f5",
"mtimeUtc": "2026-09-13T13:38:12.8192134Z"
}
],
"testBinaryBindingValid": true,
"binary": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\arcadia-studio.exe",
"bytes": 116721152,
"sha256": "7ece85c6012ae0ae75fc56ed3c3aadb8bc116448ad1782be422ef34a629dc3ce",
"mtimeUtc": "2026-09-13T14:19:13.0833854Z"
}
}
@@ -0,0 +1,8 @@
Compiling hyper v1.11.1
Compiling hyper-util v0.1.20
Compiling hyper-rustls v0.27.9
Compiling tower-http v0.6.11
Compiling reqwest v0.12.28
Compiling oa-core v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-spacing-ytr83r-20260913\crates\oa-core)
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-spacing-ytr83r-20260913\crates\oa-desktop)
Finished `dev` profile [unoptimized] target(s) in 6m 32s
@@ -0,0 +1,184 @@
#Requires -Version 7.0
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
# Source pin and count are supplied by the reviewed gate at staging; never inferred from HEAD.
function Get-NativeHash([string]$Path) { (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant() }
function Write-NativeJson([string]$Path, $Value) {
$stream=[IO.File]::Open($Path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read)
try {$bytes=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 30)+"`n");$stream.Write($bytes,0,$bytes.Length);$stream.Flush($true)} finally {$stream.Dispose()}
}
function Assert-NativeFiles([string]$Root,$Files) {
$prefix=[IO.Path]::GetFullPath($Root)+[IO.Path]::DirectorySeparatorChar
foreach($file in $Files){
$path=[IO.Path]::GetFullPath((Join-Path $Root $file.path))
if(-not $path.StartsWith($prefix,[StringComparison]::OrdinalIgnoreCase)){throw 'Manifest path escapes staging directory.'}
$item=Get-Item -LiteralPath $path -Force
if($item.PSIsContainer -or ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 -or $item.Length -ne $file.bytes -or (Get-NativeHash $path) -cne $file.sha256){throw "Changed input: $path"}
}
}
function Get-NativeRecord([string]$Root,[string]$Path){
$item=Get-Item -LiteralPath $Path
[ordered]@{path=[IO.Path]::GetRelativePath($Root,$item.FullName).Replace('\','/');bytes=$item.Length;sha256=(Get-NativeHash $Path)}
}
function Assert-InputPair($Before,$After){
foreach($record in @($Before,$After)){if($record.base -cne $nativePin -or $record.count -ne $nativeInputCount -or @($record.files).Count -ne $nativeInputCount){throw 'Complete current-pin source records required.'}}
$rows=@{}
foreach($file in $Before.files){if($rows.ContainsKey($file.path)){throw 'Duplicate source input.'};$rows[$file.path]=$file}
foreach($file in $After.files){
if(-not $rows.ContainsKey($file.path)){throw 'Unexpected or duplicate source input.'}
$old=$rows[$file.path];if($old.bytes -ne $file.bytes -or $old.sha256 -cne $file.sha256){throw 'Source input changed.'};$rows.Remove($file.path)
}
if($rows.Count){throw 'Missing source inputs.'}
}
function Assert-BuildEvidence([string]$Gate){
Assert-SelectionEvidence $Gate
$expectedWorkspace=(Read-NativeJson (Join-Path $Gate 'expected-inputs.json')).workspace
$expectedTarget='C:\Users\User\Documents\Git\ARCADIA-Studio\target'
$initial=Get-Content -Raw -LiteralPath (Join-Path $Gate 'inputs-complete-before.json')|ConvertFrom-Json
Assert-InputPair (Read-NativeJson (Join-Path $Gate 'expected-inputs.json')) $initial
Assert-StrictPreflightEvidence $Gate $initial
$previous='strict-preflight'
foreach($stage in @('list','focused','all','clippy','build')){
$receiptPath=Join-Path $Gate ($stage+'-receipt.json')
$r=Get-Content -Raw -LiteralPath $receiptPath|ConvertFrom-Json
if($r.stage -cne $stage -or $r.base -cne $nativePin -or $r.workspace -ine $expectedWorkspace -or $r.target -ine $expectedTarget -or $r.cargoExitCode -ne 0 -or -not $r.selectionValid -or -not $r.inputsUnchanged -or -not $r.testBinaryBindingValid -or $null -ne $r.postflightFailure){throw "Successful unchanged current-pin stage required: $stage"}
if($stage -eq 'clippy' -and $r.command -cne 'cargo clippy -p oa-desktop -p oa-server --all-targets --locked --offline -- -D warnings'){throw 'Combined desktop/server strict acceptance required.'}
foreach($binding in $r.boundScriptAndInputHashes.PSObject.Properties){if((Get-NativeHash (Join-Path $Gate $binding.Name)) -cne $binding.Value){throw "Gate binding changed: $($binding.Name)"}}
if((Get-NativeHash (Join-Path $Gate ($stage+'.log'))) -cne $r.rawLogSha256){throw 'Gate raw log changed.'}
if((Get-NativeHash (Join-Path $Gate 'toolchain-versions.json')) -cne $r.toolchainVersionsSha256){throw 'Toolchain receipt changed.'}
if($null -ne $previous){if($r.priorStage.stage -cne $previous -or $r.priorStage.receiptSha256 -cne (Get-NativeHash (Join-Path $Gate ($previous+'-receipt.json'))) -or $r.priorStage.rawLogSha256 -cne (Get-NativeHash (Join-Path $Gate ($previous+'.log')))){throw 'Broken sequential gate chain.'}}
$beforePath=Join-Path $Gate ('inputs-complete-'+$stage+'-before.json');$afterPath=Join-Path $Gate ('inputs-complete-'+$stage+'-after.json')
if((Get-NativeHash $beforePath) -cne $r.beforeCaptureSha256 -or (Get-NativeHash $afterPath) -cne $r.afterCaptureSha256){throw 'Gate capture changed.'}
$before=Get-Content -Raw -LiteralPath $beforePath|ConvertFrom-Json;$after=Get-Content -Raw -LiteralPath $afterPath|ConvertFrom-Json
Assert-InputPair $initial $before;Assert-InputPair $before $after
$previous=$stage
}
if($null -eq $r.binary -or $r.binary.bytes -le 0 -or $r.binary.sha256 -notmatch '^[0-9a-f]{64}$'){throw 'Successful build must bind an actual binary.'}
return $r
}
function Read-NativeJson([string]$Path) { Get-Content -Raw -LiteralPath $Path | ConvertFrom-Json }
function Assert-NativeNames($Expected,$Actual) {
$a=@($Expected);$b=@($Actual)
if($a.Count -ne $b.Count -or @($a|Sort-Object -Unique).Count -ne $a.Count -or @($b|Sort-Object -Unique).Count -ne $b.Count -or @(Compare-Object $a $b -CaseSensitive).Count){throw 'Exact unique membership differs.'}
}
function Assert-NativeBinaries($Expected,$Actual) {
$a=@($Expected);$b=@($Actual)
if($a.Count -ne 1 -or $b.Count -ne 1 -or $a[0].path -ine $b[0].path -or $a[0].bytes -le 0 -or $a[0].bytes -ne $b[0].bytes -or $a[0].sha256 -cne $b[0].sha256 -or $a[0].sha256 -notmatch '^[0-9a-f]{64}$'){throw 'Exact test executable continuity differs.'}
}
function Assert-SelectionEvidence([string]$Gate) {
if($nativePin -cne 'b10b28cefd1d0794073ba241a0c8de9a83e85f68' -or $nativeInputCount -ne 612){throw 'Exact reviewed b10 source and612 inputs required.'}
$selection=Read-NativeJson (Join-Path $Gate 'expected-tests.json')
if($selection.source_commit -cne $nativePin -or $selection.expected_count -ne 301 -or $selection.expected_desktop_count -ne 1095 -or $selection.expected_filtered -ne 794 -or @($selection.tests).Count -ne 301 -or @($selection.desktop_tests).Count -ne 1095 -or @($selection.ignored_tests).Count -ne 4){throw 'Wrong 301/1095/4 selection contract.'}
$inputs=Read-NativeJson (Join-Path $Gate 'expected-inputs.json')
if($inputs.base -cne $nativePin -or $inputs.count -ne $nativeInputCount){throw 'Wrong pinned source contract'}
Assert-InputPair $inputs $inputs
$previous=$null
foreach($stage in @('list','focused','all','clippy','build')) {
$r=Read-NativeJson (Join-Path $Gate ($stage+'-receipt.json'))
if($null -ne $previous){Assert-NativeBinaries $previous.testExecutables $r.testExecutablesBefore;Assert-NativeBinaries $r.testExecutablesBefore $r.testExecutables
if($r.priorStage.rawLogSha256 -cne $previous.rawLogSha256){throw 'Prior raw-log chain differs.'}
} else {Assert-NativeBinaries $r.testExecutables $r.testExecutables}
if($stage -eq 'focused'){Assert-BatchedFocusedEvidence $Gate $r $selection;$previous=$r;continue}
if($stage -eq 'list') {
Assert-NativeNames $selection.desktop_tests $r.listedTests
if(($r.listSummaries|Measure-Object -Property tests -Sum).Sum -ne 1095 -or ($r.listSummaries|Measure-Object -Property benchmarks -Sum).Sum -ne 0){throw 'Wrong actual listing count.'}
}
if($stage -in @('focused','all')) {
$expected=if($stage -eq 'focused'){$selection.tests}else{$selection.desktop_tests}
Assert-NativeNames $expected @($r.executedTests|ForEach-Object {$_.name})
$ignored=@($r.executedTests|Where-Object {$_.result -eq 'ignored'}|ForEach-Object {$_.name})
if(@($r.executedTests|Where-Object {$_.result -notin @('ok','ignored')}).Count -or @($r.testResultSummaries).Count -ne 1){throw 'Unexpected actual test result.'}
$s=$r.testResultSummaries[0]
$pass=if($stage -eq 'focused'){301}else{1091};$ignore=if($stage -eq 'focused'){0}else{4};$filtered=if($stage -eq 'focused'){794}else{0}
if($s.status -cne 'ok' -or $s.passed -ne $pass -or $s.failed -ne 0 -or $s.ignored -ne $ignore -or $s.measured -ne 0 -or $s.filtered -ne $filtered -or $ignored.Count -ne $ignore){throw 'Wrong actual pass/ignored/filtered totals.'}
if($stage -eq 'all'){Assert-NativeNames $selection.ignored_tests $ignored}
}
$previous=$r
}
}
function Assert-CurrentNativeSource([string]$Gate) {
$expected=Read-NativeJson (Join-Path $Gate 'expected-inputs.json')
$enumeration=Read-NativeJson (Join-Path $Gate 'enumeration.json')
$external=Read-NativeJson (Join-Path $Gate 'external-inputs.json')
if($expected.base -cne $nativePin -or $enumeration.base -cne $nativePin -or $external.base -cne $nativePin){throw 'Wrong source-input pin.'}
Assert-InputPair $expected $expected
Push-Location -LiteralPath $expected.workspace
try {
$head=git rev-parse HEAD
if($LASTEXITCODE -ne 0 -or $head -cne $nativePin){throw 'Source HEAD differs.'}
$status=@(git status --porcelain)
if($LASTEXITCODE -ne 0 -or $status.Count){throw 'Source worktree is not frozen and clean.'}
$roots=@($enumeration.rootInputs);$scopes=@($enumeration.scopes)
$tracked=@(git ls-files -- @roots @scopes)
if($LASTEXITCODE -ne 0){throw 'Source Git enumeration failed.'}
$present=@(rg --files @scopes)
if($LASTEXITCODE -ne 0){throw 'Source filesystem enumeration failed.'}
$actual=@(($present+$roots)|ForEach-Object {$_.Replace('\','/')}|Sort-Object -Unique)
Assert-NativeNames @($enumeration.gitPaths) @($tracked|ForEach-Object {$_.Replace('\','/')})
Assert-NativeNames @($expected.files|ForEach-Object {$_.path}) $actual
Assert-NativeFiles $expected.workspace $expected.files
foreach($f in $external.files) {
$exists=Test-Path -LiteralPath $f.path
if($exists -ne $f.present){throw "External config presence changed: $($f.path)"}
if($exists -and ((Get-Item -LiteralPath $f.path).Length -ne $f.bytes -or (Get-NativeHash $f.path) -cne $f.sha256)){throw "External input changed: $($f.path)"}
}
} finally {Pop-Location}
}
function Assert-BatchedFocusedEvidence([string]$Gate,$Receipt,$Selection) {
if($Receipt.executionMode -cne 'bounded-exact-batches-v1'){throw 'Explicit bounded focused recovery required'}
$planPath=Join-Path $Gate 'batches.json';$plan=Read-NativeJson $planPath
if((Get-NativeHash $planPath) -cne $Receipt.batchPlanSha256 -or $plan.schema -cne 'scenario_details_exact_batches_v1' -or $plan.source_commit -cne $nativePin -or $plan.focused_count -ne 301 -or $plan.desktop_count -ne 1095 -or $plan.max_command_characters -ne 12000){throw 'Wrong focused batch plan/list binding'}
if(@($plan.batches).Count -ne 3 -or @($Receipt.batchReceipts).Count -ne @($plan.batches).Count -or @($Receipt.testResultSummaries).Count -ne @($plan.batches).Count){throw 'Missing focused batch receipts or actual summaries'}
$union=@();$previous=$null;$raw=[Collections.Generic.List[byte]]::new()
$initial=Read-NativeJson (Join-Path $Gate 'inputs-complete-before.json')
for($i=0;$i -lt @($plan.batches).Count;$i++){
$batch=$plan.batches[$i];$binding=$Receipt.batchReceipts[$i];$name=('focused-batch{0:d2}' -f ($i+1))
if(@($batch.tests).Count -ne @(107,101,93)[$i]){throw 'Reviewed 107/101/93 partition required'}
if($batch.id -cne $name -or $binding.stage -cne $name){throw 'Batch sequence differs'}
$path=Join-Path $Gate ($name+'-receipt.json');$log=Join-Path $Gate ($name+'.log');$r=Read-NativeJson $path
if((Get-NativeHash $path) -cne $binding.receiptSha256 -or (Get-NativeHash $log) -cne $binding.rawLogSha256 -or $r.rawLogSha256 -cne $binding.rawLogSha256){throw 'Batch receipt or log changed'}
if($r.schema -cne 'scenario_details_exact_batch_v1' -or $r.stage -cne $name -or $r.base -cne $nativePin -or $r.workspace -ine $Receipt.workspace -or $r.target -ine $Receipt.target -or $r.cargoExitCode -ne 0 -or -not $r.selectionValid -or -not $r.inputsUnchanged -or -not $r.testBinaryBindingValid -or $null -ne $r.postflightFailure -or $r.listReceiptSha256 -cne (Get-NativeHash (Join-Path $Gate 'list-receipt.json')) -or $r.batchPlanSha256 -cne $Receipt.batchPlanSha256){throw 'Batch did not pass with exact source/binary bindings'}
if(($null -eq $previous) -ne ($null -eq $r.priorBatch)){throw 'Wrong first/prior batch binding'}
if($null -ne $previous -and ($r.priorBatch.stage -cne $previous.stage -or $r.priorBatch.receiptSha256 -cne $previous.receiptSha256 -or $r.priorBatch.rawLogSha256 -cne $previous.rawLogSha256)){throw 'Broken batch chain'}
$args=@('test','-p','oa-desktop','--bin','arcadia-studio','--locked','--offline','--','--exact')+@($batch.tests)+@('--test-threads=1')
if(Compare-Object $args @($r.arguments) -SyncWindow 0 -CaseSensitive){throw 'Actual batch arguments differ'}
$length=0;foreach($arg in @($plan.cargo_path)+$args){$length+=$arg.Length+3}
if($length -gt 12000 -or $length -ne $batch.command_characters -or $r.commandCharacters -ne $length){throw 'Batch command exceeds reviewed bound'}
Assert-NativeNames @($batch.tests) @($r.executedTests|ForEach-Object {$_.name})
if(@($r.executedTests|Where-Object {$_.result -cne 'ok'}).Count -or @($r.testResultSummaries).Count -ne 1){throw 'Batch contains failed/ignored outcomes'}
$s=$r.testResultSummaries[0];$n=@($batch.tests).Count
if($n -le 0 -or $s.status -cne 'ok' -or $s.passed -ne $n -or $s.failed -ne 0 -or $s.ignored -ne 0 -or $s.measured -ne 0 -or $s.filtered -ne (1095-$n)){throw 'Wrong per-batch actual totals'}
foreach($field in @('status','passed','failed','ignored','measured','filtered')){if($Receipt.testResultSummaries[$i].$field -cne $s.$field){throw 'Aggregate summary differs from actual batch'}}
foreach($side in @('before','after')){$capture=Join-Path $Gate ('inputs-complete-'+$name+'-'+$side+'.json');$property=$side+'CaptureSha256';if((Get-NativeHash $capture) -cne $r.$property){throw 'Batch capture changed'};Assert-InputPair $initial (Read-NativeJson $capture)}
foreach($bindingInput in $r.boundScriptAndInputHashes.PSObject.Properties){if((Get-NativeHash (Join-Path $Gate $bindingInput.Name)) -cne $bindingInput.Value){throw 'Batch script/input binding changed'}}
if($r.toolchainVersionsSha256 -cne $Receipt.toolchainVersionsSha256){throw 'Batch toolchain binding differs'}
Assert-NativeBinaries $Receipt.testExecutablesBefore $r.testExecutablesBefore
Assert-NativeBinaries $r.testExecutablesBefore $r.testExecutables
Assert-NativeBinaries $r.testExecutables $Receipt.testExecutables
$union+=@($r.executedTests|ForEach-Object {$_.name});$raw.AddRange([IO.File]::ReadAllBytes($log));$previous=$binding
}
Assert-NativeNames $Selection.tests $union
Assert-NativeNames $union @($Receipt.executedTests|ForEach-Object {$_.name})
if(@($Receipt.executedTests|Where-Object {$_.result -cne 'ok'}).Count -or @($Receipt.ignoredTests).Count){throw 'Aggregate contains nonpassing tests'}
$combined=[Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($raw.ToArray())).ToLowerInvariant()
if($combined -cne $Receipt.rawLogSha256){throw 'Focused raw log is not the exact batch concatenation'}
}
function Assert-StrictPreflightEvidence([string]$Gate,$Initial) {
$r=Read-NativeJson (Join-Path $Gate 'strict-preflight-receipt.json')
$expected=Read-NativeJson (Join-Path $Gate 'expected-inputs.json')
if($r.schema -cne 'scenario_strict_preflight_v1' -or $r.stage -cne 'strict-preflight' -or $r.base -cne $nativePin -or $r.workspace -ine $expected.workspace -or $r.target -ine 'C:\Users\User\Documents\Git\ARCADIA-Studio\target' -or $r.cargoExitCode -ne 0 -or -not $r.passed -or -not $r.inputsUnchanged -or $null -ne $r.postflightFailure){throw 'Successful exact-pin strict preflight required'}
if($r.command -cne 'cargo clippy -p oa-desktop -p oa-server --all-targets --locked --offline -- -D warnings'){throw 'Wrong strict preflight command'}
if((Get-NativeHash (Join-Path $Gate 'run.ps1')) -cne '9f3540a6984858448ad1f9bcf6e3326b6ec2b4b3ee897189876c56ebeaaea6cc' -or (Get-NativeHash (Join-Path $Gate 'strict-preflight.ps1')) -cne '152621fa4efe0a96adbeea43c4a08be21a63f5d4982846a9ad46de52ddbc725f'){throw 'Reviewed regular/preflight recipe differs'}
foreach($binding in $r.boundScriptAndInputHashes.PSObject.Properties){if((Get-NativeHash (Join-Path $Gate $binding.Name)) -cne $binding.Value){throw 'Preflight input/recipe binding changed'}}
if((Get-NativeHash (Join-Path $Gate 'strict-preflight.log')) -cne $r.rawLogSha256 -or (Get-NativeHash (Join-Path $Gate 'toolchain-versions.json')) -cne $r.toolchainVersionsSha256){throw 'Preflight raw output/toolchain record changed'}
$versions=Read-NativeJson (Join-Path $Gate 'toolchain-versions.json')
if($versions.base -cne $nativePin -or $versions.externalEnvironmentPath -ine $r.externalEnvironmentPath -or $versions.externalEnvironmentSha256 -cne $r.externalEnvironmentSha256){throw 'Preflight environment binding differs'}
foreach($side in @('before','after')){
$capture=Join-Path $Gate ('inputs-complete-strict-preflight-'+$side+'.json');$field=$side+'CaptureSha256'
if((Get-NativeHash $capture) -cne $r.$field){throw 'Preflight capture changed'}
Assert-InputPair $Initial (Read-NativeJson $capture)
}
}
@@ -0,0 +1,348 @@
{
"status": "Exact local published bytes matched; parent owns remote publication/readback",
"files": [
{
"gate_file": "cache-policy.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/cache-policy.json",
"bytes": 286,
"sha256": "68dfa3ec1c3ff7f0ef2cec55e27c163d5675026de354375e231e0e1ae37218b8"
},
{
"gate_file": "inputs-complete-focused-batch01-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch01-before.json",
"bytes": 119379,
"sha256": "9998c570359417c8350acdda43fe206aea0b60a6357baf5361887a540596084d"
},
{
"gate_file": "focused-batch03-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch03-receipt.json",
"bytes": 43216,
"sha256": "834047f8e3e3a8de969eb7dc490013f1d2a5ad7b24a1079f855fe8cffcaaa5b7"
},
{
"gate_file": "clippy-receipt.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/clippy-receipt.json",
"bytes": 7214,
"sha256": "a40b02c6e0904a70aab48bd1c20dfc926c4e194f4fb2e99f176b838e7a532d1d"
},
{
"gate_file": "inputs-complete-clippy-before.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/inputs-complete-clippy-before.json",
"bytes": 119379,
"sha256": "9105d87076e514186adcf31d81b0102de8bb5644f54da0d90e14f569cd1a7a45"
},
{
"gate_file": "expected-tests.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/expected-tests.json",
"bytes": 157026,
"sha256": "869f6f79356bce44bdae8d453e3c31a720fdcfeec2298acf5311ebf3793d2054"
},
{
"gate_file": "inputs-complete-list-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-list-after.json",
"bytes": 119379,
"sha256": "c51c8d7820d586fed80047889c5a850ea7b7ab5c1fc60d6f32f773d04c8850c6"
},
{
"gate_file": "batches.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/batches.json",
"bytes": 37927,
"sha256": "ae682377ada8fd4f0b4b5c2ed09ad81eb4800464b44e341f5bbccb3b482f66d9"
},
{
"gate_file": "all-receipt.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/all-receipt.json",
"bytes": 216251,
"sha256": "d1fe5a65170ca98889c1ca48f94b0531354eea32a0c139b18d8c442f23c342e2"
},
{
"gate_file": "inputs-complete-strict-preflight-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-strict-preflight-after.json",
"bytes": 119379,
"sha256": "ba7a76af011191105f1909cf0a7dabde803eeac7a0493889cd150d68ff08f894"
},
{
"gate_file": "expected-inputs.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/expected-inputs.json",
"bytes": 114759,
"sha256": "f720f1e2f7f31bd4188e9b624cf0324439958ae23dcb7c48c9ecc16cc7ed6131"
},
{
"gate_file": "strict-preflight-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/strict-preflight-receipt.json",
"bytes": 2241,
"sha256": "90597fab687350816777480daa4bd9649b6b4e550cfe381b2af0eede0f1cadde"
},
{
"gate_file": "inputs-complete-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-before.json",
"bytes": 119379,
"sha256": "b3dff04a22e3c539b55229a4989a77cb17cde3f1e8f9e94fe13cd0f79ee4e312"
},
{
"gate_file": "inputs-complete-focused-batch01-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch01-after.json",
"bytes": 119379,
"sha256": "819d0519e4c4c2df9622ff0043f2097e38ff163b0a6cbac28b456fae2842151e"
},
{
"gate_file": "inputs-complete-all-before.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/inputs-complete-all-before.json",
"bytes": 119379,
"sha256": "5b9e3aad6599e6dbf329243a80e5d979d38cbf3406d683e5c655774436d6e3b5"
},
{
"gate_file": "clippy.log",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/clippy.log",
"bytes": 61,
"sha256": "50a70fc1fc43bbffffc23c5507808ecacdf898bee2a4f5f090023f15c527435c"
},
{
"gate_file": "source-provenance.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/source-provenance.json",
"bytes": 5130,
"sha256": "64868f108ae01e4298f0156db4ee500b1da4b8ecaff4e3c6c866ecba6aeb3fb1"
},
{
"gate_file": "inputs-complete-all-after.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/inputs-complete-all-after.json",
"bytes": 119379,
"sha256": "3ed31db7dcf0ab9ed5870f20c8566bd229210b64ba96b7f89b8f62af6596f349"
},
{
"gate_file": "list.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/list.log",
"bytes": 120785,
"sha256": "3339d40caf4340b288730cdc9152d29b8650c5ea867e514f28f132387d2fcd03"
},
{
"gate_file": "verify-preparation.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/verify-preparation.ps1",
"bytes": 5703,
"sha256": "fbfdebaa5d2d1e2cb7e595e3acd70392b89348b91eb2d95173e5c30cd0adc72a"
},
{
"gate_file": "inputs-complete-focused-batch03-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch03-before.json",
"bytes": 119379,
"sha256": "d0a8aed676692f80f243a7719044853ff055e8e099877b947ef53e4958b7caf4"
},
{
"gate_file": "inputs-complete-clippy-after.json",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/inputs-complete-clippy-after.json",
"bytes": 119379,
"sha256": "e367ed3b9b3f49d54b795e7c1a182bbdc7e381e8558d746e8909aec38788e167"
},
{
"gate_file": "preparation-verification.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/preparation-verification.json",
"bytes": 1030,
"sha256": "2851efe691173ab66111bd110eefff45780b90e21b350ea10583314e9240bf25"
},
{
"gate_file": "inputs-complete-focused-batch03-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch03-after.json",
"bytes": 119379,
"sha256": "b5cbcb8a2d65961c15fb528b26838f65539ae521e39de9886564272b96cb0f8a"
},
{
"gate_file": "inputs-complete-focused-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-before.json",
"bytes": 119379,
"sha256": "1273e88766d39ff21b20e517589386aa2a6f1c4825a546b5c258173c8ff29058"
},
{
"gate_file": "focused-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-receipt.json",
"bytes": 93260,
"sha256": "c289154fc76788de9e94524c18930b57f13f7f967794f5208a80c0c026f4a040"
},
{
"gate_file": "run.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/run.ps1",
"bytes": 18657,
"sha256": "9f3540a6984858448ad1f9bcf6e3326b6ec2b4b3ee897189876c56ebeaaea6cc"
},
{
"gate_file": "focused-batch03.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch03.log",
"bytes": 11998,
"sha256": "763c79f9e74ad48e835a11f81f67472b188c04636b2da6b1b3bb664fe0639b3f"
},
{
"gate_file": "strict-preflight.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/strict-preflight.log",
"bytes": 330,
"sha256": "e73fb8b3553c8b61f52f23cef787c1aa1f93f8dc7f78844df7e6129fac58e3f6"
},
{
"gate_file": "enumeration.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/enumeration.json",
"bytes": 73812,
"sha256": "1cc1744effb1ee8dd555b2970e97d7849db6390945fb16e9ea28ef96db1fb2ec"
},
{
"gate_file": "strict-preflight.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/strict-preflight.ps1",
"bytes": 5182,
"sha256": "152621fa4efe0a96adbeea43c4a08be21a63f5d4982846a9ad46de52ddbc725f"
},
{
"gate_file": "README.md",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/README.md",
"bytes": 5388,
"sha256": "e063a6708ce940324c08437bcc6a6ad2a5936cb00ac87294b0331b1d89230e57"
},
{
"gate_file": "capture.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/capture.ps1",
"bytes": 4158,
"sha256": "c76278630e332757c4e68ff466211d02cdd585a60c325e760f6331e5ff39b6c1"
},
{
"gate_file": "external-inputs.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/external-inputs.json",
"bytes": 1413,
"sha256": "b02b917f584024c896573410c1c1ac1b786ff1cbd88a2771cbd2cf50aac87789"
},
{
"gate_file": "inputs-complete-list-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-list-before.json",
"bytes": 119379,
"sha256": "506fa0f9c7577620700296397ad2035f6d77cbd4c8c96a568942d9f19a05266a"
},
{
"gate_file": "toolchain-versions.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/toolchain-versions.json",
"bytes": 2268,
"sha256": "000d46684b18c2472b5f5c83b91c5870f3f67bc682ffea16b9191e1d2c9d7a2c"
},
{
"gate_file": "focused-batch01-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch01-receipt.json",
"bytes": 46039,
"sha256": "fc2d2cc53c4aeea68a09dba35508cdb9398bc015141940d07de163d8a63d868f"
},
{
"gate_file": "focused-batch02.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch02.log",
"bytes": 13150,
"sha256": "a0006a28cb1441434e712c51eb084da37d4e11f0695ecebebe2c405dc92b456b"
},
{
"gate_file": "binary-inputs.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/binary-inputs.ps1",
"bytes": 1234,
"sha256": "58a185bddd852398bdc175faf05fce232ec77d2f0ebb1af31074d544339cc540"
},
{
"gate_file": "batch-helpers.ps1",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/batch-helpers.ps1",
"bytes": 3138,
"sha256": "0990e168b3e6f037237cb1533827f2fb9245b48e481b9801a2f695dd7a1795c4"
},
{
"gate_file": "inputs-complete-focused-batch02-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch02-after.json",
"bytes": 119379,
"sha256": "c2dc3d856305e2a7ef7e4ed254b9bb72ee578e1e4a5c469b10912c73795bfb1c"
},
{
"gate_file": "all.log",
"commit": "f69897bbb85506c0e00ced4332e328606f4e98b1",
"path": "harness/experiments/scenario-validation-full-strict-b10b28c-20260913/original/all.log",
"bytes": 127795,
"sha256": "00ad4766b65e148bb05d8679fdb916c2f989cd8d137d3d9c993a734609146c84"
},
{
"gate_file": "inputs-complete-focused-batch02-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-batch02-before.json",
"bytes": 119379,
"sha256": "6520c7b731b461e5530950ec58629cff31025b446a525f9eb833eda21e405d46"
},
{
"gate_file": "focused-batch01.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch01.log",
"bytes": 13193,
"sha256": "6abd3ae6debbea53aaacf84b59a0b6273dacf8d1557bcbcfa9632a7c680f27ee"
},
{
"gate_file": "inputs-complete-strict-preflight-before.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-strict-preflight-before.json",
"bytes": 119379,
"sha256": "0c82113eca231ed3dd0477d428129f0a651741d1c6a49ee62a4218452f73916d"
},
{
"gate_file": "list-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/list-receipt.json",
"bytes": 161801,
"sha256": "07fd88670a39bb3ed3614484066a383d46ce9e9aa637f753295a54f065558682"
},
{
"gate_file": "focused-batch02-receipt.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused-batch02-receipt.json",
"bytes": 46419,
"sha256": "1a0f5ea48327763f1d631c8ec43f4ac000dbf586f134223547843ed8fc83c6c0"
},
{
"gate_file": "focused.log",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/focused.log",
"bytes": 38341,
"sha256": "dbb7ee3d2c4599359e0143274c7547e356c861f3ebc9b0a3d4ad11369e286d4d"
},
{
"gate_file": "inputs-complete-focused-after.json",
"commit": "b09d9d506347e9a00353ed86bedb98702a426142",
"path": "harness/experiments/scenario-validation-focused-b10b28c-20260913/original/inputs-complete-focused-after.json",
"bytes": 119379,
"sha256": "04273c93962f2c8001f779669a05f7c75b09b1038f84d016761439810f320c63"
}
]
}
@@ -0,0 +1,62 @@
# Spacing saved-source oracle: runtime-bound recipe prepared from 8bf
Prepared only. No compiler, oracle or native workflow has run from this directory. `oracle/main.rs` and `incident-workspace.arcadia` are byte-identical copies of the original spacing oracle and fixture. Their nesting preserves the Rust `include_str!("../incident-workspace.arcadia")` unchanged. The original preparation directory and its scripts remain untouched.
This retains the same complete parsed Project comparison: `same`, `repair-c`, `lane`, `message`, and `self-check`. Repair C predicts only the existing message override's `send_y` change from 300 to 424. Lane/message modes permit only one independently specified existing override coordinate; all other IDs, Steps, aliases and views remain exact. The comparator has no renderer, runtime/editor/history inspection, or native acceptance claim.
## Bounded correction
The new builder requires an explicit reviewed 40-hex `SourcePin`, completed five-stage `Gate`, matching core/serde rlibs, native import directory, frozen `NativeVerifier`, `RuntimeDll`, and fresh `Output`. The native verifier must match the separately supplied reviewed `NativeVerifierSha256`. The preparation reference was `91b29e336b861d0c59c1c310556d737330871bc54aaed6d5e509bd33dce07945`; a revised verifier needs a new frozen recipe path and explicit review. Its existing list/focused/full/combined-desktop-server-strict/GUI-build admission is retained, including the bounded focused-batch contract. A partial current gate cannot admit this build.
The accepted GUI binary must still identify one production Cargo fingerprint and its desktop -> core -> serde dependency edges. Compiler/linker paths, versions, dependency/native search inputs and actual gate files are captured before and after compilation. Gate `.md` files are now included alongside `.json`, `.ps1` and `.log`, preserving receipt-bound recovery instructions. This is the existing local standalone-rustc approach; no Cargo resolution, package cleaning or new cache is introduced.
The required source DLL is exactly 190,464 bytes with SHA-256 `aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a`. It is captured before/after compilation and copied beside a successfully linked EXE. The new `scenario_spacing_oracle_build_v2` receipt records both source and copied runtime paths, sizes and hashes. A missing or mismatched copy cannot produce an accepted build.
The checker requires the reviewed build-receipt hash, its successful v2 status matching the separately required checker `SourcePin`, matching supplied EXE/path/size/hash, unchanged build proof files, compiled local source records, and the actual adjacent `libunwind.dll` record. It checks the DLL and all recorded run inputs before and after each invocation, preserves source snapshots, request, logs and receipt, and refuses a failed/legacy/unbound receipt. The source DLL is historical build provenance; the adjacent copy is the runtime checked at execution. No arbitrary DLL is copied by the checker.
## Preparation checks
From this directory, these commands parse scripts and exercise pure metadata guards only:
```powershell
./oracle/build.ps1 -ValidateOnly
./oracle/check.ps1 -ValidateOnly
```
The builder uses one canonical five-path source array for capture and receipt creation, and refuses missing or duplicate records before any compiler invocation. The build guards test little-endian unsigned Cargo fingerprint decoding, missing/ambiguous/wrong dependency edges, and the actual fixture-membership failure shape: omitted, unnormalized `oracle/../incident-workspace.arcadia`, or duplicated fixture records. Checker guards exercise accepted synthetic receipts for two explicitly supplied source pins and rejection of failed compile, changed inputs, postflight failure, wrong source/schema, EXE path/size/hash mismatch, missing/nonadjacent/wrong runtime and current-runtime path/size/hash mutations. These do not admit a gate, inspect a real loaded module, or execute an oracle. Rust self-checks remain unrun.
## Later build and checks
The 8bf strict stage failed, so no 8bf GUI build is admitted. This directory name records preparation ancestry only. Parent must supply the revised reviewed source/verifier and authorize the compiler slot after all five matching revised gates close successfully. Example from this directory; all dependency variables must name the actual matching gated files, not guessed hashes:
```powershell
$root = 'C:/Users/User/Documents/Git/ARCADIA-Studio'
$gate = $ReviewedRevisedGate
$verifier = $ReviewedRevisedVerifier
$verifierSha = $ReviewedRevisedVerifierSha256
$pin = $ReviewedRevisedSourcePin
$dll = "$root/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin/libunwind.dll"
./oracle/build.ps1 -SourcePin $pin `
-Gate $gate -NativeVerifier $verifier -NativeVerifierSha256 $verifierSha -RuntimeDll $dll `
-CoreRlib $VerifiedCoreRlib -SerdeJsonRlib $VerifiedSerdeJsonRlib `
-WindowsImportLibDirectory $VerifiedWindowsImportLibDirectory -Output $FreshBuildDirectory
```
After reviewing that build's actual EXE and receipt hashes:
```powershell
$bound = @{ SourcePin=$pin; OracleExe=$VerifiedExe; OracleSha256=$VerifiedExeHash; BuildReceipt=$VerifiedBuildReceipt; BuildReceiptSha256=$VerifiedBuildReceiptHash }
./oracle/check.ps1 @bound -Mode self-check -Baseline ./incident-workspace.arcadia -Output $FreshSelfCheck
./oracle/check.ps1 @bound -Mode same -Baseline $ImmutableBaseline -Actual $SavedCheckpoint -Output $FreshSameCheck
./oracle/check.ps1 @bound -Mode repair-c -Baseline $OriginalBaseline -Actual $SavedRepairCheckpoint -Output $FreshRepairCheck
./oracle/check.ps1 @bound -Mode message -Baseline $BeforeMessage -Actual $AfterMessage `
-View '70200000-0000-4000-8000-000000000040' -Target '70200000-0000-4000-8000-000000000021' `
-Coordinate $IndependentlyExpectedSendY -Output $FreshMessageCheck
./oracle/check.ps1 @bound -Mode lane -Baseline $BeforeLane -Actual $AfterLane `
-View '70200000-0000-4000-8000-000000000040' -Target '70200000-0000-4000-8000-000000000012' `
-Coordinate $IndependentlyExpectedLaneX -Output $FreshLaneCheck
```
Coordinates must be predetermined from captured logical pointer positions, frozen display scale and the starting coordinate. Do not infer them from the saved output; exact 272 requires independently verified 20-world-unit displacement from 252. Use `same` for zero motion, cancellation, Undo, or reopen against the appropriate immutable checkpoint. Native Save/history/camera observations remain separate evidence.
This is a host-specific guarded recipe, not a binary package. Portable handoffs must include the exact scripts/fixture and referenced frozen verifier; peers resolve their own matching toolchain and gate evidence. Existing output directories are never overwritten.
@@ -0,0 +1,38 @@
{
"status": "Preparation only; original Rust and fixture byte-identical; scripts AST and pure guards passed; no compile/oracle/native execution",
"preparation_source_commit": "8bf7607a3f3b53db0c36364f54f57674c64ea2f1",
"build_source_pending": "Parent must supply revised reviewed source pin, verifier/hash and all five successful gate stages; 8bf strict failed",
"originals": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-native-preparation-20260913\\oracle\\main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-native-preparation-20260913\\oracle\\build.ps1",
"bytes": 11701,
"sha256": "1f90175ec35ecdd292b96009e7fbb8af5c605c233439a707f2ae2738628d6656"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-native-preparation-20260913\\oracle\\check.ps1",
"bytes": 4418,
"sha256": "0ed86689968e55c2a8f7bcbe69f7043928ba3331a772659a0dd8ee10e898ff71"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-native-preparation-20260913\\incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
}
],
"preparation_native_verifier": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-native-8bf7607-20260913\\verify.ps1",
"bytes": 14784,
"sha256": "91b29e336b861d0c59c1c310556d737330871bc54aaed6d5e509bd33dce07945"
},
"runtime_required": {
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
"source_changes": "None; only new recipe builder/checker. Original nested include path retained.",
"review_correction": "Canonical five-source path array shared by capture and receipt selection; precompiler and postcompiler membership assertion; synthetic missing, unnormalized fixture and duplicate cases reject."
}
@@ -0,0 +1,279 @@
--- original/oracle/build.ps1
+++ runtime-bound/oracle/build.ps1
@@ -7,7 +7,9 @@
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$SerdeJsonRlib,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$WindowsImportLibDirectory,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$Output,
- [Parameter(ParameterSetName='Build')][string]$NativeVerifier=(Join-Path $PSScriptRoot '../../scenario-spacing-native-07e611f-20260913/verify.ps1'),
+ [Parameter(Mandatory=$true,ParameterSetName='Build')][string]$NativeVerifier,
+ [Parameter(Mandatory=$true,ParameterSetName='Build')][ValidatePattern('^[0-9a-f]{64}$')][string]$NativeVerifierSha256,
+ [Parameter(Mandatory=$true,ParameterSetName='Build')][string]$RuntimeDll,
[Parameter(Mandatory=$true,ParameterSetName='Validate')][switch]$ValidateOnly
)
Set-StrictMode -Version Latest
@@ -21,6 +23,16 @@
function Assert-Dependency($Fingerprint,[string]$Name,[UInt64]$Value) {
$edges=@($Fingerprint.deps|Where-Object {$_[1] -ceq $Name})
if($edges.Count -ne 1 -or [UInt64]$edges[0][3] -ne $Value){throw "Cargo dependency fingerprint differs or is ambiguous: $Name"}
+}
+function Select-OracleSources($Inputs,$SourcePaths) {
+ if(@($SourcePaths).Count -ne 5 -or @($SourcePaths|Sort-Object -Unique).Count -ne 5){throw 'Exactly five distinct canonical oracle source paths required'}
+ $selected=@(foreach($path in $SourcePaths){
+ if([IO.Path]::GetFullPath($path) -cne $path){throw 'Oracle source path is not canonical'}
+ $matches=@($Inputs|Where-Object {$_.path -ieq $path})
+ if($matches.Count -ne 1){throw ('Oracle source missing or duplicated in build capture: '+$path)}
+ $matches[0]
+ })
+ return $selected
}
if($ValidateOnly) {
foreach($script in @($PSCommandPath,(Join-Path $PSScriptRoot 'check.ps1'))){
@@ -42,11 +54,30 @@
{Assert-Dependency $sample 'serde_json' ([UInt64]1)},
{Assert-Dependency ('{"deps":[[1,"serde_json",false,1],[2,"serde_json",false,1]]}'|ConvertFrom-Json) 'serde_json' ([UInt64]1)}
)) {try {& $probe|Out-Null} catch {$rejected++;continue};throw 'A fingerprint refusal probe unexpectedly passed.'}
- [ordered]@{status='passed';parsed_scripts=2;positive_cases=4;negative_cases=$rejected;script_sha256=(Get-FileHash -LiteralPath $PSCommandPath -Algorithm SHA256).Hash.ToLowerInvariant();check_script_sha256=(Get-FileHash -LiteralPath (Join-Path $PSScriptRoot 'check.ps1') -Algorithm SHA256).Hash.ToLowerInvariant();compiler_executed=$false;gate_admitted=$false;scope='Syntax and synthetic fingerprint guards only; no dependency selection, compilation or oracle execution'}|ConvertTo-Json
+ $sourcePaths=@('C:\probe\oracle\build.ps1','C:\probe\oracle\check.ps1','C:\probe\oracle\main.rs','C:\probe\incident-workspace.arcadia','C:\verifier\verify.ps1')
+ $sourceRecords=@($sourcePaths|ForEach-Object {[pscustomobject]@{path=$_;bytes=1;sha256=('0'*64)}})
+ if(@(Select-OracleSources $sourceRecords $sourcePaths).Count -ne 5){throw 'Canonical source membership oracle failed'}
+ $sourceRefusals=0
+ $uncanonical=@($sourceRecords|ForEach-Object {[pscustomobject]@{path=$_.path;bytes=$_.bytes;sha256=$_.sha256}})
+ $uncanonical[3].path='C:\probe\oracle\..\incident-workspace.arcadia'
+ $membershipCases=@(
+ @{name='missing_fixture';records=@($sourceRecords|Where-Object {$_.path -ne $sourcePaths[3]})},
+ @{name='unnormalized_fixture';records=$uncanonical},
+ @{name='duplicate_fixture';records=(@($sourceRecords)+@($sourceRecords[3]))}
+ )
+ foreach($case in $membershipCases){
+ $didReject=$false;try{Select-OracleSources $case.records $sourcePaths|Out-Null}catch{$didReject=$true}
+ if(-not $didReject){throw ('Source membership admitted '+$case.name)};$sourceRefusals++
+ }
+ [ordered]@{status='passed';parsed_scripts=2;positive_cases=5;negative_cases=$rejected;source_membership_negative_cases=$sourceRefusals;script_sha256=(Get-FileHash -LiteralPath $PSCommandPath -Algorithm SHA256).Hash.ToLowerInvariant();check_script_sha256=(Get-FileHash -LiteralPath (Join-Path $PSScriptRoot 'check.ps1') -Algorithm SHA256).Hash.ToLowerInvariant();compiler_executed=$false;gate_admitted=$false;scope='Syntax and synthetic fingerprint guards only; no dependency selection, compilation or oracle execution'}|ConvertTo-Json
return
}
-# Reuse the existing native gate verifier; do not reproduce its five-stage parser.
+# Reuse the frozen native verifier; preserve its complete five-stage admission.
+$NativeVerifier=(Get-Item -LiteralPath $NativeVerifier).FullName
+if((Get-FileHash -LiteralPath $NativeVerifier -Algorithm SHA256).Hash.ToLowerInvariant() -cne $NativeVerifierSha256){throw 'Explicit reviewed native verifier changed'}
+$RuntimeDll=(Get-Item -LiteralPath $RuntimeDll).FullName
+if((Get-Item -LiteralPath $RuntimeDll).Length -ne 190464 -or (Get-FileHash -LiteralPath $RuntimeDll -Algorithm SHA256).Hash.ToLowerInvariant() -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'){throw 'Explicit runtime DLL differs from pinned bytes'}
. $NativeVerifier
$nativePin=$SourcePin
$Gate=(Resolve-Path -LiteralPath $Gate).Path
@@ -94,21 +125,23 @@
$clang=(Get-Command clang -CommandType Application).Source
$gateVersions=Read-NativeJson (Join-Path $Gate 'toolchain-versions.json')
if($rustc -ine $gateVersions.rustcPath -or $clang -ine $gateVersions.clangPath){throw 'Resolved compiler/linker paths differ from the successful gate.'}
-$source=Join-Path $PSScriptRoot 'main.rs'
-$fixture=Join-Path $PSScriptRoot '../incident-workspace.arcadia'
+$source=(Get-Item -LiteralPath (Join-Path $PSScriptRoot 'main.rs')).FullName
+$fixture=(Get-Item -LiteralPath (Join-Path $PSScriptRoot '../incident-workspace.arcadia')).FullName
if((Get-NativeHash $fixture) -cne '74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3'){throw 'Embedded original fixture changed.'}
+$oracleSourcePaths=@($PSCommandPath,$source,$fixture,(Join-Path $PSScriptRoot 'check.ps1'),$NativeVerifier)|ForEach-Object {[IO.Path]::GetFullPath($_)}
function Oracle-BuildInputs {
- $paths=@($PSCommandPath,$source,$fixture,(Join-Path $PSScriptRoot 'check.ps1'),$NativeVerifier,$rustc,$clang,$build.externalEnvironmentPath,$desktop.exe,$build.binary.path)
+ $paths=@($oracleSourcePaths)+@($rustc,$clang,$build.externalEnvironmentPath,$desktop.exe,$build.binary.path,$RuntimeDll)
# Complete rustc dependency search inputs, including proc-macro DLLs; exclude test EXEs/logs.
$paths+=@(Get-ChildItem -LiteralPath $deps -File|Where-Object {$_.Extension -in @('.rlib','.rmeta','.dll','.lib','.a')}|ForEach-Object {$_.FullName})
$paths+=@(Get-ChildItem -LiteralPath $native -File -Recurse|ForEach-Object {$_.FullName})
foreach($folder in @($coreFingerprint,$serdeFingerprint,$desktop.folder)){$paths+=@(Get-ChildItem -LiteralPath $folder -File|ForEach-Object {$_.FullName})}
$paths+=@((Join-Path $deps ('oa_core-'+$coreSuffix+'.d')),(Join-Path $deps ('serde_json-'+$serdeSuffix+'.d')),(Join-Path $deps ('arcadia_studio-'+$desktop.suffix+'.d')))
- $paths+=@(Get-ChildItem -LiteralPath $Gate -File|Where-Object {$_.Extension -in @('.json','.ps1','.log')}|ForEach-Object {$_.FullName})
+ $paths+=@(Get-ChildItem -LiteralPath $Gate -File|Where-Object {$_.Extension -in @('.json','.ps1','.log','.md')}|ForEach-Object {$_.FullName})
@($paths|ForEach-Object {[IO.Path]::GetFullPath($_)}|Sort-Object -Unique|ForEach-Object {$item=Get-Item -LiteralPath $_;[ordered]@{path=$item.FullName;bytes=$item.Length;sha256=(Get-NativeHash $item.FullName)}})
}
[void][IO.Directory]::CreateDirectory($Output)
$before=@(Oracle-BuildInputs)
+$sourceRecords=@(Select-OracleSources $before $oracleSourcePaths)
Write-NativeJson (Join-Path $Output 'inputs-before.json') $before
$PSNativeCommandUseErrorActionPreference=$false
$rustcVersion=@(& $rustc --version --verbose 2>&1|ForEach-Object {$_.ToString()});$rustcVersionExit=$LASTEXITCODE
@@ -122,18 +155,28 @@
& $rustc @compilerArgs *> (Join-Path $Output 'compile.log')
$exit=$LASTEXITCODE
$end=[DateTime]::UtcNow.ToString('o')
-$after=@();$failure=$null;$unchanged=$false
+$after=@();$failure=$null;$unchanged=$false;$runtimeSource=$null;$runtimeCopy=$null
try {
$after=@(Oracle-BuildInputs)
+ [void](Select-OracleSources $after $oracleSourcePaths)
Write-NativeJson (Join-Path $Output 'inputs-after.json') $after
Assert-NativeNames @($before|ForEach-Object {$_.path}) @($after|ForEach-Object {$_.path})
$byPath=@{};foreach($f in $before){$byPath[$f.path]=$f}
foreach($f in $after){$old=$byPath[$f.path];if($old.bytes -ne $f.bytes -or $old.sha256 -cne $f.sha256){throw "Build input changed: $($f.path)"}}
Assert-CurrentNativeSource $Gate
[void](Assert-BuildEvidence $Gate)
+ if($exit -eq 0){
+ $runtimeSource=@($before|Where-Object {$_.path -ieq $RuntimeDll})
+ if($runtimeSource.Count -ne 1){throw 'Runtime source missing from build manifest'}
+ $runtimeSource=$runtimeSource[0]
+ $runtimePath=Join-Path $Output 'libunwind.dll'
+ [IO.File]::Copy($RuntimeDll,$runtimePath,$false)
+ $runtimeCopy=[ordered]@{path=$runtimePath;bytes=(Get-Item -LiteralPath $runtimePath).Length;sha256=(Get-NativeHash $runtimePath)}
+ if($runtimeCopy.bytes -ne $runtimeSource.bytes -or $runtimeCopy.sha256 -cne $runtimeSource.sha256){throw 'Adjacent runtime copy differs from captured source'}
+ }
$unchanged=$true
} catch {$failure=$_.Exception.Message}
$binary=if(Test-Path -LiteralPath $exe){$item=Get-Item -LiteralPath $exe;[ordered]@{path=$exe;bytes=$item.Length;sha256=(Get-NativeHash $exe)}}else{$null}
-Write-NativeJson (Join-Path $Output 'build-receipt.json') ([ordered]@{source_commit=$SourcePin;gate=$Gate;gate_build_receipt_sha256=(Get-NativeHash (Join-Path $Gate 'build-receipt.json'));command=@($rustc)+$compilerArgs;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;fingerprint_chain=[ordered]@{desktop_fingerprint=$desktop.folder;desktop_exe=$desktop.exe;core=$core;core_fingerprint_value=$coreValue;serde_json=$serde;serde_fingerprint_value=$serdeValue};before_manifest_sha256=(Get-NativeHash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path -LiteralPath (Join-Path $Output 'inputs-after.json')){Get-NativeHash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Get-NativeHash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Get-NativeHash (Join-Path $Output 'compile.log'));oracle_executed=$false;scope='Standalone oracle compilation only; gate hash plus production desktop→core→serde Cargo fingerprint linkage and unchanged link inputs. No native acceptance.'})
-if($exit -ne 0 -or -not $unchanged -or $null -eq $binary -or $binary.bytes -le 0){throw 'Oracle build or provenance failed; preserve all output.'}
+Write-NativeJson (Join-Path $Output 'build-receipt.json') ([ordered]@{schema='scenario_spacing_oracle_build_v2';source_commit=$SourcePin;native_verifier=[ordered]@{path=$NativeVerifier;sha256=$NativeVerifierSha256};runtime_source=$runtimeSource;runtime=$runtimeCopy;source_files=$sourceRecords;gate=$Gate;gate_build_receipt_sha256=(Get-NativeHash (Join-Path $Gate 'build-receipt.json'));command=@($rustc)+$compilerArgs;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;fingerprint_chain=[ordered]@{desktop_fingerprint=$desktop.folder;desktop_exe=$desktop.exe;core=$core;core_fingerprint_value=$coreValue;serde_json=$serde;serde_fingerprint_value=$serdeValue};before_manifest_sha256=(Get-NativeHash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path -LiteralPath (Join-Path $Output 'inputs-after.json')){Get-NativeHash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Get-NativeHash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Get-NativeHash (Join-Path $Output 'compile.log'));oracle_executed=$false;scope='Standalone oracle compilation only; gate hash plus production desktop -> core -> serde Cargo fingerprint linkage and unchanged link inputs. No native acceptance.'})
+if($exit -ne 0 -or -not $unchanged -or $null -eq $binary -or $binary.bytes -le 0 -or $null -eq $runtimeCopy -or $null -ne $failure){throw 'Oracle build or provenance failed; preserve all output.'}
Write-Output 'Standalone oracle built and hash-bound; oracle and native workflows have not run.'
--- original/oracle/check.ps1
+++ runtime-bound/oracle/check.ps1
@@ -1,56 +1,116 @@
#Requires -Version 7.0
-[CmdletBinding()]
+[CmdletBinding(DefaultParameterSetName='Run')]
param(
- [Parameter(Mandatory=$true)][string]$OracleExe,
- [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$OracleSha256,
- [Parameter(Mandatory=$true)][string]$BuildReceipt,
- [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$BuildReceiptSha256,
- [Parameter(Mandatory=$true)][ValidateSet('self-check','same','repair-c','lane','message')][string]$Mode,
- [Parameter(Mandatory=$true)][string]$Baseline,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{40}$')][string]$SourcePin,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][string]$OracleExe,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{64}$')][string]$OracleSha256,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][string]$BuildReceipt,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{64}$')][string]$BuildReceiptSha256,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][ValidateSet('self-check','same','repair-c','lane','message')][string]$Mode,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][string]$Baseline,
[string]$Actual,
- [Parameter(Mandatory=$true)][string]$Output,
+ [Parameter(Mandatory=$true,ParameterSetName='Run')][string]$Output,
[string]$View,
[string]$Target,
- [string]$Coordinate
+ [string]$Coordinate,
+ [Parameter(Mandatory=$true,ParameterSetName='Validate')][switch]$ValidateOnly
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
function Hash([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
function Record([string]$Path){$file=Get-Item -LiteralPath $Path;[ordered]@{path=$file.FullName;bytes=$file.Length;sha256=(Hash $file.FullName)}}
function Write-NewJson([string]$Path,$Value){$stream=[IO.File]::Open($Path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read);try{$bytes=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 12)+"`n");$stream.Write($bytes,0,$bytes.Length);$stream.Flush($true)}finally{$stream.Dispose()}}
+function Assert-AcceptedBuild($Build,$ExeRecord,$RuntimeRecord,[string]$ExpectedSourcePin) {
+ if($ExpectedSourcePin -cnotmatch '^[0-9a-f]{40}$'){throw 'Explicit reviewed source pin required'}
+ if($Build.schema -cne 'scenario_spacing_oracle_build_v2' -or $Build.source_commit -cne $ExpectedSourcePin -or $Build.exit_code -ne 0 -or -not $Build.inputs_unchanged -or $null -ne $Build.postflight_failure){throw 'Successful spacing-oracle build for the explicit reviewed source required'}
+ if($null -eq $Build.binary -or $Build.binary.path -ine $ExeRecord.path -or $Build.binary.bytes -ne $ExeRecord.bytes -or $Build.binary.sha256 -cne $ExeRecord.sha256 -or $ExeRecord.bytes -le 0){throw 'Receipt does not describe supplied executable'}
+ $adjacent=Join-Path (Split-Path -Parent $ExeRecord.path) 'libunwind.dll'
+ if($null -eq $Build.runtime -or $null -eq $Build.runtime_source -or $Build.runtime.path -ine $adjacent -or $RuntimeRecord.path -ine $adjacent){throw 'Receipt must bind the actual adjacent runtime DLL'}
+ foreach($r in @($Build.runtime_source,$Build.runtime,$RuntimeRecord)){
+ if($r.bytes -ne 190464 -or $r.sha256 -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'){throw 'Runtime DLL differs from exact pinned bytes'}
+ }
+}
+function Assert-Records($Files){foreach($f in $Files){$current=Record $f.path;if($current.bytes -ne $f.bytes -or $current.sha256 -cne $f.sha256){throw ('Changed input: '+$f.path)}}}
+function Read-Json([string]$Path){Get-Content -Raw -LiteralPath $Path|ConvertFrom-Json}
+if($ValidateOnly){
+ $tokens=$null;$errors=$null;[void][Management.Automation.Language.Parser]::ParseFile($PSCommandPath,[ref]$tokens,[ref]$errors);if(@($errors).Count){throw ($errors|Out-String)}
+ $sample=[ordered]@{schema='scenario_spacing_oracle_build_v2';source_commit='8bf7607a3f3b53db0c36364f54f57674c64ea2f1';exit_code=0;inputs_unchanged=$true;postflight_failure=$null;binary=@{path='C:\probe\oracle.exe';bytes=100;sha256=('1'*64)};runtime=@{path='C:\probe\libunwind.dll';bytes=190464;sha256='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'};runtime_source=@{path='C:\toolchain\libunwind.dll';bytes=190464;sha256='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'}}
+ $expectedPin=$sample.source_commit
+ $json=$sample|ConvertTo-Json -Depth 8;$exe=$sample.binary;$runtime=$sample.runtime
+ Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $runtime $expectedPin
+ $revised=$json|ConvertFrom-Json;$revised.source_commit=('3'*40);Assert-AcceptedBuild $revised $exe $runtime ('3'*40)
+ $cases=@(
+ @{name='failed_compile';change={param($b)$b.exit_code=1}},
+ @{name='changed_build_inputs';change={param($b)$b.inputs_unchanged=$false}},
+ @{name='postflight_failure';change={param($b)$b.postflight_failure='changed'}},
+ @{name='wrong_source';change={param($b)$b.source_commit=('0'*40)}},
+ @{name='legacy_receipt';change={param($b)$b.schema='old'}},
+ @{name='different_exe';change={param($b)$b.binary.sha256=('2'*64)}},
+ @{name='different_exe_size';change={param($b)$b.binary.bytes=101}},
+ @{name='different_exe_path';change={param($b)$b.binary.path='C:\other\oracle.exe'}},
+ @{name='missing_runtime';change={param($b)$b.runtime=$null}},
+ @{name='nonadjacent_runtime';change={param($b)$b.runtime.path='C:\other\libunwind.dll'}},
+ @{name='wrong_runtime_hash';change={param($b)$b.runtime.sha256=('2'*64)}},
+ @{name='wrong_runtime_size';change={param($b)$b.runtime.bytes=190463}},
+ @{name='wrong_runtime_source';change={param($b)$b.runtime_source.sha256=('2'*64)}}
+ )
+ $passed=@();foreach($case in $cases){$b=$json|ConvertFrom-Json;& $case.change $b;$rejected=$false;try{Assert-AcceptedBuild $b $exe $runtime $expectedPin}catch{$rejected=$true};if(-not $rejected){throw ('Guard admitted '+$case.name)};$passed+=@($case.name)}
+ foreach($change in @('path','sha256','bytes')){
+ $r=($sample.runtime|ConvertTo-Json|ConvertFrom-Json)
+ switch($change){'path'{$r.path='C:\other\libunwind.dll'}'sha256'{$r.sha256=('3'*64)}'bytes'{$r.bytes=1}}
+ $rejected=$false;try{Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $r $expectedPin}catch{$rejected=$true};if(-not $rejected){throw 'Current runtime mutation admitted'};$passed+=@('current_runtime_'+$change)
+ }
+ $badPinRejected=$false;try{Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $runtime ''}catch{$badPinRejected=$true};if(-not $badPinRejected){throw 'Missing expected source pin admitted'};$passed+=@('missing_expected_source_pin')
+ [ordered]@{status='passed';positive_cases=2;negative_cases=$passed;compiler_executed=$false;oracle_executed=$false;scope='Pure production receipt/runtime admission function with synthetic metadata; no gate or binary execution'}|ConvertTo-Json -Depth 8
+ return
+}
if(Test-Path -LiteralPath $Output){throw 'Preserve previous oracle evidence; choose a new output directory.'}
if((Hash $OracleExe) -cne $OracleSha256 -or (Hash $BuildReceipt) -cne $BuildReceiptSha256){throw 'Reviewed oracle binary/build receipt binding differs.'}
-$paths=@($OracleExe,$BuildReceipt,$PSCommandPath,(Join-Path $PSScriptRoot 'main.rs'),(Join-Path $PSScriptRoot '../incident-workspace.arcadia'),$Baseline)
-if($Mode -ne 'self-check') {if([string]::IsNullOrWhiteSpace($Actual)){throw 'Actual checkpoint is required.'};$paths+=@($Actual)}
-$before=@($paths|ForEach-Object {Record $_})
-$base=(Get-Item -LiteralPath $Baseline).FullName
$exe=(Get-Item -LiteralPath $OracleExe).FullName
-$outputPath=[IO.Path]::GetFullPath($Output)
-[void][IO.Directory]::CreateDirectory($outputPath)
-[IO.File]::Copy($base,(Join-Path $outputPath 'baseline.arcadia'),$false)
-$argsForOracle=@($Mode,$base)
-if($Mode -ne 'self-check'){
- $actualPath=(Get-Item -LiteralPath $Actual).FullName
- [IO.File]::Copy($actualPath,(Join-Path $outputPath 'actual.arcadia'),$false)
- $argsForOracle+=@($actualPath)
+$build=Read-Json $BuildReceipt
+$runtime=Join-Path (Split-Path -Parent $exe) 'libunwind.dll'
+Assert-AcceptedBuild $build (Record $exe) (Record $runtime) $SourcePin
+$buildDir=Split-Path -Parent ((Get-Item -LiteralPath $BuildReceipt).FullName)
+$proof=@(@{name='inputs-before.json';sha=$build.before_manifest_sha256},@{name='inputs-after.json';sha=$build.after_manifest_sha256},@{name='toolchain.json';sha=$build.toolchain_sha256},@{name='compile.log';sha=$build.compile_log_sha256})
+foreach($f in $proof){if((Hash (Join-Path $buildDir $f.name)) -cne $f.sha){throw 'Build proof file changed'}}
+$buildBefore=@(Read-Json (Join-Path $buildDir 'inputs-before.json'));$buildAfter=@(Read-Json (Join-Path $buildDir 'inputs-after.json'))
+if(($buildBefore|ConvertTo-Json -Depth 8 -Compress) -cne ($buildAfter|ConvertTo-Json -Depth 8 -Compress)){throw 'Build input manifests differ'}
+$byPath=@{};foreach($f in $buildBefore){if($byPath.ContainsKey($f.path)){throw 'Duplicate build manifest input'};$byPath[$f.path]=$f}
+foreach($f in @($build.source_files)+@($build.runtime_source)){
+ if(-not $byPath.ContainsKey($f.path) -or $byPath[$f.path].bytes -ne $f.bytes -or $byPath[$f.path].sha256 -cne $f.sha256){throw 'Source/runtime record not bound by successful build'}
}
-$argsForOracle+=@((Join-Path $outputPath 'project-comparison'))
-if($Mode -in @('lane','message')){
+$localSource=@($PSCommandPath,(Join-Path $PSScriptRoot 'build.ps1'),(Join-Path $PSScriptRoot 'main.rs'),(Join-Path $PSScriptRoot '../incident-workspace.arcadia'))
+foreach($p in $localSource){$path=(Get-Item -LiteralPath $p).FullName;$match=@($build.source_files|Where-Object {$_.path -ieq $path});if($match.Count -ne 1){throw 'Current oracle source is not the build-bound source'}}
+Assert-Records $build.source_files
+if((Hash (Join-Path $build.gate 'build-receipt.json')) -cne $build.gate_build_receipt_sha256){throw 'Accepted GUI gate receipt changed'}
+# Runtime source is historical build input; the actual copied DLL is the loaded artifact.
+$paths=@($exe,$runtime,$BuildReceipt,$Baseline)+$localSource+@($build.source_files|ForEach-Object path)+@($proof|ForEach-Object {Join-Path $buildDir $_.name})+@((Join-Path $build.gate 'build-receipt.json'))
+if($Mode -ne 'self-check'){if([string]::IsNullOrWhiteSpace($Actual)){throw 'Actual checkpoint is required.'};$paths+=@($Actual)}
+$extra=@();if($Mode -in @('lane','message')){
foreach($value in @($View,$Target,$Coordinate)){if([string]::IsNullOrWhiteSpace($value)){throw 'Spacing comparison needs independently chosen View, Target and Coordinate.'}}
- $argsForOracle+=@($View,$Target,$Coordinate)
-} elseif($View -or $Target -or $Coordinate){throw 'Unexpected spacing parameters for this comparison mode.'}
-$start=[DateTime]::UtcNow.ToString('o')
+ $extra=@($View,$Target,$Coordinate)
+}elseif($View -or $Target -or $Coordinate){throw 'Unexpected spacing parameters for this comparison mode.'}
+$before=@($paths|ForEach-Object {(Get-Item -LiteralPath $_).FullName}|Sort-Object -Unique|ForEach-Object {Record $_})
+$outputPath=[IO.Path]::GetFullPath($Output);[void][IO.Directory]::CreateDirectory($outputPath)
+$base=(Get-Item -LiteralPath $Baseline).FullName;$baseCopy=Join-Path $outputPath 'baseline.arcadia';[IO.File]::Copy($base,$baseCopy,$false)
+$argsForOracle=@($Mode,$baseCopy)
+if($Mode -ne 'self-check'){$actualPath=(Get-Item -LiteralPath $Actual).FullName;$actualCopy=Join-Path $outputPath 'actual.arcadia';[IO.File]::Copy($actualPath,$actualCopy,$false);$argsForOracle+=@($actualCopy)}
+$argsForOracle+=@((Join-Path $outputPath 'project-comparison'))+$extra
+Write-NewJson (Join-Path $outputPath 'inputs-before.json') $before
+Write-NewJson (Join-Path $outputPath 'request.json') ([ordered]@{mode=$Mode;view=$View;target=$Target;coordinate=$Coordinate;expected_origin='Predetermined independently from actual pointer/scale and baseline; never learned from Actual'})
+$start=[DateTime]::UtcNow.ToString('o');$exit=$null;$failure=$null;$unchanged=$false;$semanticPass=$false
$PSNativeCommandUseErrorActionPreference=$false
-& $exe @argsForOracle *> (Join-Path $outputPath 'oracle.log')
-$exit=$LASTEXITCODE
-$unchanged=$true
-foreach($file in $before){if((Get-Item -LiteralPath $file.path).Length -ne $file.bytes -or (Hash $file.path) -cne $file.sha256){$unchanged=$false}}
-if((Hash (Join-Path $outputPath 'baseline.arcadia')) -cne (Hash $base)){$unchanged=$false}
-if($Mode -ne 'self-check' -and (Hash (Join-Path $outputPath 'actual.arcadia')) -cne (Hash $actualPath)){$unchanged=$false}
-$result=Join-Path $outputPath ('project-comparison/'+$(if($Mode -eq 'self-check'){'self-check.json'}else{'comparison.json'}))
-$semanticPass=$false
-if(Test-Path -LiteralPath $result){$record=Get-Content -Raw -LiteralPath $result|ConvertFrom-Json;$semanticPass=$record.status -ceq 'passed';if($Mode -ne 'self-check'){$semanticPass=$semanticPass -and $record.full_project_exact}}
+try {& $exe @argsForOracle *> (Join-Path $outputPath 'oracle.log');$exit=$LASTEXITCODE}catch{$failure=$_.Exception.Message}
+try {
+ Assert-Records $before
+ Assert-AcceptedBuild (Read-Json $BuildReceipt) (Record $exe) (Record $runtime) $SourcePin
+ if((Hash $baseCopy) -cne (Hash $base)){throw 'Baseline copy changed'}
+ if($Mode -ne 'self-check' -and (Hash $actualCopy) -cne (Hash $actualPath)){throw 'Actual copy changed'}
+ $after=@($before|ForEach-Object {Record $_.path});Write-NewJson (Join-Path $outputPath 'inputs-after.json') $after;$unchanged=$true
+ $result=Join-Path $outputPath ('project-comparison/'+$(if($Mode -eq 'self-check'){'self-check.json'}else{'comparison.json'}))
+ if(Test-Path -LiteralPath $result){$record=Read-Json $result;$semanticPass=$record.status -ceq 'passed';if($Mode -ne 'self-check'){$semanticPass=$semanticPass -and $record.mode -ceq $Mode -and $record.full_project_exact}}
+}catch{if($null -eq $failure){$failure=$_.Exception.Message}}
$files=@(Get-ChildItem -LiteralPath $outputPath -File -Recurse|ForEach-Object {Record $_.FullName})
-Write-NewJson (Join-Path $outputPath 'receipt.json') ([ordered]@{start_utc=$start;end_utc=[DateTime]::UtcNow.ToString('o');command=@($exe)+$argsForOracle;mode=$Mode;oracle_exit_code=$exit;inputs_unchanged=$unchanged;semantic_pass=$semanticPass;inputs_before=$before;output_files=$files;scope='External parsed saved-source Project comparison only; no native action or runtime/history inspection'})
-if($exit -ne 0 -or -not $unchanged -or -not $semanticPass){throw 'Oracle comparison or input stability failed; preserve receipt and raw output.'}
+Write-NewJson (Join-Path $outputPath 'receipt.json') ([ordered]@{schema='scenario_spacing_oracle_run_v2';source_commit=$build.source_commit;start_utc=$start;end_utc=[DateTime]::UtcNow.ToString('o');command=@($exe)+$argsForOracle;mode=$Mode;oracle_exit_code=$exit;failure=$failure;inputs_unchanged=$unchanged;semantic_pass=$semanticPass;oracle_sha256=$OracleSha256;build_receipt_sha256=$BuildReceiptSha256;runtime_binding=$build.runtime;inputs_before=$before;output_files=$files;scope='External admitted saved-source Project comparison only; no native action or runtime/history inspection'})
+if($exit -ne 0 -or -not $unchanged -or -not $semanticPass -or $null -ne $failure){throw 'Oracle comparison or input stability failed; preserve receipt and raw output.'}
Write-Output 'Saved-source oracle passed; runtime and native action evidence remain separate.'
@@ -0,0 +1,90 @@
{
"schema": "scenario_spacing_oracle_build_v2",
"source_commit": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"native_verifier": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
},
"runtime_source": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\llvm-mingw-20260908-ucrt-x86_64\\bin\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
"runtime": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
"source_files": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
}
],
"gate": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913",
"gate_build_receipt_sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41",
"command": [
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo\\bin\\rustc.exe",
"--edition=2024",
"-D",
"warnings",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"--extern",
"oa_core=C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\liboa_core-3835d3237ee22542.rlib",
"--extern",
"serde_json=C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\libserde_json-39fc764f03e68759.rlib",
"-L",
"dependency=C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps",
"-L",
"native=C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo\\registry\\src\\index.crates.io-1949cf8c6b5b557f\\windows_x86_64_gnullvm-0.52.6\\lib",
"-C",
"linker=C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\llvm-mingw-20260908-ucrt-x86_64\\bin\\clang.exe",
"-o",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe"
],
"start_utc": "2026-09-13T14:25:43.0966057Z",
"end_utc": "2026-09-13T14:25:45.6109141Z",
"exit_code": 0,
"inputs_unchanged": true,
"postflight_failure": null,
"binary": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"bytes": 22720512,
"sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62"
},
"fingerprint_chain": {
"desktop_fingerprint": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\.fingerprint\\oa-desktop-93232a492cc801eb",
"desktop_exe": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-93232a492cc801eb.exe",
"core": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\liboa_core-3835d3237ee22542.rlib",
"core_fingerprint_value": 7524056135498354342,
"serde_json": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\libserde_json-39fc764f03e68759.rlib",
"serde_fingerprint_value": 4753686476057189700
},
"before_manifest_sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd",
"after_manifest_sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd",
"toolchain_sha256": "ff562ce278b7eb0f1c572548d6292f8226c38ca6dceb201c14e13d38a2ccb344",
"compile_log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"oracle_executed": false,
"scope": "Standalone oracle compilation only; gate hash plus production desktop -> core -> serde Cargo fingerprint linkage and unchanged link inputs. No native acceptance."
}
@@ -0,0 +1,22 @@
{
"rustc": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo\\bin\\rustc.exe",
"rustc_version": [
"rustc 1.98.1 (48a229cea 2026-09-01)",
"binary: rustc",
"commit-hash: 48a229ceaefd4985c50990b14116b6d856af0985",
"commit-date: 2026-09-01",
"host: x86_64-pc-windows-gnullvm",
"release: 1.98.1",
"LLVM version: 22.1.8"
],
"rustc_version_exit": 0,
"clang": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\llvm-mingw-20260908-ucrt-x86_64\\bin\\clang.exe",
"clang_version": [
"clang version 23.1.1 (https://github.com/llvm/llvm-project.git 6dfe1677ab8dffbc6ec13d53a1e0215d75147689)",
"Target: x86_64-w64-windows-gnu",
"Thread model: posix",
"InstalledDir: C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin",
"Configuration file: C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin/x86_64-w64-windows-gnu.cfg"
],
"clang_version_exit": 0
}
@@ -0,0 +1,12 @@
{
"status": "passed",
"parsed_scripts": 2,
"positive_cases": 5,
"negative_cases": 5,
"source_membership_negative_cases": 3,
"script_sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5",
"check_script_sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae",
"compiler_executed": false,
"gate_admitted": false,
"scope": "Syntax and synthetic fingerprint guards only; no dependency selection, compilation or oracle execution"
}
@@ -0,0 +1,26 @@
{
"status": "passed",
"positive_cases": 2,
"negative_cases": [
"failed_compile",
"changed_build_inputs",
"postflight_failure",
"wrong_source",
"legacy_receipt",
"different_exe",
"different_exe_size",
"different_exe_path",
"missing_runtime",
"nonadjacent_runtime",
"wrong_runtime_hash",
"wrong_runtime_size",
"wrong_runtime_source",
"current_runtime_path",
"current_runtime_sha256",
"current_runtime_bytes",
"missing_expected_source_pin"
],
"compiler_executed": false,
"oracle_executed": false,
"scope": "Pure production receipt/runtime admission function with synthetic metadata; no gate or binary execution"
}
@@ -0,0 +1,108 @@
arcadia 7;
project incident_workspace "Incident report review" id "70200000-0000-4000-8000-000000000001" {
// Two operational activities, with one lifeline appearance per Scenario.
oa_activity report_incident "Report incident" id "70200000-0000-4000-8000-000000000002" {}
oa_activity assess_incident "Assess incident" id "70200000-0000-4000-8000-000000000003" {}
interaction incident_report "Incident report" id "70200000-0000-4000-8000-000000000004" {
source @report_incident;
target @assess_incident;
}
oa_scenario incident_response "Review a reported incident" id "70200000-0000-4000-8000-000000000010" {
viewpoint OperationalActivity;
steps [@initial_report, @updated_report, @assess_call, @assess_reply, @unfinished_notice, @use_review];
}
oa_lifeline reporter "Reporting activity" id "70200000-0000-4000-8000-000000000011" {
parent @incident_response; represented @report_incident;
}
oa_lifeline assessor "Assessment activity" id "70200000-0000-4000-8000-000000000012" {
parent @incident_response; represented @assess_incident;
}
// Both appearances reuse one definition. Navigation must retain the occurrence.
oa_occurrence initial_report "Initial incident report" id "70200000-0000-4000-8000-000000000020" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
oa_occurrence updated_report "Updated incident report" id "70200000-0000-4000-8000-000000000021" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
// A correlated self call/reply with deliberately unassigned exchange definitions.
oa_occurrence assess_call "Assess report details" id "70200000-0000-4000-8000-000000000022" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Call; }; };
}
oa_occurrence assess_reply "Assessment ready" id "70200000-0000-4000-8000-000000000023" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Reply; reply_to @assess_call; }; };
}
// Intentional unfinished work: no receiver and therefore no fabricated arrow.
oa_occurrence unfinished_notice "Follow-up recipient undecided" id "70200000-0000-4000-8000-000000000024" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver none; message_kind Asynchronous; }; };
}
oa_occurrence use_review "Use the reviewed reporting procedure" id "70200000-0000-4000-8000-000000000025" {
parent @incident_response;
body { ScenarioUse {
bindings [{ local @reporter; referenced @review_reporter; }, { local @assessor; referenced @review_assessor; }];
scenario @reporting_review;
}; };
}
// This definition stays opaque in the caller. Open it, then Back to the saved view.
oa_scenario reporting_review "Reporting procedure detail" id "70200000-0000-4000-8000-000000000030" {
viewpoint OperationalActivity;
steps [@review_delivery];
}
oa_lifeline review_reporter "Reporting activity in detail" id "70200000-0000-4000-8000-000000000031" {
parent @reporting_review; represented @report_incident;
}
oa_lifeline review_assessor "Assessment activity in detail" id "70200000-0000-4000-8000-000000000032" {
parent @reporting_review; represented @assess_incident;
}
oa_occurrence review_delivery "Check the incident report" id "70200000-0000-4000-8000-000000000033" {
parent @reporting_review;
body { Exchange { exchange @incident_report; sender @review_reporter; receiver @review_assessor; message_kind Asynchronous; }; };
}
diagram incident_readable "A - Incident review readable" id "70200000-0000-4000-8000-000000000040" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x 160; }, { lifeline @assessor; x 640; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_wide "B - Incident review negative and far" id "70200000-0000-4000-8000-000000000041" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x -500; }, { lifeline @assessor; x 50000; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_repair "C - Incident review needs layout repair" id "70200000-0000-4000-8000-000000000042" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
// These valid authored lanes must remain saved during complete fallback.
lanes [{ lifeline @reporter; x 900; }, { lifeline @assessor; x -500; }];
messages [
// REPAIR: change only this 300 to 424, then Undo and Redo the edit.
{ address { references []; occurrence @assess_reply; }; send_y 300; },
// This authored value stays latent while the receiver is missing.
{ address { references []; occurrence @unfinished_notice; }; send_y 2000; }
];
}; };
}
}
@@ -0,0 +1,182 @@
#Requires -Version 7.0
[CmdletBinding(DefaultParameterSetName='Build')]
param(
[Parameter(Mandatory=$true,ParameterSetName='Build')][ValidatePattern('^[0-9a-f]{40}$')][string]$SourcePin,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$Gate,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$CoreRlib,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$SerdeJsonRlib,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$WindowsImportLibDirectory,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$Output,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$NativeVerifier,
[Parameter(Mandatory=$true,ParameterSetName='Build')][ValidatePattern('^[0-9a-f]{64}$')][string]$NativeVerifierSha256,
[Parameter(Mandatory=$true,ParameterSetName='Build')][string]$RuntimeDll,
[Parameter(Mandatory=$true,ParameterSetName='Validate')][switch]$ValidateOnly
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
function Fingerprint-Value([string]$Hex) {
if($Hex -cnotmatch '^[0-9a-f]{16}$'){throw 'Cargo fingerprint must be a complete 16-hex sidecar.'}
$bytes=[Convert]::FromHexString($Hex)
if(-not [BitConverter]::IsLittleEndian){[Array]::Reverse($bytes)}
[BitConverter]::ToUInt64($bytes,0)
}
function Assert-Dependency($Fingerprint,[string]$Name,[UInt64]$Value) {
$edges=@($Fingerprint.deps|Where-Object {$_[1] -ceq $Name})
if($edges.Count -ne 1 -or [UInt64]$edges[0][3] -ne $Value){throw "Cargo dependency fingerprint differs or is ambiguous: $Name"}
}
function Select-OracleSources($Inputs,$SourcePaths) {
if(@($SourcePaths).Count -ne 5 -or @($SourcePaths|Sort-Object -Unique).Count -ne 5){throw 'Exactly five distinct canonical oracle source paths required'}
$selected=@(foreach($path in $SourcePaths){
if([IO.Path]::GetFullPath($path) -cne $path){throw 'Oracle source path is not canonical'}
$matches=@($Inputs|Where-Object {$_.path -ieq $path})
if($matches.Count -ne 1){throw ('Oracle source missing or duplicated in build capture: '+$path)}
$matches[0]
})
return $selected
}
if($ValidateOnly) {
foreach($script in @($PSCommandPath,(Join-Path $PSScriptRoot 'check.ps1'))){
$tokens=$null;$errors=$null
[void][Management.Automation.Language.Parser]::ParseFile($script,[ref]$tokens,[ref]$errors)
if(@($errors).Count){throw ($errors|Out-String)}
}
$fingerprint=Fingerprint-Value 'ab2fa54704e8737e'
if($fingerprint -ne [UInt64]9111881576180166571){throw 'Little-endian fingerprint oracle failed.'}
$sample='{"deps":[[1,"serde_json",false,9111881576180166571]]}'|ConvertFrom-Json
Assert-Dependency $sample 'serde_json' $fingerprint
if((Fingerprint-Value 'ffffffffffffffff') -ne [UInt64]::MaxValue){throw 'Full-width unsigned fingerprint oracle failed.'}
Assert-Dependency ('{"deps":[[1,"oa_core",false,18446744073709551615]]}'|ConvertFrom-Json) 'oa_core' ([UInt64]::MaxValue)
$rejected=0
foreach($probe in @(
{Fingerprint-Value ''},
{Fingerprint-Value 'not-a-fingerprint'},
{Assert-Dependency $sample 'oa_core' $fingerprint},
{Assert-Dependency $sample 'serde_json' ([UInt64]1)},
{Assert-Dependency ('{"deps":[[1,"serde_json",false,1],[2,"serde_json",false,1]]}'|ConvertFrom-Json) 'serde_json' ([UInt64]1)}
)) {try {& $probe|Out-Null} catch {$rejected++;continue};throw 'A fingerprint refusal probe unexpectedly passed.'}
$sourcePaths=@('C:\probe\oracle\build.ps1','C:\probe\oracle\check.ps1','C:\probe\oracle\main.rs','C:\probe\incident-workspace.arcadia','C:\verifier\verify.ps1')
$sourceRecords=@($sourcePaths|ForEach-Object {[pscustomobject]@{path=$_;bytes=1;sha256=('0'*64)}})
if(@(Select-OracleSources $sourceRecords $sourcePaths).Count -ne 5){throw 'Canonical source membership oracle failed'}
$sourceRefusals=0
$uncanonical=@($sourceRecords|ForEach-Object {[pscustomobject]@{path=$_.path;bytes=$_.bytes;sha256=$_.sha256}})
$uncanonical[3].path='C:\probe\oracle\..\incident-workspace.arcadia'
$membershipCases=@(
@{name='missing_fixture';records=@($sourceRecords|Where-Object {$_.path -ne $sourcePaths[3]})},
@{name='unnormalized_fixture';records=$uncanonical},
@{name='duplicate_fixture';records=(@($sourceRecords)+@($sourceRecords[3]))}
)
foreach($case in $membershipCases){
$didReject=$false;try{Select-OracleSources $case.records $sourcePaths|Out-Null}catch{$didReject=$true}
if(-not $didReject){throw ('Source membership admitted '+$case.name)};$sourceRefusals++
}
[ordered]@{status='passed';parsed_scripts=2;positive_cases=5;negative_cases=$rejected;source_membership_negative_cases=$sourceRefusals;script_sha256=(Get-FileHash -LiteralPath $PSCommandPath -Algorithm SHA256).Hash.ToLowerInvariant();check_script_sha256=(Get-FileHash -LiteralPath (Join-Path $PSScriptRoot 'check.ps1') -Algorithm SHA256).Hash.ToLowerInvariant();compiler_executed=$false;gate_admitted=$false;scope='Syntax and synthetic fingerprint guards only; no dependency selection, compilation or oracle execution'}|ConvertTo-Json
return
}
# Reuse the frozen native verifier; preserve its complete five-stage admission.
$NativeVerifier=(Get-Item -LiteralPath $NativeVerifier).FullName
if((Get-FileHash -LiteralPath $NativeVerifier -Algorithm SHA256).Hash.ToLowerInvariant() -cne $NativeVerifierSha256){throw 'Explicit reviewed native verifier changed'}
$RuntimeDll=(Get-Item -LiteralPath $RuntimeDll).FullName
if((Get-Item -LiteralPath $RuntimeDll).Length -ne 190464 -or (Get-FileHash -LiteralPath $RuntimeDll -Algorithm SHA256).Hash.ToLowerInvariant() -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'){throw 'Explicit runtime DLL differs from pinned bytes'}
. $NativeVerifier
$nativePin=$SourcePin
$Gate=(Resolve-Path -LiteralPath $Gate).Path
$expected=Read-NativeJson (Join-Path $Gate 'expected-inputs.json')
$nativeInputCount=[int]$expected.count
$build=Assert-BuildEvidence $Gate
Assert-CurrentNativeSource $Gate
if(Test-Path -LiteralPath $Output){throw 'Preserve existing build evidence; Output must be new.'}
$Output=[IO.Path]::GetFullPath($Output)
$deps=[IO.Path]::GetFullPath((Join-Path $build.target 'debug/deps'))
$fingerprints=[IO.Path]::GetFullPath((Join-Path $build.target 'debug/.fingerprint'))
$core=(Get-Item -LiteralPath $CoreRlib).FullName
$serde=(Get-Item -LiteralPath $SerdeJsonRlib).FullName
if([IO.Path]::GetDirectoryName($core) -ine $deps -or [IO.Path]::GetDirectoryName($serde) -ine $deps){throw 'Explicit rlibs must belong to the gated target dependency directory.'}
if([IO.Path]::GetFileName($core) -cnotmatch '^liboa_core-([0-9a-f]{16})\.rlib$'){throw 'Expected an actual oa-core rlib.'}
$coreSuffix=$Matches[1]
if([IO.Path]::GetFileName($serde) -cnotmatch '^libserde_json-([0-9a-f]{16})\.rlib$'){throw 'Expected an actual serde_json rlib.'}
$serdeSuffix=$Matches[1]
$coreFingerprint=Join-Path $fingerprints ('oa-core-'+$coreSuffix)
$serdeFingerprint=Join-Path $fingerprints ('serde_json-'+$serdeSuffix)
$coreRecord=Read-NativeJson (Join-Path $coreFingerprint 'lib-oa_core.json')
$coreValue=Fingerprint-Value ((Get-Content -Raw -LiteralPath (Join-Path $coreFingerprint 'lib-oa_core')).Trim())
$serdeValue=Fingerprint-Value ((Get-Content -Raw -LiteralPath (Join-Path $serdeFingerprint 'lib-serde_json')).Trim())
Assert-Dependency $coreRecord 'serde_json' $serdeValue
$matching=@(foreach($folder in Get-ChildItem -LiteralPath $fingerprints -Directory -Filter 'oa-desktop-*') {
$json=Join-Path $folder.FullName 'bin-arcadia-studio.json'
if(-not (Test-Path -LiteralPath $json)){continue}
$suffix=$folder.Name.Substring('oa-desktop-'.Length)
$exe=Join-Path $deps ('arcadia_studio-'+$suffix+'.exe')
if(-not (Test-Path -LiteralPath $exe)){continue}
if((Get-Item -LiteralPath $exe).Length -eq $build.binary.bytes -and (Get-NativeHash $exe) -ceq $build.binary.sha256){[pscustomobject]@{folder=$folder.FullName;exe=$exe;json=$json;suffix=$suffix}}
})
if($matching.Count -ne 1){throw 'The successful GUI binary must identify exactly one production Cargo fingerprint; do not guess a dependency chain.'}
$desktop=$matching[0]
$desktopRecord=Read-NativeJson $desktop.json
Assert-Dependency $desktopRecord 'oa_core' $coreValue
if((Get-NativeHash $build.binary.path) -cne $build.binary.sha256 -or (Get-Item -LiteralPath $build.binary.path).Length -ne $build.binary.bytes){throw 'Current GUI artifact changed since successful gate.'}
$native=(Resolve-Path -LiteralPath $WindowsImportLibDirectory).Path
if(-not (Test-Path -LiteralPath $native -PathType Container)){throw 'Native import-library directory is required.'}
if(-not @(Get-ChildItem -LiteralPath $native -File -Recurse|Where-Object {$_.Extension -in @('.a','.lib')}).Count){throw 'No actual native import libraries found.'}
# Gate already binds this process-local environment script and external configuration.
. $build.externalEnvironmentPath
$rustc=(Get-Command rustc -CommandType Application).Source
$clang=(Get-Command clang -CommandType Application).Source
$gateVersions=Read-NativeJson (Join-Path $Gate 'toolchain-versions.json')
if($rustc -ine $gateVersions.rustcPath -or $clang -ine $gateVersions.clangPath){throw 'Resolved compiler/linker paths differ from the successful gate.'}
$source=(Get-Item -LiteralPath (Join-Path $PSScriptRoot 'main.rs')).FullName
$fixture=(Get-Item -LiteralPath (Join-Path $PSScriptRoot '../incident-workspace.arcadia')).FullName
if((Get-NativeHash $fixture) -cne '74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3'){throw 'Embedded original fixture changed.'}
$oracleSourcePaths=@($PSCommandPath,$source,$fixture,(Join-Path $PSScriptRoot 'check.ps1'),$NativeVerifier)|ForEach-Object {[IO.Path]::GetFullPath($_)}
function Oracle-BuildInputs {
$paths=@($oracleSourcePaths)+@($rustc,$clang,$build.externalEnvironmentPath,$desktop.exe,$build.binary.path,$RuntimeDll)
# Complete rustc dependency search inputs, including proc-macro DLLs; exclude test EXEs/logs.
$paths+=@(Get-ChildItem -LiteralPath $deps -File|Where-Object {$_.Extension -in @('.rlib','.rmeta','.dll','.lib','.a')}|ForEach-Object {$_.FullName})
$paths+=@(Get-ChildItem -LiteralPath $native -File -Recurse|ForEach-Object {$_.FullName})
foreach($folder in @($coreFingerprint,$serdeFingerprint,$desktop.folder)){$paths+=@(Get-ChildItem -LiteralPath $folder -File|ForEach-Object {$_.FullName})}
$paths+=@((Join-Path $deps ('oa_core-'+$coreSuffix+'.d')),(Join-Path $deps ('serde_json-'+$serdeSuffix+'.d')),(Join-Path $deps ('arcadia_studio-'+$desktop.suffix+'.d')))
$paths+=@(Get-ChildItem -LiteralPath $Gate -File|Where-Object {$_.Extension -in @('.json','.ps1','.log','.md')}|ForEach-Object {$_.FullName})
@($paths|ForEach-Object {[IO.Path]::GetFullPath($_)}|Sort-Object -Unique|ForEach-Object {$item=Get-Item -LiteralPath $_;[ordered]@{path=$item.FullName;bytes=$item.Length;sha256=(Get-NativeHash $item.FullName)}})
}
[void][IO.Directory]::CreateDirectory($Output)
$before=@(Oracle-BuildInputs)
$sourceRecords=@(Select-OracleSources $before $oracleSourcePaths)
Write-NativeJson (Join-Path $Output 'inputs-before.json') $before
$PSNativeCommandUseErrorActionPreference=$false
$rustcVersion=@(& $rustc --version --verbose 2>&1|ForEach-Object {$_.ToString()});$rustcVersionExit=$LASTEXITCODE
$clangVersion=@(& $clang --version 2>&1|ForEach-Object {$_.ToString()});$clangVersionExit=$LASTEXITCODE
Write-NativeJson (Join-Path $Output 'toolchain.json') ([ordered]@{rustc=$rustc;rustc_version=$rustcVersion;rustc_version_exit=$rustcVersionExit;clang=$clang;clang_version=$clangVersion;clang_version_exit=$clangVersionExit})
if($rustcVersionExit -ne 0 -or $clangVersionExit -ne 0){throw 'Actual compiler/linker version query failed; preserve evidence.'}
if(($rustcVersion -join "`n") -cne (@($gateVersions.rustc) -join "`n") -or ($clangVersion -join "`n") -cne (@($gateVersions.clang) -join "`n")){throw 'Actual compiler/linker versions differ from the successful gate.'}
$exe=Join-Path $Output 'incident-source-oracle.exe'
$compilerArgs=@('--edition=2024','-D','warnings',$source,'--extern',('oa_core='+$core),'--extern',('serde_json='+$serde),'-L',('dependency='+$deps),'-L',('native='+$native),'-C',('linker='+$clang),'-o',$exe)
$start=[DateTime]::UtcNow.ToString('o')
& $rustc @compilerArgs *> (Join-Path $Output 'compile.log')
$exit=$LASTEXITCODE
$end=[DateTime]::UtcNow.ToString('o')
$after=@();$failure=$null;$unchanged=$false;$runtimeSource=$null;$runtimeCopy=$null
try {
$after=@(Oracle-BuildInputs)
[void](Select-OracleSources $after $oracleSourcePaths)
Write-NativeJson (Join-Path $Output 'inputs-after.json') $after
Assert-NativeNames @($before|ForEach-Object {$_.path}) @($after|ForEach-Object {$_.path})
$byPath=@{};foreach($f in $before){$byPath[$f.path]=$f}
foreach($f in $after){$old=$byPath[$f.path];if($old.bytes -ne $f.bytes -or $old.sha256 -cne $f.sha256){throw "Build input changed: $($f.path)"}}
Assert-CurrentNativeSource $Gate
[void](Assert-BuildEvidence $Gate)
if($exit -eq 0){
$runtimeSource=@($before|Where-Object {$_.path -ieq $RuntimeDll})
if($runtimeSource.Count -ne 1){throw 'Runtime source missing from build manifest'}
$runtimeSource=$runtimeSource[0]
$runtimePath=Join-Path $Output 'libunwind.dll'
[IO.File]::Copy($RuntimeDll,$runtimePath,$false)
$runtimeCopy=[ordered]@{path=$runtimePath;bytes=(Get-Item -LiteralPath $runtimePath).Length;sha256=(Get-NativeHash $runtimePath)}
if($runtimeCopy.bytes -ne $runtimeSource.bytes -or $runtimeCopy.sha256 -cne $runtimeSource.sha256){throw 'Adjacent runtime copy differs from captured source'}
}
$unchanged=$true
} catch {$failure=$_.Exception.Message}
$binary=if(Test-Path -LiteralPath $exe){$item=Get-Item -LiteralPath $exe;[ordered]@{path=$exe;bytes=$item.Length;sha256=(Get-NativeHash $exe)}}else{$null}
Write-NativeJson (Join-Path $Output 'build-receipt.json') ([ordered]@{schema='scenario_spacing_oracle_build_v2';source_commit=$SourcePin;native_verifier=[ordered]@{path=$NativeVerifier;sha256=$NativeVerifierSha256};runtime_source=$runtimeSource;runtime=$runtimeCopy;source_files=$sourceRecords;gate=$Gate;gate_build_receipt_sha256=(Get-NativeHash (Join-Path $Gate 'build-receipt.json'));command=@($rustc)+$compilerArgs;start_utc=$start;end_utc=$end;exit_code=$exit;inputs_unchanged=$unchanged;postflight_failure=$failure;binary=$binary;fingerprint_chain=[ordered]@{desktop_fingerprint=$desktop.folder;desktop_exe=$desktop.exe;core=$core;core_fingerprint_value=$coreValue;serde_json=$serde;serde_fingerprint_value=$serdeValue};before_manifest_sha256=(Get-NativeHash (Join-Path $Output 'inputs-before.json'));after_manifest_sha256=if(Test-Path -LiteralPath (Join-Path $Output 'inputs-after.json')){Get-NativeHash (Join-Path $Output 'inputs-after.json')}else{$null};toolchain_sha256=(Get-NativeHash (Join-Path $Output 'toolchain.json'));compile_log_sha256=(Get-NativeHash (Join-Path $Output 'compile.log'));oracle_executed=$false;scope='Standalone oracle compilation only; gate hash plus production desktop -> core -> serde Cargo fingerprint linkage and unchanged link inputs. No native acceptance.'})
if($exit -ne 0 -or -not $unchanged -or $null -eq $binary -or $binary.bytes -le 0 -or $null -eq $runtimeCopy -or $null -ne $failure){throw 'Oracle build or provenance failed; preserve all output.'}
Write-Output 'Standalone oracle built and hash-bound; oracle and native workflows have not run.'
@@ -0,0 +1,116 @@
#Requires -Version 7.0
[CmdletBinding(DefaultParameterSetName='Run')]
param(
[Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{40}$')][string]$SourcePin,
[Parameter(Mandatory=$true,ParameterSetName='Run')][string]$OracleExe,
[Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{64}$')][string]$OracleSha256,
[Parameter(Mandatory=$true,ParameterSetName='Run')][string]$BuildReceipt,
[Parameter(Mandatory=$true,ParameterSetName='Run')][ValidatePattern('^[0-9a-f]{64}$')][string]$BuildReceiptSha256,
[Parameter(Mandatory=$true,ParameterSetName='Run')][ValidateSet('self-check','same','repair-c','lane','message')][string]$Mode,
[Parameter(Mandatory=$true,ParameterSetName='Run')][string]$Baseline,
[string]$Actual,
[Parameter(Mandatory=$true,ParameterSetName='Run')][string]$Output,
[string]$View,
[string]$Target,
[string]$Coordinate,
[Parameter(Mandatory=$true,ParameterSetName='Validate')][switch]$ValidateOnly
)
Set-StrictMode -Version Latest
$ErrorActionPreference='Stop'
function Hash([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
function Record([string]$Path){$file=Get-Item -LiteralPath $Path;[ordered]@{path=$file.FullName;bytes=$file.Length;sha256=(Hash $file.FullName)}}
function Write-NewJson([string]$Path,$Value){$stream=[IO.File]::Open($Path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::Read);try{$bytes=[Text.UTF8Encoding]::new($false).GetBytes(($Value|ConvertTo-Json -Depth 12)+"`n");$stream.Write($bytes,0,$bytes.Length);$stream.Flush($true)}finally{$stream.Dispose()}}
function Assert-AcceptedBuild($Build,$ExeRecord,$RuntimeRecord,[string]$ExpectedSourcePin) {
if($ExpectedSourcePin -cnotmatch '^[0-9a-f]{40}$'){throw 'Explicit reviewed source pin required'}
if($Build.schema -cne 'scenario_spacing_oracle_build_v2' -or $Build.source_commit -cne $ExpectedSourcePin -or $Build.exit_code -ne 0 -or -not $Build.inputs_unchanged -or $null -ne $Build.postflight_failure){throw 'Successful spacing-oracle build for the explicit reviewed source required'}
if($null -eq $Build.binary -or $Build.binary.path -ine $ExeRecord.path -or $Build.binary.bytes -ne $ExeRecord.bytes -or $Build.binary.sha256 -cne $ExeRecord.sha256 -or $ExeRecord.bytes -le 0){throw 'Receipt does not describe supplied executable'}
$adjacent=Join-Path (Split-Path -Parent $ExeRecord.path) 'libunwind.dll'
if($null -eq $Build.runtime -or $null -eq $Build.runtime_source -or $Build.runtime.path -ine $adjacent -or $RuntimeRecord.path -ine $adjacent){throw 'Receipt must bind the actual adjacent runtime DLL'}
foreach($r in @($Build.runtime_source,$Build.runtime,$RuntimeRecord)){
if($r.bytes -ne 190464 -or $r.sha256 -cne 'aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'){throw 'Runtime DLL differs from exact pinned bytes'}
}
}
function Assert-Records($Files){foreach($f in $Files){$current=Record $f.path;if($current.bytes -ne $f.bytes -or $current.sha256 -cne $f.sha256){throw ('Changed input: '+$f.path)}}}
function Read-Json([string]$Path){Get-Content -Raw -LiteralPath $Path|ConvertFrom-Json}
if($ValidateOnly){
$tokens=$null;$errors=$null;[void][Management.Automation.Language.Parser]::ParseFile($PSCommandPath,[ref]$tokens,[ref]$errors);if(@($errors).Count){throw ($errors|Out-String)}
$sample=[ordered]@{schema='scenario_spacing_oracle_build_v2';source_commit='8bf7607a3f3b53db0c36364f54f57674c64ea2f1';exit_code=0;inputs_unchanged=$true;postflight_failure=$null;binary=@{path='C:\probe\oracle.exe';bytes=100;sha256=('1'*64)};runtime=@{path='C:\probe\libunwind.dll';bytes=190464;sha256='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'};runtime_source=@{path='C:\toolchain\libunwind.dll';bytes=190464;sha256='aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a'}}
$expectedPin=$sample.source_commit
$json=$sample|ConvertTo-Json -Depth 8;$exe=$sample.binary;$runtime=$sample.runtime
Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $runtime $expectedPin
$revised=$json|ConvertFrom-Json;$revised.source_commit=('3'*40);Assert-AcceptedBuild $revised $exe $runtime ('3'*40)
$cases=@(
@{name='failed_compile';change={param($b)$b.exit_code=1}},
@{name='changed_build_inputs';change={param($b)$b.inputs_unchanged=$false}},
@{name='postflight_failure';change={param($b)$b.postflight_failure='changed'}},
@{name='wrong_source';change={param($b)$b.source_commit=('0'*40)}},
@{name='legacy_receipt';change={param($b)$b.schema='old'}},
@{name='different_exe';change={param($b)$b.binary.sha256=('2'*64)}},
@{name='different_exe_size';change={param($b)$b.binary.bytes=101}},
@{name='different_exe_path';change={param($b)$b.binary.path='C:\other\oracle.exe'}},
@{name='missing_runtime';change={param($b)$b.runtime=$null}},
@{name='nonadjacent_runtime';change={param($b)$b.runtime.path='C:\other\libunwind.dll'}},
@{name='wrong_runtime_hash';change={param($b)$b.runtime.sha256=('2'*64)}},
@{name='wrong_runtime_size';change={param($b)$b.runtime.bytes=190463}},
@{name='wrong_runtime_source';change={param($b)$b.runtime_source.sha256=('2'*64)}}
)
$passed=@();foreach($case in $cases){$b=$json|ConvertFrom-Json;& $case.change $b;$rejected=$false;try{Assert-AcceptedBuild $b $exe $runtime $expectedPin}catch{$rejected=$true};if(-not $rejected){throw ('Guard admitted '+$case.name)};$passed+=@($case.name)}
foreach($change in @('path','sha256','bytes')){
$r=($sample.runtime|ConvertTo-Json|ConvertFrom-Json)
switch($change){'path'{$r.path='C:\other\libunwind.dll'}'sha256'{$r.sha256=('3'*64)}'bytes'{$r.bytes=1}}
$rejected=$false;try{Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $r $expectedPin}catch{$rejected=$true};if(-not $rejected){throw 'Current runtime mutation admitted'};$passed+=@('current_runtime_'+$change)
}
$badPinRejected=$false;try{Assert-AcceptedBuild ($json|ConvertFrom-Json) $exe $runtime ''}catch{$badPinRejected=$true};if(-not $badPinRejected){throw 'Missing expected source pin admitted'};$passed+=@('missing_expected_source_pin')
[ordered]@{status='passed';positive_cases=2;negative_cases=$passed;compiler_executed=$false;oracle_executed=$false;scope='Pure production receipt/runtime admission function with synthetic metadata; no gate or binary execution'}|ConvertTo-Json -Depth 8
return
}
if(Test-Path -LiteralPath $Output){throw 'Preserve previous oracle evidence; choose a new output directory.'}
if((Hash $OracleExe) -cne $OracleSha256 -or (Hash $BuildReceipt) -cne $BuildReceiptSha256){throw 'Reviewed oracle binary/build receipt binding differs.'}
$exe=(Get-Item -LiteralPath $OracleExe).FullName
$build=Read-Json $BuildReceipt
$runtime=Join-Path (Split-Path -Parent $exe) 'libunwind.dll'
Assert-AcceptedBuild $build (Record $exe) (Record $runtime) $SourcePin
$buildDir=Split-Path -Parent ((Get-Item -LiteralPath $BuildReceipt).FullName)
$proof=@(@{name='inputs-before.json';sha=$build.before_manifest_sha256},@{name='inputs-after.json';sha=$build.after_manifest_sha256},@{name='toolchain.json';sha=$build.toolchain_sha256},@{name='compile.log';sha=$build.compile_log_sha256})
foreach($f in $proof){if((Hash (Join-Path $buildDir $f.name)) -cne $f.sha){throw 'Build proof file changed'}}
$buildBefore=@(Read-Json (Join-Path $buildDir 'inputs-before.json'));$buildAfter=@(Read-Json (Join-Path $buildDir 'inputs-after.json'))
if(($buildBefore|ConvertTo-Json -Depth 8 -Compress) -cne ($buildAfter|ConvertTo-Json -Depth 8 -Compress)){throw 'Build input manifests differ'}
$byPath=@{};foreach($f in $buildBefore){if($byPath.ContainsKey($f.path)){throw 'Duplicate build manifest input'};$byPath[$f.path]=$f}
foreach($f in @($build.source_files)+@($build.runtime_source)){
if(-not $byPath.ContainsKey($f.path) -or $byPath[$f.path].bytes -ne $f.bytes -or $byPath[$f.path].sha256 -cne $f.sha256){throw 'Source/runtime record not bound by successful build'}
}
$localSource=@($PSCommandPath,(Join-Path $PSScriptRoot 'build.ps1'),(Join-Path $PSScriptRoot 'main.rs'),(Join-Path $PSScriptRoot '../incident-workspace.arcadia'))
foreach($p in $localSource){$path=(Get-Item -LiteralPath $p).FullName;$match=@($build.source_files|Where-Object {$_.path -ieq $path});if($match.Count -ne 1){throw 'Current oracle source is not the build-bound source'}}
Assert-Records $build.source_files
if((Hash (Join-Path $build.gate 'build-receipt.json')) -cne $build.gate_build_receipt_sha256){throw 'Accepted GUI gate receipt changed'}
# Runtime source is historical build input; the actual copied DLL is the loaded artifact.
$paths=@($exe,$runtime,$BuildReceipt,$Baseline)+$localSource+@($build.source_files|ForEach-Object path)+@($proof|ForEach-Object {Join-Path $buildDir $_.name})+@((Join-Path $build.gate 'build-receipt.json'))
if($Mode -ne 'self-check'){if([string]::IsNullOrWhiteSpace($Actual)){throw 'Actual checkpoint is required.'};$paths+=@($Actual)}
$extra=@();if($Mode -in @('lane','message')){
foreach($value in @($View,$Target,$Coordinate)){if([string]::IsNullOrWhiteSpace($value)){throw 'Spacing comparison needs independently chosen View, Target and Coordinate.'}}
$extra=@($View,$Target,$Coordinate)
}elseif($View -or $Target -or $Coordinate){throw 'Unexpected spacing parameters for this comparison mode.'}
$before=@($paths|ForEach-Object {(Get-Item -LiteralPath $_).FullName}|Sort-Object -Unique|ForEach-Object {Record $_})
$outputPath=[IO.Path]::GetFullPath($Output);[void][IO.Directory]::CreateDirectory($outputPath)
$base=(Get-Item -LiteralPath $Baseline).FullName;$baseCopy=Join-Path $outputPath 'baseline.arcadia';[IO.File]::Copy($base,$baseCopy,$false)
$argsForOracle=@($Mode,$baseCopy)
if($Mode -ne 'self-check'){$actualPath=(Get-Item -LiteralPath $Actual).FullName;$actualCopy=Join-Path $outputPath 'actual.arcadia';[IO.File]::Copy($actualPath,$actualCopy,$false);$argsForOracle+=@($actualCopy)}
$argsForOracle+=@((Join-Path $outputPath 'project-comparison'))+$extra
Write-NewJson (Join-Path $outputPath 'inputs-before.json') $before
Write-NewJson (Join-Path $outputPath 'request.json') ([ordered]@{mode=$Mode;view=$View;target=$Target;coordinate=$Coordinate;expected_origin='Predetermined independently from actual pointer/scale and baseline; never learned from Actual'})
$start=[DateTime]::UtcNow.ToString('o');$exit=$null;$failure=$null;$unchanged=$false;$semanticPass=$false
$PSNativeCommandUseErrorActionPreference=$false
try {& $exe @argsForOracle *> (Join-Path $outputPath 'oracle.log');$exit=$LASTEXITCODE}catch{$failure=$_.Exception.Message}
try {
Assert-Records $before
Assert-AcceptedBuild (Read-Json $BuildReceipt) (Record $exe) (Record $runtime) $SourcePin
if((Hash $baseCopy) -cne (Hash $base)){throw 'Baseline copy changed'}
if($Mode -ne 'self-check' -and (Hash $actualCopy) -cne (Hash $actualPath)){throw 'Actual copy changed'}
$after=@($before|ForEach-Object {Record $_.path});Write-NewJson (Join-Path $outputPath 'inputs-after.json') $after;$unchanged=$true
$result=Join-Path $outputPath ('project-comparison/'+$(if($Mode -eq 'self-check'){'self-check.json'}else{'comparison.json'}))
if(Test-Path -LiteralPath $result){$record=Read-Json $result;$semanticPass=$record.status -ceq 'passed';if($Mode -ne 'self-check'){$semanticPass=$semanticPass -and $record.mode -ceq $Mode -and $record.full_project_exact}}
}catch{if($null -eq $failure){$failure=$_.Exception.Message}}
$files=@(Get-ChildItem -LiteralPath $outputPath -File -Recurse|ForEach-Object {Record $_.FullName})
Write-NewJson (Join-Path $outputPath 'receipt.json') ([ordered]@{schema='scenario_spacing_oracle_run_v2';source_commit=$build.source_commit;start_utc=$start;end_utc=[DateTime]::UtcNow.ToString('o');command=@($exe)+$argsForOracle;mode=$Mode;oracle_exit_code=$exit;failure=$failure;inputs_unchanged=$unchanged;semantic_pass=$semanticPass;oracle_sha256=$OracleSha256;build_receipt_sha256=$BuildReceiptSha256;runtime_binding=$build.runtime;inputs_before=$before;output_files=$files;scope='External admitted saved-source Project comparison only; no native action or runtime/history inspection'})
if($exit -ne 0 -or -not $unchanged -or -not $semanticPass -or $null -ne $failure){throw 'Oracle comparison or input stability failed; preserve receipt and raw output.'}
Write-Output 'Saved-source oracle passed; runtime and native action evidence remain separate.'
@@ -0,0 +1,182 @@
//! Incident-workspace saved-source oracle. No desktop/spacing producer is linked.
//! self-check BASE OUT | same BASE ACTUAL OUT | repair-c BASE ACTUAL OUT
//! lane BASE ACTUAL OUT VIEW LIFELINE X | message BASE ACTUAL OUT VIEW OCCURRENCE SEND_Y
use oa_core::{
DiagramLayout, Id, MAX_COORDINATE, Project, ScenarioLayout, execute_batch, source_files,
source_project::{ProjectLimits, compile_bundle},
validation::Severity,
};
use serde_json::{Value, json};
use std::{fs, io::Write, path::Path};
const ORIGINAL: &str = include_str!("../incident-workspace.arcadia");
fn id(last: u128) -> Id {
Id::from_u128(0x70200000000040008000000000000000 | last)
}
fn load(path: &Path) -> Project {
assert!(fs::symlink_metadata(path).unwrap().file_type().is_file());
let loaded = source_files::load_project(path, ProjectLimits::default()).unwrap();
assert!(
!loaded.diagnostics.iter().any(|d| d.diagnostic.severity == Severity::Error),
"source loader errors: {:?}", loaded.diagnostics
);
let raw = loaded.reachable_bundle();
assert_eq!(raw.files.len(), 1, "This incident oracle admits one source file only");
let compiled = compile_bundle(&raw, ProjectLimits::default()).unwrap();
assert_eq!(compiled.bundle, raw, "Saved source must need no migration/identity insertion");
execute_batch(&compiled.decoded.project, &[]).unwrap();
let project = compiled.decoded.project;
assert_eq!(project.id, id(1), "Wrong incident fixture Project");
assert_eq!(project.diagrams.len(), 3, "Expected the incident fixture's three Saved views");
project
}
fn layout(project: &mut Project, view: Id) -> &mut ScenarioLayout {
let diagram = project.diagrams.get_mut(&view).expect("Missing chosen saved view");
assert_eq!(diagram.projection.scenario(), Some(id(0x10)), "Wrong view owner");
let Some(DiagramLayout::Scenario(layout)) = &mut diagram.layout else {
panic!("This fixture comparison requires an existing Scenario payload")
};
layout
}
fn lane(project: &mut Project, view: Id, target: Id, x: f32) -> f32 {
assert!(x.is_finite() && x.abs() <= MAX_COORDINATE);
let rows: Vec<_> = layout(project, view).lanes.iter_mut()
.filter(|row| row.lifeline == target).collect();
assert_eq!(rows.len(), 1, "Exactly one existing owned lane override required");
let row = rows.into_iter().next().unwrap();
std::mem::replace(&mut row.x, x)
}
fn message(project: &mut Project, view: Id, target: Id, y: f32) -> f32 {
assert!(y.is_finite() && y.abs() <= MAX_COORDINATE);
let rows: Vec<_> = layout(project, view).messages.iter_mut()
.filter(|row| row.address.references.is_empty() && row.address.occurrence == target).collect();
assert_eq!(rows.len(), 1, "Exactly one existing direct occurrence override required");
let row = rows.into_iter().next().unwrap();
std::mem::replace(&mut row.send_y, y)
}
// Recursively sort object keys. Array order and every serialized scalar remain exact.
// Comparing serialized scalars also distinguishes -0.0 from 0.0, unlike float PartialEq.
fn canonical(value: &Value) -> String {
match value {
Value::Object(map) => {
let mut keys: Vec<_> = map.keys().collect();
keys.sort();
format!("{{{}}}", keys.into_iter().map(|key| {
format!("{}:{}", serde_json::to_string(key).unwrap(), canonical(&map[key]))
}).collect::<Vec<_>>().join(","))
}
Value::Array(items) => format!("[{}]", items.iter().map(canonical).collect::<Vec<_>>().join(",")),
_ => serde_json::to_string(value).unwrap(),
}
}
fn full(project: &Project) -> String {
canonical(&serde_json::to_value(project).unwrap())
}
fn put(path: &Path, bytes: &[u8]) {
let mut file = fs::OpenOptions::new().write(true).create_new(true).open(path).unwrap();
file.write_all(bytes).unwrap();
file.sync_all().unwrap();
}
fn self_check(base: &Project, out: &Path) {
let mut expected = base.clone();
assert_eq!(message(&mut expected, id(0x42), id(0x23), 424.), 300.);
assert_ne!(full(base), full(&expected));
assert_eq!(message(&mut expected, id(0x42), id(0x23), 300.), 424.);
assert_eq!(full(base), full(&expected));
assert_eq!(lane(&mut expected, id(0x40), id(0x12), 700.), 640.);
let lane_expected = full(&expected);
let mut wrong_view = expected.clone();
lane(&mut wrong_view, id(0x41), id(0x12), 700.);
assert_ne!(lane_expected, full(&wrong_view));
let mut wrong_semantics = expected.clone();
wrong_semantics.elements.get_mut(&id(0x21)).unwrap().name.push_str(" changed");
assert_ne!(lane_expected, full(&wrong_semantics));
let reordered_text = ORIGINAL.replacen("steps [@initial_report, @updated_report,", "steps [@updated_report, @initial_report,", 1);
assert_ne!(reordered_text, ORIGINAL);
let reordered = oa_core::language::parse(&reordered_text).unwrap();
assert_ne!(full(base), full(&reordered));
assert_eq!(lane(&mut expected, id(0x40), id(0x12), 640.), 700.);
assert_eq!(full(base), full(&expected));
assert_eq!(message(&mut expected, id(0x40), id(0x21), 272.), 252.);
let mut wrong_occurrence = expected.clone();
message(&mut wrong_occurrence, id(0x40), id(0x20), 272.);
assert_ne!(full(&expected), full(&wrong_occurrence));
let mut signed_zero = base.clone();
lane(&mut signed_zero, id(0x40), id(0x12), -0.0);
let negative = full(&signed_zero);
lane(&mut signed_zero, id(0x40), id(0x12), 0.0);
assert_ne!(negative, full(&signed_zero));
put(&out.join("self-check.json"), serde_json::to_string_pretty(&json!({
"status": "passed", "scope": "Oracle admission only; no native result",
"checks": ["repair_C_exact_300_to_424_and_inverse", "lane_A_only_and_inverse",
"other_saved_view_mutation_rejected", "semantic_name_mutation_rejected", "source_steps_reorder_rejected",
"repeated_exchange_occurrence_distinguished", "signed_zero_distinguished"]
})).unwrap().as_bytes());
}
fn main() {
let args: Vec<String> = std::env::args().collect();
let mode = args.get(1).expect("Expected self-check, same, repair-c, lane or message");
let self_check_mode = mode == "self-check";
let count = match mode.as_str() {
"self-check" => 4, "same" | "repair-c" => 5, "lane" | "message" => 8,
_ => panic!("Unknown comparison mode"),
};
assert_eq!(args.len(), count, "Wrong exact argument count");
let base_path = Path::new(&args[2]);
let out = Path::new(&args[if self_check_mode {3} else {4}]);
fs::create_dir(out).expect("Output directory must be new; preserve previous evidence");
let base = load(base_path);
put(&out.join("baseline.project.json"), full(&base).as_bytes());
if self_check_mode {
assert_eq!(fs::read_to_string(base_path).unwrap(), ORIGINAL, "Self-check requires exact embedded original");
self_check(&base, out);
println!("Oracle self-check passed; no native acceptance");
return;
}
let actual = load(Path::new(&args[3]));
let mut expected = base.clone();
let change = match mode.as_str() {
"same" => json!({"kind": "none"}),
"repair-c" => {
let old = message(&mut expected, id(0x42), id(0x23), 424.);
assert_eq!(old.to_bits(), 300_f32.to_bits(), "Repair must begin with C's exact 300");
json!({"kind": "message", "view": id(0x42), "target": id(0x23), "before": old, "after": 424.0})
}
"lane" | "message" => {
let view = args[5].parse::<Id>().unwrap();
let target = args[6].parse::<Id>().unwrap();
let value = args[7].parse::<f32>().unwrap();
let old = if mode == "lane" {lane(&mut expected, view, target, value)}
else {message(&mut expected, view, target, value)};
assert_ne!(old.to_bits(), value.to_bits(), "Use same for an unchanged/no-op check");
json!({"kind": mode, "view": view, "target": target, "before": old, "after": value,
"before_f32_bits": old.to_bits(), "after_f32_bits": value.to_bits()})
}
_ => unreachable!(),
};
execute_batch(&expected, &[]).unwrap();
let expected_json = full(&expected);
let actual_json = full(&actual);
put(&out.join("expected.project.json"), expected_json.as_bytes());
put(&out.join("actual.project.json"), actual_json.as_bytes());
let equal = expected_json == actual_json;
put(&out.join("comparison.json"), serde_json::to_string_pretty(&json!({
"status": if equal {"passed"} else {"failed"}, "mode": mode,
"allowed_change": change, "full_project_exact": equal,
"scope": "Complete parsed saved Project; no runtime Scene, editor buffer, camera or history-stack claim"
})).unwrap().as_bytes());
assert!(equal, "Unexpected complete Project difference; inspect expected.project.json and actual.project.json");
println!("Full saved Project comparison passed: {mode}");
}
@@ -0,0 +1,52 @@
{
"status": "Frozen preparation; no compilation or execution",
"files": [
{
"path": "adaptation-provenance.json",
"bytes": 2174,
"sha256": "cdc29cca911962a2e82c86b76a6df1522bfc652fe0d6e792933b3c23c09c274d"
},
{
"path": "adaptation.diff",
"bytes": 28087,
"sha256": "99752da765f45a30ab96e887c813dc381c40c48a6f767200c4d1b438696294b7"
},
{
"path": "build-validation.json",
"bytes": 500,
"sha256": "716d38363c4fe5e12d486622b525e04ab2b3ff53a0d77bda10f0ccac4f667a7b"
},
{
"path": "check-validation.json",
"bytes": 719,
"sha256": "d02e08b4fd0a2f78d20f1df4517fbe7f9ef235fa0d44ddb263342da6d0f23293"
},
{
"path": "incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "oracle/build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"path": "oracle/check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"path": "oracle/main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "README.md",
"bytes": 6903,
"sha256": "3c6d5f2d0dffcbae011f45eb3ff7b117cc1eef48f1f8eec1ea156718239d2144"
}
],
"file_count": 9,
"bytes": 81475
}
@@ -0,0 +1,108 @@
arcadia 7;
project incident_workspace "Incident report review" id "70200000-0000-4000-8000-000000000001" {
// Two operational activities, with one lifeline appearance per Scenario.
oa_activity report_incident "Report incident" id "70200000-0000-4000-8000-000000000002" {}
oa_activity assess_incident "Assess incident" id "70200000-0000-4000-8000-000000000003" {}
interaction incident_report "Incident report" id "70200000-0000-4000-8000-000000000004" {
source @report_incident;
target @assess_incident;
}
oa_scenario incident_response "Review a reported incident" id "70200000-0000-4000-8000-000000000010" {
viewpoint OperationalActivity;
steps [@initial_report, @updated_report, @assess_call, @assess_reply, @unfinished_notice, @use_review];
}
oa_lifeline reporter "Reporting activity" id "70200000-0000-4000-8000-000000000011" {
parent @incident_response; represented @report_incident;
}
oa_lifeline assessor "Assessment activity" id "70200000-0000-4000-8000-000000000012" {
parent @incident_response; represented @assess_incident;
}
// Both appearances reuse one definition. Navigation must retain the occurrence.
oa_occurrence initial_report "Initial incident report" id "70200000-0000-4000-8000-000000000020" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
oa_occurrence updated_report "Updated incident report" id "70200000-0000-4000-8000-000000000021" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver @assessor; message_kind Asynchronous; }; };
}
// A correlated self call/reply with deliberately unassigned exchange definitions.
oa_occurrence assess_call "Assess report details" id "70200000-0000-4000-8000-000000000022" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Call; }; };
}
oa_occurrence assess_reply "Assessment ready" id "70200000-0000-4000-8000-000000000023" {
parent @incident_response;
body { Exchange { exchange none; sender @assessor; receiver @assessor; message_kind Reply; reply_to @assess_call; }; };
}
// Intentional unfinished work: no receiver and therefore no fabricated arrow.
oa_occurrence unfinished_notice "Follow-up recipient undecided" id "70200000-0000-4000-8000-000000000024" {
parent @incident_response;
body { Exchange { exchange @incident_report; sender @reporter; receiver none; message_kind Asynchronous; }; };
}
oa_occurrence use_review "Use the reviewed reporting procedure" id "70200000-0000-4000-8000-000000000025" {
parent @incident_response;
body { ScenarioUse {
bindings [{ local @reporter; referenced @review_reporter; }, { local @assessor; referenced @review_assessor; }];
scenario @reporting_review;
}; };
}
// This definition stays opaque in the caller. Open it, then Back to the saved view.
oa_scenario reporting_review "Reporting procedure detail" id "70200000-0000-4000-8000-000000000030" {
viewpoint OperationalActivity;
steps [@review_delivery];
}
oa_lifeline review_reporter "Reporting activity in detail" id "70200000-0000-4000-8000-000000000031" {
parent @reporting_review; represented @report_incident;
}
oa_lifeline review_assessor "Assessment activity in detail" id "70200000-0000-4000-8000-000000000032" {
parent @reporting_review; represented @assess_incident;
}
oa_occurrence review_delivery "Check the incident report" id "70200000-0000-4000-8000-000000000033" {
parent @reporting_review;
body { Exchange { exchange @incident_report; sender @review_reporter; receiver @review_assessor; message_kind Asynchronous; }; };
}
diagram incident_readable "A - Incident review readable" id "70200000-0000-4000-8000-000000000040" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x 160; }, { lifeline @assessor; x 640; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_wide "B - Incident review negative and far" id "70200000-0000-4000-8000-000000000041" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
lanes [{ lifeline @reporter; x -500; }, { lifeline @assessor; x 50000; }];
messages [
{ address { references []; occurrence @initial_report; }; send_y 160; },
{ address { references []; occurrence @updated_report; }; send_y 252; },
{ address { references []; occurrence @assess_call; }; send_y 344; },
{ address { references []; occurrence @assess_reply; }; send_y 436; }
];
}; };
}
diagram incident_repair "C - Incident review needs layout repair" id "70200000-0000-4000-8000-000000000042" {
layer Oa;
projection { Scenario { scenario @incident_response; }; };
layout { Scenario {
// These valid authored lanes must remain saved during complete fallback.
lanes [{ lifeline @reporter; x 900; }, { lifeline @assessor; x -500; }];
messages [
// REPAIR: change only this 300 to 424, then Undo and Redo the edit.
{ address { references []; occurrence @assess_reply; }; send_y 300; },
// This authored value stays latent while the receiver is missing.
{ address { references []; occurrence @unfinished_notice; }; send_y 2000; }
];
}; };
}
}
@@ -0,0 +1,67 @@
[
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\build-receipt.json",
"bytes": 5266,
"sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\compile.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"bytes": 22720512,
"sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-after.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-before.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\toolchain.json",
"bytes": 1052,
"sha256": "ff562ce278b7eb0f1c572548d6292f8226c38ca6dceb201c14e13d38a2ccb344"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\build-receipt.json",
"bytes": 7801,
"sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
}
]
@@ -0,0 +1,67 @@
[
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\build-receipt.json",
"bytes": 5266,
"sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\compile.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"bytes": 22720512,
"sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-after.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-before.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\toolchain.json",
"bytes": 1052,
"sha256": "ff562ce278b7eb0f1c572548d6292f8226c38ca6dceb201c14e13d38a2ccb344"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\build-receipt.json",
"bytes": 7801,
"sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
}
]
@@ -0,0 +1 @@
Oracle self-check passed; no native acceptance
@@ -0,0 +1,13 @@
{
"checks": [
"repair_C_exact_300_to_424_and_inverse",
"lane_A_only_and_inverse",
"other_saved_view_mutation_rejected",
"semantic_name_mutation_rejected",
"source_steps_reorder_rejected",
"repeated_exchange_occurrence_distinguished",
"signed_zero_distinguished"
],
"scope": "Oracle admission only; no native result",
"status": "passed"
}
@@ -0,0 +1,129 @@
{
"schema": "scenario_spacing_oracle_run_v2",
"source_commit": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"start_utc": "2026-09-13T14:27:47.6351297Z",
"end_utc": "2026-09-13T14:27:48.4010382Z",
"command": [
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"self-check",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\baseline.arcadia",
"C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\project-comparison"
],
"mode": "self-check",
"oracle_exit_code": 0,
"failure": null,
"inputs_unchanged": true,
"semantic_pass": true,
"oracle_sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62",
"build_receipt_sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098",
"runtime_binding": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
"inputs_before": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\build-receipt.json",
"bytes": 5266,
"sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\compile.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"bytes": 22720512,
"sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-after.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\inputs-before.json",
"bytes": 229689,
"sha256": "1d82b0663c30820c51cdd42a2a115256b5db8d1e781d1de6ece0c9249a08bcbd"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\toolchain.json",
"bytes": 1052,
"sha256": "ff562ce278b7eb0f1c572548d6292f8226c38ca6dceb201c14e13d38a2ccb344"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\incident-workspace.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\build.ps1",
"bytes": 15421,
"sha256": "133627fbbebf248574e45782e370e4700d4a767af2cf617dee471473d69ba1c5"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\check.ps1",
"bytes": 12405,
"sha256": "04483f25601d515d6f67ff5543793761be823bee7db0004c562d988d847851ae"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\oracle\\main.rs",
"bytes": 9060,
"sha256": "3e9d33d47c2ec18e1af191407d9809bbca4753456eea0fc8a4692dedd07e7205"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-gates-b10b28c-20260913\\build-receipt.json",
"bytes": 7801,
"sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-validation-native-b10b28c-20260913\\verify.ps1",
"bytes": 17002,
"sha256": "8306f4d4a1dde1c075a47994cd9d92738803c8b3b255b3e9907f0cb24749d91d"
}
],
"output_files": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\baseline.arcadia",
"bytes": 6206,
"sha256": "74cd2c1dd5eed7eb19895a752bb8ff9ce93655f7638a5312c96f56218568ebb3"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\inputs-after.json",
"bytes": 3314,
"sha256": "64db782129474f2c3849c254666f4d859eb8ca336d85110e24f30982cc319f64"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\inputs-before.json",
"bytes": 3314,
"sha256": "64db782129474f2c3849c254666f4d859eb8ca336d85110e24f30982cc319f64"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\oracle.log",
"bytes": 48,
"sha256": "5a023d24624c0f1f0caaf95272c57e8432ae92389727a2c271128d8d061c9ec4"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\request.json",
"bytes": 201,
"sha256": "d154a00917059001e59f76b72a5577d5f540961c4223ed2828adf30bb077f01f"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\project-comparison\\baseline.project.json",
"bytes": 9452,
"sha256": "60dab6b528c1f273d2b076897a6f95c492a74cdaa15bd27cd873bf12ce865391"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\self-check-b10-01\\project-comparison\\self-check.json",
"bytes": 373,
"sha256": "430976bea19febe21f17a54114aeb67a47311f1d07384f1f501077df9ec959b5"
}
],
"scope": "External admitted saved-source Project comparison only; no native action or runtime/history inspection"
}
@@ -0,0 +1,7 @@
{
"mode": "self-check",
"view": "",
"target": "",
"coordinate": "",
"expected_origin": "Predetermined independently from actual pointer/scale and baseline; never learned from Actual"
}
@@ -0,0 +1,95 @@
{
"details": {
"build_exit": 0,
"build_before_after_count": 1607,
"run_exit": 0,
"run_before_after_count": 637,
"checks": [
"name_only_candidate",
"wrong_occurrence",
"extra_alias",
"semantic_array_order",
"extra_layout",
"signed_zero",
"non_element_target",
"unchanged_name",
"admitted_service_baseline",
"all_six_approved_checkpoints",
"wrong_checkpoint",
"wrong_expected_project_identity",
"unknown_expected_field"
],
"build_receipt_sha256": "5c700a6b63ce1060c0091d6370d6e07b824fd871adb6bf89fd8c4a155b1c1c18",
"run_receipt_sha256": "c0661ef118c3916073258961be43dd6cadca52a9548f4c647f08a96495c7e736"
},
"spacing": {
"build_exit": 0,
"build_before_after_count": 963,
"run_exit": 0,
"run_before_after_count": 13,
"checks": [
"repair_C_exact_300_to_424_and_inverse",
"lane_A_only_and_inverse",
"other_saved_view_mutation_rejected",
"semantic_name_mutation_rejected",
"source_steps_reorder_rejected",
"repeated_exchange_occurrence_distinguished",
"signed_zero_distinguished"
],
"build_receipt_sha256": "516c09c996a99be8598bac616cdd5e7ead0c27a606dc9350e6acf960fc0c0098",
"run_receipt_sha256": "3991d486e8f452b3d3d670c208c5295780e3fc952651945c07daa46fe081486b"
},
"gui": {
"source_commit": "b10b28cefd1d0794073ba241a0c8de9a83e85f68",
"build_exit": 0,
"source_count": 612,
"receipt_sha256": "07697f61039e4b28d3759d79f6143ca7735f04f8735b2a95a4bf8ae41b0fea41",
"prior_strict_receipt_sha256": "a40b02c6e0904a70aab48bd1c20dfc926c4e194f4fb2e99f176b838e7a532d1d",
"scope": "GUI build only; no native pass"
},
"checks": {
"details_incident_equals_spacing_incident": true,
"service_baseline_equals_published_expected": true,
"unique_current_comparator_source_records_rehashed": 632,
"unique_current_run_inputs_rehashed": 649,
"gui_current_source_records_rehashed": 612,
"copied_original_bytes_verified": true,
"transitive_cache": "Closed before/after equality checked; entire current dependency cache not redundantly rehashed",
"omitted_binaries": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\details-source-oracle.exe",
"bytes": 19775488,
"sha256": "996803f938b7503db8508adf9b7fc2dd379852b5b603463edf6987dd1e5270a6",
"role": "details comparator"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-details-source-oracle-b10b28c-20260913\\build-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a",
"role": "details runtime"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\incident-source-oracle.exe",
"bytes": 22720512,
"sha256": "ce536924836d62210639a3af76d15793d0bd51a429d8cac0c90edde66955fe62",
"role": "spacing comparator"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-spacing-oracle-8bf7607-20260913\\build-b10-01\\libunwind.dll",
"bytes": 190464,
"sha256": "aa282fa47bb2c4e210cea5e470cdbdca58568f0be0bc73e404d86ab9cd95ef6a",
"role": "spacing runtime"
},
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\arcadia-studio.exe",
"bytes": 116721152,
"sha256": "7ece85c6012ae0ae75fc56ed3c3aadb8bc116448ad1782be422ef34a629dc3ce",
"mtimeUtc": "2026-09-13T14:19:13.0833854Z",
"role": "GUI build"
}
],
"details_list_reference_hash_verified": true,
"spacing_gui_reference_hash_verified": true,
"raw_success_logs_and_empty_details_stderr_verified": true
}
}