Files
ARCADIA-Studio/harness/text-union-review-20260913/text-union-source-handoff-20260913.md
T

19 KiB

Text workspace and diagnostics union: frozen source handoff

Local-only source candidate; compilation, tests, native behavior, packaging and integration are UNRUN. Parent owns review, compiler lease, integration and publication. No further source work is active.

Immutable inputs and commits

  • Worktree .local/tu, branch codex/text-union-956atf-20260913; clean after commit and again during handoff readback.
  • Base feab2020d8e5b6bfdb59c86ab4aee161617b8b6f (includes reviewed PreviewScrolled correction).
  • Workspace peer 2df7f580aa4bd728a728c83ac10e6ccc956ef069.
  • Diagnostics peer 9fd76aef3ae2810667d3f2b031fc43692fc04c89, published evidence 32368713ef15272c697c7e6388dffc8a29bfae3e; its parent b4b860f2776aa8251306d83ff58362c0359176ef has the same crates/scripts/Cargo inputs as 2df. No later defaults/source8 proposal imported.
  • 74542ae2c1b7af3f4f34efcf6a9774822ba4858d: workspace composition and captured drawer admission (20 files, +5480/-736).
  • 16904398dbddda9c073b3c420807e406086ad2ea: separately reviewable three retained-result assertions (2 files, +20/-3).
  • FINAL 92ff99eb54b75a67c6320cad93d11790413bbd8d: diagnostics/provenance/dependency composition, byte-current References presentation and accepted local-boundary hook (98 files, +35959/-208).

The intermediate first commit deliberately retains three old assertions; gate the coherent final source. Root source, AGENTS, PROJECT_GOAL, native fixtures and package configuration were not edited.

Exact source delta and dependency scope

Source inventory records every base/final Git blob, byte count and SHA256: 107 changed paths, 85 new and 22 modified. Of these, 71 are exact published vendored files; 36 are other files. This is a source delta, not a new admitted compiler input map. SHA256: a415cfeaa7a412bcb897ae779a45d7894efd8f77bed29a154de550b8ddd2f4e4.

Cargo.toml adds only the iced_widget workspace exclusion and crates.io local patch. Cargo.lock removes only iced_widget 0.14.2 registry source and checksum, leaving root resolution/dependencies intact. Desktop Cargo.toml is unchanged (root already had unicode-segmentation). The 71 vendored files, including license, upstream manifest, patch rationale, original manifests, VCS metadata and SVG asset, match 9fd Git blobs byte for byte. Batch cat-file validation checked headers, sizes and each trailing LF. The published upstream modification is the read-only Content::with_editor accessor. Both Windows notice scripts are imported together. .gitattributes preserves exact vendor bytes. CLI change is comment-only; core discovery now derives diagnostics from original reachable bytes before UUID elaboration.

A new build recorder must cover the actual vendored dependency sources, manifests and included assets; the old 581-file root manifest is not sufficient by assumption. Core provenance production also changed, so old oracle/core equivalence must not be inferred from a version label.

Composition and independent-review seams

The editor remains in permanent strip/Find/editor/drawer/status slots with retained sensor and input guard. Root source-editor palette, dynamic IDs, F2/F12, chooser/reference-input restrictions, KeyboardBoundary subscription partition and valid PreviewScrolled early dispatch remain. Root behavior, diagram, forms, context menu and style trees have no base-to-final diff.

Drawer Show/Hide/Resize captures document, source session and drawer visit. Rejection occurs before shared root boundaries. Source commands re-enter existing guarded root dispatch. The real compact Diagram Usages command now starts the root captured source query and existing diagram chooser, rather than the peer placeholder.

Accepted local Text mutations use the existing pending-reveal reconciliation and allocation-before hooks only after their own admission. See explicit hook and positive-test diff, SHA256 26d3d86500dd0276c9e276fe8726da4d28b9f39dbdb082cce5108708a9b86fcb. This is the exact 169-to-92 diff for text_workspace.rs and palette_union.rs; it also contains the annotation-snapshot accessor and debug test cfg changes. Hook call sites: admitted menu open/current dismiss, current Show/Hide, finite changed Resize, admitted ToggleFile, current diagnostic jump and admitted Drawer command. Dispatched commands use App::update; passive reference/preview measurements do not enter the hook. Review whether every accepted-local path should retire allocation/navigation; the positive mounted test explicitly requires this, while stale controls preserve them.

References exact-cache validity is computed once per visible References view and shared by stale summary and row enabled state. Early Choose also checks exact current source bytes before any source-interaction boundary. The new displayed-row negative changes either active or inactive bytes without advancing SnapshotKey, checks actual shaped Stale feedback, then proves a captured choice preserves pending reveal and other intent. Ordinary Workspace edits advance the key; this is an adversarial identity test, not a claimed observed runtime corruption.

