Record combined navigation canvas Windows gate checkpoint

This commit is contained in:
2026-09-12 20:57:53 -07:00
parent e1240295bd
commit 64fea0a505
31 changed files with 17887 additions and 5 deletions
+17 -5
View File
@@ -11,12 +11,19 @@ active. The VPN remains untouched.
## Current integrated candidate and evidence
Branch `codex/behavior-authoring-20260910`, published as `codex/release1-956atf`.
Source **e44f07565cc7599d5c5a15a6b5599b4f5d105718** combines direct process/scenario
Current source **e1240295bd114d23d3f67a69e6b38bdb2e25bb0d** combines the canvas
contribution with source/diagram navigation and reviewed alias rename. Its1082-test
listing,17 cross-feature tests,4 mounted preview-scroll tests and strict all-target
Clippy pass on578 unchanged inputs. Combined full-suite, GUI/native and package
acceptance are not established; a shared Find Close selection defect remains an
explicit acceptance concern. [Exact partial evidence](release-navigation-palette-e124029-windows-20260913.md).
Earlier source **e44f07565cc7599d5c5a15a6b5599b4f5d105718** combines direct process/scenario
authoring, allocation interaction, focused deletion and Save/Undo focus fixes,
typed nested activations with lifecycle clipping, and stronger palette roles.
Its custom menu/chooser target cues pass 12 and 14 actual-renderer tests, and
the complete Windows desktop suite passes all 874 tests on 538 unchanged inputs.
Strict Clippy exposed two test-only pixel-iterator lints, corrected by current
Strict Clippy exposed two test-only pixel-iterator lints, corrected by subsequent
source **dd39e1fdc13f04f18975a70736d2ed7f752a6df2** after the required array-reference
coercion correction. All ten affected style tests, strict Clippy and the matching
GUI build pass at dd39. Its bounded native trial closes normally with 41 frames
@@ -55,9 +62,14 @@ failures and corrections. Earlier authoring and allocation checkpoints remain in
## Isolated contributions and material limitations
Analysis/core candidate **847b1caa7e75bb82f6ce5193c45bcfc45973ad1a**, publication
branch `codex/analysis-core-956atf-20260911`, is not integrated into production.
Windows checks pass its 128 KiB-thread lifecycle subprocess, six codec tests,
Analysis/core source checkpoint **2c515cf3bdb3f707beee320be8fed90cffb40757**,
publication branch `codex/analysis-core-956atf-20260911`, is not integrated into
production. It adds source-save decode/equality containment and a private staged
expression parser with15 authored tests; those additions are not yet executed.
Its design and source reviews are preserved in that branch's
`harness/analysis-source8-20260913/`. Public source8 support remains incomplete.
At its earlier **847b1caa7e75bb82f6ce5193c45bcfc45973ad1a** base, Windows checks
pass the128 KiB-thread lifecycle subprocess, six codec tests,
28 analysis tests, 26 numeric tests and strict all-target core Clippy. The driver
is included in the six; these counts are separate scopes.
`DEPTH_128_VALIDATED` remains false. Its existing public checked-save regression
@@ -0,0 +1,32 @@
# Partial combined Windows checkpoint
Source e1240295bd114d23d3f67a69e6b38bdb2e25bb0d, Windows gnullvm,
Rust 1.98.1, jobs1. All 578 captured committed inputs remained unchanged.
The original659b7a6 listing compile failed with E0583 for two nested test-module
paths; it ran no tests. The source correction adds explicit paths only.
Corrected e124 lists 1082 actual tests. Exact 17 cross-feature navigation tests
and four mounted preview-scroll tests pass, with no failures or ignored cases,
using the same captured executable. Retained module memberships are verified
by the listing admission receipt. Strict all-target Clippy actual exit: 0.
Read its preserved log for the actual outcome; no full-suite or GUI/native pass
is asserted by this checkpoint.
The first local admission invocation rejected its own substring-based module
count: `context_menu` matched 15 names, including three tests outside that module.
The corrected helper anchors retained suites to module prefixes, while the two
cross-module sets retain their independently fixed exact names. It also admits
both distinct 32-test allocation modules. No test was removed or expected module
count reduced. The original helper remains beside the correction. The original
admission invocation produced an assertion in tool output, not an admission
receipt; no missing result file is manufactured here.
Source reviews are scoped to their stated commits and cannot replace runtime
checks. The first review missed Rust's inherited path resolution; that failed
compile and subsequent explicit-path source review remain part of the record.
Full intended combined acceptance also retains the shared Find Close word
selection finding from Gitea issue13; its correction is a separate contribution.
This archive omits the large executable and dependency cache. Their identities
are recorded in actual receipts. Commands and all test/build inputs are preserved
by Git source pins and manifests. Linux remains deferred by user instruction.
@@ -0,0 +1,4 @@
Checking oa-core v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-core)
Checking oa-server v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-server)
Checking oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
Finished `dev` profile [unoptimized] target(s) in 11m 33s
@@ -0,0 +1,30 @@
{
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"head_after": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"start": "2026-09-13T03:38:16.982553+00:00",
"end": "2026-09-13T03:49:51.536122+00:00",
"exit": 0,
"command": [
"cargo",
"clippy",
"--locked",
"-p",
"oa-desktop",
"--all-targets",
"--",
"-D",
"warnings"
],
"inputs": "clippy-e124029.inputs.json",
"changed_inputs": [],
"artifacts": [],
"environment": {
"CARGO_TARGET_DIR": null,
"CARGO_BUILD_JOBS": "1",
"CARGO_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
"RUSTUP_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup"
},
"listing_members": [],
"listing_count": 0,
"listing_scope": "Names emitted by this actual Cargo test listing; focused/full runtime results have their own receipts."
}
@@ -0,0 +1,36 @@
{
"utc": "2026-09-13T03:33:13.139579+00:00",
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"mode": "focused",
"result_sha256": "734cf663e70af4230b076edb46a0e22ff05e497b6dd852d8e375137a36aa645f",
"log_sha256": "288e8ee230ebae709f71ba4a86a0ceb6e63fe16ceee5eff72f27d0a128b6e635",
"inputs_sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87",
"required_names_sha256": "e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a",
"verified_inputs": 578,
"artifact": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-ac73ce8f77f371eb.exe",
"bytes": 150072832,
"sha256": "d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e"
},
"groups": {
"navigation_union": [
"app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture",
"app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works",
"app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history",
"app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history",
"app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive",
"app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement",
"app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin",
"app::source_rename::tests::navigation_union_tests::palette_union::allocation_keyboard_notification_preserves_navigation_and_first_measurement",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_behavior_toolbar_cannot_retire_a_new_documents_navigation",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_chooser_context_and_every_token_variant_are_inert",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_source_query_and_find_close_preserve_the_new_destination",
"app::source_rename::tests::navigation_union_tests::palette_union::current_chooser_open_and_close_keep_their_boundary_and_worker_semantics",
"app::source_rename::tests::navigation_union_tests::palette_union::current_source_query_and_checked_find_close_remain_live",
"app::source_rename::tests::navigation_union_tests::palette_union::stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation",
"app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval",
"app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history",
"app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged"
]
}
}
@@ -0,0 +1,24 @@
Finished `test` profile [unoptimized] target(s) in 6.96s
Running unittests src\main.rs (target\debug\deps\arcadia_studio-ac73ce8f77f371eb.exe)
running 17 tests
test app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture ... ok
test app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works ... ok
test app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history ... ok
test app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history ... ok
test app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive ... ok
test app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement ... ok
test app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::allocation_keyboard_notification_preserves_navigation_and_first_measurement ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::captured_behavior_toolbar_cannot_retire_a_new_documents_navigation ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::captured_old_chooser_context_and_every_token_variant_are_inert ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::captured_old_source_query_and_find_close_preserve_the_new_destination ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::current_chooser_open_and_close_keep_their_boundary_and_worker_semantics ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::current_source_query_and_checked_find_close_remain_live ... ok
test app::source_rename::tests::navigation_union_tests::palette_union::stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation ... ok
test app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval ... ok
test app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history ... ok
test app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged ... ok
test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 1065 filtered out; finished in 11.78s
@@ -0,0 +1,37 @@
{
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"head_after": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"start": "2026-09-13T03:31:36.862879+00:00",
"end": "2026-09-13T03:31:58.790394+00:00",
"exit": 0,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"navigation_union",
"--",
"--test-threads=1"
],
"inputs": "focused-nav-e124029.inputs.json",
"changed_inputs": [],
"artifacts": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-ac73ce8f77f371eb.exe",
"bytes": 150072832,
"sha256": "d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e"
}
],
"environment": {
"CARGO_TARGET_DIR": null,
"CARGO_BUILD_JOBS": "1",
"CARGO_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
"RUSTUP_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup"
},
"listing_members": [],
"listing_count": 0,
"listing_scope": "Names emitted by this actual Cargo test listing; focused/full runtime results have their own receipts."
}
@@ -0,0 +1,23 @@
{
"utc": "2026-09-13T03:34:24.612060+00:00",
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"mode": "focused",
"result_sha256": "f1eadc08fd9104f480105c1e23a7b78e2f21dbb631ba37d0a63d3d01e658411d",
"log_sha256": "b97a61c9479b18cd25a8d113040113deaaab35afd80b72459ae3b143a0c80575",
"inputs_sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87",
"required_names_sha256": "e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a",
"verified_inputs": 578,
"artifact": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-ac73ce8f77f371eb.exe",
"bytes": 150072832,
"sha256": "d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e"
},
"groups": {
"preview_scroll_tests": [
"app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination",
"app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll",
"app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not",
"app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations"
]
}
}
@@ -0,0 +1,11 @@
Finished `test` profile [unoptimized] target(s) in 5.62s
Running unittests src\main.rs (target\debug\deps\arcadia_studio-ac73ce8f77f371eb.exe)
running 4 tests
test app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination ... ok
test app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll ... ok
test app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not ... ok
test app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations ... ok
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 1078 filtered out; finished in 7.64s
@@ -0,0 +1,37 @@
{
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"head_after": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"start": "2026-09-13T03:33:22.415155+00:00",
"end": "2026-09-13T03:33:36.648514+00:00",
"exit": 0,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"preview_scroll_tests",
"--",
"--test-threads=1"
],
"inputs": "focused-scroll-e124029.inputs.json",
"changed_inputs": [],
"artifacts": [
{
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-ac73ce8f77f371eb.exe",
"bytes": 150072832,
"sha256": "d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e"
}
],
"environment": {
"CARGO_TARGET_DIR": null,
"CARGO_BUILD_JOBS": "1",
"CARGO_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
"RUSTUP_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup"
},
"listing_members": [],
"listing_count": 0,
"listing_scope": "Names emitted by this actual Cargo test listing; focused/full runtime results have their own receipts."
}
@@ -0,0 +1,23 @@
Compiling oa-core v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-core)
Compiling oa-server v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-server)
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
error[E0583]: file not found for module `navigation_union`
--> crates\oa-desktop\src\app\allocation_drag_tests.rs:11:1
|
11 | mod navigation_union;
| ^^^^^^^^^^^^^^^^^^^^^
|
= help: to create the module `navigation_union`, create file "crates\oa-desktop\src\app\navigation_union.rs" or "crates\oa-desktop\src\app\navigation_union\mod.rs"
= note: if there is a `mod navigation_union` elsewhere in the crate already, import it with `use crate::...` instead
error[E0583]: file not found for module `palette_union`
--> crates\oa-desktop\src\app\source_rename\navigation_union_tests.rs:7:1
|
7 | mod palette_union;
| ^^^^^^^^^^^^^^^^^^
|
= help: to create the module `palette_union`, create file "crates\oa-desktop\src\app\source_rename\palette_union.rs" or "crates\oa-desktop\src\app\source_rename\palette_union\mod.rs"
= note: if there is a `mod palette_union` elsewhere in the crate already, import it with `use crate::...` instead
For more information about this error, try `rustc --explain E0583`.
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 2 previous errors
@@ -0,0 +1,30 @@
{
"source": "659b7a655a33e71e00b8d86a2674bcbd631681d2",
"head_after": "659b7a655a33e71e00b8d86a2674bcbd631681d2",
"start": "2026-09-13T02:50:17.119792+00:00",
"end": "2026-09-13T03:03:08.412772+00:00",
"exit": 101,
"command": [
"cargo",
"test",
"--locked",
"-p",
"oa-desktop",
"--bin",
"arcadia-studio",
"--",
"--list"
],
"inputs": "list-659b7a6.inputs.json",
"changed_inputs": [],
"artifacts": [],
"environment": {
"CARGO_TARGET_DIR": null,
"CARGO_BUILD_JOBS": "1",
"CARGO_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\cargo",
"RUSTUP_HOME": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\toolchain\\rustup"
},
"listing_members": [],
"listing_count": 0,
"listing_scope": "Names emitted by this actual Cargo test listing; focused/full runtime results have their own receipts."
}
@@ -0,0 +1,226 @@
{
"utc": "2026-09-13T03:31:09.589335+00:00",
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"mode": "list",
"result_sha256": "f7fbb70f7984cd8adb089c0ad749d8240ec92f363679205a2d1adf805a15c2a6",
"log_sha256": "8dbd49a9c36a6eff682049e6a3a919666e75e4e312a53d4c1ff60b82e46b8404",
"inputs_sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87",
"required_names_sha256": "e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a",
"verified_inputs": 578,
"artifact": {
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\target\\debug\\deps\\arcadia_studio-ac73ce8f77f371eb.exe",
"bytes": 150072832,
"sha256": "d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e"
},
"groups": {
"navigation_union": [
"app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture",
"app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works",
"app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history",
"app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history",
"app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive",
"app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement",
"app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin",
"app::source_rename::tests::navigation_union_tests::palette_union::allocation_keyboard_notification_preserves_navigation_and_first_measurement",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_behavior_toolbar_cannot_retire_a_new_documents_navigation",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_chooser_context_and_every_token_variant_are_inert",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_source_query_and_find_close_preserve_the_new_destination",
"app::source_rename::tests::navigation_union_tests::palette_union::current_chooser_open_and_close_keep_their_boundary_and_worker_semantics",
"app::source_rename::tests::navigation_union_tests::palette_union::current_source_query_and_checked_find_close_remain_live",
"app::source_rename::tests::navigation_union_tests::palette_union::stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation",
"app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval",
"app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history",
"app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged"
],
"preview_scroll_tests": [
"app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination",
"app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll",
"app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not",
"app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations"
],
"behavior::scenario_activation::": [
"behavior::scenario_activation::tests::a_fragment_cannot_make_crossed_calls_an_unambiguous_caller_execution",
"behavior::scenario_activation::tests::activation_shoulders_under_label_backplates_select_their_call",
"behavior::scenario_activation::tests::actual_canvas_pointer_selects_each_exposed_shoulder_under_zoom_and_pan",
"behavior::scenario_activation::tests::alternative_and_parallel_operand_local_calls_do_not_nest_from_screen_order",
"behavior::scenario_activation::tests::an_inactive_self_call_has_no_fabricated_parent_and_three_nested_calls_expose_three_columns",
"behavior::scenario_activation::tests::call_uuid_order_does_not_choose_activation_columns_or_message_anchors",
"behavior::scenario_activation::tests::inherited_execution_anchors_a_self_call_inside_an_operand_before_returning_after_the_fragment",
"behavior::scenario_activation::tests::long_message_backplates_do_not_erase_selected_activation_border_pixels",
"behavior::scenario_activation::tests::missing_reply_is_a_short_explicit_open_span_and_an_uncorrelated_reply_closes_nothing",
"behavior::scenario_activation::tests::nested_calls_expose_both_bars_and_end_at_their_exact_replies_in_both_directions",
"behavior::scenario_activation::tests::nested_correlations_returning_in_alternative_operands_remain_nested_before_the_fragment",
"behavior::scenario_activation::tests::reentrant_call_uses_the_other_receiver_without_inventing_a_caller_execution",
"behavior::scenario_activation::tests::self_call_receives_at_lower_loop_end_and_self_reply_returns_to_the_parent",
"behavior::scenario_activation::tests::sequential_calls_reuse_column_and_crossed_replies_keep_their_correlations"
],
"behavior::scenario_lifecycle::": [
"behavior::scenario_lifecycle::render::tests::birth_label_clip_keeps_padded_world_bounds_at_each_scene_scale",
"behavior::scenario_lifecycle::render::tests::birth_label_clip_preserves_parent_viewport_bounds",
"behavior::scenario_lifecycle::render::tests::box_text_clip_intersects_parent_viewport_and_rejects_empty_interiors",
"behavior::scenario_lifecycle::render::tests::panned_header_and_create_clips_use_screen_translation_and_actual_viewport",
"behavior::scenario_lifecycle::render::tests::real_scene_birth_death_markers_align_endpoints_and_win_selection_without_mutating_source",
"behavior::scenario_lifecycle::render::tests::real_scene_branch_delete_clips_only_its_activation_and_keeps_unanswered_call_visible",
"behavior::scenario_lifecycle::render::tests::real_scene_conditional_repeated_and_parallel_scopes_do_not_claim_definite_continuation",
"behavior::scenario_lifecycle::render::tests::real_scene_empty_and_create_only_use_visible_root_extents_not_insertion_bounds",
"behavior::scenario_lifecycle::render::tests::real_scene_lifecycle_edit_undo_redo_restores_exact_source_and_changed_geometry",
"behavior::scenario_lifecycle::render::tests::real_scene_long_header_title_and_detail_keep_names_and_have_bounded_clips",
"behavior::scenario_lifecycle::render::tests::real_scene_minimum_zoom_marker_halos_do_not_steal_adjacent_capsule_or_header_hits",
"behavior::scenario_lifecycle::render::tests::real_scene_minimum_zoom_near_ordinary_message_wins_over_lifecycle_halos",
"behavior::scenario_lifecycle::render::tests::real_scene_panned_zoomed_program_keeps_header_birth_and_death_hit_identity",
"behavior::scenario_lifecycle::render::tests::real_scene_self_delete_caption_clears_the_preceding_action_box",
"behavior::scenario_lifecycle::render::tests::real_scene_self_lifecycle_elbows_end_on_recorded_marker_rows",
"behavior::scenario_lifecycle::render::tests::real_scene_unassigned_lanes_and_explicit_incomplete_receiver_keep_real_marker_identity",
"behavior::scenario_lifecycle::render::tests::real_scene_wide_latin_header_exceeds_old_character_budget",
"behavior::scenario_lifecycle::render::tests::union_tests::admitted_calls_without_sender_polylines_still_have_logical_correlation_metadata",
"behavior::scenario_lifecycle::render::tests::union_tests::admitted_death_and_incomplete_later_reply_do_not_fabricate_an_answered_execution",
"behavior::scenario_lifecycle::render::tests::union_tests::admitted_delayed_create_nested_calls_replies_delete_share_one_geometry_pipeline",
"behavior::scenario_lifecycle::render::tests::union_tests::admitted_self_lifecycle_and_self_call_keep_distinct_send_receive_rows",
"behavior::scenario_lifecycle::render::tests::union_tests::admitted_unresolved_operand_keeps_unanswered_cue_without_any_visible_segment",
"behavior::scenario_lifecycle::render::tests::union_tests::clipped_operand_preserves_original_nested_or_crossed_correlation_distinction",
"behavior::scenario_lifecycle::render::tests::union_tests::conditional_death_then_recreate_never_revives_call_but_keeps_open_sibling",
"behavior::scenario_lifecycle::render::tests::union_tests::invalid_prebirth_call_and_postdeath_reply_remain_rejected_with_defensive_scene_clipping",
"behavior::scenario_lifecycle::render::tests::union_tests::test_only_upstream_row_offsets_update_lifetime_segments_and_endpoints_without_authoring",
"behavior::scenario_lifecycle::tests::alternative_death_does_not_kill_its_displayed_sibling",
"behavior::scenario_lifecycle::tests::conditional_birth_does_not_infer_absence_in_siblings_or_ancestors",
"behavior::scenario_lifecycle::tests::explicit_receiver_is_authoritative_even_with_missing_exchange",
"behavior::scenario_lifecycle::tests::lifecycle_free_fragments_do_not_poison_other_lanes",
"behavior::scenario_lifecycle::tests::loop_lifetime_is_local_and_warning_bearing_loops_remain_drawable",
"behavior::scenario_lifecycle::tests::missing_geometry_is_reported_without_nonfinite_or_guessed_markers",
"behavior::scenario_lifecycle::tests::optional_cleanup_inside_loop_does_not_claim_balanced_or_definite_exit",
"behavior::scenario_lifecycle::tests::projection_retains_exact_authored_source_and_does_not_enter_history",
"behavior::scenario_lifecycle::tests::root_lifetime_has_exact_birth_death_boundaries_without_source_mutation",
"behavior::scenario_lifecycle::tests::scenario_use_is_opaque_and_never_imports_callee_lifecycle_events"
],
"context_menu::": [
"context_menu::tests::a_new_context_token_cannot_reuse_the_previous_mouse_press_or_scroll",
"context_menu::tests::actions_area_does_not_swallow_first_independent_click_after_overlay_consumed_its_release",
"context_menu::tests::anchors_outside_the_window_and_nonfinite_input_stay_bounded",
"context_menu::tests::clicking_disabled_or_dragging_off_an_action_never_executes_it",
"context_menu::tests::coalesced_dismissal_release_does_not_swallow_the_next_independent_click",
"context_menu::tests::empty_and_disabled_only_menus_still_capture_keys_and_escape_closes",
"context_menu::tests::keyboard_skips_headers_separators_and_disabled_actions_and_invokes_once",
"context_menu::tests::mounted_keyboard_menu_paints_target_and_scroll_thumb_then_invokes_that_action",
"context_menu::tests::outside_dismissal_consumes_press_and_release_across_controlled_close",
"context_menu::tests::reconstructed_overlay_uses_retained_layout_for_rows_and_hit_testing",
"context_menu::tests::retained_overlay_layout_keeps_measured_width_and_scrollbar_after_reconstruction",
"context_menu::tests::tall_menu_clamps_to_viewport_and_keyboard_wheel_and_scrollbar_reach_the_end"
],
"forms::reference_chooser::": [
"forms::reference_chooser::tests::captured_choice_cannot_cross_document_revision_draft_record_or_array_path",
"forms::reference_chooser::tests::catalog_search_disambiguates_repeated_names_containment_alias_and_exact_placement_identity",
"forms::reference_chooser::tests::dismissal_swallows_matching_release_across_closed_rebuild_but_next_click_reaches_parent",
"forms::reference_chooser::tests::empty_search_escape_tab_and_optional_clear_do_not_silently_choose_nil",
"forms::reference_chooser::tests::historical_paths_never_open_and_only_explicit_choice_or_clear_is_a_write",
"forms::reference_chooser::tests::mounted_clipboard_paste_and_ime_commit_preserve_whole_strings_without_selecting",
"forms::reference_chooser::tests::mounted_filtered_row_click_uses_the_displayed_identity_and_scoped_write_intent",
"forms::reference_chooser::tests::mounted_input_preserves_rapid_same_batch_typing_and_cursor_across_controlled_rebuilds",
"forms::reference_chooser::tests::mounted_keyboard_pages_and_selects_only_the_highlighted_visible_candidate_once",
"forms::reference_chooser::tests::mounted_overlay_clamps_at_three_field_positions_and_keeps_results_and_query_bounded",
"forms::reference_chooser::tests::mounted_query_change_rejects_old_release_and_old_result_events_without_locking_popup",
"forms::reference_chooser::tests::mounted_query_then_escape_in_one_batch_closes_and_relative_keys_keep_input_order",
"forms::reference_chooser::tests::out_of_order_query_serials_cannot_restore_obsolete_results",
"forms::reference_chooser::widget::paint_tests::mounted_chooser_keyboard_target_is_visible_and_enter_keeps_exact_identity"
],
"style::tests::": [
"style::tests::button_pair_couplings_cover_hover_and_disabled_states",
"style::tests::conditional_input_styles_preserve_readonly_selected_value_contrast",
"style::tests::default_checkbox_styles_keep_checks_and_outlines_distinct",
"style::tests::default_input_styles_keep_ordinary_values_and_visible_selection",
"style::tests::default_pick_list_and_menu_styles_cover_open_and_selected_states",
"style::tests::ordinary_editable_editor_styles_keep_their_own_selected_value_readable",
"style::tests::readonly::mounted_readonly_input_keeps_selection_copy_and_readable_paint",
"style::tests::selected_navigation_adds_a_visible_outline_and_preserves_disabled_ink",
"style::tests::semantic_text_and_essential_boundaries_have_contrast_on_canvas_surfaces",
"style::tests::source_editor_syntax_and_fallback_remain_readable_during_selection"
],
"allocation_drag::tests::": [
"allocation_drag::tests::allocation_artifact_and_manual_trace_cascades_are_named_and_refused",
"allocation_drag::tests::cache_plan_uses_candidate_index_and_same_pixel_different_target_changes_preview",
"allocation_drag::tests::collapsed_target_unfold_is_explicit_and_no_other_fold_changes",
"allocation_drag::tests::direct_exit_revealing_another_role_performer_has_truthful_refusal",
"allocation_drag::tests::explicit_different_performer_retains_advisory_role_warning",
"allocation_drag::tests::folded_subtree_cannot_hide_new_collision",
"allocation_drag::tests::geometry_refuses_new_overlap_bounds_and_invisible_headers_and_preserves_existing_overlap",
"allocation_drag::tests::malformed_scope_wrong_projection_duplicate_placement_and_stable_id_collision_refuse",
"allocation_drag::tests::mixed_p_x_y_refuses_semantic_and_arrange_instead_of_stretching_destination",
"allocation_drag::tests::oa_communication_incompleteness_remains_advisory_without_collateral_loss",
"allocation_drag::tests::oa_sa_incoming_between_outgoing_preserve_identity_source_history_and_other_views",
"allocation_drag::tests::oa_sa_one_leaf_move_refuses_when_ancestor_regrouping_introduces_unrelated_overlap",
"allocation_drag::tests::oa_sa_one_leaf_reassignment_and_outward_move_regroup_ancestors_without_moving_sibling",
"allocation_drag::tests::oa_sa_populated_collapsed_target_accepts_room_and_refuses_collision_without_relocating_contents",
"allocation_drag::tests::oa_sa_state_owned_action_and_availability_reject_reassignment_atomically",
"allocation_drag::tests::oa_sa_unfolding_prior_hidden_overlap_refuses_even_when_insertion_does_not_collide",
"allocation_drag::tests::own_deleted_allocation_routes_may_disappear_in_every_diagram_only",
"allocation_drag::tests::role_only_same_effective_performer_is_semantic_noop_and_outgoing_refuses",
"allocation_drag::tests::sa_port_and_deferred_exchange_allocation_cascade_refuses_and_retarget_is_invalid",
"allocation_drag::tests::same_performer_readability_preserves_snapped_noop_and_allocation_identity",
"allocation_drag::tests::scope_detects_first_child_allocation_and_role_transfer_and_finish_rejects_live_edits",
"allocation_drag::tests::selected_header_visibility_allows_viewport_edge_but_refuses_clipping",
"allocation_drag::tests::snapped_noop_returns_no_command_and_keeps_source_revision_and_redo",
"allocation_drag::tests::source_budget_refusal_keeps_project_bundle_history_and_retry_identity_exact",
"allocation_drag::tests::surviving_constraint_mutation_is_refused_even_when_core_candidate_is_valid",
"allocation_drag::tests::target_presentation_requires_accepted_identity_and_selected_header_visibility",
"allocation_drag::tests::toolbar_identity_allows_exact_incoming_placement_at_old_label_overlap",
"allocation_drag::tests::uniform_folded_grandchild_and_unplaced_scope_moves_exactly_q_and_all_l_oa_sa",
"allocation_drag::tests::uniform_role_only_and_mixed_direct_role_composites_same_target_do_not_allocate",
"allocation_drag::tests::uniformly_unassigned_composite_creates_only_stable_leaf_allocations_including_unplaced",
"allocation_drag::tests::unrequested_view_option_cleanup_is_not_whitelisted",
"allocation_drag::tests::unresolved_role_leaf_can_arrange_or_accept_explicit_target_without_guessing"
],
"app::allocation_drag::tests::": [
"app::allocation_drag::tests::actual_canvas_origin_change_cancels_held_work_before_any_legacy_release",
"app::allocation_drag::tests::arrange_is_one_gesture_and_snapped_noop_preserves_redo_and_source",
"app::allocation_drag::tests::candidate_semantics_are_cached_per_destination_with_stable_ids_and_own_index",
"app::allocation_drag::tests::destination_identity_does_not_describe_blocked_or_outside_viewport_as_unallocation",
"app::allocation_drag::tests::frozen_collapsed_target_uses_only_visible_header_and_port_edge_controls_occlude",
"app::allocation_drag::tests::frozen_targets_use_half_open_semantic_priority_and_refuse_incomparable_overlap",
"app::allocation_drag::tests::full_tree::actual_app_tree_dirty_description_retains_focus_and_middle_caret_for_next_key",
"app::allocation_drag::tests::full_tree::actual_app_tree_dirty_name_retains_focus_and_middle_caret_for_next_key",
"app::allocation_drag::tests::full_tree::actual_app_tree_exact_incoming_drag_keeps_destination_visible_and_canvas_stable",
"app::allocation_drag::tests::full_tree::actual_keyboard_arrange_shortcut_consumes_once_escape_cancels_and_dirty_owner_refuses",
"app::allocation_drag::tests::full_tree::actual_rendered_canvas_pixels_do_not_change_when_toolbar_feedback_text_changes",
"app::allocation_drag::tests::full_tree::actual_toolbar_hover_inspects_last_full_name_without_authorizing_an_outside_drop",
"app::allocation_drag::tests::modal_roundtrip_equal_fit_undo_resize_and_focus_retire_press_before_replay",
"app::allocation_drag::tests::mounted_clean_stationary_selects_exact_work_without_revision_or_legacy_apply",
"app::allocation_drag::tests::mounted_dirty_port_press_cannot_fall_through_to_applying_port_selection",
"app::allocation_drag::tests::mounted_dirty_property_press_does_not_select_apply_or_destroy_draft",
"app::allocation_drag::tests::mounted_oa_sa_ordered_incoming_between_outgoing_are_exact_single_history_steps",
"app::allocation_drag::tests::mounted_role_only_outgoing_refusal_retains_placement_and_same_performer_creates_no_allocation",
"app::allocation_drag::tests::mounted_uniform_parent_moves_hidden_placements_and_assigns_only_leaves",
"app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture",
"app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works",
"app::allocation_drag::tests::oa_sa_clipped_selected_header_refuses_preview_release_and_retries_without_partial_source_or_history",
"app::allocation_drag::tests::oa_sa_toolbar_identity_accepts_exact_receiver_and_collapsed_header_drag",
"app::allocation_drag::tests::outside_release_is_cancel_and_does_not_remove_an_assignment",
"app::allocation_drag::tests::pending_behavior_draft_refuses_actual_work_press_and_equal_document_replacement_retires_packet",
"app::allocation_drag::tests::release_uses_ordered_native_position_before_later_motion_in_same_batch",
"app::allocation_drag::tests::same_snapped_position_on_opposite_shared_border_rebuilds_semantics_even_if_layout_refuses",
"app::allocation_drag::tests::source_and_modal_admission_reject_prebuilt_clean_press_without_selecting",
"app::allocation_drag::tests::source_refusal_is_atomic_and_a_new_gesture_can_retry_against_live_revision",
"app::allocation_drag::tests::stale_packets_do_not_cancel_a_newer_token_and_each_release_is_consumed_once",
"app::allocation_drag::tests::toolbar_destination_names_transformed_target_whose_header_is_clipped",
"app::allocation_drag::tests::toolbar_status_leaves_transformed_top_edge_work_header_readable"
],
"app::diagram_removal_tests::": [
"app::diagram_removal_tests::captured_confirmation_rejects_selection_document_revision_and_placement_changes",
"app::diagram_removal_tests::mounted_allocation_work_click_then_delete_without_redraw_removes_placement_once",
"app::diagram_removal_tests::mounted_bend_delete_has_priority_and_semantic_edge_delete_is_confirmed",
"app::diagram_removal_tests::mounted_clean_text_programmatic_focus_and_tab_remove_canvas_keyboard_ownership",
"app::diagram_removal_tests::mounted_inspector_can_take_focus_during_passive_save",
"app::diagram_removal_tests::mounted_oa_sa_delete_hides_exact_placement_and_round_trips_source_and_model",
"app::diagram_removal_tests::mounted_passive_save_never_grants_canvas_focus_or_restores_window_lost_focus",
"app::diagram_removal_tests::mounted_passive_save_retires_held_canvas_drag_but_allows_a_fresh_drag",
"app::diagram_removal_tests::mounted_placement_properties_selection_supports_hide_and_model_delete",
"app::diagram_removal_tests::mounted_programmatic_canvas_entry_needs_no_mouse_focus_boolean",
"app::diagram_removal_tests::mounted_removal_intents_reject_stale_selection_revision_owner_and_document",
"app::diagram_removal_tests::mounted_revision_and_history_preserve_the_actual_canvas_or_inspector_focus_owner",
"app::diagram_removal_tests::mounted_shift_delete_captures_target_cancel_escape_and_confirmation_replay",
"app::diagram_removal_tests::mounted_state_action_and_internal_rows_delete_relations_and_preserve_reused_work",
"app::diagram_removal_tests::mounted_state_delete_uses_state_placement_and_preserves_architecture_placement",
"app::diagram_removal_tests::mounted_window_modal_dirty_and_modifier_boundaries_retire_delete_focus",
"app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history",
"app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history"
]
}
}
@@ -0,0 +1,141 @@
{
"source": "e1240295bd114d23d3f67a69e6b38bdb2e25bb0d",
"scope": "Partial listing/focused/strict checkpoint; no full/native claim.",
"files": [
{
"path": "README.md",
"bytes": 1994,
"sha256": "22bc5a5191467544bf1dd5cb40acefc93ae7d394b4f9d2fb2bae46d256781441"
},
{
"path": "gates/clippy-e124029.inputs.json",
"bytes": 107751,
"sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87"
},
{
"path": "gates/clippy-e124029.log",
"bytes": 336,
"sha256": "f68709b04741e93b064896470518afd704da9db799ce26e874531a7e143a726c"
},
{
"path": "gates/clippy-e124029.result.json",
"bytes": 902,
"sha256": "6676647cdb2df5790c608794053df01edc1449f5c27054d1b073db66fcebc57d"
},
{
"path": "gates/focused-nav-e124029.admission.json",
"bytes": 3185,
"sha256": "5d50e095fd9323f5d1bdb2a3607d571377e2d82542252b54b8beff84f3e85a35"
},
{
"path": "gates/focused-nav-e124029.inputs.json",
"bytes": 107751,
"sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87"
},
{
"path": "gates/focused-nav-e124029.log",
"bytes": 2706,
"sha256": "288e8ee230ebae709f71ba4a86a0ceb6e63fe16ceee5eff72f27d0a128b6e635"
},
{
"path": "gates/focused-nav-e124029.result.json",
"bytes": 1188,
"sha256": "734cf663e70af4230b076edb46a0e22ff05e497b6dd852d8e375137a36aa645f"
},
{
"path": "gates/focused-scroll-e124029.admission.json",
"bytes": 1351,
"sha256": "a161d8c5948b4293dd7e298e865d42469c2f20b05de70a68b378777db257b3ae"
},
{
"path": "gates/focused-scroll-e124029.inputs.json",
"bytes": 107751,
"sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87"
},
{
"path": "gates/focused-scroll-e124029.log",
"bytes": 826,
"sha256": "b97a61c9479b18cd25a8d113040113deaaab35afd80b72459ae3b143a0c80575"
},
{
"path": "gates/focused-scroll-e124029.result.json",
"bytes": 1195,
"sha256": "f1eadc08fd9104f480105c1e23a7b78e2f21dbb631ba37d0a63d3d01e658411d"
},
{
"path": "gates/list-659b7a6.inputs.json",
"bytes": 107751,
"sha256": "18ef6ae2766066f2cfbdb10e9c63e41b7f21f7ba676bd2c0b72b071b69196da2"
},
{
"path": "gates/list-659b7a6.log",
"bytes": 1393,
"sha256": "b24a575425ab16a84f68016f8303efc9d552e73cf6cf54e20029eee76fd97129"
},
{
"path": "gates/list-659b7a6.result.json",
"bytes": 902,
"sha256": "72326c9436742c50e049b6f7d4131c8bc0e149f9cccf00724e32f75a5e39145a"
},
{
"path": "gates/list-e124029.admission.json",
"bytes": 23467,
"sha256": "36cd297979d854db50add69f7bebd8225b73093c1c5d7c9feed95bbbd7fdb0e8"
},
{
"path": "gates/list-e124029.inputs.json",
"bytes": 107751,
"sha256": "a011170b83ddc0c835428c10b2079b0df02d2bd6f90167f16b1297c683601a87"
},
{
"path": "gates/list-e124029.log",
"bytes": 117338,
"sha256": "8dbd49a9c36a6eff682049e6a3a919666e75e4e312a53d4c1ff60b82e46b8404"
},
{
"path": "gates/list-e124029.result.json",
"bytes": 119298,
"sha256": "f7fbb70f7984cd8adb089c0ad749d8240ec92f363679205a2d1adf805a15c2a6"
},
{
"path": "tools-and-reviews/admit-navigation-palette-gate.before-prefix-fix-20260913.py",
"bytes": 4464,
"sha256": "3e6874bab622e986c27d3de5e2babefe48092a7ba7976c11c9bcee653b46f4a8"
},
{
"path": "tools-and-reviews/admit-navigation-palette-gate.py",
"bytes": 4849,
"sha256": "de4263680118631e83bb8a78b5c12af48473a91f32b671d94fc666aba1a01058"
},
{
"path": "tools-and-reviews/archive-navigation-palette-e124029.py",
"bytes": 4321,
"sha256": "8bca1abfe045a1f0aed19df83124120b51dd70663793e6c68503672c2e5c210a"
},
{
"path": "tools-and-reviews/navigation-palette-gate-admission-review-20260913.md",
"bytes": 13017,
"sha256": "e1d62a771dcd6b49824a9c4e922e69821c8990f34d827754abe6b5f68b8d8608"
},
{
"path": "tools-and-reviews/navigation-palette-required-tests-20260913.json",
"bytes": 3318,
"sha256": "e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a"
},
{
"path": "tools-and-reviews/navigation-palette-union-correction-independent-review-20260913.md",
"bytes": 5640,
"sha256": "2fc63099f34240b93117bad5c64f9e01a1b71c969d4e30d7c662c98a761e5c0b"
},
{
"path": "tools-and-reviews/navigation-palette-union-independent-review-20260913.md",
"bytes": 7823,
"sha256": "ec831e7a10f1f733adddc725905d522a8960e59ff2c02adf26ac92476dbc68c8"
},
{
"path": "tools-and-reviews/run-navigation-palette-gate.py",
"bytes": 3928,
"sha256": "fc14c81020c55eb8edf9a65eb260a0c4c870ec48ed9c95304f2be74e741068a4"
}
]
}
@@ -0,0 +1,75 @@
"""Strict membership admission, separate from the raw gate result recorder."""
from pathlib import Path
from datetime import datetime, timezone
import hashlib
import json
import re
import subprocess
import sys
root = Path(__file__).resolve().parent.parent
folder = root / '.local/navigation-palette-gates-20260913'
name = sys.argv[1]
assert re.fullmatch(r'[a-zA-Z0-9-]+', name)
result_path = folder / (name + '.result.json')
record = json.loads(result_path.read_bytes())
source = record['source']
assert record['exit'] == 0 and not record['changed_inputs'] and record['head_after'] == source
assert subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=root).decode().strip() == source
inputs_path = folder / record['inputs']
inputs = json.loads(inputs_path.read_bytes())
assert inputs['source'] == source
for item in inputs['inputs']:
raw = (root / item['path']).read_bytes()
assert len(raw) == item['bytes'] and hashlib.sha256(raw).hexdigest() == item['sha256']
assert len(record['artifacts']) == 1, 'The actual test executable must be identified'
artifact = record['artifacts'][0]
raw = Path(artifact['path']).read_bytes()
assert len(raw) == artifact['bytes'] and hashlib.sha256(raw).hexdigest() == artifact['sha256']
log_path = folder / (name + '.log')
log = log_path.read_text(encoding='utf-8', errors='strict')
required_path = root / '.local/navigation-palette-required-tests-20260913.json'
assert hashlib.sha256(required_path.read_bytes()).hexdigest() == 'e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a'
required = json.loads(required_path.read_bytes())['groups']
if record['command'][-1] == '--list':
names = record['listing_members']
assert names and len(names) == len(set(names)) == record['listing_count']
totals = re.findall(r'^(\d+) tests, (\d+) benchmarks\s*$', log, re.M)
assert totals == [(str(len(names)), '0')], totals
expected = {'navigation_union': 17, 'preview_scroll_tests': 4,
'scenario_activation': 14, 'scenario_lifecycle': 36,
'context_menu': 12, 'reference_chooser': 14, 'style::tests': 10,
'allocation_drag::tests': 32, 'diagram_removal_tests': 18}
groups = {prefix: [n for n in names if prefix in n] for prefix in expected}
for prefix, count in expected.items():
assert len(groups[prefix]) == count, (prefix, len(groups[prefix]), count)
for prefix, exact_names in required.items():
assert set(groups[prefix]) == set(exact_names) and len(exact_names) == len(set(exact_names)), prefix
mode = 'list'
else:
listing_name, selector = sys.argv[2:4]
assert re.fullmatch(r'[a-zA-Z0-9-]+', listing_name)
listing_path = folder / (listing_name + '.result.json')
listing = json.loads(listing_path.read_bytes())
admitted = json.loads((folder / (listing_name + '.admission.json')).read_bytes())
assert admitted['source'] == listing['source'] == source and admitted['mode'] == 'list'
assert admitted['result_sha256'] == hashlib.sha256(listing_path.read_bytes()).hexdigest()
assert admitted['artifact'] == artifact, 'Focused execution must use the admitted test executable'
assert admitted['required_names_sha256'] == hashlib.sha256(required_path.read_bytes()).hexdigest()
assert selector in record['command']
expected_names = {n for n in listing['listing_members'] if selector in n}
actual = re.findall(r'^test ([^\r\n]+) \.\.\. ok\s*$', log, re.M)
assert expected_names and len(actual) == len(set(actual)) and set(actual) == expected_names
assert re.search(rf'test result: ok\. {len(actual)} passed; 0 failed; 0 ignored;', log)
groups = {selector: sorted(expected_names)}
mode = 'focused'
receipt = folder / (name + '.admission.json')
assert not receipt.exists()
with receipt.open('x', encoding='utf-8', newline='\n') as stream:
stream.write(json.dumps({'utc': datetime.now(timezone.utc).isoformat(), 'source': source,
'mode': mode, 'result_sha256': hashlib.sha256(result_path.read_bytes()).hexdigest(),
'log_sha256': hashlib.sha256(log_path.read_bytes()).hexdigest(),
'inputs_sha256': hashlib.sha256(inputs_path.read_bytes()).hexdigest(),
'required_names_sha256': hashlib.sha256(required_path.read_bytes()).hexdigest(),
'verified_inputs': len(inputs['inputs']), 'artifact': artifact, 'groups': groups}, indent=2) + '\n')
print(json.dumps({'admission': str(receipt), 'source': source, 'groups': {k:len(v) for k,v in groups.items()}}))
@@ -0,0 +1,80 @@
"""Strict membership admission, separate from the raw gate result recorder."""
from pathlib import Path
from datetime import datetime, timezone
import hashlib
import json
import re
import subprocess
import sys
root = Path(__file__).resolve().parent.parent
folder = root / '.local/navigation-palette-gates-20260913'
name = sys.argv[1]
assert re.fullmatch(r'[a-zA-Z0-9-]+', name)
result_path = folder / (name + '.result.json')
record = json.loads(result_path.read_bytes())
source = record['source']
assert record['exit'] == 0 and not record['changed_inputs'] and record['head_after'] == source
assert subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=root).decode().strip() == source
inputs_path = folder / record['inputs']
inputs = json.loads(inputs_path.read_bytes())
assert inputs['source'] == source
for item in inputs['inputs']:
raw = (root / item['path']).read_bytes()
assert len(raw) == item['bytes'] and hashlib.sha256(raw).hexdigest() == item['sha256']
assert len(record['artifacts']) == 1, 'The actual test executable must be identified'
artifact = record['artifacts'][0]
raw = Path(artifact['path']).read_bytes()
assert len(raw) == artifact['bytes'] and hashlib.sha256(raw).hexdigest() == artifact['sha256']
log_path = folder / (name + '.log')
log = log_path.read_text(encoding='utf-8', errors='strict')
required_path = root / '.local/navigation-palette-required-tests-20260913.json'
assert hashlib.sha256(required_path.read_bytes()).hexdigest() == 'e426be35c31925d91b5ce6df15abe30f814ba6134a8013ce47208c365df7127a'
required = json.loads(required_path.read_bytes())['groups']
if record['command'][-1] == '--list':
names = record['listing_members']
assert names and len(names) == len(set(names)) == record['listing_count']
totals = re.findall(r'^(\d+) tests, (\d+) benchmarks\s*$', log, re.M)
assert totals == [(str(len(names)), '0')], totals
# Two intentionally cross-module groups use exact independently fixed sets.
# Retained module suites must use anchored prefixes: e.g. an unrelated test
# name containing context_menu is not a context_menu module test.
expected = {'navigation_union': 17, 'preview_scroll_tests': 4,
'behavior::scenario_activation::': 14, 'behavior::scenario_lifecycle::': 36,
'context_menu::': 12, 'forms::reference_chooser::': 14, 'style::tests::': 10,
'allocation_drag::tests::': 32, 'app::allocation_drag::tests::': 32,
'app::diagram_removal_tests::': 18}
groups = {prefix: [n for n in names if (prefix in n if prefix in required else n.startswith(prefix))]
for prefix in expected}
for prefix, count in expected.items():
assert len(groups[prefix]) == count, (prefix, len(groups[prefix]), count)
for prefix, exact_names in required.items():
assert set(groups[prefix]) == set(exact_names) and len(exact_names) == len(set(exact_names)), prefix
mode = 'list'
else:
listing_name, selector = sys.argv[2:4]
assert re.fullmatch(r'[a-zA-Z0-9-]+', listing_name)
listing_path = folder / (listing_name + '.result.json')
listing = json.loads(listing_path.read_bytes())
admitted = json.loads((folder / (listing_name + '.admission.json')).read_bytes())
assert admitted['source'] == listing['source'] == source and admitted['mode'] == 'list'
assert admitted['result_sha256'] == hashlib.sha256(listing_path.read_bytes()).hexdigest()
assert admitted['artifact'] == artifact, 'Focused execution must use the admitted test executable'
assert admitted['required_names_sha256'] == hashlib.sha256(required_path.read_bytes()).hexdigest()
assert selector in record['command']
expected_names = {n for n in listing['listing_members'] if selector in n}
actual = re.findall(r'^test ([^\r\n]+) \.\.\. ok\s*$', log, re.M)
assert expected_names and len(actual) == len(set(actual)) and set(actual) == expected_names
assert re.search(rf'test result: ok\. {len(actual)} passed; 0 failed; 0 ignored;', log)
groups = {selector: sorted(expected_names)}
mode = 'focused'
receipt = folder / (name + '.admission.json')
assert not receipt.exists()
with receipt.open('x', encoding='utf-8', newline='\n') as stream:
stream.write(json.dumps({'utc': datetime.now(timezone.utc).isoformat(), 'source': source,
'mode': mode, 'result_sha256': hashlib.sha256(result_path.read_bytes()).hexdigest(),
'log_sha256': hashlib.sha256(log_path.read_bytes()).hexdigest(),
'inputs_sha256': hashlib.sha256(inputs_path.read_bytes()).hexdigest(),
'required_names_sha256': hashlib.sha256(required_path.read_bytes()).hexdigest(),
'verified_inputs': len(inputs['inputs']), 'artifact': artifact, 'groups': groups}, indent=2) + '\n')
print(json.dumps({'admission': str(receipt), 'source': source, 'groups': {k:len(v) for k,v in groups.items()}}))
@@ -0,0 +1,72 @@
"""Preserve this partial Windows checkpoint, including the rejected first build."""
from pathlib import Path
import hashlib
import json
root = Path(__file__).resolve().parent.parent
gate = root / '.local/navigation-palette-gates-20260913'
dest = root / 'harness/experiments/navigation-palette-e124029-windows-20260913'
assert not dest.exists()
payloads = {}
for name in ('list-659b7a6', 'list-e124029', 'focused-nav-e124029', 'focused-scroll-e124029', 'clippy-e124029'):
result = json.loads((gate / (name + '.result.json')).read_bytes())
assert result['changed_inputs'] == [] and result['head_after'] == result['source']
for suffix in ('.inputs.json', '.result.json', '.log', '.admission.json'):
path = gate / (name + suffix)
if suffix != '.admission.json' or path.exists():
payloads['gates/' + path.name] = path.read_bytes()
for name in ('run-navigation-palette-gate.py', 'admit-navigation-palette-gate.py',
'admit-navigation-palette-gate.before-prefix-fix-20260913.py',
'navigation-palette-required-tests-20260913.json',
'navigation-palette-union-independent-review-20260913.md',
'navigation-palette-union-correction-independent-review-20260913.md',
'navigation-palette-gate-admission-review-20260913.md'):
payloads['tools-and-reviews/' + name] = (root / '.local' / name).read_bytes()
payloads['tools-and-reviews/' + Path(__file__).name] = Path(__file__).read_bytes()
strict = json.loads(payloads['gates/clippy-e124029.result.json'])
payloads['README.md'] = f'''# Partial combined Windows checkpoint
Source e1240295bd114d23d3f67a69e6b38bdb2e25bb0d, Windows gnullvm,
Rust 1.98.1, jobs1. All 578 captured committed inputs remained unchanged.
The original659b7a6 listing compile failed with E0583 for two nested test-module
paths; it ran no tests. The source correction adds explicit paths only.
Corrected e124 lists 1082 actual tests. Exact 17 cross-feature navigation tests
and four mounted preview-scroll tests pass, with no failures or ignored cases,
using the same captured executable. Retained module memberships are verified
by the listing admission receipt. Strict all-target Clippy actual exit: {strict['exit']}.
Read its preserved log for the actual outcome; no full-suite or GUI/native pass
is asserted by this checkpoint.
The first local admission invocation rejected its own substring-based module
count: `context_menu` matched 15 names, including three tests outside that module.
The corrected helper anchors retained suites to module prefixes, while the two
cross-module sets retain their independently fixed exact names. It also admits
both distinct 32-test allocation modules. No test was removed or expected module
count reduced. The original helper remains beside the correction. The original
admission invocation produced an assertion in tool output, not an admission
receipt; no missing result file is manufactured here.
Source reviews are scoped to their stated commits and cannot replace runtime
checks. The first review missed Rust's inherited path resolution; that failed
compile and subsequent explicit-path source review remain part of the record.
Full intended combined acceptance also retains the shared Find Close word
selection finding from Gitea issue13; its correction is a separate contribution.
This archive omits the large executable and dependency cache. Their identities
are recorded in actual receipts. Commands and all test/build inputs are preserved
by Git source pins and manifests. Linux remains deferred by user instruction.
'''.encode()
dest.mkdir(parents=True)
rows = []
for name, raw in sorted(payloads.items()):
path = dest / name
path.parent.mkdir(parents=True, exist_ok=True)
with path.open('xb') as stream:
stream.write(raw)
assert path.read_bytes() == raw
rows.append({'path': name, 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()})
with (dest / 'manifest.json').open('x', encoding='utf-8', newline='\n') as stream:
stream.write(json.dumps({'source': 'e1240295bd114d23d3f67a69e6b38bdb2e25bb0d',
'scope': 'Partial listing/focused/strict checkpoint; no full/native claim.', 'files': rows}, indent=2) + '\n')
print(json.dumps({'archive': str(dest), 'payloads': len(rows), 'strict_exit': strict['exit']}))
@@ -0,0 +1,89 @@
# Navigation/palette gate admission review
Reviewed root `659b7a655a33e71e00b8d86a2674bcbd631681d2` versus reviewed `633ec3a924e057dc9f185d679be28666d4406a40`, the raw gate runner and proposed admission helper. No compiler, tests, UI, Gitea or source edits by this reviewer. The first listing compilation has reported missing nested test modules; no successful listing or gate admission is claimed here.
## Source and compile correction
The only changed path under the runner's source/input roots between 633 and 659 is `crates/oa-desktop/src/style/tests/readonly.rs`: two iterator changes and required dereferences, preserving predicates. Blob `ff825a04201be7133d0791fe664482c0bbb432d1` exactly matches closed dd39. Other changes are evidence/checkpoint documents, attributes and runtime-notice records. This carries the bounded 633 source review forward, not e44/dd39 test acceptance.
Root reported E0583 for the two new nested modules under parents imported with `#[path]`. The proposed corrections are appropriate: `#[path = "allocation_drag_tests/navigation_union.rs"]` before the module in `app/allocation_drag_tests.rs`, and `#[path = "navigation_union_tests/palette_union.rs"]` before the module in `app/source_rename/navigation_union_tests.rs`. They explicitly resolve from the physical parent directories and introduce no production workaround. **The prior source review missed this module-resolution detail.** Preserve failed 659 evidence and re-list the corrected source; source reasoning cannot establish compilation success.
## Recorder and admission
[Runner](run-navigation-palette-gate.py), reviewed SHA-256 `fc14c81020c55eb8edf9a65eb260a0c4c870ec48ed9c95304f2be74e741068a4`, checks initial HEAD and exact committed bytes for selected tracked inputs, preserves an input manifest/exclusive log, then rechecks input hashes and HEAD. Changed inputs or source fail its process. It records actual Cargo-emitted `Running unittests ... (path.exe)` artifacts and their size/hash; it does not invent the test executable path. Package/bin, locked dependencies and single test thread are explicit.
The runner alone is an execution recorder: zero-test focused runs can return zero, empty artifact/listing sets are allowed, and executed names/counts are not asserted. GUI mode has no `Running unittests` line and therefore records no GUI executable. Stage/launch must separately bind the actual current compiler artifact rather than choosing an executable merely because it exists under an assumed target directory. Preserve partial admission failures without overwriting.
[Admission helper](admit-navigation-palette-gate.py), inspected but unexecuted, correctly requires zero exit, unchanged/current source inputs, exactly one existing matching test artifact, a nonempty unique listing with matching emitted total, expected group counts, and actual focused successful names equal to the selected listing set with zero failures/ignored tests.
Minimal remaining improvements before treating it as strict evidence admission:
- Compare the listing admission's stored `result_sha256` to the current listing result bytes; compare the focused artifact identity/hash to the admitted listing artifact. This closes the reference chain instead of relying only on matching source strings.
- Bind the complete input-manifest and log hashes into the admission alongside its result hash. Preserve the runner/helper identities in the archive.
- Require the exact named 17 navigation-union and four preview-scroll members from the source manifest below; counts alone allow an equal-count substitution. Reparse listing names from the original log or explicitly compare them to the recorder's extracted names.
- Apply equivalent complete-list membership checking to full-suite acceptance, and exact recorded command checks to strict/GUI staging. Neither a focused pass nor the listing itself is a full run.
The recorder covers selected tracked inputs, not arbitrary untracked/external compiler configuration. Keep the sole compiler lease and the configured toolchain/environment provenance; verify no untracked source/config participates. A larger runner framework is unnecessary.
## Expected source membership
These expectations include ordinary and Tokio tests plus declared child modules. They must be reconciled with the corrected source's actual Windows debug listing; they are not runtime results. `preview_scroll_tests` is explicitly behind `cfg(debug_assertions)` and the current command is a debug test build.
| Substring/group | Expected | Source basis |
|---|---:|---|
| `navigation_union` | **17** | 13 source-rename composition + 2 allocation + 2 removal |
| `source_rename::tests::navigation_union_tests` | 13 | Six direct plus seven `palette_union` |
| `palette_union` | 7 | Four correction and three original root composition tests |
| `allocation_drag::tests::navigation_union` | 2 | Actual captured canvas Press/old packets/current cancellation |
| `diagram_removal_tests::navigation_union` | 2 | Actual port/state-row navigation to Delete and full Undo |
| `preview_scroll_tests` | **4** | Mounted scroll/Details/late-operation regressions |
| `scenario_activation` | 14 | 13 geometry/interaction plus WGPU border-pixel regression |
| `scenario_lifecycle` | 36 | 10 projection + 17 render + 9 union |
| `context_menu` | 12 | Includes actual target/scroll-thumb paint and action identity |
| `reference_chooser` | 14 | 13 chooser tests plus mounted paint/Enter identity |
| `style::tests` | 10 | Nine styles plus readonly selection/copy/paint |
| `allocation_drag::tests` | 32 | 24 direct + six full-tree + two union |
| `diagram_removal_tests` | 18 | 16 retained mounted plus two union |
The exact 17+4 names are enumerated in the source-membership appendix below. Specifically retain `long_message_backplates_do_not_erase_selected_activation_border_pixels`, `mounted_keyboard_menu_paints_target_and_scroll_thumb_then_invokes_that_action`, and `mounted_readonly_input_keeps_selection_copy_and_readable_paint` in the preserved groups: pure style-constant tests are not substitutes. The literal filter `navigation_palette` is not interchangeable with actual `navigation_union` names.
## Short native itinerary and oracle requirements
Use fresh working copies of the closed dd39 archived topology, lifecycle and compact baselines, plus a fresh six-file `examples/source-project` copy. Preserve baseline bytes and launch a current source-bound executable under a fresh profile. Reuse fixture provenance, not dd39 screenshots as purported union observations.
1. **OA/SA repeated and nested process navigation.** Open topology `oa_caller`, then `sa_caller`. Navigate semantically to B (`oa_b` / `sa_b`), choosing first, second and nested reference destinations. Verify paths `[oa_r1]`, `[oa_r2]`, `[oa_r3, oa_inner]` and corresponding SA paths, exact preview/camera highlight and Inspector/source identity. Distinguish the semantic occurrence from its enclosing reference: dd39's preview click selected containing `oa_r1`. Exercise keyboard chooser/Escape, canvas F6/Tab and return to editing, including minimum-window overflow. Whole Project/SourceBundle and model history remain unchanged.
2. **Focused F12/F2 and Undo.** In `examples/source-project`, use the second `@assess_report` reference. F12 reveals its definition; Shift-F12 exposes its real references. Immediately type one reversible character after reveal, then text Undo, to verify actual editor focus and exact restoration. F2 rename to `assess_report_union`; inspect preview/overflowing Details, then confirm six alias-token changes in `sa/reporting.arcadia` and `views.arcadia`, with other files/comments and UUIDs retained. No disk changes before Save. Check complete model Undo/Redo, save/reopen and after-close equality. Include cancel and a successful rename so an always-rejecting implementation cannot pass.
3. **State action navigation → Delete → Undo.** In compact source, target relation `delete_54`, UUID `de1e7e00-0000-4000-8000-000000000036`, through source/semantic diagram navigation to its entry-action row. Verify relation identity rather than reused function `delete_50` or state `delete_53`. Enter canvas ownership, Delete/cancel once, repeat/confirm exact relation deletion. Compare to public core Delete expectation and verify state/function remain; model Undo restores complete baseline and both source files. Save/reopen the restoration. Actual mounted tests cover deterministic routing; native evidence checks focus/dialog usability.
4. **Brief retained lifecycle smoke.** On unchanged lifecycle fixture select OA C1 shoulder/C2 receive endpoint and self reply, verifying expected aliases and continuous borders. Expand old-case repetition only for an observed composition risk.
Rebuild a separately named standalone oracle against the **current union oa-core rlib** after the parent's compiler lease permits it, recording exact source/config/dependency artifacts, command and binary hash. The older 425 oracle's historical 110-unchanged-input claim is invalid across changed union language/core sources; preserve its historical binary and provenance.
The existing [oracle source](delete-native-oracle.rs) already supports `same BASE_ENTRY ACTUAL_ENTRY` and `removed BASE_ENTRY ACTUAL_ENTRY TARGET_UUID`. It constructs the Delete/source-patch expectation from baseline before loading actual output, so it covers state-action deletion and full Undo. Rebuild/self-check it with current core and admit each fixture first. Navigation-only checks need `same` plus native exact target/path evidence: equality cannot prove camera or selection.
For accepted rename, prepare expected complete Project/SourceBundle from untouched baseline, fixed subject UUID and requested alias using the current public alias-rename API. Compare actual output without normalization, UUID masking or an actual-derived replacement set. Baseline `same` suffices after Undo but cannot establish the renamed result. Retain six-token/two-file and unchanged-other-file checks as discriminators. Existing source7 authoring oracle modes are unnecessary for navigation-only cases; using them for new authoring would require separate current-core binding.
## Source-membership appendix
```text
app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval
app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin
app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement
app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged
app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive
app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history
app::source_rename::tests::navigation_union_tests::palette_union::captured_old_source_query_and_find_close_preserve_the_new_destination
app::source_rename::tests::navigation_union_tests::palette_union::current_source_query_and_checked_find_close_remain_live
app::source_rename::tests::navigation_union_tests::palette_union::captured_old_chooser_context_and_every_token_variant_are_inert
app::source_rename::tests::navigation_union_tests::palette_union::current_chooser_open_and_close_keep_their_boundary_and_worker_semantics
app::source_rename::tests::navigation_union_tests::palette_union::allocation_keyboard_notification_preserves_navigation_and_first_measurement
app::source_rename::tests::navigation_union_tests::palette_union::stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation
app::source_rename::tests::navigation_union_tests::palette_union::captured_behavior_toolbar_cannot_retire_a_new_documents_navigation
app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works
app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture
app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history
app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history
app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not
app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination
app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations
app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll
```
@@ -0,0 +1,32 @@
{
"source": "659b7a655a33e71e00b8d86a2674bcbd631681d2",
"reviewed_parent": "633ec3a924e057dc9f185d679be28666d4406a40",
"scope": "Expected Windows debug test members derived from source, not actual listing or runtime acceptance; explicit module-path correction does not change these functions.",
"groups": {
"navigation_union": [
"app::allocation_drag::tests::navigation_union::old_chooser_envelopes_preserve_a_current_canvas_gesture",
"app::allocation_drag::tests::navigation_union::stale_gesture_packets_preserve_navigation_and_a_new_live_cancel_still_works",
"app::diagram_removal_tests::navigation_union::port_navigation_then_canvas_delete_preserves_owner_and_restores_exact_history",
"app::diagram_removal_tests::navigation_union::state_row_navigation_then_canvas_delete_preserves_work_and_restores_exact_history",
"app::source_rename::tests::navigation_union_tests::document_reset_retains_all_three_worker_slots_until_their_exact_results_arrive",
"app::source_rename::tests::navigation_union_tests::late_target_and_preview_results_release_only_their_slot_and_preserve_first_camera_measurement",
"app::source_rename::tests::navigation_union_tests::loading_and_ready_diagram_choosers_reject_a_previously_captured_rename_begin",
"app::source_rename::tests::navigation_union_tests::palette_union::allocation_keyboard_notification_preserves_navigation_and_first_measurement",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_behavior_toolbar_cannot_retire_a_new_documents_navigation",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_chooser_context_and_every_token_variant_are_inert",
"app::source_rename::tests::navigation_union_tests::palette_union::captured_old_source_query_and_find_close_preserve_the_new_destination",
"app::source_rename::tests::navigation_union_tests::palette_union::current_chooser_open_and_close_keep_their_boundary_and_worker_semantics",
"app::source_rename::tests::navigation_union_tests::palette_union::current_source_query_and_checked_find_close_remain_live",
"app::source_rename::tests::navigation_union_tests::palette_union::stale_rename_begin_cannot_retire_allocation_epoch_or_new_navigation",
"app::source_rename::tests::navigation_union_tests::rename_modal_rejects_queued_diagram_and_source_navigation_without_losing_approval",
"app::source_rename::tests::navigation_union_tests::rename_then_exact_caret_diagram_navigation_preserves_complete_model_undo_redo_history",
"app::source_rename::tests::navigation_union_tests::stale_begin_close_and_actual_confirm_leave_new_diagram_focus_and_pending_measurement_unchanged"
],
"preview_scroll_tests": [
"app::source_rename::tests::preview_scroll_tests::delayed_page_and_approval_operations_cannot_reset_a_new_destination",
"app::source_rename::tests::preview_scroll_tests::details_round_trip_retires_held_reset_without_changing_page_or_repeated_visibility_scroll",
"app::source_rename::tests::preview_scroll_tests::explicit_navigation_resets_retained_scroll_but_id_change_alone_does_not",
"app::source_rename::tests::preview_scroll_tests::repeated_page_visits_filters_and_fast_preview_completion_have_distinct_destinations"
]
}
}
@@ -0,0 +1,26 @@
# Independent source re-review — navigation union correction
**No actionable finding in the bounded correction.** Reviewed immutable `633ec3a924e057dc9f185d679be28666d4406a40`, parent `4e51d68973da52cf057fab4983b9f112400b802c`, in `.local/navigation-palette-union-20260913`; worktree was clean and HEAD matched. This supersedes the P2 finding for the covered envelope family in [the original review](navigation-palette-union-independent-review-20260913.md), not its unrun/native limitations. No compiler, tests, UI, Gitea, production edits or commits by this reviewer.
## Admission and current-event behavior
- `app.rs:1252–1265` now admits source, chooser and allocation envelopes before reveal reconciliation, allocation retirement and source-interaction rotation. Existing early BehaviorControl/SourceRename guards remain. The fix does not make all user input passive.
- `app/source_symbols.rs:34–49` shares the prior exact source session/path and Find context/instance/open/availability conditions. `app.rs:1398–1408` reuses the guard for direct inner dispatch; a checked Find-close is mapped only afterward. Bare legacy Close remains rejected. The earlier old-workspace query/Find-close reproduction can no longer reach either shared boundary.
- `app/diagram_usages.rs:147–169` shares exact Open document/revision/subject admission and every panel-token variant. Old Open/Close/Choose and other old token messages are rejected before allocation/source rotation. Current-token model-change recovery remains at lines 202–208: it can refresh a stale panel revision rather than being silently suppressed by an overstrict outer revision check. Close retains its worker-slot semantics; completion identity and release logic at lines 89–124 are unchanged.
- `app/allocation_drag.rs:440–462` rejects Cancel/Preview/Release unless their token belongs to the active gesture, and rejects old Refused epochs. A current-token packet still reaches its stamp validation and recovery; token equality is not substituted for geometry/model validity. KeyboardBoundary/Unfocused handling is unchanged.
- Invalid Press is deliberately different: `app.rs:1260–1265` sends it through the existing allocation feedback path before shared boundaries. The unchanged active-gesture exclusion plus `allocation_press_owns_current_view` validation at `allocation_drag.rs:496–512` retain the changed-view or finish-edit explanation. Current valid Press still retires navigation and enters its ordinary capture/selection path; current Cancel still retires the active gesture. No added selection rewrite.
- SourceSymbolsReady/SourceRenameReady/DiagramUsagesReady are unaffected by the new input guards and remain passive through the shared adapters; their completion dispatch still precedes modal handling in `app.rs:1412–1423`. No worker-slot or modal-admission weakening was found in this delta.
## Evaluator adequacy
Six added tests exercise actual App dispatch rather than only calling the new predicates. Four in `app/source_rename/navigation_union_tests/palette_union.rs:5–97` use captured old source/chooser envelopes, cover all seven chooser-token variants, and compare navigation/focus/camera, allocation epoch, source interaction, accepted snapshot identity and SourceBundle. Every rejected navigation case completes the valid first viewport through `first_measurement`, whose assertions check measured canvas size, centering and exact selected placement. Positive controls start a live source query, close the current Find instance, open/close the current chooser, and release its exact occupied worker without reopening it.
Two in `app/allocation_drag_tests/navigation_union.rs:105–203` capture Press through the existing actual DiagramCanvas event fixture (`allocation_drag_tests.rs:113–122`). They reject old Cancel/Preview/Release/Refused packets both after navigation and during a newer gesture, test old-Press feedback without consuming the pending reveal, complete the first viewport, then verify live Press/Cancel behavior. The chooser test proves stale envelopes preserve a live gesture while a current chooser Open retires it. Snapshot identity and full source equality guard against hidden document/history mutation. These are discriminating tests for the earlier P2, although all are **unrun**; retained motion/stamp/modal/worker tests remain necessary when executing the union gates.
## Ancillary delta and limits
The two peer lint files are exact blobs from `a49b0ec7ac4538a372139175386a881645c1a59e`: `app/diagram_usages/tests.rs` blob `95b0089d35230e66891e2a87af0022b4fbc542d9`; `behavior/scenario/usage/tests.rs` blob `145289ea088ca898339a21bedcf61fca78120a77`. Their condition collapsing and half-open range assertion preserve the prior assertions. No production peer change is imported in that lint subset.
`allocation_input.rs:68` adds `navigation_focus: None` to a temporary canvas used solely by `work_dirty_point` at line 77; this path does not draw. The analogous allocation test fixture field and test module declaration are narrow composition fixes. Typed lifecycle/paint, palette styles, real rendered focus wiring, source-editor dynamic IDs/F2/F12, root readonly tests and optional picker layout receive no change in this correction.
The union remains unbuilt/unrun. Root e44 full PASS874 and dd39 style/strict/native receipts validate their own identified sources, not this candidate. Proceed to combined focused/full/strict/build gates and matching native navigation/focus/rename/removal acceptance. Source review does not establish compiler success, race-test success or native usability.
@@ -0,0 +1,32 @@
# Independent source review: navigation/palette union
Reviewed immutable candidate **`4e51d68973da52cf057fab4983b9f112400b802c`** in `.local/navigation-palette-union-20260913`, based on root `e44f07565cc7599d5c5a15a6b5599b4f5d105718` with the scoped peer navigation/rename contribution through `10bd71197285a4ba894e6ed9398d2c5402ab463d`. Read its `harness/release-navigation-palette-union-20260913.md`, production composition and five new regressions. No compiler, tests, native UI, Gitea, source edits or commits by this reviewer. This is a bounded composition review, not a revalidation of every peer feature.
## Actionable finding
**P2 — Several stale envelopes still change a newer navigation/allocation boundary before their handlers reject them.** The early SourceRename and BehaviorControl checks solve two instances, but `App::update` at `crates/oa-desktop/src/app.rs:1280–1281` invokes `reconcile_pending_diagram_reveal` and `allocation_before` before the remaining envelope checks. Three concrete variants exist:
1. **Old source query / Find-close clears a new reveal.** Capture a `source_symbol_message(Query(Definition))` or `source_find_close_message()` from a prior source-workspace session; navigate a fresh App to an exact diagram usage and leave its first viewport pending; deliver that captured message. `app/diagram_reveal.rs:78–101` treats both as active actions, so it clears `pending_diagram_reveal` and `diagram_navigation_focus`; `app/allocation_drag.rs:397–415` retires the current allocation capability. Only afterward does `app.rs:1385–1407` reject the old SourceFindClose instance/context or SourceSymbols session/path. The new viewport can no longer finish the intended camera reveal. This is source-demonstrable even with completely unchanged accepted model/source and without forging an inner mutation.
2. **Old work-drag cancellation clears a new reveal.** Deliver `WorkDrag(Cancel(old_token))` from a retired gesture after the same navigation. Only KeyboardBoundary and Unfocused are passive in the reveal adapter; Cancel clears the pending reveal/focus before `app/allocation_drag.rs:457–468` checks its active token and returns without an allocation action. A delayed old gesture event must not behave like a current user's cancel. Current valid gesture cancellation must still retire the reveal and gesture normally.
3. **Old diagram-chooser action retires allocation.** Capture a DiagramUsage Open with an old document context or a Close/Choose with an old panel token. `app/diagram_reveal.rs` correctly classifies DiagramUsage as passive until the accepted handler takes ownership, but `allocation_before` does not. A queued rejected chooser action can retire the current work capability before `app/diagram_usages.rs:157–202` rejects its old document/token; `update_inner` also rotates source interaction before that rejection. This undercuts the handler's explicit intent that rejected/stale chooser envelopes leave the newer destination alone when combined with root allocation ownership.
**Fix at admission/dispatch ordering:** establish that the envelope belongs to the current owner/token/context before either boundary adapter changes state. Reuse the handler's semantic rules; do not simply classify all user actions as passive or suppress current valid cancellation. Add actual App regressions using captured old source/chooser/gesture envelopes, preserving pending reveal, focus identity, allocation epoch/active gesture, accepted snapshot and SourceBundle, then complete the first valid viewport. Include a positive current gesture cancellation case. This finding was sent directly to the implementation agent and parent before this report.
## Other requested composition checks
No additional actionable defect found within the inspected seams:
- Passive SourceSymbolsReady/SourceRenameReady/DiagramUsagesReady events are recognized before model/modal dispatch and by both relevant boundary adapters. Exact completion handlers retain occupied-worker identity and do not let an unrelated completion release a newer slot. Actual accepted navigation still changes the ordinary allocation/camera boundary.
- KeyboardBoundary is passive for pending navigation but retires a genuinely active allocation gesture in its own handler. With no active gesture it leaves the epoch untouched; Unfocused retains its existing gesture-retirement behavior. The stale-token variant above is the uncovered distinction.
- Root's busy execution admission remains separate from keyboard ownership; the diagram chooser additionally excludes canvas ownership. Root focus wrappers, pending form focus, pan/Space guards and state view's optional-picker stable widget slot remain. `state_view.rs` changes only navigation-focus presentation wiring.
- Root typed activation/lifecycle modules, their tests, palette styles, readonly test source and custom overlay files are byte-identical to e44. `behavior.rs` changes only extraction/reuse of the existing label-bound calculation; precise message → activation → label → broad-hit priority and guide/backplate/activation/foreground painting remain. Navigation representation discovery does not add duplicate semantic entries for each typed activation segment.
- Root BOUNDARY remains on ordinary topology preview boundaries; selected peer preview tiles/links use their explicit selected branch. State selected-row outlines and architecture warning/route semantics remain intact. New navigation outlines are presentation-only and do not enter hit/edit placement identity.
- `views.rs:1216–1231` retains `style::source_editor` together with dynamic editor ID, captured key-binding context, existing highlighter and fonts. Focused F2 and F12/Shift-F12 bind to their intended envelopes; normal input falls back to Iced. Existing explicit Windows Alt-Space handling leaves AltGr/control combinations outside that exception. The stale source-envelope ordering finding above remains relevant to queued shortcuts.
## Evaluator adequacy and limits
The five new tests are meaningful but did not cover the reported envelope family. Three `palette_union` tests use actual App update, independently completed queries, exact navigation identity, allocation epoch, accepted snapshot identity and first valid viewport; their membership is only KeyboardBoundary, stale Rename Begin and stale BehaviorControl. They cannot establish safety for SourceSymbols, SourceFindClose, DiagramUsage or stale WorkDrag tokens by analogy.
The two mounted navigation/removal tests complete a real usage query, mount the production App tree, focus the public canvas widget, deliver actual Delete and Shift-Delete, cancel once, confirm the exact target, compare the whole Project against the core Delete command, and Undo to the complete original Project/SourceBundle. They retain owner/reused-work identity. No private focus seed or fabricated removal intent bypasses the canvas path. Their `refresh_draft` normalization assertions substantiate why the earlier port/state-row prediction was incomplete; **no selection rewrite is warranted by that prediction**.
All union tests and the union itself are **unrun**. Root e44's full PASS874 and later dd39 corrected style/strict/build evidence apply to their own sources; neither validates this navigation union. Before integration/acceptance, review the stale-envelope correction, run new and retained grouped/full/strict gates, and build the matching executable. Native checks remain necessary for dynamic editor focus/immediate typing and Undo, overflowing rename preview/Details return, exact diagram/port/state-row targets, canvas focus after navigation, shoulder/lifecycle selection and window/DPI behavior. Use deterministic event-order regressions for races; screenshots do not prove those boundaries.
@@ -0,0 +1,69 @@
"""Bind one serialized Windows union gate to committed inputs and actual output."""
from pathlib import Path
from datetime import datetime, timezone
import hashlib
import json
import os
import re
import subprocess
import sys
root = Path(__file__).resolve().parent.parent
source, name, mode = sys.argv[1:4]
assert re.fullmatch(r'[a-zA-Z0-9-]+', name)
assert subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=root).decode().strip() == source
out = root / '.local/navigation-palette-gates-20260913'
out.mkdir(exist_ok=True)
assert not any((out / (name + s)).exists() for s in ('.inputs.json', '.log', '.result.json'))
prefix = ['cargo', 'test', '--locked', '-p', 'oa-desktop', '--bin', 'arcadia-studio']
commands = {
'list': prefix + ['--', '--list'],
'focused': prefix + [sys.argv[4] if len(sys.argv) > 4 else 'navigation_union', '--', '--test-threads=1'],
'full': prefix + ['--', '--test-threads=1'],
'clippy': ['cargo', 'clippy', '--locked', '-p', 'oa-desktop', '--all-targets', '--', '-D', 'warnings'],
'gui': ['cargo', 'build', '--locked', '-p', 'oa-desktop', '--bin', 'arcadia-studio'],
}
command = commands[mode]
paths = subprocess.check_output(['git', 'ls-tree', '-r', '--name-only', source, 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml', '.cargo', 'build', 'crates', 'assets', 'docs', 'examples', 'harness/fixtures'], cwd=root).decode().splitlines()
blobs = subprocess.check_output(['git', 'cat-file', '--batch'], cwd=root,
input=''.join(f'{source}:{p}\n' for p in paths).encode())
offset, inputs = 0, []
for path in paths:
end = blobs.index(b'\n', offset)
_, kind, size = blobs[offset:end].split()
assert kind == b'blob'
size = int(size)
raw = blobs[end + 1:end + 1 + size]
assert (root / path).read_bytes() == raw, path
inputs.append({'path': path, 'bytes': size, 'sha256': hashlib.sha256(raw).hexdigest()})
offset = end + size + 2
assert offset == len(blobs)
manifest = out / (name + '.inputs.json')
manifest.write_text(json.dumps({'source': source, 'inputs': inputs}, indent=2) + '\n', encoding='utf-8', newline='\n')
started = datetime.now(timezone.utc).isoformat()
print(json.dumps({'start': started, 'command': command, 'source': source, 'inputs': len(inputs)}), flush=True)
log_path = out / (name + '.log')
with log_path.open('xb') as stream:
run = subprocess.run(command, cwd=root, stdout=stream, stderr=subprocess.STDOUT)
ended = datetime.now(timezone.utc).isoformat()
changed = [i['path'] for i in inputs if hashlib.sha256((root / i['path']).read_bytes()).hexdigest() != i['sha256']]
head_after = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=root).decode().strip()
log = log_path.read_text(encoding='utf-8', errors='replace')
members = re.findall(r'^([^\r\n]+): test\r?$', log, re.M) if mode == 'list' else []
artifacts = []
for match in re.findall(r'Running unittests [^\r\n]+ \(([^\r\n]+\.exe)\)', log):
path = Path(match)
if not path.is_absolute():
path = root / path
raw = path.read_bytes()
artifacts.append({'path': str(path), 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()})
record = {'source': source, 'head_after': head_after, 'start': started, 'end': ended,
'exit': run.returncode, 'command': command, 'inputs': manifest.name,
'changed_inputs': changed, 'artifacts': artifacts,
'environment': {k: os.environ.get(k) for k in ['CARGO_TARGET_DIR', 'CARGO_BUILD_JOBS', 'CARGO_HOME', 'RUSTUP_HOME']},
'listing_members': members, 'listing_count': len(members),
'listing_scope': 'Names emitted by this actual Cargo test listing; focused/full runtime results have their own receipts.'}
(out / (name + '.result.json')).write_text(json.dumps(record, indent=2) + '\n', encoding='utf-8', newline='\n')
print(log[-14000:])
print(json.dumps({k:v for k,v in record.items() if k != 'listing_members'}))
sys.exit(run.returncode or int(bool(changed) or head_after != source))
@@ -0,0 +1,59 @@
# Navigation, rename and canvas integration: partial Windows acceptance
Source **e1240295bd114d23d3f67a69e6b38bdb2e25bb0d** combines the previously
verified canvas/lifecycle/palette contribution with source/diagram navigation,
reviewed alias rename and preview-scroll behavior. This is an integrated source
checkpoint, not a combined native acceptance or release.
Composition preserves typed nested activations, lifecycle clipping, allocation,
focused canvas deletion, read-only selection paint, stable chooser identity and
custom menu cues. Early event-envelope validation now refuses stale source,
chooser, toolbar and gesture messages before they can retire a current navigation
destination or canvas gesture. Current valid actions remain usable. Port and
state-row navigation are covered through Delete and exact Undo history.
The initial source review found the stale-envelope defect. Its correction was
independently reviewed at633; root659 included that correction with the existing
dd39 test fix. Actual compilation then found two nested test-module paths that
the source review had missed. e124 adds the two explicit paths; no production
workaround or test removal was used.
All Windows gates below captured **578 unchanged committed inputs**, Rust1.98.1
gnullvm, jobs1, development/test profiles:
| Gate | Actual result |
| --- | --- |
| First listing compile,659 | Exit101, two E0583 test-module errors; no tests ran |
| Corrected listing,e124 | Exit0,1082 tests; required exact groups admitted |
| Cross-feature `navigation_union`,e124 | 17 passed,0 failed/ignored,1065 filtered;11.78s test execution |
| Mounted `preview_scroll_tests`,e124 | 4 passed,0 failed/ignored,1078 filtered;7.64s test execution |
| Strict desktop all-target Clippy,e124 | Exit0; closed2026-09-13T03:49:51.536122Z |
Listing and both executions identify the same150,072,832-byte test executable,
SHA256 `d1e4f672ca53fc914be70712cf87cb828f15181513fc9020cd02fb4d92af5c4e`.
The admission checks exact17+4 names and retained lifecycle36, activation14,
menu12, chooser14, style10, both distinct allocation modules32 each and removal18.
The first admission helper used ambiguous substrings for module names; its
rejected invocation and corrected anchored-prefix policy are explained in the
[27-payload archive](experiments/navigation-palette-e124029-windows-20260913/README.md).
Original raw receipts, logs, input manifests, helper versions and source reviews
are retained there with a byte manifest. The large executable/cache is omitted.
Reproduction uses the source commit and configured Windows Rust/LLVM environment:
```text
cargo test --locked -p oa-desktop --bin arcadia-studio -- --list
cargo test --locked -p oa-desktop --bin arcadia-studio navigation_union -- --test-threads=1
cargo test --locked -p oa-desktop --bin arcadia-studio preview_scroll_tests -- --test-threads=1
cargo clippy --locked -p oa-desktop --all-targets -- -D warnings
```
No full e124 suite, matching GUI build, combined native behavior or package is
claimed. The separate Text contribution's native Find Close word-selection
failure reaches a shared focus-restoration function in this source and remains
an explicit combined acceptance concern. [Issue27](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/27)
owns current integration; [issue13](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/13)
owns that contribution. Analysis/source8 and saved Scenario-layout candidates
remain isolated. Linux remains deferred by the user's instruction. Earlier
[dd39 native evidence](release-canvas-native-dd39e1f-20260913.md) retains its own
source scope and does not substitute for combined acceptance.