Verify conservative corridor rounding and stale font rejection

This commit is contained in:
2026-09-12 18:49:11 -07:00
parent 345f7b3d5b
commit 2f90cf25d1
16 changed files with 334 additions and 0 deletions
@@ -0,0 +1,3 @@
*.log -text -whitespace
*.json -text whitespace=cr-at-eol
*.ps1 -text whitespace=cr-at-eol
@@ -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.
@@ -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"
}
]
@@ -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"
}
]
@@ -0,0 +1,5 @@
{
"path": "label_tests.exe",
"bytes": 13576192,
"sha256": "52f5a8e31aa681eceb48a65bf9710b2ebc0c37cc496dc8c862d2f3858aeb5484"
}
@@ -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
}
@@ -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
@@ -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
}
@@ -0,0 +1,4 @@
scenario_label::tests::actual_font_load_rejects_retained_label_and_old_session: test
1 test, 0 benchmarks
@@ -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
@@ -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
}
@@ -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"
}
]
}
@@ -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
@@ -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' }
@@ -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
}
@@ -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