From 2f90cf25d11c295a0ae41f0e5bd9c8cb5d648fdb Mon Sep 17 00:00:00 2001 From: Codex-ytr83r Date: Sat, 12 Sep 2026 18:49:11 -0700 Subject: [PATCH] Verify conservative corridor rounding and stale font rejection --- .../.gitattributes | 3 + .../README.md | 17 ++++ .../artifacts.json | 80 +++++++++++++++++++ .../available-dependencies.json | 22 +++++ .../binary.json | 5 ++ .../compile-receipt.json | 31 +++++++ .../compile.ps1 | 12 +++ .../font-version/receipt.json | 11 +++ .../font-version/selection.log | 4 + .../font-version/test.log | 8 ++ .../inputs-after.json | 32 ++++++++ .../inputs-before.json | 31 +++++++ .../list.log | 22 +++++ .../run-tests.ps1 | 21 +++++ .../tests-receipt.json | 10 +++ .../tests.log | 25 ++++++ 16 files changed, 334 insertions(+) create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/.gitattributes create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/README.md create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/artifacts.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/available-dependencies.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/binary.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/compile-receipt.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/compile.ps1 create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/font-version/receipt.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/font-version/selection.log create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/font-version/test.log create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/inputs-after.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/inputs-before.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/list.log create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/run-tests.ps1 create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/tests-receipt.json create mode 100644 harness/experiments/scenario-label-rounding-gates-20260913/tests.log diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/.gitattributes b/harness/experiments/scenario-label-rounding-gates-20260913/.gitattributes new file mode 100644 index 00000000..2dea82bf --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/.gitattributes @@ -0,0 +1,3 @@ +*.log -text -whitespace +*.json -text whitespace=cr-at-eol +*.ps1 -text whitespace=cr-at-eol diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/README.md b/harness/experiments/scenario-label-rounding-gates-20260913/README.md new file mode 100644 index 00000000..f36b3428 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/README.md @@ -0,0 +1,17 @@ +# Corridor rounding correction: verified isolated result + +Tested source345f7b3d5b64cef6e75f907c4d47f5b5658f1eba corrects the corridor experiment previously tested on903d85d. It remains unwired. The earlier18 passing tests are preserved in ../scenario-label-gates-20260913/README.md; those tests missed the arithmetic counterexamples below. This record supersedes that earlier corridor candidate's acceptance, without rewriting its raw evidence. + +## Finding and correction + +Independent source review found that admitting finite band endpoints did not ensure safe output after computing width=end-start. With x=f32::from_bits(0xfe79636e), width=f32::MAX, the reconstructed width becomes infinity although the right edge is finite. With band x=-999948.5625,width1000000 and an intersecting blocker starting at f32(2.1), naive reconstruction returns a right edge2.125, crossing the blocker. + +The corrected conversion computes the difference in f64, caps it to finite f32 and rounds inward by one next_down step if nearest conversion overshot the admitted end. The guarantee is contained representable geometry, not exact-real arithmetic or raster-ink coverage. Two new tests explicitly establish the old arithmetic's failure before requiring a positive, finite, contained returned rectangle. A separate source re-review found no remaining issue in the conversion/use and confirmed one inward step is sufficient for these admitted finite f32 inputs. No native review is implied. + +## Executed gate + +The exact portable wrapper compiled with rustc1.98.1 gnullvm and warnings denied. It listed20 tests. Normal execution passed19,0 failed,1 intentionally ignored (1.81s). The exact global-font mutation then passed alone in a fresh process:1 passed,0 failed,0 ignored,19 filtered (0.10s). Face count167→168 and Font Version0→1 accompanied rejection of every old-label consumer and old-session resolution. Thus all20 selected evaluators passed. + +All five captured source/lock/wrapper inputs and the identified executable remained unchanged. Artifacts.json binds the raw successful compiler receipt/command, exact listing, test logs/receipts, input manifests, dependency identities and binary SHA256. The compiler emitted no output, so there is no successful compile.log. Reproduction method and third-party dependency limitations remain as documented in the prior result; this is an isolated rustc evaluator, not a desktop Cargo or WGPU/native gate. A separate local output directory allowed this small evaluator to use existing dependency artifacts while the independent navigation/rename Cargo build continued; it changed no shared Cargo output. + +The production geometry/camera/paint/hit/navigation integration, native glyph-ink and self/reversed workflows, persistence and gesture behavior are still pending. Linux remains user-deferred. Live scope and continuation: Gitea issue20; combined Windows integration is issue27. diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/artifacts.json b/harness/experiments/scenario-label-rounding-gates-20260913/artifacts.json new file mode 100644 index 00000000..a99e4de9 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/artifacts.json @@ -0,0 +1,80 @@ +[ + { + "path": "available-dependencies.json", + "bytes": 781, + "sha256": "850d702e21094f189d827bc4ca825b80ef46ba1a29a189c6d00ed3a9a90f56fc", + "gitBlob": "5b74307f371ec165827339dde6a20859e09beca8" + }, + { + "path": "binary.json", + "bytes": 133, + "sha256": "0d87fe37de572cedd74c479aecc1dfee2671ef17d46efae860767225b73a75b5", + "gitBlob": "373d36e267a5cae83f3dcadea395ff05c5982f52" + }, + { + "path": "compile-receipt.json", + "bytes": 1467, + "sha256": "6e3d5bcbf705911da9a844639c9ae0f35e121c032a11993c208998d66c16d7b8", + "gitBlob": "f02444f1d1fe71ebd1d98817f4c53988e921b96b" + }, + { + "path": "compile.ps1", + "bytes": 1665, + "sha256": "0bf24048e4652723879e03bcfce795bbc39a98ddbf74f06612bb718f30deaeb9", + "gitBlob": "b54f23a0a87581184186aa9720380412ebf0fe42" + }, + { + "path": "inputs-before.json", + "bytes": 1092, + "sha256": "80f389c35d5ee4a1ecc9a93c5ef14a3d015d40834541c6f36446a6285a33194e", + "gitBlob": "f9a5aa7af828d5ef116bb5224a079c17b83e79be" + }, + { + "path": "inputs-after.json", + "bytes": 1113, + "sha256": "ca10f5436bafad220bfe3aec054ffff581f52511a7106c66639d6a3aede65d15", + "gitBlob": "32e55bffb7326b780dcd6e7f19611c07096affbc" + }, + { + "path": "list.log", + "bytes": 1944, + "sha256": "48858fc45462697bae26edfe796952e1ff7e6192ff892a6b47ca6e44a5a57770", + "gitBlob": "d1d8f40715ce7076c50cf9c7140092b931134965" + }, + { + "path": "run-tests.ps1", + "bytes": 2006, + "sha256": "5d64a540fe4e2acc87718de4bb59a9e9b19ca7064477bb06364f6a1193ecfae4", + "gitBlob": "0a869222bf116a7ee26e40f910d029f56d61f0ea" + }, + { + "path": "tests-receipt.json", + "bytes": 430, + "sha256": "8af1cb7785701d6f89d40dc9ab7b5fbd4314bb345b25c818a2f1da5f69902bd5", + "gitBlob": "f126d0a08a365d798c0a48f70140e37d3aca1509" + }, + { + "path": "tests.log", + "bytes": 2242, + "sha256": "fb4b99984c3f2adf8dd52ec24994dd7b854371a0d964c2cbeb55bbff74607884", + "gitBlob": "4bba19fb17aef9ca0ba46968737d9598f011e1ab" + }, + { + "path": "font-version/selection.log", + "bytes": 112, + "sha256": "06c79ed30f9df147d325ca7b8da78cfd949e7f595d1ec18e158ca59d2f92a0c1", + "gitBlob": "dc985bd84a4e860ae2a717099ba05b3020151c0f" + }, + { + "path": "font-version/test.log", + "bytes": 320, + "sha256": "ce85ea371a2987fc3bec1c5af2a6553e4fea49e311915d36d30ab7f4ecc76b76", + "gitBlob": "bc61e7bfec74c8d704aa3d6c4648363316c10b99" + }, + { + "path": "font-version/receipt.json", + "bytes": 601, + "sha256": "ebdf5bb716131c9bfb50b1c8f11e993b9d5e435bbfc6d22c659e7ba9c8a57ddd", + "gitBlob": "4505b36b0636d0e8940bfdf7d8d53c3c2b336221" + } +] diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/available-dependencies.json b/harness/experiments/scenario-label-rounding-gates-20260913/available-dependencies.json new file mode 100644 index 00000000..5b74307f --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/available-dependencies.json @@ -0,0 +1,22 @@ +[ + { + "name": "libiced-ee73abd722c72024.rlib", + "bytes": 408214, + "sha256": "d6afba083a249722c44ac10c3cab8f2f7a2665faecbebfbad9706d51df571cf7" + }, + { + "name": "libiced-a4e48b220c5d9711.rlib", + "bytes": 408162, + "sha256": "19db042a126948a970b8494281243d7044df10d857b14ca89a4d876b69f1ce9c" + }, + { + "name": "libunicode_segmentation-85698043f7780858.rlib", + "bytes": 1341698, + "sha256": "5b360e6eb17c58b9c1b00ed8b101ac2f2958d328789b5f45087c2352de2d41a5" + }, + { + "path": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/windows_x86_64_gnullvm-0.52.6/lib/libwindows.0.52.0.a", + "bytes": 3878066, + "sha256": "7d7617eae9e20e8026c39861f3c59906772bc8370996b9de45d12f53e4c78465" + } +] diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/binary.json b/harness/experiments/scenario-label-rounding-gates-20260913/binary.json new file mode 100644 index 00000000..373d36e2 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/binary.json @@ -0,0 +1,5 @@ +{ + "path": "label_tests.exe", + "bytes": 13576192, + "sha256": "52f5a8e31aa681eceb48a65bf9710b2ebc0c37cc496dc8c862d2f3858aeb5484" +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/compile-receipt.json b/harness/experiments/scenario-label-rounding-gates-20260913/compile-receipt.json new file mode 100644 index 00000000..f02444f1 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/compile-receipt.json @@ -0,0 +1,31 @@ +{ + "source": "345f7b3d5b64cef6e75f907c4d47f5b5658f1eba", + "command": "rustc", + "arguments": [ + "--edition=2024", + "--test", + "--crate-name", + "scenario_label_probe", + "-C", + "debuginfo=0", + "-C", + "linker=clang.exe", + "-D", + "warnings", + "--extern", + "iced=C:/Users/User/Documents/Git/ARCADIA-Studio/target/debug/deps/libiced-ee73abd722c72024.rlib", + "--extern", + "unicode_segmentation=C:/Users/User/Documents/Git/ARCADIA-Studio/target/debug/deps/libunicode_segmentation-85698043f7780858.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", + "-o", + "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-label-gates-attempt4-20260913\\label_tests.exe", + "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-layout-ytr83r-20260913/harness/experiments/scenario-label-measurement-20260913/standalone.rs" + ], + "compiler": "rustc 1.98.1 (48a229cea 2026-09-01)\r\nbinary: rustc\r\ncommit-hash: 48a229ceaefd4985c50990b14116b6d856af0985\r\ncommit-date: 2026-09-01\r\nhost: x86_64-pc-windows-gnullvm\r\nrelease: 1.98.1\r\nLLVM version: 22.1.8\r\n", + "startUtc": "2026-09-13T01:47:13.1989703Z", + "endUtc": "2026-09-13T01:47:26.9128813Z", + "exitCode": 0 +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/compile.ps1 b/harness/experiments/scenario-label-rounding-gates-20260913/compile.ps1 new file mode 100644 index 00000000..b54f23a0 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/compile.ps1 @@ -0,0 +1,12 @@ +$ErrorActionPreference = 'Stop' +. 'C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/env.ps1' +$taskArgs = @('--edition=2024', '--test', '--crate-name', 'scenario_label_probe', '-C', 'debuginfo=0', '-C', 'linker=clang.exe', '-D', 'warnings', '--extern', 'iced=C:/Users/User/Documents/Git/ARCADIA-Studio/target/debug/deps/libiced-ee73abd722c72024.rlib', '--extern', 'unicode_segmentation=C:/Users/User/Documents/Git/ARCADIA-Studio/target/debug/deps/libunicode_segmentation-85698043f7780858.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', '-o', (Join-Path $PSScriptRoot 'label_tests.exe'), 'C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-layout-ytr83r-20260913/harness/experiments/scenario-label-measurement-20260913/standalone.rs') +$taskLog=Join-Path $PSScriptRoot 'compile.log' +$taskReceipt=Join-Path $PSScriptRoot 'compile-receipt.json' +if ((Test-Path -LiteralPath $taskLog) -or (Test-Path -LiteralPath $taskReceipt)) { throw 'Refusing to replace compile evidence' } +$taskStart=[DateTime]::UtcNow.ToString('o') +$taskVersion=(& rustc --version --verbose | Out-String) +& rustc @taskArgs 2>&1 | Tee-Object -FilePath $taskLog +$taskExit=$LASTEXITCODE +[ordered]@{source='345f7b3d5b64cef6e75f907c4d47f5b5658f1eba';command='rustc';arguments=$taskArgs;compiler=$taskVersion;startUtc=$taskStart;endUtc=[DateTime]::UtcNow.ToString('o');exitCode=$taskExit} | ConvertTo-Json -Depth 4 | Set-Content -LiteralPath $taskReceipt -Encoding utf8 +exit $taskExit diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/font-version/receipt.json b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/receipt.json new file mode 100644 index 00000000..4505b36b --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/receipt.json @@ -0,0 +1,11 @@ +{ + "passedExactlyOne": true, + "test": "scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session", + "exactSelection": true, + "startedUtc": "2026-09-13T01:47:32.2422906Z", + "sha256": "52F5A8E31AA681ECEB48A65BF9710B2EBC0C37CC496DC8C862D2F3858AEB5484", + "executable": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-label-gates-attempt4-20260913\\label_tests.exe", + "scope": "Actual global font Version invalidation and artifact rejection; no WGPU dynamic cache recovery claim", + "finishedUtc": "2026-09-13T01:47:32.5104808Z", + "exitCode": 0 +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/font-version/selection.log b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/selection.log new file mode 100644 index 00000000..dc985bd8 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/selection.log @@ -0,0 +1,4 @@ +scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session: test + +1 test, 0 benchmarks + diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/font-version/test.log b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/test.log new file mode 100644 index 00000000..bc61e7bf --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/font-version/test.log @@ -0,0 +1,8 @@ + +running 1 test +test scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session ... Valid Iced-Icons load: faces 167->168, font Version Version(0)->Version(1); old label and session rejected +ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 19 filtered out; finished in 0.10s + + diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/inputs-after.json b/harness/experiments/scenario-label-rounding-gates-20260913/inputs-after.json new file mode 100644 index 00000000..32e55bff --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/inputs-after.json @@ -0,0 +1,32 @@ +{ + "source": "345f7b3d5b64cef6e75f907c4d47f5b5658f1eba", + "workspace": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-layout-ytr83r-20260913", + "files": [ + { + "path": "Cargo.lock", + "bytes": 119478, + "sha256": "78b405543fb7b66287457e9476ca1e555838fcdadade114aeab9b76597726787" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label.rs", + "bytes": 15138, + "sha256": "621f7e50372d0162f0643219a41f5e374fc9cf28a3a42aee6b8728e5271ec6c4" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label/tests.rs", + "bytes": 17960, + "sha256": "cdd5510ff45645a9f82272d8868d1862111ebcd054577242e06103443658165b" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label/corridor.rs", + "bytes": 8824, + "sha256": "2da0edfaaa0410056a0c069ba5cca149b5545414dc1c229deb4df3e92a300379" + }, + { + "path": "harness/experiments/scenario-label-measurement-20260913/standalone.rs", + "bytes": 263, + "sha256": "8a52f01004e6749308a55c9f183fbaf66ef2d4ece2bd7a1bb97d39abf5fee797" + } + ], + "unchanged": true +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/inputs-before.json b/harness/experiments/scenario-label-rounding-gates-20260913/inputs-before.json new file mode 100644 index 00000000..f9a5aa7a --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/inputs-before.json @@ -0,0 +1,31 @@ +{ + "source": "345f7b3d5b64cef6e75f907c4d47f5b5658f1eba", + "workspace": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-layout-ytr83r-20260913", + "files": [ + { + "path": "Cargo.lock", + "bytes": 119478, + "sha256": "78b405543fb7b66287457e9476ca1e555838fcdadade114aeab9b76597726787" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label.rs", + "bytes": 15138, + "sha256": "621f7e50372d0162f0643219a41f5e374fc9cf28a3a42aee6b8728e5271ec6c4" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label/tests.rs", + "bytes": 17960, + "sha256": "cdd5510ff45645a9f82272d8868d1862111ebcd054577242e06103443658165b" + }, + { + "path": "crates/oa-desktop/src/behavior/scenario_label/corridor.rs", + "bytes": 8824, + "sha256": "2da0edfaaa0410056a0c069ba5cca149b5545414dc1c229deb4df3e92a300379" + }, + { + "path": "harness/experiments/scenario-label-measurement-20260913/standalone.rs", + "bytes": 263, + "sha256": "8a52f01004e6749308a55c9f183fbaf66ef2d4ece2bd7a1bb97d39abf5fee797" + } + ] +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/list.log b/harness/experiments/scenario-label-rounding-gates-20260913/list.log new file mode 100644 index 00000000..d1d8f407 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/list.log @@ -0,0 +1,22 @@ +scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session: test +scenario_label::tests::adequate_corridor_reveals_full_realistic_names_and_distinguishing_suffixes: test +scenario_label::tests::bounds_translation_rejects_nonfinite_world_positions_and_endpoints: test +scenario_label::tests::empty_and_too_narrow_labels_never_claim_source_visibility: test +scenario_label::tests::finite_scaled_metrics_cannot_escape_as_infinite_world_dimensions: test +scenario_label::tests::grapheme_prefixes_and_zoom_match_actual_paragraph_layout: test +scenario_label::tests::malformed_metrics_and_explicit_experiment_budgets_fail_without_a_cached_candidate: test +scenario_label::tests::normalized_visible_prefix_maps_to_original_bytes_without_claiming_hidden_operation: test +scenario_label::tests::redraws_reuse_resolution_but_width_zoom_and_style_are_dependencies: test +scenario_label::tests::resident_entry_is_remeasured_for_a_fresh_settled_render_session: test +scenario_label::tests::resident_entry_remeasures_after_local_font_epoch_invalidation: test +scenario_label::tests::retained_artifact_rejects_other_zoom_and_render_session_for_every_consumer: test +scenario_label_corridor::tests::caller_defined_self_and_reversed_corridors_keep_their_geometry: test +scenario_label_corridor::tests::complete_padded_band_and_touching_boundaries_are_obstructed: test +scenario_label_corridor::tests::finite_band_cannot_reconstruct_an_infinite_width: test +scenario_label_corridor::tests::invalid_or_overflowing_geometry_never_enters_a_corridor: test +scenario_label_corridor::tests::long_message_does_not_cross_an_intermediate_execution: test +scenario_label_corridor::tests::overlapping_unsorted_blockers_merge_and_widest_gap_wins: test +scenario_label_corridor::tests::reconstructed_width_rounds_inward_at_a_blocker: test +scenario_label_corridor::tests::ties_keep_the_nearest_anchor_then_choose_leftmost: test + +20 tests, 0 benchmarks diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/run-tests.ps1 b/harness/experiments/scenario-label-rounding-gates-20260913/run-tests.ps1 new file mode 100644 index 00000000..0a869222 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/run-tests.ps1 @@ -0,0 +1,21 @@ +$ErrorActionPreference='Stop' +. 'C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/env.ps1' +$taskExe=Join-Path $PSScriptRoot 'label_tests.exe' +$taskHash=(Get-FileHash -LiteralPath $taskExe -Algorithm SHA256).Hash.ToLowerInvariant() +$taskListLog=Join-Path $PSScriptRoot 'list.log' +$taskTestsLog=Join-Path $PSScriptRoot 'tests.log' +if ((Test-Path -LiteralPath $taskListLog) -or (Test-Path -LiteralPath $taskTestsLog)) { throw 'Refusing to overwrite runtime evidence' } +& $taskExe --list 2>&1 | Tee-Object -FilePath $taskListLog +$taskListExit=$LASTEXITCODE +$taskListed=Get-Content -Raw -LiteralPath $taskListLog +$taskCount=[regex]::Matches($taskListed,'(?m)^[^\r\n]+: test\r?$').Count +if ($taskListExit -ne 0 -or $taskCount -ne 20) { throw 'The standalone listing must contain exactly20 tests' } +$taskStart=[DateTime]::UtcNow.ToString('o') +& $taskExe --nocapture 2>&1 | Tee-Object -FilePath $taskTestsLog +$taskExit=$LASTEXITCODE +$taskOutput=Get-Content -Raw -LiteralPath $taskTestsLog +$taskPassed=$taskExit -eq 0 -and $taskOutput -match 'test result: ok\. 19 passed; 0 failed; 1 ignored;' +[ordered]@{source='345f7b3d5b64cef6e75f907c4d47f5b5658f1eba';executable=$taskExe;sha256=$taskHash;listed=$taskCount;startUtc=$taskStart;endUtc=[DateTime]::UtcNow.ToString('o');exitCode=$taskExit;expectedResult=$taskPassed} | ConvertTo-Json | Set-Content -LiteralPath (Join-Path $PSScriptRoot 'tests-receipt.json') -Encoding utf8 +if (-not $taskPassed) { throw 'Standalone normal test gate failed' } +& 'C:/Users/User/Documents/Git/ARCADIA-Studio/.local/scenario-layout-ytr83r-20260913/harness/experiments/scenario-label-measurement-20260913/run-font-version-test.ps1' -TestExecutable $taskExe -ExpectedSha256 $taskHash -RunDirectory (Join-Path $PSScriptRoot 'font-version') -TestName 'scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session' +if ((Get-FileHash -LiteralPath $taskExe -Algorithm SHA256).Hash.ToLowerInvariant() -ne $taskHash) { throw 'Test binary changed during execution' } diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/tests-receipt.json b/harness/experiments/scenario-label-rounding-gates-20260913/tests-receipt.json new file mode 100644 index 00000000..f126d0a0 --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/tests-receipt.json @@ -0,0 +1,10 @@ +{ + "source": "345f7b3d5b64cef6e75f907c4d47f5b5658f1eba", + "executable": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\scenario-label-gates-attempt4-20260913\\label_tests.exe", + "sha256": "52f5a8e31aa681eceb48a65bf9710b2ebc0c37cc496dc8c862d2f3858aeb5484", + "listed": 20, + "startUtc": "2026-09-13T01:47:29.0896388Z", + "endUtc": "2026-09-13T01:47:31.0487221Z", + "exitCode": 0, + "expectedResult": true +} diff --git a/harness/experiments/scenario-label-rounding-gates-20260913/tests.log b/harness/experiments/scenario-label-rounding-gates-20260913/tests.log new file mode 100644 index 00000000..4bba19fb --- /dev/null +++ b/harness/experiments/scenario-label-rounding-gates-20260913/tests.log @@ -0,0 +1,25 @@ + +running 20 tests +test scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session ... ignored, mutates the global font database; run only this exact test in a fresh process +test scenario_label::tests::bounds_translation_rejects_nonfinite_world_positions_and_endpoints ... ok +test scenario_label::tests::adequate_corridor_reveals_full_realistic_names_and_distinguishing_suffixes ... ok +test scenario_label::tests::empty_and_too_narrow_labels_never_claim_source_visibility ... ok +test scenario_label::tests::finite_scaled_metrics_cannot_escape_as_infinite_world_dimensions ... ok +test scenario_label::tests::grapheme_prefixes_and_zoom_match_actual_paragraph_layout ... ok +test scenario_label::tests::malformed_metrics_and_explicit_experiment_budgets_fail_without_a_cached_candidate ... ok +test scenario_label::tests::normalized_visible_prefix_maps_to_original_bytes_without_claiming_hidden_operation ... ok +test scenario_label::tests::redraws_reuse_resolution_but_width_zoom_and_style_are_dependencies ... ok +test scenario_label::tests::resident_entry_is_remeasured_for_a_fresh_settled_render_session ... ok +test scenario_label::tests::resident_entry_remeasures_after_local_font_epoch_invalidation ... ok +test scenario_label::tests::retained_artifact_rejects_other_zoom_and_render_session_for_every_consumer ... ok +test scenario_label_corridor::tests::caller_defined_self_and_reversed_corridors_keep_their_geometry ... ok +test scenario_label_corridor::tests::complete_padded_band_and_touching_boundaries_are_obstructed ... ok +test scenario_label_corridor::tests::finite_band_cannot_reconstruct_an_infinite_width ... ok +test scenario_label_corridor::tests::invalid_or_overflowing_geometry_never_enters_a_corridor ... ok +test scenario_label_corridor::tests::long_message_does_not_cross_an_intermediate_execution ... ok +test scenario_label_corridor::tests::overlapping_unsorted_blockers_merge_and_widest_gap_wins ... ok +test scenario_label_corridor::tests::reconstructed_width_rounds_inward_at_a_blocker ... ok +test scenario_label_corridor::tests::ties_keep_the_nearest_anchor_then_choose_leftmost ... ok + +test result: ok. 19 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 1.81s +