# Canvas correction evidence — 2026-09-12 This is a branch-specific correction checkpoint, not release acceptance. Live ownership and acceptance remain in Gitea [15](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/15), [21](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/21) and [25](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/25). ## Implementation and evidence boundary - `24bb248` preserves an existing diagram keyboard owner across revision changes and passive Save, while suspended input cannot acquire ownership or retain a held gesture. The Windows `app::diagram` gate passed 22 tests and failed the persisted state-placement Save/Undo regression. That failure remains archived; this source did not satisfy the focus acceptance criterion. - `e2c027e` fixes the underlying state view's positional Iced tree replacement: optional placement controls now occupy a stable child slot ahead of the canvas. Hide/Undo no longer changes the canvas widget's position in its parent. The strengthened test keeps the actual Save/Undo/Delete sequence and observes focus through each intermediate redraw. The later source83 gate and native trial below verify this correction. - `956a584` derives activation segments from typed call/receiver/scope identities and compatible reply correlations. It uses distinct columns for overlapping calls and exact activation endpoints for replies, including self-calls. The source includes twelve production-scene tests, passed in the source83 gate. Its native trial below found a separate paint-order defect. Hit tests at small zoom do not establish raster legibility. The 12-unit bar width and 6-unit offset remain a visual candidate until the actual application has been inspected. - `b25065c` removes the redundant Canvas and Focus canvas/Restore panels buttons. Pointer editing already worked without activation. Strict all-target Clippy at combined source `e2c027e54c6be0d051820374f669c52278d90f97` failed on two obsolete `CanvasEvent::Focus` variants used only by tests. The 533 recorded inputs were unchanged. Removing the stale panel-mode paths and updating dependent tests is required before a new gate; warnings are not suppressed. `40154983cc86ac0a45b062d7381124f262adbb3d` removes the obsolete panel event/state, App whitelist/dispatch and conditional panel layout, plus the unused one-way toolbar focus route. F6, Tab, direct pointer ownership and text-field protection remain. Tests now exercise the surviving Zoom/Details/tool controls while keeping pending-draft, history, stale-input and caller-return checks. Current guide text no longer instructs users to press removed buttons. A [fresh independent source review](experiments/canvas-editing-followup-20260912/independent-focus-review.md) found no actionable defect in the bounded correction and verified the state picker's stable Shrink slot against Iced internals. It does not establish runtime acceptance or process/scenario Save focus continuity; those workspaces use a separate Viewport lifetime policy. Subsequent execution is recorded below. The full Windows suite at 4015498 closed with **833 passed, one failed**, zero ignored and all 533 inputs unchanged. Compilation took 3m58s and tests 360.78s. The state placement Save/Undo regression and all twelve new activation tests passed. The sole failure was the old atomic call/reply test's assertion that the call appeared as an 8-unit generic box (`scenario.rs:3256`). That is the removed drawing representation. Correction **83f53c7** retains the atomic edit, canonical source and Undo assertions, and checks one typed activation's exact call/receiver/scope/reply identity, finite positive rectangle, actual receive/send endpoints and an interior selection outside message hit regions. A new full gate is required; the failed run is preserved without relabeling it as passing. The new full gate at **83f53c7c6e277e250f06d2ae6bfa6a7988bd2e4b** passes all **834 tests**, with zero failures/ignored and all 533 inputs unchanged. It ended 2026-09-12 at 22:30:30 UTC; test time 351.59 seconds. Input-manifest SHA-256: `691ffd5a808839e5e2b7260afebde2607e3720e819ab30f88053c1ec51edb0bd`. This includes the actual persisted-state focus regression, revised atomic call/reply evaluator and twelve activation cases. Strict all-target Clippy with warnings denied and the GUI build also pass on that exact source and input manifest, ending at 22:32:41 and 22:35:05 UTC respectively. The staged executable SHA-256 is `49eb87b4a239c586a16b9efbfd036b3823adc8b62a8992feeaa934bca4f5743b`. The [subsequent native trial](release-canvas-native-83f53c7-20260912.md) passes the architecture/state Save/Undo focus sequences and bound source Save/reopen, but exposes opaque message-label backgrounds interrupting activation borders. Correction **d61f1f3** moves those backplates behind bars and aligns exposed-bar hit priority, preserving precise message selection. It adds actual rendered-pixel continuity and OA/SA Scene selection regressions. Its new gates and native recheck remain separate from the source83 evidence. The full Windows gate at **d61f1f38779ab70a77efcde523ae31c432aefcfd** passes **836 tests**, with zero failures/ignored and all 533 committed inputs unchanged. It closed at 23:39:26 UTC on 2026-09-12; compilation took 8m40s and the tests 1793.80 seconds. Input-manifest SHA-256: `67ce23fbbcc30ff8c4d78898e9d12030ac07dc507c41d7598c5fe38e88c055bf`. Both the rendered border-continuity test and the OA/SA exposed-shoulder and exact message selection test pass. Strict all-target Clippy with warnings denied also passes at 23:42:36 UTC, followed by the matching GUI build at 23:45:13 UTC. Both use the same 533 unchanged inputs and manifest. The [source-identified native recheck](release-canvas-native-d61f1f3-20260912.md) passes the former border-overlap and call/reply selection cases in OA, SA and reentrant scenes, including an exposed shoulder at 66% Fit in the minimum window. Save preserves the exact Project/SourceBundle; the trial closes with exit 0. The [closed gate receipts](experiments/diagram-removal-windows-20260912/archive-manifest.json) identify the exact commands, input bytes, source commits, failures and logs. Earlier full-suite and native results in [the deletion report](release-delete-native-f7-20260912.md) do not establish acceptance of these production changes. ## Scenario evaluator preparation The [source and review archive](experiments/canvas-editing-followup-20260912/manifest.json) preserves design/review notes, fixture builders, exact build/run receipts and generated source. Builders link the identified existing core artifacts only after verifying their source inputs against the completed core-containing gate; this is not a desktop build or desktop rendering check. The draft fixture passes core validation and complete canonical round trip with 132 elements and 77 completeness warnings. It covers OA/SA nested, sequential, crossed, self, reentrant, open, ALT and PAR cases. It deliberately lacks exchange bindings and values, so a separate bound fixture supplies those checks. The corrected bound fixture compiles with warnings denied and generates three scenarios with 34 elements, 6 relations, zero errors and two completeness warnings. It preserves complete Project canonical round trip and exact SA operation resolution. OA uses an Operation information item carried by an Interaction; SA uses standard component ports, required/provided interfaces, synchronous item allocation, a boundary exchange and explicit Call operation use. Replies derive the exact correlated Call allocation. A third OA scenario exercises reentrant calls using the explicit reverse Interaction. The nested sequence is C1, C2, R2, R1. Requests are 420.0 and 380.0 kPa; replies are 418.0 and 378.0 kPa. Unicode labels are preserved. The generated [identity table](experiments/canvas-editing-followup-20260912/bound-nested-fixture-r1-20260912/scenario-identities.tsv) and [model](experiments/canvas-editing-followup-20260912/bound-nested-fixture-r1-20260912/bound-nested-calls.arcadia) make native selection and value inspection reproducible. The first bound builder compiled but failed during fixture construction: it used the OA Actor kind for SA and attempted a generic Port constructor. Its exact source and failure receipts are preserved. The correction uses SystemActor and the dedicated port constructor; validation assertions were retained. The linked native trial establishes its bounded Save/Undo, source persistence and pointer/text-focus results. The rendering correction has its own passing gates and bounded native recheck linked above. Broader process/scenario free placement, resizing and the Details redesign are separate outstanding requirements; these corrections do not close them. Linux/WSL checking remains deferred by the user.