Raw IncludesLoaded admission compares current entry and all retained file bytes before discovery metadata or diagnostic publication. Diagnostic decorations retain owned current-frame tooltip paragraphs for the deferred renderer. Chooser/modal availability suppresses diagnostic actions/hover details without removing current marks. Publication during rename leaves a real mounted preview report passive.

Retention contract and preserved tests

Primary contract: 2df7f580:harness/text-workspace-interaction-contract-20260912.md, especially retained results versus navigation permission and the permanent five-slot lifecycle. Independent source review: retention review, SHA256 22aaf828c514e7d58e6f7b0b3132ed43eefb736e4bde78a1529851e6cb89fc0b. Parent accepted the following separate 169 assertions under that contract:

  • scoped_escape_retains_references_then_closes_them_without_losing_effective_selection: second Escape hides the drawer, retains the exact result Arc and notice; Word/Line selection, replacement, Undo and exact source/model/history checks remain.
  • combined_modal_completion_releases_worker_without_navigation_or_model_changes: exact current result Arc can finish behind modal; worker release and absence of navigation/source/model effects remain.
  • combined_reference_chooser_blocks_navigation_and_completion_precedes_reconciliation: same retained-data rule, preserving chooser identity, early completion and absence of navigation effects.

All root 16 selection names remain. Root selection helper and four focus-fixture bytes are unchanged. Four accidentally duplicated peer departure bodies were removed from the parent tests.rs because byte-identical bodies already exist under root tests/departure_selection.rs; their hashes are in the inventory. Root child-module registration/paths are retained. No test has been counted twice to inflate the expected listing.

Authored union evaluators (all UNRUN)

The inventory gives exact source path/name pairs. Seven union-specific cases exercise:

  1. Stale captured/mounted drawer controls preserve pending navigation, source/evidence, camera and allocation intent.
  2. Current Show/mounted Resize/Hide retire pending destination and advance allocation epoch while remaining live.
  3. Compact Diagram Usages follows actual query completion into the existing captured chooser.
  4. Independently wrong document/session/visit rejects each drawer action.
  5. Actual chooser suppresses diagnostic action and mounted hover until closed; old publication remains rejected and a new target works.
  6. Diagnostic publication during modal rename preserves actual fractional preview report and rounded painted coordinate without interaction/allocation changes.
  7. Already displayed References with same key but changed active/inactive bytes shows Stale and rejects old Choose before boundaries.

Mounted annotation bridge uses the actual App snapshot/availability/raw clock and existing CPU graphics Editor/Recorder evaluator, copying Content for the renderer type. It does not claim a native window or the complete production sensor stack. Some mounted fixtures are debug-only, consistently with existing evaluator support.

Lexical source inventory: 91 added declarations and 5 removed, net +86 across core/desktop; core +2, desktop +89/-5 (net +84). This is NOT an actual Cargo listing. Three imported manual ignored tests are new: both source_annotations anchor witnesses and annotation_projection_cost_distributions. The seven authored union cases have no ignore marker. Existing manual exceptions remain. Future admission must derive exact runtime membership and ignores from the actual binary/configuration.

Five removed baseline names are explicitly replaced, not silently dropped: the three source_symbols close/completion/Escape tests become retention-contract cases; the two old source-header layout/scroll tests become permanent five-slot and retained editor-scroll tests. Their exact old/new names are listed in the inventory and appendix below.

Verification and remaining acceptance

Completed source-only checks: standalone rustfmt (edition 2024, skip_children=true) for owned changed Rust paths; git diff --check HEAD -- . ':!crates/vendor/iced_widget/**'; exact 71-file vendor comparison; protected-path/root test-byte checks; clean Git status after final commit. Vendor formatting is intentionally untouched; upstream doc-comment whitespace is retained. No Cargo, rustc, tests, build, GUI, native, Gitea publication or integration was invoked for this union.

Parent/fresh critic should review 92ff and the hook/retention seams before issuing a compiler lease. Required next evidence includes actual full test listing/input capture, focused union/selection/rename/diagnostic/geometry tests, affected core provenance and notice tests, full/strict gates, then native compact layout, selection/edit/Undo, chooser/diagnostic hover, held-pointer replacement and Details/Preview continuation. Package notices and artifact pinning must reflect the local Iced dependency. Existing peer/native receipts remain evidence for their own pins only.

Exact added/removed declaration names by file

