5.2 KiB
Allocation toolbar destination feedback — 2026-09-12
Worker /root/allocation_feedback_toolbar; FROZEN for root review/integration. Source worktree C:\Users\User\Documents\Git\ARCADIA-Studio\.local\allocation-feedback-20260912, branch codex/allocation-feedback-956atf-20260912, base d9b3f0dc91e8882e6efc262c2e8d971998d2694e. Seven modified files, all uncommitted. Root owns remote/shared coordination, contract change, review, compile/tests, native acceptance and integration. No Gitea, Git/index mutations, compiler, Cargo, tests or native UI run by this worker.
Remedy and rationale
Adopted root decision from the independent checkpoint review: preserve frozen hit rectangles/outlined feedback, remove the opaque duplicate canvas destination name. Destination identity occupies an always-present full-width 26px Allocation toolbar slot (allocation-destination), before the Arrange row. At rest it says no destination; during feedback it uses the captured accepted full target name, bounded to 28 characters with explicit ellipsis and a full-name tooltip. This is separate from the clipped 30px status/refusal row. Refused packets with no target say No eligible destination, never falsely Outside performers; ambiguous targets identify ambiguity and expose all captured names via tooltip. Fixed height preserves canvas bounds across gesture states. Full width costs 34px including spacing; root accepted this tradeoff because beside Arrange, minimum-width target identity would require substantially stronger truncation.
Removed obsolete label rectangles from both planner TargetPresentation and captured UI Target, their viewport/collision admission, and unused Rect.overlaps. Preserved accepted performer placement/element identity and projected visibility validation, frozen hit resolution, current selected-work header viewport validation, App readable-zoom gate, semantic/collateral/source/lifetime gates and target unfold. No model geometry, camera, resolver, schema or core edits. Exact pointer placement now succeeds at the old Receiver overlap and ordinary collapsed-header point.
Owned changed files
crates/oa-desktop/src/allocation_drag.rscrates/oa-desktop/src/allocation_drag/tests.rscrates/oa-desktop/src/app/allocation_drag.rscrates/oa-desktop/src/app/allocation_drag_tests.rscrates/oa-desktop/src/app/allocation_drag_full_tree_tests.rscrates/oa-desktop/src/diagram/work_drag.rscrates/oa-desktop/src/views.rs
Authored, unexecuted tests
Planner: original Receiver requested(120,105) now succeeds exact snapped(120,110) and roundtrips with preserved elements/inactive diagram. Obsolete label intersection boundary tests replaced by selected-header viewport edge/clipping cases. Target identity mismatch checks retained; selected clipping refusal now clips selected work rather than the removed frozen label.
OA/SA packets: original Receiver and collapsed Receiving subsystem, standard(40,35) grab into frozen header(160,140), exact(120,110), target unfold, zoom .75/1/1.25 transforms and topviewport pan(0,-100). Assert exact preview projection, full destination identity, no accepted Project/source/snapshot/history changes before release, exact final Project, one revision, exact single Undo/Redo. Existing refusal/redo/cache/source regression preserved using a genuine selected-header clipping point, followed by in-gesture geometry recovery with semantic cache identity and one commit. Clipped frozen-target-top identity regression now requires toolbar name. Added no-eligible-destination identity regression for refusal with no target.
Actual App-tree/production renderer: OA and SA each cover Receiver, collapsed long name, zoom .75 and1.25, pan -100, minimum1100x700, and minimum long truncating target name. Normal source remains y500 at large windows; minimum fixtures place source y210 so the actual press is visible, preserving standard grab and target geometry. Assert target/work pointer inside actual canvas, selected projected header fully contained, destination slot wholly inside actual window (width>=400,height26), correct exact candidate/unfold, no Project/source/history before release, exact commit/single Undo/Redo. Pixel crops prove actual destination changes idle→preview and that long status prose changes neither canvas pixels nor destination-slot pixels. Bounds remain identical idle→preview→actual clipping refusal→recovery→release. Existing production pixel isolation regression updated for removed canvas label.
Verification and gaps
Scoped existing Windows rustfmt --edition 2024 --config skip_children=true applied to the seven owned files; formatter succeeded. git diff --check passed. Source inspected for removed fields and obvious stale references. No compiler/test execution, so these are authored assertions, not passing evidence. Root must execute actual tree/render tests to validate minimum-layout assumptions (including source press visibility and viewport dimensions), full tooltip behavior, and font rendering; native packaged Windows acceptance remains required. Production render test asserts destination visibility and pixel isolation but is not human readability evidence. Root owns integrated contract/docs and decision records.