Rename Details scroll: prepared gates, no execution
Candidate feab2020d8, worktree .local/rs, branch codex/rename-details-scroll-956atf-20260913. This includes the source-reviewed022 fix and the reviewed follow-up that handles validated display reports before shared source/camera/allocation boundaries. Parent357 is 357da24542eaa519c2a01c465be6c7d1acbc8126 (440 production plus AGENTS). Parent owns the compiler lease, integration and native acceptance. All r3 commands below are prepared, UNRUN; do not start them until parent reviews this test-only correction and fresh preparation. AST parsing and source/hash inspection are not executable gate evidence.
There are still581 gate inputs and615 build inputs, with three desktop files changed from357: app.rs, app/source_rename.rs, and app/source_rename/preview_scroll_tests.rs. Expected listing1099 is the actual440 listing1098 plus exactly one named mounted regression. Preview5, rename-test37, navigation-union17 and source-navigation51 are exact retained names in expected.json. Full expectation is1096 passed, zero failed, three preexisting named timing/scale ignores. No ignore may be added to make this pass.
All originals under .local/navigation-palette-gates-20260913 and their original helpers/configs remain unchanged. Output remains .local/rename-scroll-gates-20260913, which already contains preserved bebf evidence. Only the fresh *-feab202 output stems are absent before this run. Runner/admitter/build scripts reject optimized Python before any evidence writes. Use fresh run names after any failed attempt; exclusive receipt writes prevent overwriting history.
Environment and lease
Run from the repository root only after the parent grants the serialized compiler lease and accepts this source/preparation review. The following names are task-local PowerShell variables. No toolchain version override or Cargo dependency update is requested.
$scrollRepo = 'C:/Users/User/Documents/Git/ARCADIA-Studio'
$scrollPython = 'C:/Users/User/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe'
$scrollPrep = "$scrollRepo/.local/rename-scroll-gate-preparation-r3-20260913"
$scrollSource = 'feab2020d8e5b6bfdb59c86ab4aee161617b8b6f'
$env:CARGO_HOME = "$scrollRepo/.local/toolchain/cargo"
$env:RUSTUP_HOME = "$scrollRepo/.local/toolchain/rustup"
$env:CARGO_BUILD_JOBS = '1'
$env:CARGO_TARGET_X86_64_PC_WINDOWS_GNULLVM_LINKER = 'clang.exe'
$env:PATH = "$env:CARGO_HOME/bin;$scrollRepo/.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/bin;$env:PATH"
$env:CARGO_TARGET_DIR = "$scrollRepo/target"
if ($env:PYTHONOPTIMIZE) { throw 'Use unoptimized Python for this gate.' }
Set-Location -LiteralPath $scrollRepo
function Invoke-ScrollPython {
& $scrollPython -B @args
if ($LASTEXITCODE -ne 0) { throw "Scroll gate stopped with exit $LASTEXITCODE" }
}
Revision2: parent explicitly authorized reuse of the existing root target cache for fixed gates after all root compiler gates closed; its native GUI runs from an immutable separate stage. Do not create a second target on this disk. Use the existing root target only under this serialized lease; every run checks its committed inputs and hashes the actual emitted executable. Complete/admit each result immediately before another compile can replace that test executable. Root target outputs are mutable under this authorization; preserve original440 receipts and already preserved GUI/server artifacts. No global environment/config mutation is needed. The GUI builder checks the actual Rust host and tools against the existing Windows gnullvm setup and preserves its own Cargo-reported PE artifact.
Before-fix proof on real357 production
The portable overlay adds only measured bounds, a real WheelScrolled helper and one mounted test to357's existing test file. It contains no PreviewScrolled event or preview_offset field reference; it accepts whichever messages/tasks the original controller returns. It asserts that wheel input moves the preview, actually mounts Details so the preview subtree disappears, returns, then measures the visible offset before any second scroll. Thus the predicted failure is behavioral, not a missing API or a source mutation that disables only the fix. This portable test is distinct from the stronger committed fixed test (which additionally checks callback ownership and stale-report boundaries).
The following worktree and test-only local commit do not exist yet. If .local/rr or the branch already exists, stop and inspect ownership rather than reuse or delete it.
if (Test-Path -LiteralPath "$scrollRepo/.local/rr") { throw 'Red worktree already exists; inspect before reuse.' }
git -c core.longpaths=true worktree add -b codex/rename-scroll-red-proof-956atf-20260913 .local/rr 357da24542eaa519c2a01c465be6c7d1acbc8126
if ($LASTEXITCODE -ne 0) { throw 'Red worktree creation failed' }
Copy-Item -LiteralPath "$scrollPrep/red-preview_scroll_tests.rs" -Destination "$scrollRepo/.local/rr/crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs"
git -C .local/rr diff --check
if ($LASTEXITCODE -ne 0) { throw 'Overlay whitespace check failed' }
git -C .local/rr add crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs
if ($LASTEXITCODE -ne 0) { throw 'Overlay staging failed' }
git -C .local/rr commit -m 'Test-only proof of rename Details scroll loss on357'
if ($LASTEXITCODE -ne 0) { throw 'Overlay commit failed' }
$scrollRedSource = (git -C .local/rr rev-parse HEAD).Trim()
if ($LASTEXITCODE -ne 0) { throw 'Cannot freeze red source' }
& $scrollPython -B "$scrollPrep/run-red.py" $scrollRedSource red357-details focused app::source_rename::tests::preview_scroll_tests::details_remount_preserves_visible_offset_without_controller_assumptions
$scrollRedExit = $LASTEXITCODE
if ($scrollRedExit -ne 101) { throw "Expected test failure101; inspect actual result ($scrollRedExit) before proceeding" }
Exit101 alone does not establish reproduction. Inspect the closed .result.json and .log: unchanged581 committed inputs, exact test-only child of357 and pinned overlay, one actual executable, exact requested --exact command, one test actually run/FAILED (zero passed/ignored;1098 filtered), and the panic must be Details remount must preserve visible offset with returned zero versus previously measured nonzero. Compile errors, no tests, wheel fixture failure, unrelated panics, timeout or missing result are failed evaluations. Record the actual overlay commit, all receipt hashes and this diagnostic; do not publish an expected failure as a passing product test. Keep the red checkout/evidence for review. No red failure has been observed yet.
Fixed executable gates
Parent accepted bebf source review and independently confirmed actual440 native failure as sufficient before-fix evidence. Skip the portable red build in this run to avoid rebuilding357 on the space-constrained disk; its overlay and commands remain prepared and UNRUN. Start the fixed gates directly. The fixed runner refuses another source. The admission helper verifies committed source bytes, no additional scoped inputs,581 exact membership, launcher/config/baseline pins, actual executable hash, exact command and individual outcome names. Focused/full execution must match the admitted listing executable and input manifest. It does not infer passing tests from listing counts.
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource list-feab202 list
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" list-feab202 list
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource preview-feab202 focused preview_scroll_tests
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" preview-feab202 focused list-feab202 preview_scroll_tests
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource rename-feab202 focused app::source_rename::tests::
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" rename-feab202 focused list-feab202 app::source_rename::tests::
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource navigation-feab202 focused navigation_union
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" navigation-feab202 focused list-feab202 navigation_union
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource source-navigation-feab202 focused source_navigation::
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" source-navigation-feab202 focused list-feab202 source_navigation::
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource full-feab202 full
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" full-feab202 full list-feab202
Invoke-ScrollPython "$scrollPrep/run-fixed.py" $scrollSource strict-feab202 clippy
Invoke-ScrollPython "$scrollPrep/admit-fixed.py" strict-feab202 clippy
Invoke-ScrollPython "$scrollPrep/build-gui.py" $scrollSource gui-feab202
Rename37 includes preview5 and the source-rename envelope/navigation cases. Navigation17 adds the allocation/removal cross-module stale-envelope cases. Source-navigation51 includes departure-selection helpers. Overlap is intentional: preview5 gives the first decisive check; broader gates cover the new App dispatch path. Full1099 is warranted once because this change adds an App-level event/early return; it also executes the preserved final16 Find/departure-selection cases and other modal owners. Do not rerun full repeatedly after these receipts pass unless a new change/failure/risk requires it. Strict covers desktop all targets with -D warnings. The GUI build is only oa-desktop --bin arcadia-studio, preserving one Windows x64 artifact under its fresh receipt directory. Its result is not an unchanged dual-artifact440 build receipt.
Evidence reuse and remaining native/package work
The candidate changes only the three named desktop inputs, with all other581-scope and615-scope membership retained. Core/server production, Cargo manifests/lock/config/toolchain, assets and scripts must be compared as exact committed blob sets with440 before reusing those scoped results; record that equality with the original440 receipt hashes. Existing broad581/615 manifests themselves differ, so do not claim their whole input sets are equal or relabel a440 core/server build as built at bebf. An unchanged core/server test/build artifact remains evidence at its original source and scope. Parent owns any composite package manifest with a new GUI and unchanged verified server and must separately bind artifact bytes and packaging configuration; no existing native/package config has been edited here.
Native acceptance remains necessary on the preserved matching GUI: reproduce the same six-token assess_report_union_trial preview, measure/observe nonzero scrolling, Full details then Preview pane, require the same visible offset before new input and unchanged file/hunk/page and replacement. Check explicit page/filter/new-approval reset, stale queued report/reset behavior where practical, Cancel and unchanged completeProject/exactSourceBundle. Reuse prior valid saved rename/Undo/Redo/reopen and Find/selection/navigation evidence only within its documented scope; the new actual native return behavior is not established by that440 evidence. No GUI was launched and no evaluator/server/broker was invoked by this preparation.
Revision3: retained failed run and test-only oracle correction
This directory is a fresh copy with new source/config/helper pins and feab202 stems. The original preparation directory and every bebf9f5 raw/admission file remain unchanged. Original bebf listing actually passed and was admitted (1099); preview5 actually failed4/1 at its initial raw-report-versus-rendered-offset equality, before Details. Those results are not relabeled for this candidate. Failure details are in .local/navigation-preview-scroll-bebf-runtime-20260913.md.
The only source change from bebf is the test oracle: extract the actual finite positive report, require its exact rounded value equals the visible translation, and require the form to retain the exact report before/after Details. Visible before/after offset equality remains exact, with no second scroll or tolerance. The production implementation is unchanged. Iced0.14.2 Scrollable::operate forwards State::translation, whose vertical value is rounded; Viewport::absolute_offset retains the fractional absolute value. The initial failure114.09999 versus114 therefore did not reach the restoration assertion. Fresh listing, preview and remaining gates are required at this source after review. All r3 outputs are absent at preparation.