crates/oa-core/tests/source_files.rs

  • Added discovery_diagnoses_legacy_semantics_before_source_rewrite
  • Added discovery_diagnostics_keep_raw_no_uuid_spans

crates/oa-desktop/src/app.rs

  • Added includes_loaded_diagnostics_use_raw_newly_discovered_bytes
  • Added includes_loaded_diagnostics_use_retained_overlay_and_ignore_old_version
  • Added includes_loaded_rejects_mismatched_retained_bytes_before_publication
  • Added includes_loaded_requires_each_inactive_detached_overlay

crates/oa-desktop/src/app/source_rename/navigation_union_tests/palette_union.rs

  • Added compact_diagram_usages_command_uses_captured_query_and_existing_chooser
  • Added current_compact_drawer_controls_and_mounted_resize_remain_live
  • Added stale_compact_drawer_controls_preserve_current_navigation_and_evidence

crates/oa-desktop/src/app/source_rename/preview_scroll_tests.rs

  • Added diagnostic_publication_during_rename_keeps_actual_preview_report_passive

crates/oa-desktop/src/app/source_symbols/tests.rs

  • Added close_during_busy_retains_hidden_completion_without_reopening_or_navigation
  • Added completion_retains_current_display_but_rejects_navigation_after_context_changes
  • Added delayed_definition_after_hide_or_tab_change_retains_data_without_reopening_or_focus
  • Added escape_hides_results_and_cancels_navigation_but_retains_latest_display
  • Added hidden_completion_checks_exact_bytes_even_when_snapshot_key_was_not_advanced
  • Added matching_old_worker_cannot_replace_a_newer_display_owner
  • Added popup_escape_has_no_duplicate_bridge_and_dismissal_preserves_underlying_find_and_drawer
  • Added retained_choices_cannot_replay_after_hide_or_references_problems_references
  • Added same_key_changed_bytes_mark_retained_rows_stale_before_choice_boundaries
  • Added same_worker_with_changed_request_envelope_cannot_publish_or_navigate
  • Removed close_during_busy_hides_panel_and_completion_does_not_reopen_it
  • Removed completion_rejects_file_edit_session_cursor_interaction_and_raw_input_changes
  • Removed escape_dismisses_results_and_cancels_busy_navigation_without_changing_sources

crates/oa-desktop/src/app/text_workspace/lifecycle_tests.rs

  • Added canceled_or_failed_open_that_installs_nothing_retains_current_presentation_and_diagnostics
  • Added invalid_repair_open_clears_prior_presentation_and_publishes_current_problems_preserving_worker
  • Added saved_new_destination_does_not_revalidate_already_stale_warning_locations
  • Added saved_new_destination_republishes_current_warning_and_refuses_old_primary_and_related

crates/oa-desktop/src/app/text_workspace/tests.rs

  • Added actual_chooser_blocks_diagnostic_actions_and_mounted_hover_until_closed
  • Added annotation_snapshot_requires_exact_current_bytes_and_publication
  • Added annotation_snapshot_tracks_real_file_round_trips_without_changing_model
  • Added current_diagnostic_target_navigates_but_changed_source_or_clear_refuses_it
  • Added diagnostic_span_must_be_loaded_ordered_and_utf8_exact
  • Added disabled_entry_cannot_become_a_new_action_under_the_same_menu_token
  • Added document_reset_preserves_popup_token_sequence_and_drops_old_menu_authority
  • Added drawer_document_session_and_visit_guards_are_independently_required
  • Added enabled_entry_is_readmitted_at_dispatch_and_blocked_by_busy
  • Added equal_diagnostic_republication_invalidates_primary_and_related_targets
  • Added menu_own_open_invalidation_does_not_stale_find_and_invoke_is_once
  • Added menu_source_caret_document_path_and_interaction_changes_refuse_stale_find
  • Added old_dismiss_and_invoke_do_not_consume_a_newer_menu
  • Added only_valid_explicit_group_and_resize_intent_cancel_pending_navigation
  • Added queued_group_toggle_cannot_mutate_a_reopened_or_rotated_visit
  • Added queued_toolbar_request_cannot_retarget_after_source_change
  • Added reference_groups_and_scroll_survive_tabs_and_reject_old_visits_and_queries
  • Added reset_removes_ui_and_publication_authority_and_resize_rejects_nan
  • Added retained_primary_and_related_targets_cannot_replay_after_hide_or_problems_references_problems
  • Added source_and_property_drafts_keep_find_and_text_undo_without_model_application
  • Added stale_retained_group_can_expand_without_navigating_or_applying_drafts

