Files
ARCADIA-Studio/harness/release-navigation-palette-union-20260913.md
T

8.8 KiB

Selective navigation/rename union with the root canvas and palette

Prepared source only, Codex-956atf, root-owned issue 27. The integration worktree is .local/navigation-palette-union-20260913, branch codex/navigation-palette-union-956atf-20260913, based on e44f07565cc7599d5c5a15a6b5599b4f5d105718. No compiler, test, native UI, Gitea write or publication was performed for this candidate. Root's later test-only readonly correction is deliberately left for the integration owner. Peer issue 13 WIP is excluded.

Source provenance

The actual common Git ancestor of root e44 and peer navigation/rename 208 is c6d296a7e22c8f126834a1e217b88551634dd5cf; this preparation therefore imports scoped production deltas instead of replacing the peer tree or merging competing historical records.

  1. cb91525cfd9da7ac15ea1b21b962145c77bb9922: desktop grapheme-aware shortening and direct unicode-segmentation = "1.13.3" dependency. The root lockfile already resolves that version; only oa-desktop's direct dependency list is extended.
  2. 7aa007b0777aa182a99f46e90eeb9b2558f3ad2a..46b4f3c0d0f04050ad6d705051ee0199138e47a2: production crate changes comprising bounded source navigation fdf756e6a41b1879760e45c2c263bd671b562fe3 and the exact-identity/visual-focus correction 46b4f3c. Core changes are the bounded tolerant outline and UUID-header-shape APIs, not an analysis schema or codec import.
  3. 4db1ef543ced916179194272bf0e65dce73cb107..208268c8aa7f6bc3c2bab6a3c0657358f3f7dc23: the already-composed navigation/rename production crates and language RST/HTML paragraphs. This includes the mandatory cbc49a7802fb1bba0dd284fd904c700a0703ae70 preview-scroll correction, mutual modal guards, exact worker slots, captured action envelopes and Details visit rotation; its raw rename commits are not applied twice.
  4. 10bd71197285a4ba894e6ed9398d2c5402ab463d: the exact peer regression correction from expected.project to expected.decoded.project.

The peer's harness/experiments/navigation-rename-union-20260912/README.md, native-acceptance.md, import provenance and final source hashes were read at exact 208. They remain evidence for that source. This candidate does not inherit an execution pass from them.

Composition decisions

The initial navigation patch had conflicts in app.rs, behavior.rs, behavior/topology.rs and views.rs; the rename documentation patch had insertion conflicts in docs/language.{rst,html}. They were resolved as follows:

  • Keep root allocation dispatch and boundary retirement alongside navigation's first-valid-viewport completion. Stale Rename and stale toolbar-owner envelopes reject before either navigation reconciliation or allocation retirement. Passive allocation KeyboardBoundary/window-unfocus notifications preserve the pending navigation destination; actual allocation actions still pass through navigation retirement. New passive worker completions and stamped viewport events are recognized by allocation's boundary adapter.
  • Keep keyboard_owner_enabled separate from busy execution admission, root focus_pending and pan/Space keyboard guards, root diagram focus wrappers and the state picker's stable widget slot. A diagram chooser also suspends allocation input ownership. Peer-only panel Focus actions are not imported as an unrelated prerequisite; their two classification arms are omitted from is_navigation_camera because those variants do not exist in the root UI.
  • Keep typed activations, logical versus clipped correlation, conservative branch termination, no resurrection, lifecycle clearances, palette and guide/backplate/activation/foreground paint order. The behavior renderer gains the label-bounds helper required by actual-Scene navigation, retaining precise-message → activation → label → broad hit priority. Navigation does not create duplicate targets for activation segments.
  • Keep root stronger preview boundaries while adding the peer's exact selected preview outline. Keep state selected-row outlines, lifecycle glyph colors and all palette foundation/readonly fixes.
  • Keep the architecture allocation sensor/container identity while attaching stamped navigation measurements. Retain explicit style::source_editor together with the peer's dynamic editor ID and key binding. Preserve stamped Delete confirmations and the allocation feedback layer.
  • Retain all root numeric, allocation, removal, focus, typed activation and lifecycle modules. No user specification or existing evidence is replaced. The readonly test file remains byte-identical to base e44 for the parent's separate fix.

Correction to the preliminary compatibility audit

The earlier source prediction that port/state-row navigation necessarily leaves an owner placement armed for Delete was incomplete: reveal_diagram_usage ends by calling root refresh_draft, which normalizes both authoring placement fields for those semantic targets. Peer tests already assert this normalization. That predicted defect is not established and no selection rewrite was made. New mounted navigation-to-removal tests protect this actual composition, including confirmation and whole-source/model history.

The parent reviewed the main paint/focus/dispatch composition and identified an additional stale-toolbar seam. The resulting early Scope check and regression are included. This is a source review checkpoint, not runtime acceptance.

New regression membership, all unrun

Three source/App tests under app::source_rename::tests::navigation_union_tests::palette_union:::

  • allocation_keyboard_notification_preserves_navigation_and_first_measurement
  • stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation
  • captured_behavior_toolbar_cannot_retire_a_new_documents_navigation

They use the peer's actual four-file Unicode/CRLF source fixture, independently delivered lookup completions, captured intent and actual App update path. They check accepted snapshot identity, allocation epoch, exact navigation identity and the first valid viewport. No worker Tasks are polled by these source tests.

Two mounted tests under app::diagram_removal_tests::navigation_union:::

  • port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history
  • state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history

They complete the real usage query, mount the production App tree, focus the real canvas with its public widget operation, capture actual Delete and Shift-Delete intents, cancel once, confirm the exact semantic target, compare the result with the core Delete command, and Undo to the full original Project/SourceBundle. They neither seed private canvas focus nor fabricate a removal intent.

The published navigation union's original six App tests and four retained-widget preview-scroll tests remain. The broader navigation_union_tests:: prefix now contains nine tests because of the three nested additions; the new palette_union:: filter alone selects three. The removal union filter selects two. Keep original coverage, source navigation/query/outline, alias-rename/document, diagram usage/reveal, root allocation/removal/focus, style and activation/lifecycle suites in the combined gates.

Performed checks and remaining acceptance

Only source inspection, bounded formatting and whitespace checks are performed here. Rustfmt 1.9.0-stable (48a229ceae 2026-09-01) was invoked with edition 2024 and skip_children=true on the 67 changed/new Rust paths, excluding the root readonly test. The first unqualified formatter attempt did not launch because the executable was absent from this shell PATH; its stale shell exit value is explicitly corrected in the ignored receipt. The second attempt uses the resolved toolchain from the parent's absolute .local/toolchain/env.ps1. Ignored import patches and formatting receipts are retained at .local/navigation-import in this worktree.

No cargo, rustc, test binary or GUI was run. Compile/lint correctness, new test outcomes, timing and actual native usability remain open. The integration owner should run focused new filters first, retain existing grouped/full/strict gates and build the matching executable. The parent's e44 results do not validate this union.

Native acceptance retains the peer's six-file examples/source-project oracle: rename the second @assess_report reference to assess_report_union, exactly six alias-token changes in two files, no disk change before Save, immediate editor selection/typing and text Undo, navigation without model history, complete model Undo/Redo, then Save/reopen equality. Also exercise actual overflowing preview/Details return, modal exclusivity, source syntax selection, canvas focus/Delete after navigation, exact port/state-row and repeated-placement targets, nested activation shoulders/lifecycle boundaries, and passive event timing. Use deterministic race tests for held operations; screenshots alone do not establish ordering. Linux remains deferred.