Preserve editor input context through diagram help

This commit is contained in:
2026-09-24 23:48:32 -07:00
parent f83068757a
commit 5657a996ed
33 changed files with 874 additions and 24 deletions
@@ -0,0 +1,31 @@
# Compact Help native evidence
Branch-specific evidence for [issue 39](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/39).
The [design record](../../compact-context-help-20260925.md) owns the decision and current acceptance boundary.
`native/` contains the Windows baseline captures from published source
`715036e132677dd2bc2fb37ed316d93dc9987aec`.
`candidate-f830/` preserves the independent review of source
`f83068757af885572f6b3f932d07233dd1b94b7e`, including its two failed Help workflows,
original screenshots, exact executable/runtime hashes and successful build log.
These observations must not be relabeled as acceptance of a successor executable.
The initial test compilation began at that commit; successor work was edited
while it ran. `tests.log` (nine passed, one failed fixture precondition) and
`geometry-tests.log` (nine passed, one failed destination-width invariant) are
diagnostic evidence from that cycle, not frozen-source acceptance. The geometry
run reused its test executable without recompiling. The first command's
`allocation_drag_full_tree_tests` filter matched no tests; the second used the
actual `full_tree` filter plus the affected mounted State/Process checks.
The review used a copy of `examples/release1/project.arcadia` from the published
Windows package. All 37 fixture files matched the baseline before the trial and
again after closing without saving. `baseline-proof.json` records those bytes.
The executable is a local development build, not a published release artifact.
Reproduce the build using the documented Windows gnullvm toolchain and
`cargo build -p oa-desktop --locked`. Place its matching `libunwind.dll` beside the
executable, launch it, and open an isolated copy of the release1 example. Perform
the workflows and use the window sizes in [the native report](candidate-f830/review.md).
The baseline captures establish layout comparison; the report records actual
interaction results and explicit unverified workflows.
Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