crates/oa-desktop/src/diagnostic_input/tests.rs

  • Added already_captured_terminal_cancels_child_without_activation_or_lingering_press
  • Added captured_terminal_cancellation_preserves_same_publication_focusable_child_state
  • Added current_primary_and_related_mouse_clicks_survive_same_publication_diff
  • Added current_touch_activates_primary_and_related_and_cancel_does_not_activate
  • Added fresh_mouse_press_after_missing_stale_release_can_activate_current_row
  • Added hidden_zero_height_scroller_delivers_cancelled_mouse_and_touch_terminals_to_guard
  • Added hidden_zero_size_list_consumes_release_outside_old_bounds_once
  • Added missed_press_is_ignored_and_dragging_release_outside_does_not_activate
  • Added negative_control_iced_button_retargets_a_press_after_plain_tree_diff
  • Added negative_control_plain_focusable_row_migrates_activation_to_replacement
  • Added negative_control_removing_unguarded_rows_exposes_background_release
  • Added outer_scroll_offset_survives_same_and_changed_publications
  • Added replaced_primary_and_related_rows_consume_stale_release_then_accept_new_click
  • Added replaced_touch_consumes_lift_or_cancel_even_when_hidden
  • Added same_publication_missing_terminal_recovers_on_fresh_mouse_or_touch_down
  • Added same_publication_new_visit_cancels_armed_rows_without_a_hidden_tree_frame
  • Added same_publication_preserves_focus_but_replacement_never_inherits_activation
  • Added stale_release_does_not_bubble_to_real_background_controls
  • Added stale_touch_release_does_not_disarm_a_new_current_gesture
  • Added unrelated_finger_or_mouse_release_cannot_complete_another_fingers_press

crates/oa-desktop/src/source_annotations/anchor_tests.rs

  • Added final_multi_glyph_cluster_anchor_uses_logical_trailing_advance_edge
  • Added mixed_direction_omitted_separator_has_one_logical_predecessor_anchor

crates/oa-desktop/src/source_annotations/layout_tests.rs

  • Added combining_cjk_and_bidi_ranges_cover_actual_clusters_without_neighbor_aliases
  • Added empty_eof_and_separator_ranges_follow_real_paragraph_ownership
  • Added mismatched_affected_source_and_bottom_line_without_visible_underline_have_no_bands
  • Added omitted_wrap_space_has_one_preceding_run_anchor_and_none_when_that_run_is_clipped_out
  • Added repeated_alias_marks_only_second_actual_glyph_sequence_and_blank_space_misses
  • Added wrapped_scrolled_multiline_range_uses_actual_visible_runs_and_effective_clip

crates/oa-desktop/src/source_annotations/performance_tests.rs

  • Added annotation_projection_cost_distributions

crates/oa-desktop/src/source_annotations/tests.rs

  • Added empty_source_has_real_zero_width_marker
  • Added exact_path_and_utf8_range_admission_keep_valid_neighbor
  • Added half_open_next_line_excluded_separator_only_and_empty_line_anchored
  • Added mixed_endings_use_actual_paragraphs_and_preserve_eof

crates/oa-desktop/src/source_annotations/widget/tests.rs

  • Added actual_word_and_line_selection_then_typing_survive_hover_and_publication_changes
  • Added deferred_paragraph_renderer_rejects_the_old_local_lifetime
  • Added deferred_tooltip_text_survives_draw_and_only_current_authority_is_retained
  • Added disabled_hover_and_unavailable_cursor_hide_details_without_removing_current_marks
  • Added measured_footer_and_omitted_count_fit_actual_shaped_widths_and_ancestor_clip
  • Added pointer_motion_between_bands_blank_and_leave_is_passive_and_always_redraws
  • Added stationary_pointer_replacement_absence_and_path_switch_use_only_current_index

crates/oa-desktop/src/views.rs

  • Removed source_header_keeps_editor_bounds_stable_through_lint_and_find_rebuilds
  • Removed source_header_remains_scrollable_and_preserves_offset_across_diagnostic_refresh

crates/oa-desktop/src/views/source_symbols.rs

  • Added suffixes_distinguish_nested_duplicate_basenames_without_changing_unicode

crates/oa-desktop/src/views/text_workspace.rs

  • Added drawer_clamps_to_actual_center_allocation_including_oversize_requests
  • Added five_slots_keep_editor_state_and_selection_through_explicit_and_passive_changes
  • Added highlighted_sensor_editor_retains_real_scrolled_buffer_across_panel_rebuilds
  • Added keyboard_resize_uses_effective_height_and_only_exact_open_drawer_shortcut

crates/oa-desktop/src/views/text_workspace/summary_visibility_tests.rs

  • Added all_reference_exceptions_fit_allocated_width_with_wide_alias_and_large_counts