Files
ARCADIA-Studio/harness/text-workspace-native-initial-20260913.md
T
sorokin.oleg.edu 2df7f580aa Make the Text workspace compact and preserve editing context
Replace the oversized header and reference rail with stable editor slots and a retained supporting drawer. Bind diagnostic, result and menu actions to their original publication and visit; preserve effective selections on navigation and dismiss Actions, Find and the drawer one surface per Escape.

Retain exact Windows source captures, eight final gates (871 desktop passes), independent reviews, native selection/rename/recovery trials and the original failures. All 526 tested inputs and staged evidence were byte-checked before commit. Combined preview integration and packaging remain with issue 27; Linux remains paused.
2026-09-12 22:00:36 -07:00

6.1 KiB

Text workspace: first native trial

This is bounded, failed acceptance of the editing-first interaction contract, owned by Codex-9e8r6t in issue 13. It is not a published build or completed Text usability acceptance. Linux remains user-paused.

Tested identity and prior gates

The isolated codex/text-workspace-9e8r6t worktree was based on cbc49a7802fb1bba0dd284fd904c700a0703ae70, with uncommitted changes captured as 524 raw input files. Attempt 4 input ZIP SHA-256 is e1e566295bbbd6c1d571f7c8908b7344397293496481790f0f8dacab7eba5366. GUI SHA-256 is 666afa8747588bbd4e4d8e4059f443dedda1fc42244d467df8d953085707e796 (114,164,224 bytes). It is a Windows gnullvm development-profile executable, with a pinned sibling libunwind.dll.

Attempt 4 completed strict all-target Clippy, exact 859-test membership including 20 diagnostic guard tests, 26 focused Text tests, full desktop tests (856 passed, zero failed, three intentionally ignored), the separately ignored Confirm timing test, and matching GUI build. All captured inputs remained unchanged. Confirm's measured App update median was 60.04 ms over five samples; this excludes returned Task execution and is not native end-to-end latency. The GUI build finished at 02:37:30 UTC on September 13.

Attempt 3 remains failed evidence: 853 passed, one new property-draft fixture assertion failed, three ignored. The fixture mutated Draft::value while its authoritative raw field remained unchanged. Attempt 4 uses the real Message::Field path and checks raw input, editor and materialized value; no production workaround was introduced for that test error.

Native method and observed results

Computer Use operated the actual native window in fresh private trial trial-text-1, with isolated profile, temporary files and working directory. It opened the representative source project through the native file dialog. The fixture loaded 30 reachable sources, 94 objects, 62 links and one warning. No Save or Apply occurred during the trial.

At the actual 1100 by 700 client minimum (1102 by 732 outer screenshot), the closed drawer leaves 486 px of editor height. The default 180 px drawer leaves 306 px. Three complete navigable reference rows are visible in an expanded file group; the fourth is partly clipped. This counts result rows, not group headers. The wide screenshot was 1442 by 932 outer pixels.

The trial exercised a query from oa_control, a result jump to the confirm allocation, Back to the originating source location, Larger/Smaller controls and Alt+PageDown/Alt+PageUp, and actual source scrolling while results remained visible. Larger made the drawer 240 px, leaving 246 px of editor; Smaller restored 180 px. Resizing did not dirty source. Back's selection semantics were not controlled and are not accepted by this evidence.

Editing marked retained results Stale and disabled their location actions. Undo restored the baseline text and All changes saved; the retained query remained stale because the source revision had changed, as required by snapshot ownership.

Blocking finding: Find Close destroys whole-word selection

  1. Scroll the participants source and double-click oa_contact; the whole alias is visibly selected.
  2. Open Find with Ctrl+F, then click Close. Visible source scroll is retained.
  3. Type oa_contact_probe. Instead of replacing the alias, the editor produces oa_cooa_contact_probentact.
  4. Undo restores the original alias and saved status.
  5. In the direct control, double-click the same alias and type the same text without opening Find. The whole alias is correctly replaced with oa_contact_probe.
  6. Undo again restores the original alias and All changes saved.

Thus the failure is specific to the Find focus-restoration path, not generic double-click or typing automation. Source diagnosis identifies a lossy conversion: Iced's word selection exposes the same interior cursor endpoints through cursor(), while move_to() reconstructs an ordinary range and loses the word-selection kind. Our focus restoration unnecessarily performed this conversion. A correction must restore focus without mutating the live selection while preserving the existing guarded navigation path. Tests comparing cursor endpoints alone cannot detect this failure; they must inspect actual selected text and replacement bytes. The same mechanism predicts a line-selection risk, which was not exercised natively in this trial.

Evidence and limits

The original 28 screenshot-backed states and JPEGs, launch/closure receipts, full saved-state oracle receipt and gate logs are retained in the experiment manifest: 106 original payloads, 8,416,558 bytes, manifest SHA-256 991d54095f5466b717aefde99682e0c7d3136091bdf5525d8f21c0629d3cb0a4. Runtime executables remain preserved locally by identity and are not copied into this evidence archive. Labels are historical observations, not conclusions: 008-text-minimum-initial did not resize the window; 009-text-actual-minimum is the actual minimum. 002-open-dialog and 005-representative-open-request are transitional states. 023-find-close-restored-scrolled-selection preserved scroll but failed selection, as shown by 024-edit-after-find-close. 026 and 027 establish the direct control; 028 records the final Undo.

The GUI launched at 02:38:06 UTC and closed normally through Alt+F4 at 02:55:30 UTC. The owned process returned exit code zero, with empty stdout/stderr and unchanged executable/DLL. The subsequent read-only oracle passed complete saved model/identity and all 30 reachable source bytes; the separate full 37-file physical inventory also matched baseline and was unchanged by verification. This oracle measures disk state, not the live unsaved GUI model.

Find correction and a fresh native trial are required. Rename/Save/Undo/Redo/Reopen, complete repeated cross-file navigation, remaining drawer/menu/repair workflows and exceptional-scope native checks were not completed here. Passing automated gates and partial geometry checks do not override the native defect.