@@ -0,0 +1,49 @@
{
"baseline_binary": "2c03bd6cc3f1110c219e4f57ab94874a121590f83779239a93289b7170664399",
"baseline_source": "715036e132677dd2bc2fb37ed316d93dc9987aec",
"model_files": {
"evidence/repair-check.md": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5",
"expected-diagnostics.json": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e",
"model.json": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727",
"model.rs": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe",
"oa/activities/activity_oa_restore_work.arcadia": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f",
"oa/behavior/process_oa_assessment_procedure.arcadia": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a",
"oa/behavior/process_oa_field_procedure.arcadia": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96",
"oa/behavior/process_oa_response.arcadia": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84",
"oa/behavior/scenario_oa_conversation.arcadia": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b",
"oa/behavior/scenario_oa_full_scenario.arcadia": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5",
"oa/behavior/state_machine_oa_monitor.arcadia": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6",
"oa/capabilities.arcadia": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a",
"oa/model.arcadia": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada",
"oa/participants.arcadia": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819",
"oa/types.arcadia": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d",
"project.arcadia": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda",
"README.md": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5",
"sa/behavior/process_sa_assessment_procedure.arcadia": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d",
"sa/behavior/process_sa_field_procedure.arcadia": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2",
"sa/behavior/process_sa_response.arcadia": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52",
"sa/behavior/scenario_sa_conversation.arcadia": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2",
"sa/behavior/scenario_sa_full_scenario.arcadia": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda",
"sa/behavior/state_machine_sa_monitor.arcadia": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8",
"sa/capabilities.arcadia": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645",
"sa/functions/function_sa_audit_thresholds.arcadia": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686",
"sa/functions/function_sa_restore_work.arcadia": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c",
"sa/model.arcadia": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395",
"sa/participants.arcadia": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84",
"sa/types.arcadia": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064",
"traceability.arcadia": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116",
"transition-before.json": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d",
"transition-request.json": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a",
"views/diagram_oa_allocation_view.arcadia": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624",
"views/diagram_sa_allocation_view.arcadia": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6",
"views/diagram_sa_capability_view.arcadia": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2",
"views/diagram_sa_service_view.arcadia": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c",
"views/diagram_sa_state_view.arcadia": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
},
"matching_files": 37,
"baseline_captures": {
"baseline-allocation-compact.png": "d92a0cca62a038dcf0894d92b37a64028342c2365e3fb8880ed597222123d96f",
"baseline-trace-compact.png": "b608a3d75612d8c06aacc094a7aebd12a0798ce30f2126c00bc3ad61a9103217",
"baseline-trace-normal.png": "6dfb6c595af4247aab3600da0e0a25ba4b11151436e9fc4a406f1036053f71d0"
}
}
@@ -0,0 +1,6 @@
{
"runtime": "F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4",
"source": "f83068757af885572f6b3f932d07233dd1b94b7e",
"buildExit": 0,
"binary": "C1A9B196EC03E86F049FA2AAD2B86BFCAA3F0FBAE582A80EE39EE8ADF0758E3E"
}
@@ -0,0 +1,2 @@
Compiling oa-desktop v0.2.0 (C:\ar-compact-01a0d717\crates\oa-desktop)
Finished `dev` profile [unoptimized] target(s) in 1m 46s
@@ -0,0 +1,26 @@
running 10 tests
test app::allocation_drag::tests::full_tree::actual_app_tree_dirty_description_retains_focus_and_middle_caret_for_next_key ... ok
test app::allocation_drag::tests::full_tree::actual_app_tree_dirty_name_retains_focus_and_middle_caret_for_next_key ... ok
test app::allocation_drag::tests::full_tree::actual_app_tree_exact_incoming_drag_keeps_destination_visible_and_canvas_stable ... FAILED
test app::allocation_drag::tests::full_tree::actual_keyboard_arrange_shortcut_consumes_once_escape_cancels_and_dirty_owner_refuses ... ok
test app::allocation_drag::tests::full_tree::actual_rendered_canvas_pixels_do_not_change_when_toolbar_feedback_text_changes ... ok
test app::allocation_drag::tests::full_tree::actual_toolbar_hover_inspects_last_full_name_without_authorizing_an_outside_drop ... ok
test app::allocation_drag::tests::full_tree::control_focus::dirty_selected_pin_outer_ring_keeps_real_name_focus_and_caret ... ok
test app::process_canvas::tests::direct_process_app_save_details_resize_and_passive_geometry_keep_drafts_and_camera ... ok
test app::state_diagram_tests::picker_escape::mounted_state_missing_picker_escape_preserves_exact_document_then_reopens_and_places ... ok
test app::state_multiselect_focus_tests::mounted_state_selection_and_missing_picker_never_resize_or_refit_the_canvas ... ok
failures:
---- app::allocation_drag::tests::full_tree::actual_app_tree_exact_incoming_drag_keeps_destination_visible_and_canvas_stable stdout ----
thread 'app::allocation_drag::tests::full_tree::actual_app_tree_exact_incoming_drag_keeps_destination_visible_and_canvas_stable' (880) panicked at crates\oa-desktop\src\app\allocation_drag_full_tree_tests.rs:308:5:
Rectangle { x: 274.0, y: 242.59999, width: 328.21484, height: 26.0 }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
app::allocation_drag::tests::full_tree::actual_app_tree_exact_incoming_drag_keeps_destination_visible_and_canvas_stable
test result: FAILED. 9 passed; 1 failed; 0 ignored; 0 measured; 1532 filtered out; finished in 26.81s
@@ -0,0 +1,27 @@
# Independent native review: compact contextual Help
Reviewed candidate source `f83068757af885572f6b3f932d07233dd1b94b7e`, executable SHA-256 `C1A9B196EC03E86F049FA2AAD2B86BFCAA3F0FBAE582A80EE39EE8ADF0758E3E`, runtime SHA-256 `F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4` (build.json). Review used Windows native Computer Use with the copied `model/project.arcadia`, normal 1440x900 and configured minimum 1100x700 client sizes (captured windows 1442x932 and 1102x732). Original examples and unrelated windows were not edited. This review belongs to this candidate, not a subsequently rebuilt executable.
## Findings requiring correction
1. **Help has no working keyboard reading route for overflow.** Open Architecture Help with F1. Press PageDown; the article does not move. Tab followed by PageDown does not move it. Clicking the article then PageDown also does not move it. Pointer wheel scrolling does work. Moved gesture instructions fall below the fold, so keyboard users cannot reach all the guidance. Evidence: `03-help-normal.png`, `04-help-keyboard-no-scroll.png`, `06-help-pointer-scroll.png`. Integration owner independently confirmed missing keyboard handling and is preparing a fix.
2. **Help dismissal loses draft input focus/caret continuation.** In minimum Traceability, click inspector Name, press Home, type `DRAFT `, press F1, Escape, then type `X` without clicking. The retained field remains `DRAFT 1...`, rather than becoming `DRAFT X1...`. Repeat with Process W -> empty canvas -> pending contribution name `Review draft` -> F1 -> Escape -> type `X`; text remains `Review draft`. Draft text is retained and no model mutation occurs, but typing cannot resume at the previous caret. Evidence: `08-property-draft.png`, `09-property-focus-lost.png`, `14-process-pending.png`, `15-process-pending-focus-lost.png`.
## Additional observation
State still draws a permanent generic instruction at `behavior/state_canvas.rs:1500`: "Select / move ...". At the minimum width it is truncated near "transition endpoin..." (`11-state-minimum.png`). Move this idle instruction to Help while preserving active tool/selection warnings. This is separate from the removed toolbar hint.
## Verified workflows and layout
- Opened only the isolated copied water-pressure source project. Initial launch helper timed out waiting for a targetable window; a fresh window enumeration found the normal application. A file-dialog accessibility set-value operation also timed out; re-observation showed no filename change, and ordinary pointer focus/text entry succeeded. These are recorded as tooling delays, not application defects.
- Switched OA Allocation to Traceability through View content. All trace actions remain visible. At normal size canvas top moved from baseline approximately y=417 to y=356; at minimum size from approximately y=470 to y=356. The same baseline fixture and panel state were used; this recovers approximately 61 and 114 vertical pixels respectively. Evidence: `02-trace-normal.png`, `07-trace-minimum.png`, baseline files under `../native/`.
- Minimum Allocation canvas starts around y=356 versus baseline y=414, recovering approximately 58 pixels. Destination and Arrange controls remain visible (`10-allocation-minimum.png`). Arrange arms visibly and Escape removes its armed button state. The historical operation-status text remains in the footer after cancellation; no claim of full status-lifecycle coverage is made.
- F1 and visible Help both open the overlay. Close and Escape dismiss it. Pointer article scrolling works. Resized the native window from normal to minimum while Help was open; header/Close and article remain reachable (`05-help-minimum-resized.png`). The underlying view remains selected after closing, and its camera updates to the smaller viewport.
- Property draft text survives Help, and Revert restores accepted name. Undo restored the temporary Traceability projection change and the application showed all changes saved.
- State and Process F1 select the correct States and Chains articles. Their compact selection rows and Help control are visible at minimum size (`11-state-minimum.png`, `13-process-minimum.png`). Created a State region, then exercised Undo/Redo/Undo; object and check counts returned to the fixture baseline (94 objects, 62 links, one check). Evidence: `12-state-redo.png`.
- Process W -> blank canvas opens a pending contribution form. Named draft survives Help. Disabled Create, source chooser explanation and Cancel remain visible at minimum size. Cancel returned to the existing Process without creating an object.
- Closed the reviewed application through Alt+F4 after restoring the clean model. No save was performed.
## Remaining native coverage
Do not infer multiselection, long-name group-control layout, source-editor caret preservation, operation-failure coexistence with active guidance, or full Scenario coverage from these observations. The supported Computer Use input API has no modifier-click or key-hold action; source inspection found Shift-click selection but no ordinary-diagram marquee implementation. Native group verification therefore remains a gap. Keyboard reading and property/behavior caret continuation must be rechecked on the successor candidate, together with any affected input behavior. Screenshots alone do not establish these interactions.
@@ -0,0 +1,35 @@
Compiling oa-server v0.2.0 (C:\ar-compact-01a0d717\crates\oa-server)
Compiling iced_widget v0.14.2 (C:\ar-compact-01a0d717\crates\vendor\iced_widget)
Compiling oa-core v0.2.0 (C:\ar-compact-01a0d717\crates\oa-core)
Compiling iced v0.14.0
Compiling oa-desktop v0.2.0 (C:\ar-compact-01a0d717\crates\oa-desktop)
Finished `test` profile [unoptimized] target(s) in 20m 57s
Running unittests src\main.rs (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\arcadia_studio-c5b42126ba36cd38.exe)
running 10 tests
test app::context_help_tests::context_help_accepts_live_process_viewport_and_rejects_stale_measurements ... ok
test app::context_help_tests::context_help_disables_allocation_input_including_early_work_drag_dispatch ... FAILED
test app::context_help_tests::context_help_escape_preserves_pending_behavior_form_and_blocks_submit ... ok
test app::context_help_tests::context_help_f1_selects_scenario_topic_without_leaving_the_workspace ... ok
test app::context_help_tests::context_help_preserves_group_property_draft_camera_and_model ... ok
test app::context_help_tests::context_help_rejects_a_reference_picker_open_queued_from_the_inspector ... ok
test app::context_help_tests::context_help_retains_source_draft_and_rejects_background_source_input ... ok
test guide::tests::filtering_and_related_navigation_keep_selection_visible ... ok
test guide::tests::guide_topic_navigation_resets_only_article_and_same_topic_search_keeps_scroll ... ok
test guide::tests::search_finds_concepts_in_walkthroughs_and_api_reference ... ok
failures:
---- app::context_help_tests::context_help_disables_allocation_input_including_early_work_drag_dispatch stdout ----
thread 'app::context_help_tests::context_help_disables_allocation_input_including_early_work_drag_dispatch' (3680) panicked at crates\oa-desktop\src\app\context_help_tests.rs:225:5:
assertion failed: app.allocation_input_owner()
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
app::context_help_tests::context_help_disables_allocation_input_including_early_work_drag_dispatch
test result: FAILED. 9 passed; 1 failed; 0 ignored; 0 measured; 1532 filtered out; finished in 0.42s
error: test failed, to rerun pass `-p oa-desktop --bin arcadia-studio`
Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB