Archive Scenario listing selection-oracle failure
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
* -text -whitespace
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Closed Scenario workspace listing gate at 83e840e
|
||||||
|
|
||||||
|
Source: [83e840e37f3c3d230382722e99e87bf865abb12e](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/commit/83e840e37f3c3d230382722e99e87bf865abb12e). Cargo compiled successfully and listed **1,045 tests**, exit 0. The runner closed with exit 1 because its expected selection manifest used two incorrect module paths: **222 of 224** selected names matched. This is a selection-oracle failure, not missing test implementations or a product test failure.
|
||||||
|
|
||||||
|
The [raw list log](original/list.log) reports compilation in 12m 25s. The [receipt](original/list-receipt.json) records stage start 2026-09-13 06:44:52.1538802 UTC and end 06:57:26.8328626 UTC, Cargo exit 0, selectionValid false, inputsUnchanged true and no postflight failure. No tests were executed. Focused/full tests, strict lint and GUI build did not run in this gate.
|
||||||
|
|
||||||
|
## Exact selection defect
|
||||||
|
|
||||||
|
Both leaves exist in the actual listing under behavior::canvas_workspace::camera_policy_tests. The original [expected-tests.json](original/expected-tests.json) incorrectly put them under behavior::canvas_workspace::tests:
|
||||||
|
|
||||||
|
| Leaf | Incorrect expected module | Actual listed module |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| tiny_zoom_label_is_nonzero_and_changes_with_zoom | behavior::canvas_workspace::tests | behavior::canvas_workspace::camera_policy_tests |
|
||||||
|
| topology_retains_five_percent_floor | behavior::canvas_workspace::tests | behavior::canvas_workspace::camera_policy_tests |
|
||||||
|
|
||||||
|
Independent set comparison found exactly these two expected/actual differences. The incorrect manifest is preserved unchanged; this archive does not repair or substitute evidence. A separate focused-only recovery was being prepared at the unchanged 83e840e source at archive preparation; no recovery execution result is included here.
|
||||||
|
|
||||||
|
The successful compile emitted private_interfaces: public canvas_workspace::Scope::scenario_view at canvas_workspace.rs:61 exposes crate-private behavior::scenario_layout::Representation at scenario_layout.rs:478. Strict -D warnings would reject this uncorrected visibility warning; strict was not run, so this is a known future strict obstacle rather than an executed strict result.
|
||||||
|
|
||||||
|
## Evidence integrity and limits
|
||||||
|
|
||||||
|
All 22 original files, including the incorrect expected manifest, raw logs, scripts, receipts, prior-failure/server provenance and captures, are preserved byte-for-byte under original/. [manifest.json](manifest.json) records byte lengths, SHA-256 and Git blob SHA-1 plus the exact selection discrepancy. Copied bytes and all receipt script/input/log/capture bindings were independently verified. All three captures contain the same 601 source/configuration records and external-input observations. Local -text attributes preserve original line endings in Git.
|
||||||
|
|
||||||
|
The 601-file enumeration is an explicit bounded source/configuration scope, with toolchain environment and Cargo config observations separately bound; it is not every possible build input. Existing server provenance remains unchanged from the passed 37be410 server gate, without a repeated server execution. This archive establishes successful compilation and listing only, with failed selection validation. It establishes no product test, full-suite, strict-lint, GUI build or native acceptance.
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
{
|
||||||
|
"sourceCommit": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"archiveBase": "31d2d7374484e6248a63bbc35e3d38fe66433604",
|
||||||
|
"originalDirectory": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-workspace-gates-attempt2-20260913/",
|
||||||
|
"archivedAtUtc": "2026-09-13T07:02:10.542Z",
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "original/README.md",
|
||||||
|
"bytes": 5847,
|
||||||
|
"sha256": "cd0f26e0f2f9e24b40485419bd728fe3f28146481c1174d6a98a834465c9b774",
|
||||||
|
"gitBlob": "5f6adf013721623383f64eeeb592a8da6b66f742"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/capture.ps1",
|
||||||
|
"bytes": 4110,
|
||||||
|
"sha256": "444aaace94c3d51f1a63b4bd6f33605f13208a1f4979ddf00660fac8436efb0a",
|
||||||
|
"gitBlob": "b6dfad9c53c14edc2667c4149aa12cdbaa19207a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/enumerate-inputs.ps1",
|
||||||
|
"bytes": 1845,
|
||||||
|
"sha256": "b08a09c2b7099cd72867ef0238dd9a6c04c1b81812175a9060f23f52293ef7df",
|
||||||
|
"gitBlob": "edb025a406172799ea4250f074ee600bf3703261"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/enumeration.json",
|
||||||
|
"bytes": 73591,
|
||||||
|
"sha256": "5a02471ebf5b62f7ccfa85e4dac3a8688c6551c749bcdd7b9aed4b8b5c805f9a",
|
||||||
|
"gitBlob": "02cf8fd0018dd4d15a512cf1e904abacd6e7ff17"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/expected-inputs.json",
|
||||||
|
"bytes": 115641,
|
||||||
|
"sha256": "289c2c5a4bd5ce0256026ab71b5b757d25fb853feeffd3f15a29a43a9ee9709e",
|
||||||
|
"gitBlob": "a3598f101227f6a9d57d179cd93d1ec1c325d78b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/expected-tests.json",
|
||||||
|
"bytes": 163376,
|
||||||
|
"sha256": "908c83a651d3fbb499d07fa0e0de54af0deadfdd242af29e659aeee396850529",
|
||||||
|
"gitBlob": "7d4791a0d29cf839654808b7f6c29c7043c5ffcb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/external-inputs.json",
|
||||||
|
"bytes": 1474,
|
||||||
|
"sha256": "56bf73748cf323212f73711a5c3cc75dd7a1771398a771eae208ff7348813598",
|
||||||
|
"gitBlob": "ba2c15b87faa4877bb885161cd0e0039048da7c9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/inputs-complete-before.json",
|
||||||
|
"bytes": 117198,
|
||||||
|
"sha256": "900860653cfc49cca74d5f493e0ecacc6bc21d918c37d9a35486e6a213f0fb4f",
|
||||||
|
"gitBlob": "3448167a8ee6f637583096eb092466b96b6be5f4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/inputs-complete-list-after.json",
|
||||||
|
"bytes": 117198,
|
||||||
|
"sha256": "fa9a61744e91e6f1fc9991fffadbe613cae6f0cf1673be927e112e7ddca0c5a0",
|
||||||
|
"gitBlob": "fba55db67e62d4544d3de4058dde20f4754b04fc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/inputs-complete-list-before.json",
|
||||||
|
"bytes": 117198,
|
||||||
|
"sha256": "c89db87a7f156af3e46d4e5ad7d6a20a9a323c8d1909a91e003037a31067cb49",
|
||||||
|
"gitBlob": "af6d14a33470f64b3d234f62a0a9f7f522fd77d9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/list-receipt.json",
|
||||||
|
"bytes": 144445,
|
||||||
|
"sha256": "332aacfcf2bbb6224ac142521a724eb685e5104ffd3bf2d09e7f9261b9a9b26b",
|
||||||
|
"gitBlob": "ed78cee1f70c51d4eaa7eb8deced45350049f59d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/list.log",
|
||||||
|
"bytes": 115717,
|
||||||
|
"sha256": "973556f0331562066852de0634fe4a5079b456ab27b975e1650ade6187ab0016",
|
||||||
|
"gitBlob": "c252077cc08df77c587529e0f26a45b9b7700d71"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/package-clearance.json",
|
||||||
|
"bytes": 465,
|
||||||
|
"sha256": "746d135b4de9a405fe2a1cecc0658220dae15f9d2683331d0319dd89e30c479e",
|
||||||
|
"gitBlob": "33331d51a4a91d5c3c9495769beb7293eea83c17"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/package-clearance.log",
|
||||||
|
"bytes": 37,
|
||||||
|
"sha256": "01bd5c8fd69ccc840b84ce0f0a505c34267fa5cb612f599db8c958b0366e9054",
|
||||||
|
"gitBlob": "4895224cd38fdde9aac916540167e71aec4bf3cb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/parser-verification.json",
|
||||||
|
"bytes": 1022,
|
||||||
|
"sha256": "1596b2bc8dbe7b62e66808a8e68630dda5a9bbe9948f6c49df14c9cd1fc38d4f",
|
||||||
|
"gitBlob": "71d340cb476a0c84c6e5096215b2d80e52f69131"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/preparation.json",
|
||||||
|
"bytes": 3414,
|
||||||
|
"sha256": "6cbac164961a982b6bf13bd332e0eac9fab08408ab312e9e522a2df1703187b1",
|
||||||
|
"gitBlob": "b43aa9cccce148aa978c7e875b6de896ea43c6da"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/prior-failure-provenance.json",
|
||||||
|
"bytes": 1305,
|
||||||
|
"sha256": "3640219cda0052da92bc22499e34768a0cb7c87a430fa9ff492bf3272bc1501f",
|
||||||
|
"gitBlob": "089e310c2215e8e950047e8d623e6b41cbe7e1ae"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/run.ps1",
|
||||||
|
"bytes": 11772,
|
||||||
|
"sha256": "21a2e29c211dbe3399f917fead5128768a0c7fec3b3d4f34865ba199c475eee0",
|
||||||
|
"gitBlob": "c06b7dd7c86651dd8e9e56371521839473eee828"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/server-provenance.json",
|
||||||
|
"bytes": 1306,
|
||||||
|
"sha256": "76a3144c85c45f8de80128b54ea0ce8635f4a2f86a2abf23ab6ef04844da8082",
|
||||||
|
"gitBlob": "e6d634e195f4c20c9c7cc02a6effa092d99484dd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/toolchain-versions.json",
|
||||||
|
"bytes": 2268,
|
||||||
|
"sha256": "daecdc3624c461efc21cdd4b925f4143062c6de777878cff38c78c5e34742202",
|
||||||
|
"gitBlob": "8cb0e4d6c7a1fd10963cb182139c042a9352af0e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/validate-scripts.ps1",
|
||||||
|
"bytes": 453,
|
||||||
|
"sha256": "c382d47429036c5f136af1e7104452f8ef3a86f3952edd7df4047fcdb804fa85",
|
||||||
|
"gitBlob": "a3e20ba4a6b55223372b0310141b22bbf92b3613"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "original/verify-parser.ps1",
|
||||||
|
"bytes": 3059,
|
||||||
|
"sha256": "f0e3b638d38dca1043b9ce6d79cb472f0b3d1d93838e463d09b0cf85dec5f647",
|
||||||
|
"gitBlob": "42ab3ac304ef1739b2d0ff62bec20c6a260c2eca"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"byteExact": true,
|
||||||
|
"receiptBindingsVerified": true,
|
||||||
|
"allThreeCapturesMatch601": true,
|
||||||
|
"selectionOracle": {
|
||||||
|
"expected": 224,
|
||||||
|
"matched": 222,
|
||||||
|
"incorrectExpectedNames": [
|
||||||
|
"behavior::canvas_workspace::tests::tiny_zoom_label_is_nonzero_and_changes_with_zoom",
|
||||||
|
"behavior::canvas_workspace::tests::topology_retains_five_percent_floor"
|
||||||
|
],
|
||||||
|
"actualNames": [
|
||||||
|
"behavior::canvas_workspace::camera_policy_tests::tiny_zoom_label_is_nonzero_and_changes_with_zoom",
|
||||||
|
"behavior::canvas_workspace::camera_policy_tests::topology_retains_five_percent_floor"
|
||||||
|
],
|
||||||
|
"cargoExitCode": 0,
|
||||||
|
"runnerExitCode": 1,
|
||||||
|
"listed": 1045,
|
||||||
|
"executed": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Prepared saved Scenario workspace Windows gate
|
||||||
|
|
||||||
|
Prepared at `83e840e37f3c3d230382722e99e87bf865abb12e` in `.local/scenario-workspace-ytr83r-20260913`. No Cargo, compiler/version command, cleanup, server, application build or native launch was executed during preparation. Parent alone dispatches each stage. This directory contains no product pass claim.
|
||||||
|
|
||||||
|
Run in order with PowerShell 7: `pwsh -NoProfile -File .local/scenario-workspace-gates-attempt2-20260913/run.ps1 -Stage list`, then separate invocations for `focused`, `all`, `clippy`, `build`. A later stage requires its exact successful predecessor, unchanged source/config/recipe hashes and preserved prior raw log. The runner carries transitive prior bindings, including the actual listing receipt, through later stages. Existing logs/receipts/captures are never overwritten; failure/retry needs a new directory.
|
||||||
|
|
||||||
|
Before dispatch, parent supplies current-pin `package-clearance.json` with base, successful cargoExitCode 0, absolute root target directory and dependenciesRetained=true. Required parent clearance is oa-desktop only because this retry uses the same worktree; already built core/server/dependency outputs are retained; no cleanup is performed by preparation or run.ps1. Shared root target and existing dependency outputs remain parent-owned.
|
||||||
|
|
||||||
|
## Exact source and test selection
|
||||||
|
|
||||||
|
Fresh Git and independent rg enumeration agree on **601** source/build/fixture/config files, rather than inheriting the old 591 count. `enumeration.json` records both complete memberships and tree; `expected-inputs.json` records independently computed byte lengths/SHA-256. The initial `inputs-complete-before.json` is captured once, after clean pinned source verification. Every stage re-enumerates and captures before/after, rejecting changed membership or bytes.
|
||||||
|
|
||||||
|
Focused selection is **224 unique tests**: the previous 87 renderer/dispatch tests (one dispatch name explicitly changed), all 35 new tests, and affected existing Scenario/direct/workspace/operation/usage, canvas control, diagram selection/usage/reveal and behavior lifecycle cases. `expected-tests.json` contains every exact qualified name and the prefix rationale. All selected leaf test functions were found in current Rust source, including async tokio tests; selected additions are bound to their module files. New 35 comprise 5 presentation adapter, 5 controller, 5 camera+2 shared camera/control, 6 App routing, 4 adoption, 2 owner navigation and 6 saved usage tests.
|
||||||
|
|
||||||
|
The previous actual 1010-name listing, one explicit rename and 35 registered additions predict **1045 desktop tests**. This is a membership expectation, not an execution result: the actual `--list` must match the complete exact name set, with unique names and consistent list summaries. Focused must execute each 224 exactly once, pass all with no ignores and match the actual listing's remaining count (predicted 821 filtered). Full desktop must match the actual listed multiset, run all 224 focused tests successfully, have zero filtered tests and exactly the three existing ignored timing/scale probes named in the manifest. There is no zero-match success path.
|
||||||
|
|
||||||
|
One old dispatch filter changes from `app::saved_scenario_dispatch_tests::unsupported_saved_picker_and_reveal_do_not_apply_pending_properties` to `app::saved_scenario_dispatch_tests::saved_picker_with_invalid_properties_and_reveal_with_pending_properties_do_not_apply`; its replacement remains in the retained 87 membership.
|
||||||
|
|
||||||
|
`server-provenance.json` records unchanged core/server/root-manifest scope relative to 37 and binds its passed server receipt/log. The UI gate does not repeat server tests. The parent-owned old 37 strict failure is preserved separately; this source includes its style-only correction. The new strict stage runs `cargo clippy -p oa-desktop -p oa-server --all-targets --locked --offline -- -D warnings`. The final GUI build records root/target/debug/arcadia-studio.exe bytes/hash/mtime; no GUI is presently built or launched by this preparation.
|
||||||
|
|
||||||
|
## Environment and script checks
|
||||||
|
|
||||||
|
The external toolchain env script and all eight Cargo config candidates are freshly recorded in `external-inputs.json`; the env script is present and the config candidates absent. `env.ps1` sets build jobs 1, incremental 0, stable-x86_64-pc-windows-gnullvm, clang linker and the configured cargo/rustup homes. This is the standard gate, not an incremental development trial. First list invocation records cargo/rustc/clippy/clang version output and selected runtime environment; later stages retain that binding. No registry-wide hashing is claimed.
|
||||||
|
|
||||||
|
PowerShell parsing checks all five scripts. `verify-parser.ps1` executes only the actual runner's output parser against synthetic complete/missing/duplicate/wrong-total/wrong-filtered/zero logs; it does not execute Cargo. Script and parser results are preparation evidence only. The original beforecapture is protected from replacement.
|
||||||
|
|
||||||
|
## Closed previous attempt
|
||||||
|
|
||||||
|
`prior-failure-provenance.json` binds the preserved 2c list failure: Cargo 101, E0433 unavailable futures executor and E0063 missing Scope.scenario_view, all 601 source inputs unchanged, zero tests listed or executed. Only the two recorded desktop files changed; the new pin retains all 224/1045 expected names and all 35 additions. No success is inferred from the corrected source.
|
||||||
|
|
||||||
|
Strict acceptance includes both desktop and server all-targets in the same Clippy invocation. Prior server57 test success does not establish server strict acceptance: the earlier37 strict stage stopped on desktop warnings. No server test repeat is needed, but server strict is required here. This recipe correction occurred after the single source beforecapture and before any stage; source601 records and the original capture bytes are unchanged.
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#Requires -Version 7.0
|
||||||
|
param([Parameter(Mandatory=$true)][ValidatePattern('^(before|after|(list|focused|all|clippy|build)-(before|after))$')][string]$Stage)
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
$taskWorkspace='C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-workspace-ytr83r-20260913'
|
||||||
|
$taskPin='83e840e37f3c3d230382722e99e87bf865abb12e'
|
||||||
|
function Hash-Input([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
|
||||||
|
$taskOutput=Join-Path $PSScriptRoot ('inputs-complete-'+$Stage+'.json')
|
||||||
|
if(Test-Path -LiteralPath $taskOutput){throw 'Preserve existing input evidence; use a new directory for retries.'}
|
||||||
|
$pinRecord=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'expected-inputs.json')|ConvertFrom-Json
|
||||||
|
$enumeration=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'enumeration.json')|ConvertFrom-Json
|
||||||
|
$external=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'external-inputs.json')|ConvertFrom-Json
|
||||||
|
if($pinRecord.base -cne $taskPin -or $enumeration.base -cne $taskPin -or $external.base -cne $taskPin){throw 'Wrong input pin.'}
|
||||||
|
Push-Location -LiteralPath $taskWorkspace
|
||||||
|
try {
|
||||||
|
$taskBase=git rev-parse HEAD
|
||||||
|
if($LASTEXITCODE -ne 0 -or $taskBase -cne $taskPin){throw 'Wrong source commit.'}
|
||||||
|
$status=@(git status --porcelain)
|
||||||
|
if($LASTEXITCODE -ne 0 -or $status.Count){throw 'Frozen worktree changed.'}
|
||||||
|
$taskRoots=@($enumeration.rootInputs);$taskScopes=@($enumeration.scopes)
|
||||||
|
$tracked=@(git ls-files -- @taskRoots @taskScopes)
|
||||||
|
if($LASTEXITCODE -ne 0){throw 'Git enumeration failed.'}
|
||||||
|
$tracked=@($tracked | ForEach-Object {$_.Replace('\','/')} | Sort-Object -Unique)
|
||||||
|
$present=@(rg --files @taskScopes)
|
||||||
|
if($LASTEXITCODE -ne 0){throw 'Actual input enumeration failed.'}
|
||||||
|
$taskPaths=@(($present+$taskRoots) | ForEach-Object {$_.Replace('\','/')} | Sort-Object -Unique)
|
||||||
|
if(@(Compare-Object $tracked $taskPaths).Count -or @(Compare-Object @($enumeration.gitPaths) $tracked).Count){throw 'Frozen input membership changed.'}
|
||||||
|
$taskEntries=@($taskPaths | ForEach-Object {$item=Get-Item -LiteralPath $_;[ordered]@{path=$_;bytes=$item.Length;sha256=(Hash-Input $_)}})
|
||||||
|
$externalNow=@(foreach($f in $external.files){
|
||||||
|
$present=Test-Path -LiteralPath $f.path
|
||||||
|
if($present -ne $f.present){throw ('External config presence changed: '+$f.path)}
|
||||||
|
if($present){$item=Get-Item -LiteralPath $f.path;$hash=Hash-Input $f.path;if($item.Length -ne $f.bytes -or $hash -cne $f.sha256){throw ('External input changed: '+$f.path)};[ordered]@{path=$f.path;present=$true;bytes=$item.Length;sha256=$hash}}
|
||||||
|
else{[ordered]@{path=$f.path;present=$false}}
|
||||||
|
})
|
||||||
|
$taskRecord=[ordered]@{capturedUtc=[DateTime]::UtcNow.ToString('o');workspace=$taskWorkspace;base=$taskBase;count=$taskEntries.Count;files=$taskEntries;externalInputs=$externalNow;expectedInputsSha256=(Hash-Input (Join-Path $PSScriptRoot 'expected-inputs.json'));enumerationSha256=(Hash-Input (Join-Path $PSScriptRoot 'enumeration.json'))}
|
||||||
|
$taskRecord|ConvertTo-Json -Depth 8|Set-Content -LiteralPath $taskOutput -Encoding utf8
|
||||||
|
if($taskEntries.Count -ne $pinRecord.count){throw 'Pinned dynamic count changed.'}
|
||||||
|
$expected=@{}
|
||||||
|
foreach($f in $pinRecord.files){if($expected.ContainsKey($f.path)){throw 'Duplicate pinned input.'};$expected[$f.path]=$f}
|
||||||
|
foreach($f in $taskEntries){if(-not $expected.ContainsKey($f.path)){throw 'Unexpected input.'};$old=$expected[$f.path];if($f.bytes -ne $old.bytes -or $f.sha256 -cne $old.sha256){throw ('Input changed: '+$f.path)};$expected.Remove($f.path)}
|
||||||
|
if($expected.Count){throw 'Missing input.'}
|
||||||
|
if($Stage -ne 'before'){
|
||||||
|
$baseline=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'inputs-complete-before.json')|ConvertFrom-Json
|
||||||
|
if($baseline.base -cne $taskPin -or $baseline.count -ne $pinRecord.count -or $baseline.expectedInputsSha256 -cne $taskRecord.expectedInputsSha256 -or $baseline.enumerationSha256 -cne $taskRecord.enumerationSha256){throw 'Baseline binding changed.'}
|
||||||
|
}
|
||||||
|
Write-Output ('Captured and verified '+$taskEntries.Count+' inputs: '+$Stage)
|
||||||
|
} finally {Pop-Location}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#Requires -Version 7.0
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
if(Test-Path -LiteralPath (Join-Path $PSScriptRoot 'enumeration.json')){throw 'Preserve existing enumeration; use a new gate for retries.'}
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$workspace='C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-workspace-ytr83r-20260913'
|
||||||
|
$pin='83e840e37f3c3d230382722e99e87bf865abb12e'
|
||||||
|
Push-Location -LiteralPath $workspace
|
||||||
|
try {
|
||||||
|
$head=git rev-parse HEAD
|
||||||
|
if($LASTEXITCODE -ne 0 -or $head -cne $pin){throw 'Wrong frozen pin'}
|
||||||
|
$status=@(git status --porcelain)
|
||||||
|
if($LASTEXITCODE -ne 0 -or $status.Count){throw 'Frozen worktree is not clean'}
|
||||||
|
$scopes=@('crates','docs','examples','build','harness/fixtures','harness/experiments/textual-authoring-20260911')
|
||||||
|
$roots=@('Cargo.toml','Cargo.lock','rust-toolchain.toml')
|
||||||
|
$tracked=@(git ls-files -- @roots @scopes)
|
||||||
|
if($LASTEXITCODE -ne 0){throw 'Git enumeration failed'}
|
||||||
|
$tracked=@($tracked | ForEach-Object { $_.Replace('\','/') } | Sort-Object -Unique)
|
||||||
|
$present=@(rg --files @scopes)
|
||||||
|
if($LASTEXITCODE -ne 0){throw 'Independent rg enumeration failed'}
|
||||||
|
$present=@(($present+$roots) | ForEach-Object { $_.Replace('\','/') } | Sort-Object -Unique)
|
||||||
|
if(@(Compare-Object $tracked $present).Count){throw 'Git and actual file memberships differ'}
|
||||||
|
$gitTree=git rev-parse 'HEAD^{tree}'
|
||||||
|
if($LASTEXITCODE -ne 0){throw 'Tree identity unavailable'}
|
||||||
|
$record=[ordered]@{base=$head;tree=$gitTree;workspace=$workspace;capturedUtc=[DateTime]::UtcNow.ToString('o');scopes=$scopes;rootInputs=$roots;gitCount=$tracked.Count;rgCount=$present.Count;gitPaths=$tracked;rgPaths=$present}
|
||||||
|
$record|ConvertTo-Json -Depth 6|Set-Content -LiteralPath (Join-Path $PSScriptRoot 'enumeration.json') -Encoding utf8
|
||||||
|
Write-Output ('Verified Git/rg membership '+$tracked.Count+' at '+$head)
|
||||||
|
} finally {Pop-Location}
|
||||||
+1227
File diff suppressed because it is too large
Load Diff
+3012
File diff suppressed because it is too large
Load Diff
+1518
File diff suppressed because it is too large
Load Diff
+44
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"base": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"status": "External environment/config provenance; these paths are not claimed version-controlled",
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/env.ps1",
|
||||||
|
"present": true,
|
||||||
|
"bytes": 572,
|
||||||
|
"sha256": "be2226f08764bb6961b4be8513ce55bab076890cddd2fef0f54a4031f94a82d4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.cargo/config",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/.cargo/config",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-workspace-ytr83r-20260913/.cargo/config",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/cargo/config",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.cargo/config.toml",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/.cargo/config.toml",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-workspace-ytr83r-20260913/.cargo/config.toml",
|
||||||
|
"present": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/cargo/config.toml",
|
||||||
|
"present": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+3055
File diff suppressed because it is too large
Load Diff
+3055
File diff suppressed because it is too large
Load Diff
+3055
File diff suppressed because it is too large
Load Diff
+1323
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+13
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"startedUtc": "2026-09-13T06:43:24.2524805Z",
|
||||||
|
"completedUtc": "2026-09-13T06:43:28.3401932Z",
|
||||||
|
"command": "cargo clean -p oa-desktop --target-dir <verified root target>",
|
||||||
|
"target": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target",
|
||||||
|
"base": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"workspacePackagesCleared": [
|
||||||
|
"oa-desktop"
|
||||||
|
],
|
||||||
|
"coreAndServerOutputsRetained": true,
|
||||||
|
"dependenciesRetained": true,
|
||||||
|
"cargoExitCode": 0
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
Removed 17 files, 1.1MiB total
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"status": "Synthetic actual-runner parser checks only; no Cargo or product tests",
|
||||||
|
"focusedCount": 224,
|
||||||
|
"cases": [
|
||||||
|
{
|
||||||
|
"case": "focused-exact",
|
||||||
|
"expected": true,
|
||||||
|
"actual": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "focused-zero",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "focused-duplicate",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "focused-missing",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "focused-wrong-total",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "focused-wrong-filtered",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "list-complete",
|
||||||
|
"expected": true,
|
||||||
|
"actual": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "list-missing-summary",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case": "list-duplicate",
|
||||||
|
"expected": false,
|
||||||
|
"actual": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
{
|
||||||
|
"source": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"status": "Prepared only; no Cargo/compiler/toolchain version/cleanup/native invocation",
|
||||||
|
"input_count": 601,
|
||||||
|
"source_bytes": 10963298,
|
||||||
|
"focused_count": 224,
|
||||||
|
"new_tests": 35,
|
||||||
|
"predicted_desktop_count": 1045,
|
||||||
|
"expected_ignored_count": 3,
|
||||||
|
"before_capture_count": 1,
|
||||||
|
"before_independently_verified": true,
|
||||||
|
"stages": [
|
||||||
|
"list",
|
||||||
|
"focused",
|
||||||
|
"all",
|
||||||
|
"clippy",
|
||||||
|
"build"
|
||||||
|
],
|
||||||
|
"parent_must_supply": "Current-pin successful desktop-only package-clearance.json before list; same worktree outputs retained",
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "capture.ps1",
|
||||||
|
"bytes": 4110,
|
||||||
|
"sha256": "444aaace94c3d51f1a63b4bd6f33605f13208a1f4979ddf00660fac8436efb0a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "enumerate-inputs.ps1",
|
||||||
|
"bytes": 1845,
|
||||||
|
"sha256": "b08a09c2b7099cd72867ef0238dd9a6c04c1b81812175a9060f23f52293ef7df"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "enumeration.json",
|
||||||
|
"bytes": 73591,
|
||||||
|
"sha256": "5a02471ebf5b62f7ccfa85e4dac3a8688c6551c749bcdd7b9aed4b8b5c805f9a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "expected-inputs.json",
|
||||||
|
"bytes": 115641,
|
||||||
|
"sha256": "289c2c5a4bd5ce0256026ab71b5b757d25fb853feeffd3f15a29a43a9ee9709e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "expected-tests.json",
|
||||||
|
"bytes": 163376,
|
||||||
|
"sha256": "908c83a651d3fbb499d07fa0e0de54af0deadfdd242af29e659aeee396850529"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "external-inputs.json",
|
||||||
|
"bytes": 1474,
|
||||||
|
"sha256": "56bf73748cf323212f73711a5c3cc75dd7a1771398a771eae208ff7348813598"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "inputs-complete-before.json",
|
||||||
|
"bytes": 117198,
|
||||||
|
"sha256": "900860653cfc49cca74d5f493e0ecacc6bc21d918c37d9a35486e6a213f0fb4f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "package-clearance.json",
|
||||||
|
"bytes": 465,
|
||||||
|
"sha256": "746d135b4de9a405fe2a1cecc0658220dae15f9d2683331d0319dd89e30c479e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "package-clearance.log",
|
||||||
|
"bytes": 37,
|
||||||
|
"sha256": "01bd5c8fd69ccc840b84ce0f0a505c34267fa5cb612f599db8c958b0366e9054"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "parser-verification.json",
|
||||||
|
"bytes": 1022,
|
||||||
|
"sha256": "1596b2bc8dbe7b62e66808a8e68630dda5a9bbe9948f6c49df14c9cd1fc38d4f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "prior-failure-provenance.json",
|
||||||
|
"bytes": 1305,
|
||||||
|
"sha256": "3640219cda0052da92bc22499e34768a0cb7c87a430fa9ff492bf3272bc1501f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"bytes": 5847,
|
||||||
|
"sha256": "cd0f26e0f2f9e24b40485419bd728fe3f28146481c1174d6a98a834465c9b774"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "run.ps1",
|
||||||
|
"bytes": 11772,
|
||||||
|
"sha256": "21a2e29c211dbe3399f917fead5128768a0c7fec3b3d4f34865ba199c475eee0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "server-provenance.json",
|
||||||
|
"bytes": 1306,
|
||||||
|
"sha256": "76a3144c85c45f8de80128b54ea0ce8635f4a2f86a2abf23ab6ef04844da8082"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "validate-scripts.ps1",
|
||||||
|
"bytes": 453,
|
||||||
|
"sha256": "c382d47429036c5f136af1e7104452f8ef3a86f3952edd7df4047fcdb804fa85"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "verify-parser.ps1",
|
||||||
|
"bytes": 3059,
|
||||||
|
"sha256": "f0e3b638d38dca1043b9ce6d79cb472f0b3d1d93838e463d09b0cf85dec5f647"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"strict_packages": [
|
||||||
|
"oa-desktop",
|
||||||
|
"oa-server"
|
||||||
|
],
|
||||||
|
"recipe_correction_after_before_capture": "Added required server all-targets strict before any gate execution; source and single original beforecapture unchanged."
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"previous_source": "2c9cd2b3e661ef85f11590c7128dcb2f502d0c26",
|
||||||
|
"source": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"previous_gate": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-workspace-gates-20260913",
|
||||||
|
"stage": "list",
|
||||||
|
"cargoExitCode": 101,
|
||||||
|
"errors": [
|
||||||
|
"E0433",
|
||||||
|
"E0063"
|
||||||
|
],
|
||||||
|
"input_count": 601,
|
||||||
|
"inputsUnchanged": true,
|
||||||
|
"listed_count": 0,
|
||||||
|
"executed_count": 0,
|
||||||
|
"old_receipt_sha256": "6817e5baeeb72c9557440090059a99671cba6345e54a997aa6ea217c1c7c360d",
|
||||||
|
"old_raw_log_sha256": "84fbcdcbab5620245d186927f8f8057e4d3ba988a0e9eb75e006bbccb2690c3b",
|
||||||
|
"old_before_sha256": "b3e88eb1eccd2ca5df4048140a9899042fd7a8464c22d049f8cab35091d5af6a",
|
||||||
|
"old_after_sha256": "838c867a67a7441187cb5a58a9bd49682bf6a4fd885b9bb6fdc91da02f7a08f6",
|
||||||
|
"correction_paths": [
|
||||||
|
"crates/oa-desktop/src/app/process_canvas.rs",
|
||||||
|
"crates/oa-desktop/src/app/scenario_diagram/adoption_tests.rs"
|
||||||
|
],
|
||||||
|
"correction": "Explicit scenario_view: None in Process canvas Scope; adoption mounted-view test uses existing tokio async test runtime instead of unavailable futures executor; test names/assertions retained. No dependency change.",
|
||||||
|
"remaining_old_stages": "focused/all/clippy/build NOT RUN; fresh retry does not supersede that failure evidence."
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
#Requires -Version 7.0
|
||||||
|
param([Parameter(Mandatory=$true)][ValidateSet('list','focused','all','clippy','build')][string]$Stage)
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
$PSNativeCommandUseErrorActionPreference=$false
|
||||||
|
$taskWorkspace='C:\Users\User\Documents\Git\ARCADIA-Studio\.local\scenario-workspace-ytr83r-20260913'
|
||||||
|
$taskTarget='C:\Users\User\Documents\Git\ARCADIA-Studio\target'
|
||||||
|
$taskPin='83e840e37f3c3d230382722e99e87bf865abb12e'
|
||||||
|
$toolchainEnv='C:\Users\User\Documents\Git\ARCADIA-Studio\.local\toolchain\env.ps1'
|
||||||
|
function Hash-Input([string]$Path){(Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()}
|
||||||
|
function Same-Names($Left,$Right){$a=@($Left|Sort-Object);$b=@($Right|Sort-Object);return $a.Count -eq $b.Count -and @(Compare-Object $a $b).Count -eq 0}
|
||||||
|
$taskLog=Join-Path $PSScriptRoot ($Stage+'.log')
|
||||||
|
$taskReceipt=Join-Path $PSScriptRoot ($Stage+'-receipt.json')
|
||||||
|
if((Test-Path -LiteralPath $taskLog)-or(Test-Path -LiteralPath $taskReceipt)){throw 'Do not replace evidence; prepare a new gate directory for retries.'}
|
||||||
|
$clearancePath=Join-Path $PSScriptRoot 'package-clearance.json'
|
||||||
|
$clearance=Get-Content -Raw -LiteralPath $clearancePath|ConvertFrom-Json
|
||||||
|
if($clearance.base -cne $taskPin -or $clearance.cargoExitCode -ne 0 -or [IO.Path]::GetFullPath($clearance.target) -ine $taskTarget -or -not $clearance.dependenciesRetained){throw 'Parent-owned successful current-pin package clearance is required.'}
|
||||||
|
if(@($clearance.workspacePackagesCleared).Count -ne 1 -or $clearance.workspacePackagesCleared[0] -cne 'oa-desktop'){throw 'This same-worktree retry requires parent desktop-only clearance.'}
|
||||||
|
$selection=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'expected-tests.json')|ConvertFrom-Json
|
||||||
|
$expected=@($selection.tests|Sort-Object -Unique)
|
||||||
|
if($selection.source_commit -cne $taskPin -or $selection.expected_count -ne 224 -or $expected.Count -ne 224 -or @($selection.tests).Count -ne 224){throw 'Wrong exact focused membership.'}
|
||||||
|
$expectedCount=224
|
||||||
|
$commonFiles=@('run.ps1','capture.ps1','expected-tests.json','expected-inputs.json','enumeration.json','external-inputs.json','inputs-complete-before.json','package-clearance.json','server-provenance.json','prior-failure-provenance.json')
|
||||||
|
$boundScripts=@{}
|
||||||
|
foreach($file in $commonFiles){$boundScripts[$file]=Hash-Input (Join-Path $PSScriptRoot $file)}
|
||||||
|
$previous=@{focused='list';all='focused';clippy='all';build='clippy'}
|
||||||
|
$priorBinding=$null
|
||||||
|
if($previous.ContainsKey($Stage)){
|
||||||
|
$priorName=$previous[$Stage]
|
||||||
|
$priorPath=Join-Path $PSScriptRoot ($priorName+'-receipt.json')
|
||||||
|
$prior=Get-Content -Raw -LiteralPath $priorPath|ConvertFrom-Json
|
||||||
|
if($prior.stage -cne $priorName -or $prior.base -cne $taskPin -or $prior.workspace -ine $taskWorkspace -or $prior.target -ine $taskTarget -or $prior.cargoExitCode -ne 0 -or -not $prior.selectionValid -or -not $prior.inputsUnchanged){throw 'Exact prior sequential stage did not pass.'}
|
||||||
|
foreach($file in $commonFiles){if($prior.boundScriptAndInputHashes.$file -cne $boundScripts[$file]){throw ('Prior recipe/input binding changed: '+$file)}}
|
||||||
|
foreach($property in $prior.boundScriptAndInputHashes.PSObject.Properties){if((Hash-Input (Join-Path $PSScriptRoot $property.Name)) -cne $property.Value){throw ('Prior transitive binding changed: '+$property.Name)};$boundScripts[$property.Name]=$property.Value}
|
||||||
|
if((Hash-Input (Join-Path $PSScriptRoot ($priorName+'.log'))) -cne $prior.rawLogSha256){throw 'Prior raw output changed.'}
|
||||||
|
$priorBinding=[ordered]@{stage=$priorName;receiptSha256=(Hash-Input $priorPath);rawLogSha256=$prior.rawLogSha256}
|
||||||
|
}
|
||||||
|
Push-Location -LiteralPath $taskWorkspace
|
||||||
|
try {
|
||||||
|
& (Join-Path $PSScriptRoot 'capture.ps1') -Stage ($Stage+'-before')
|
||||||
|
. $toolchainEnv
|
||||||
|
$env:CARGO_TARGET_DIR=$taskTarget
|
||||||
|
$env:CARGO_TERM_COLOR='never'
|
||||||
|
$PSNativeCommandUseErrorActionPreference=$false
|
||||||
|
$versionPath=Join-Path $PSScriptRoot 'toolchain-versions.json'
|
||||||
|
if($Stage -eq 'list'){
|
||||||
|
if(Test-Path -LiteralPath $versionPath){throw 'Preserve prior toolchain version evidence.'}
|
||||||
|
$cargoVersion=@(& cargo --version --verbose 2>&1);$cargoVersionExit=$LASTEXITCODE
|
||||||
|
$rustcVersion=@(& rustc --version --verbose 2>&1);$rustcVersionExit=$LASTEXITCODE
|
||||||
|
$clippyVersion=@(& cargo clippy --version 2>&1);$clippyVersionExit=$LASTEXITCODE
|
||||||
|
$clangVersion=@(& clang --version 2>&1);$clangVersionExit=$LASTEXITCODE
|
||||||
|
[ordered]@{base=$taskPin;capturedUtc=[DateTime]::UtcNow.ToString('o');externalEnvironmentPath=$toolchainEnv;externalEnvironmentSha256=(Hash-Input $toolchainEnv);cargo=@($cargoVersion|ForEach-Object {$_.ToString()});cargoExitCode=$cargoVersionExit;rustc=@($rustcVersion|ForEach-Object {$_.ToString()});rustcExitCode=$rustcVersionExit;clippy=@($clippyVersion|ForEach-Object {$_.ToString()});clippyExitCode=$clippyVersionExit;clang=@($clangVersion|ForEach-Object {$_.ToString()});clangExitCode=$clangVersionExit;cargoPath=(Get-Command cargo).Source;rustcPath=(Get-Command rustc).Source;clangPath=(Get-Command clang).Source;cargoHome=$env:CARGO_HOME;rustupHome=$env:RUSTUP_HOME;rustupToolchain=$env:RUSTUP_TOOLCHAIN;buildJobs=$env:CARGO_BUILD_JOBS;incremental=$env:CARGO_INCREMENTAL}|ConvertTo-Json -Depth 8|Set-Content -LiteralPath $versionPath -Encoding utf8
|
||||||
|
if($cargoVersionExit -ne 0 -or $rustcVersionExit -ne 0 -or $clippyVersionExit -ne 0 -or $clangVersionExit -ne 0){throw 'Toolchain version query failed.'}
|
||||||
|
}
|
||||||
|
$versionsHash=Hash-Input $versionPath
|
||||||
|
if($priorBinding -and $prior.toolchainVersionsSha256 -cne $versionsHash){throw 'Toolchain version receipt changed.'}
|
||||||
|
$taskArgs=switch($Stage){
|
||||||
|
'list' {@('test','-p','oa-desktop','--all-targets','--locked','--offline','--','--list')}
|
||||||
|
'focused' {@('test','-p','oa-desktop','--bin','arcadia-studio','--locked','--offline','--','--exact')+$expected+@('--test-threads=1')}
|
||||||
|
'all' {@('test','-p','oa-desktop','--all-targets','--locked','--offline','--','--test-threads=1')}
|
||||||
|
'clippy' {@('clippy','-p','oa-desktop','-p','oa-server','--all-targets','--locked','--offline','--','-D','warnings')}
|
||||||
|
'build' {@('build','-p','oa-desktop','--bin','arcadia-studio','--locked','--offline')}
|
||||||
|
}
|
||||||
|
$taskStart=[DateTime]::UtcNow.ToString('o')
|
||||||
|
& cargo @taskArgs 2>&1|Tee-Object -FilePath $taskLog
|
||||||
|
$taskExit=$LASTEXITCODE
|
||||||
|
$taskEnd=[DateTime]::UtcNow.ToString('o')
|
||||||
|
$taskText=Get-Content -Raw -LiteralPath $taskLog
|
||||||
|
$taskValid=$true;$taskFailure=$null
|
||||||
|
$listed=@();$executed=@();$matched=@();$ignored=@();$summaries=@();$listSummaries=@()
|
||||||
|
if($Stage -eq 'list'){
|
||||||
|
$listed=@([regex]::Matches($taskText,'(?m)^([^\r\n]+): test\r?$')|ForEach-Object {$_.Groups[1].Value})
|
||||||
|
$matched=@($listed|Where-Object {$_ -cin $expected}|Sort-Object)
|
||||||
|
$listSummaries=@([regex]::Matches($taskText,'(?m)^(\d+) tests, (\d+) benchmarks\r?$')|ForEach-Object {[ordered]@{tests=[int]$_.Groups[1].Value;benchmarks=[int]$_.Groups[2].Value}})
|
||||||
|
$taskValid=$listed.Count -ge $expectedCount -and @($listed|Sort-Object -Unique).Count -eq $listed.Count -and (Same-Names $expected $matched) -and (Same-Names @($selection.desktop_tests) $listed) -and $listSummaries.Count -gt 0 -and ($listSummaries|ForEach-Object {$_.tests}|Measure-Object -Sum).Sum -eq $listed.Count -and ($listSummaries|ForEach-Object {$_.benchmarks}|Measure-Object -Sum).Sum -eq 0
|
||||||
|
}
|
||||||
|
if($Stage -in @('focused','all')){
|
||||||
|
$executed=@([regex]::Matches($taskText,'(?m)^test ([^\r\n]+?) \.\.\. (ok|FAILED|ignored)[^\r\n]*\r?$')|ForEach-Object {[ordered]@{name=$_.Groups[1].Value;result=$_.Groups[2].Value}})
|
||||||
|
$summaries=@([regex]::Matches($taskText,'test result: (ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out;')|ForEach-Object {[ordered]@{status=$_.Groups[1].Value;passed=[int]$_.Groups[2].Value;failed=[int]$_.Groups[3].Value;ignored=[int]$_.Groups[4].Value;measured=[int]$_.Groups[5].Value;filtered=[int]$_.Groups[6].Value}})
|
||||||
|
$ignored=@($executed|Where-Object {$_.result -eq 'ignored'}|ForEach-Object {$_.name})
|
||||||
|
$passedCount=@($executed|Where-Object {$_.result -eq 'ok'}).Count
|
||||||
|
$failedCount=@($executed|Where-Object {$_.result -eq 'FAILED'}).Count
|
||||||
|
$taskValid=$summaries.Count -gt 0 -and $failedCount -eq 0 -and @($summaries|Where-Object {$_.status -ne 'ok' -or $_.failed -ne 0 -or $_.measured -ne 0}).Count -eq 0 -and ($summaries|ForEach-Object {$_. passed}|Measure-Object -Sum).Sum -eq $passedCount -and ($summaries|ForEach-Object {$_. ignored}|Measure-Object -Sum).Sum -eq $ignored.Count
|
||||||
|
if($Stage -in @('focused','all')){
|
||||||
|
$matched=@($executed|Where-Object {$_.name -cin $expected -and $_.result -eq 'ok'}|ForEach-Object {$_.name}|Sort-Object)
|
||||||
|
$taskValid=$taskValid -and (Same-Names $expected $matched)
|
||||||
|
}
|
||||||
|
if($Stage -eq 'focused'){$taskValid=$taskValid -and $executed.Count -eq $expectedCount -and $passedCount -eq $expectedCount -and $ignored.Count -eq 0 -and $summaries.Count -eq 1 -and $summaries[0].filtered -eq (@($prior.listedTests).Count - $expectedCount)}
|
||||||
|
if($Stage -eq 'all'){
|
||||||
|
$listPath=Join-Path $PSScriptRoot 'list-receipt.json'
|
||||||
|
$listHash=Hash-Input $listPath
|
||||||
|
$listReceipt=Get-Content -Raw -LiteralPath $listPath|ConvertFrom-Json
|
||||||
|
if($prior.priorStage.stage -cne 'list' -or $prior.priorStage.receiptSha256 -cne $listHash){throw 'Desktop listing changed after focused execution.'}
|
||||||
|
$boundScripts['list-receipt.json']=$listHash
|
||||||
|
$taskValid=$taskValid -and (Same-Names @($listReceipt.listedTests) @($executed|ForEach-Object {$_.name})) -and ($summaries|ForEach-Object {$_. filtered}|Measure-Object -Sum).Sum -eq 0 -and (Same-Names @($selection.ignored_tests) $ignored)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
$inputsUnchanged=$false
|
||||||
|
try {
|
||||||
|
& (Join-Path $PSScriptRoot 'capture.ps1') -Stage ($Stage+'-after')
|
||||||
|
foreach($file in $boundScripts.Keys){if((Hash-Input (Join-Path $PSScriptRoot $file)) -cne $boundScripts[$file]){throw ('Gate recipe/input changed: '+$file)}}
|
||||||
|
if((Hash-Input $versionPath) -cne $versionsHash){throw 'Toolchain version receipt changed.'}
|
||||||
|
if($priorBinding -and (Hash-Input (Join-Path $PSScriptRoot ($priorBinding.stage+'-receipt.json'))) -cne $priorBinding.receiptSha256){throw 'Prior receipt changed during gate.'}
|
||||||
|
$inputsUnchanged=$true
|
||||||
|
}catch{$taskFailure=$_.Exception.Message}
|
||||||
|
$binary=$null
|
||||||
|
if($Stage -eq 'build' -and $taskExit -eq 0){$path=Join-Path $taskTarget 'debug/arcadia-studio.exe';$item=Get-Item -LiteralPath $path;$binary=[ordered]@{path=$item.FullName;bytes=$item.Length;sha256=(Hash-Input $path);mtimeUtc=$item.LastWriteTimeUtc.ToString('o')}}
|
||||||
|
[ordered]@{stage=$Stage;command=('cargo '+($taskArgs -join ' '));arguments=$taskArgs;base=$taskPin;workspace=$taskWorkspace;target=$taskTarget;startUtc=$taskStart;endUtc=$taskEnd;cargoExitCode=$taskExit;selectionValid=$taskValid;inputsUnchanged=$inputsUnchanged;postflightFailure=$taskFailure;boundScriptAndInputHashes=$boundScripts;priorStage=$priorBinding;externalEnvironmentPath=$toolchainEnv;externalEnvironmentSha256=(Hash-Input $toolchainEnv);toolchainVersionsSha256=$versionsHash;rawLogSha256=(Hash-Input $taskLog);beforeCaptureSha256=(Hash-Input (Join-Path $PSScriptRoot ('inputs-complete-'+$Stage+'-before.json')));afterCaptureSha256=if(Test-Path -LiteralPath (Join-Path $PSScriptRoot ('inputs-complete-'+$Stage+'-after.json'))){Hash-Input (Join-Path $PSScriptRoot ('inputs-complete-'+$Stage+'-after.json'))}else{$null};listedTests=$listed;executedTests=$executed;testResultSummaries=$summaries;matchedRegressionTests=$matched;ignoredTests=$ignored;listSummaries=$listSummaries;binary=$binary}|ConvertTo-Json -Depth 14|Set-Content -LiteralPath $taskReceipt -Encoding utf8
|
||||||
|
if($taskExit -ne 0){exit $taskExit}
|
||||||
|
if(-not $taskValid -or -not $inputsUnchanged){throw 'Gate membership or input binding failed; inspect receipt and raw output.'}
|
||||||
|
} finally {Pop-Location}
|
||||||
+44
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"status": "No repeated server stage: core/server/manifests unchanged from verified37 source",
|
||||||
|
"previous_source": "37be41092beb1c940f345072df1e017ce45fe2fc",
|
||||||
|
"source": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"changed_core_server_manifest_paths": [],
|
||||||
|
"prior_server_receipt_sha256": "5c0cd2af2b1f3c12528ad961e5b08c60f8865751cca95c1267e1211faf7e0900",
|
||||||
|
"prior_server_log_sha256": "7c7d847ac942b23a33081fdc3eb9ec53a2c054cd422810e30528b5930c574d71",
|
||||||
|
"prior_server_results": [
|
||||||
|
{
|
||||||
|
"status": "ok",
|
||||||
|
"passed": 4,
|
||||||
|
"failed": 0,
|
||||||
|
"ignored": 0,
|
||||||
|
"measured": 0,
|
||||||
|
"filtered": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status": "ok",
|
||||||
|
"passed": 0,
|
||||||
|
"failed": 0,
|
||||||
|
"ignored": 0,
|
||||||
|
"measured": 0,
|
||||||
|
"filtered": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status": "ok",
|
||||||
|
"passed": 51,
|
||||||
|
"failed": 0,
|
||||||
|
"ignored": 0,
|
||||||
|
"measured": 0,
|
||||||
|
"filtered": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status": "ok",
|
||||||
|
"passed": 2,
|
||||||
|
"failed": 0,
|
||||||
|
"ignored": 0,
|
||||||
|
"measured": 0,
|
||||||
|
"filtered": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"strict_scope": "Required here: cargo clippy -p oa-desktop -p oa-server --all-targets --locked --offline -- -D warnings",
|
||||||
|
"prior_strict_limit": "37 stopped on desktop warnings; server57 tests are not server strict acceptance"
|
||||||
|
}
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"base": "83e840e37f3c3d230382722e99e87bf865abb12e",
|
||||||
|
"capturedUtc": "2026-09-13T06:44:51.7474827Z",
|
||||||
|
"externalEnvironmentPath": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\env.ps1",
|
||||||
|
"externalEnvironmentSha256": "be2226f08764bb6961b4be8513ce55bab076890cddd2fef0f54a4031f94a82d4",
|
||||||
|
"cargo": [
|
||||||
|
"cargo 1.98.1 (797e8a9bc 2026-08-05)",
|
||||||
|
"release: 1.98.1",
|
||||||
|
"commit-hash: 797e8a9bca276c1c9f9f738d2a20f484fa4eea9d",
|
||||||
|
"commit-date: 2026-08-05",
|
||||||
|
"host: x86_64-pc-windows-gnullvm",
|
||||||
|
"libgit2: 1.9.4 (sys:0.21.0 vendored)",
|
||||||
|
"libcurl: 8.21.0-DEV (sys:0.4.90+curl-8.21.0 vendored ssl:Schannel)",
|
||||||
|
"os: Windows 10.0.26200 (Windows 11 Professional) [64-bit]"
|
||||||
|
],
|
||||||
|
"cargoExitCode": 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"
|
||||||
|
],
|
||||||
|
"rustcExitCode": 0,
|
||||||
|
"clippy": [
|
||||||
|
"clippy 0.1.98 (48a229ceae 2026-09-01)"
|
||||||
|
],
|
||||||
|
"clippyExitCode": 0,
|
||||||
|
"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"
|
||||||
|
],
|
||||||
|
"clangExitCode": 0,
|
||||||
|
"cargoPath": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo\\bin\\cargo.exe",
|
||||||
|
"rustcPath": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo\\bin\\rustc.exe",
|
||||||
|
"clangPath": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\llvm-mingw-20260908-ucrt-x86_64\\bin\\clang.exe",
|
||||||
|
"cargoHome": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
|
||||||
|
"rustupHome": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup",
|
||||||
|
"rustupToolchain": "stable-x86_64-pc-windows-gnullvm",
|
||||||
|
"buildJobs": "1",
|
||||||
|
"incremental": "0"
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#Requires -Version 7.0
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
foreach($file in @('enumerate-inputs.ps1','capture.ps1','run.ps1','verify-parser.ps1','validate-scripts.ps1')){
|
||||||
|
$tokens=$null;$errors=$null
|
||||||
|
$null=[System.Management.Automation.Language.Parser]::ParseFile((Join-Path $PSScriptRoot $file),[ref]$tokens,[ref]$errors)
|
||||||
|
if($errors.Count){$errors|ForEach-Object {Write-Output $_};throw ('Parse failure: '+$file)}
|
||||||
|
Write-Output ('Parsed '+$file)
|
||||||
|
}
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
#Requires -Version 7.0
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference='Stop'
|
||||||
|
$script=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'run.ps1')
|
||||||
|
$begin=$script.IndexOf(' $taskValid=$true;$taskFailure=$null')
|
||||||
|
$end=$script.IndexOf(' $inputsUnchanged=$false',$begin)
|
||||||
|
if($begin -lt 0 -or $end -lt 0){throw 'Runner parser block not found'}
|
||||||
|
$block=[scriptblock]::Create($script.Substring($begin,$end-$begin))
|
||||||
|
$selection=Get-Content -Raw -LiteralPath (Join-Path $PSScriptRoot 'expected-tests.json')|ConvertFrom-Json
|
||||||
|
$expected=@($selection.tests|Sort-Object -Unique);$expectedCount=$expected.Count
|
||||||
|
function Same-Names($Left,$Right){$a=@($Left|Sort-Object);$b=@($Right|Sort-Object);return $a.Count -eq $b.Count -and @(Compare-Object $a $b).Count -eq 0}
|
||||||
|
$prior=[pscustomobject]@{listedTests=@($selection.desktop_tests)}
|
||||||
|
$filtered=@($prior.listedTests).Count-$expectedCount
|
||||||
|
$passLines=@($expected|ForEach-Object {'test '+$_+' ... ok'})
|
||||||
|
$summary='test result: ok. '+$expectedCount+' passed; 0 failed; 0 ignored; 0 measured; '+$filtered+' filtered out;'
|
||||||
|
$listLines=@($selection.desktop_tests|ForEach-Object {$_+': test'})
|
||||||
|
$listSummary=@($selection.desktop_tests).Count.ToString()+' tests, 0 benchmarks'
|
||||||
|
$cases=@(
|
||||||
|
[pscustomobject]@{name='focused-exact';stage='focused';valid=$true;text=(($passLines+@($summary)) -join "`n")},
|
||||||
|
[pscustomobject]@{name='focused-zero';stage='focused';valid=$false;text='test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out;'},
|
||||||
|
[pscustomobject]@{name='focused-duplicate';stage='focused';valid=$false;text=(($passLines+@($passLines[0],$summary)) -join "`n")},
|
||||||
|
[pscustomobject]@{name='focused-missing';stage='focused';valid=$false;text=(($passLines[1..($passLines.Count-1)]+@($summary)) -join "`n")},
|
||||||
|
[pscustomobject]@{name='focused-wrong-total';stage='focused';valid=$false;text=(($passLines+@('test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; '+$filtered+' filtered out;')) -join "`n")},
|
||||||
|
[pscustomobject]@{name='focused-wrong-filtered';stage='focused';valid=$false;text=(($passLines+@($summary.Replace(($filtered.ToString()+' filtered'), '0 filtered'))) -join "`n")},
|
||||||
|
[pscustomobject]@{name='list-complete';stage='list';valid=$true;text=(($listLines+@($listSummary)) -join "`n")},
|
||||||
|
[pscustomobject]@{name='list-missing-summary';stage='list';valid=$false;text=($listLines -join "`n")},
|
||||||
|
[pscustomobject]@{name='list-duplicate';stage='list';valid=$false;text=(($listLines+@($listLines[0],$listSummary)) -join "`n")}
|
||||||
|
)
|
||||||
|
$results=@(foreach($case in $cases){$Stage=$case.stage;$taskText=$case.text;. $block;if($taskValid -ne $case.valid){throw ('Unexpected parser decision: '+$case.name)};[ordered]@{case=$case.name;expected=$case.valid;actual=$taskValid}})
|
||||||
|
[ordered]@{status='Synthetic actual-runner parser checks only; no Cargo or product tests';focusedCount=$expectedCount;cases=$results}|ConvertTo-Json -Depth 6|Set-Content -LiteralPath (Join-Path $PSScriptRoot 'parser-verification.json') -Encoding utf8
|
||||||
|
Write-Output ('Verified '+$results.Count+' parser cases')
|
||||||
Reference in New Issue
Block a user