10 KiB
Text workspace: verified Windows contribution
The Text workspace now keeps editing space available, puts References/Problems/Status in a compact supporting drawer, and retains source selection through Find, Back and file return. Successive Escapes dismiss Actions, Find and the drawer separately. This is the bounded contribution for issue 13, based on cbc49a7802fb1bba0dd284fd904c700a0703ae70. Combined integration and packaging belong to issue 27; this report does not accept that union or the full OA/SA release.
Published code/evidence snapshot: 2df7f580aa4bd728a728c83ac10e6ccc956ef069 on codex/text-workspace-9e8r6t. All 526 committed source inputs match the tested capture. All 617 manifest/payload files match Git tree 06c902ae05241729c3db7fe7b05be5df054d9506; 80 raw logs excluded by the default ignore rule were explicitly included before publication. Direct Gitea readback on September 13 at 05:02:47 UTC matched the exact published App/focus source, report, input ZIP, native manifest and full-test log. Later publication-record documentation does not change that tested code snapshot.
Behavior and design
The interaction contract owns the precise layout, authority and lifecycle rules. Five permanent sibling slots keep the actual sensor/highlighter/editor in place. Supporting information is available on demand; opening Find or changing a drawer does not rebuild editor content. Grouped references retain full paths, query context and scroll. Stale data remains readable but cannot authorize a source jump. Diagnostic and reference actions bind their original publication and drawer visit; mounted input guards consume a release after its pressed row has been replaced or hidden.
Find focus restoration retains the existing ticket and raw-input guards but no longer converts live Word/Line selection through lossy cursor endpoints. Successful navigation departures separately capture the effective selected byte range. The selection rationale and falsifiers explain why these are different operations. A proposed cursor-equality shortcut and the original cursor-only checks were insufficient; actual selected bytes and subsequent replacement distinguish the native failure.
Verification and retained failures
The first native trial found the Find selection failure despite passing compilation and tests. Corrected mounted red/green evidence discriminated that failure. Trial 2 then passed seven native typing probes, compact layout, retained results, representative and Unicode-path rename/Save/model-Undo/Redo transactions, graphical reopen and incomplete-source recovery. Exact saved expectations were authored separately from those UI actions. It exposed the inherited simultaneous Find/drawer Escape behavior; its evidence cannot verify the later correction.
Final attempt 6 captured 526 exact source inputs, ZIP SHA-256 960c2ebeab73af1fbf593268e4dc1687011588da86d808e039a6fd28658ec347. Only app.rs and app/source_symbols/tests.rs differ from trial 2's attempt-5 inputs: the scoped Escape correction and its existing regression expectations. All eight serial Windows gates retained identical inputs:
| Check | Result |
|---|---|
| Escape regressions | 23 passed, including the three updated priority/subscription tests |
| Strict Clippy | All targets passed with warnings denied |
| Test membership | 874 unique tests; all 28 required names and 20 diagnostic Guard tests present |
| Text / selection filters | 30 / 58 passed; these overlap the full suite |
| Full desktop suite | 871 passed, zero failed, three explicitly ignored manual experiments |
| Separate ignored rename timing | One passed; five Confirm App-update samples, median 37.8124 ms |
| Matching GUI | Actual non-fresh Cargo development artifact built successfully |
The independent attempt-6 audit verifies every source member and CRC, exact listed/outcome identities, all receipts/log hashes, serial chronology and raw Cargo artifact identity. The Escape source review checks higher-priority modal routing and actual Captured/Ignored subscription evaluation. CPU-mounted tests are not native GPU or accessibility proof. Timing excludes returned Task execution and native rendering; the other two ignored experiments were not run in this attempt.
Native Escape replay
Trial 3 ran preserved GUI SHA-256 0ee1425174bdc93399f97d926f832b3ece1671bc4cd484d45a2844bdeed08399, 114,171,904 bytes, with a fresh private profile, temporary/current directories, sanitized Windows PATH and the pinned sibling DLL. PID 4288 ran from 2026-09-13 04:44:53.418424 UTC to 04:51:07.980916 UTC. It closed normally with exit 0, empty stdout/stderr, and unchanged executable/DLL. No Save or Apply occurred; both temporary typing probes were undone.
The original trial-3 archive contains 115 payloads / 7,138,817 bytes; manifest SHA-256 07c765910f3d7bda3e298b32f6a12feb578214c61c241b0ac0cebc6c46e28db8. It retains 31 screenshot-state records and 34 original JPEGs, source/gate/launch/closure bindings, the actual recorder and archive helpers, and the final saved-disk check. Existing fixture baselines/expectations are linked to the trial-2 archive rather than duplicated. The independent native audit verifies every archived payload against its original, the external pins and source ZIP, and directly inspects the dismissal/replacement images below.
| Captures | Observed behavior |
|---|---|
| 015–019 | Double-click selects the complete oa_control alias. References opens with one declaration/ten uses; its body is scrolled before opening Find and Actions. |
| 020–022 | First Escape closes only Actions. Second closes only Find, restores the visible selected alias and retains the scrolled results. Third closes the drawer while retaining that selection. |
| 023–024 | Typing oa_control_escape_probe replaces the whole alias; one text Undo restores visible original source and All changes saved. |
| 025–026 | Reopening through Status and returning to References retains the same lower result position. Results are correctly Stale after edit/Undo changed the source revision. |
| 027–031 | Triple-click selects the complete description line. Escape from focused Find closes Find while leaving the drawer and selected line visible. Typing description "escape_line_probe"; replaces that line; Undo restores its original text and saved status. |
The final closed-process comparator passes complete decoded model/identity and all 30 reachable source bytes; its wrapper also verifies all 37 physical representative files against the authored renamed expectation and confirms no oracle mutation. This is a disk assertion, not a live unsaved-model/cursor oracle.
This replay remained 1442×932 outer pixels. Capture 008's text-minimum label is inaccurate: the drag did not resize the window. Captures 009–012 also remained wide, and sizing was canceled. Minimum-size geometry evidence belongs to trial 2's actual 1102×732 outer window, not this replay. Capture 005 is a transitional load request; 006 is the settled model. These labels are historical records, not acceptance assertions.
Build, integration and remaining boundaries
The tested environment is Rust/Cargo 1.98.1, stable-x86_64-pc-windows-gnullvm, one compiler job, locked/offline dependencies and the development profile. Standard reproduction after setting up that documented toolchain:
cargo fmt --all -- --check
cargo clippy --locked --offline -p oa-desktop --all-targets -- -D warnings
cargo test --locked --offline -p oa-desktop --bin arcadia-studio -- --test-threads=1
cargo test --locked --offline -p oa-desktop --bin arcadia-studio app::source_rename::timing_tests::accepted_release1_prepare_commit_sync_and_confirm_timing -- --ignored --nocapture --test-threads=1
cargo build --locked --offline -p oa-desktop --bin arcadia-studio
Run the resulting arcadia-studio.exe beside the required libunwind.dll; the archive's environment and launch receipts identify the tested runtime precisely. Native fixture and launch helpers retain their original local paths and need explicit path adaptation on another host. They are evidence of this execution, not a portable installer. This contribution does not replace the published rename prerelease.
Separable production commit 6a244fb21c6dcb285246201935294b7add7af63b contains only the two-function Find focus correction. Its CBC-only intermediate tree was not separately built: execution evidence belongs to the exact captured Text union above. The separable focus integration review specifies how to port its four mounted tests without importing the entire new Text controller. The broader contribution requires reconciliation with the peer's newer diagram chooser, menu and navigation changes, followed by combined verification. The current diagram-usages adapter is intentionally absent; lexical References does not stand in for it.
Text Undo still uses text-only history and can reset the viewport or retain a post-edit coordinate; exact Undo/Redo cursor, selection and scroll history needs separate work. Screen-reader acceptance, optimized packaging, unperformed native races/exception combinations and full cross-disciplinary OA/SA acceptance remain outside this evidence. Linux/WSL setup, networking, builds and checks remain user-paused.