8.5 KiB
Allocation drag UI source handoff — 2026-09-11
Codex-956atf /root/allocation_drag_ui, delegated by root under issue 3's expanded UI scope (comment 472). This is an isolated, uncommitted source contribution. Root owns independent review, the compiler lane, native acceptance, integration and publication.
Worktree: C:/Users/User/Documents/Git/ARCADIA-Studio/.local/allocation-drag-worktree-20260911, parent-provided branch codex/allocation-drag-956atf-20260911, base abffa4b3f0a859d7439103100f59805804d46e55. Root instructions, PROJECT_GOAL, the original independent review and adopted v2 contract were read. User-owned input, core/schema/behavior/guide sources, the frozen pure planner/tests and peer CreateContextElement logic were not edited. No compiler/Cargo/test/native execution, Git/index command, Gitea mutation, Linux/WSL, VPN operation or subdelegation occurred.
Apply the focused changes to shared files against that base; do not replace a newer root app.rs, diagram.rs, views.rs or their tests wholesale. In particular preserve the root canvas and peer child-work changes integrated after this worktree's base. The five existing test-helper files below have only mechanical allocation: None constructor additions and formatting.
Implemented seams
app/allocation_drag.rsowns clean input admission, selection withoutselect/apply, a monotonic input epoch, accepted snapshot identity, token registration/consumption, per-leaf stable IDs, destination-keyed semantic plans and retryable status. Stamps include document instance/revision/diagram/context, input epoch, snapshot identity, exact bounds, pan and zoom. Ordinary App input retires the token before dispatch; passive updates retire it when the measured boundary changes. Keyboard/focus events retire a held gesture; modal/tool/Undo/Fit round trips cannot revive it. Old motion/release packets cannot cancel a newer token.diagram/work_drag.rsand localizeddiagram.rswiring preserve ordered native positions and the existing three-screen-pixel threshold. Work-body press, preview and release messages can be emitted before Iced rebuilds; App processes their shared token in order. Dirty Allocation object presses are intercepted before node/port/edge selection. Non-Allocation and non-work gesture paths retain their previous implementation. Existing test constructors explicitly opt into that legacy path; new mounted tests use the production capability.- Accepted visible performer regions, semantic ancestry, other cards, ports, route segments/handles/labels and the viewport are frozen at press. Resolution uses half-open boundaries, deepest semantic ancestry, explicit incomparable overlap refusal, and exposed-space occlusion. Collapsed targets expose only their header. Q cards and their port glyphs do not occlude their moving ghost. Outside release cancels, never unassigns. The fixed feedback overlay band is also excluded from destination hits.
- App preview owns the pure SemanticPlan and PlacementPlan. Candidate node/port drawing, relationship details and routing use that plan's Project and its own ViewIndex; the accepted semantic cache does not substitute for it. A separate passive WorkFeedback canvas paints the frozen target outline/label above candidate text. The destination/refusal text also persists in App status after release. Low zoom (work/target 16-world-unit type below 9 screen pixels) gives a readable retry refusal; no automatic Fit or packing is introduced.
- The final optional Batch goes directly through
Document::execute, avoiding unrelated App selection/repair helpers. The pure finish gate is rerun at release. Source rejection leaves the document/history intact; clean snapped no-ops do not execute. Work remains selected after a successful commit. Arrange next drag is visibly armed, consumed on press and cleared by cancellation/lifetime changes. Existing whole-view Arrange is relabeled Auto-layout to distinguish it.
The frozen pure planner remains SHA-256 761921A1DD608873DDECFBC138685D40A1F557BC3B619E02D90231E13814B433. Root reported its separate warning-denied direct harness and 29 component tests passing; that evidence does not validate this UI contribution.
Authored verification and remaining gates
app::allocation_drag::tests contains 19 unexecuted tests:
- Actual DiagramCanvas → App clean stationary selection; dirty property raw input/value/editor cursor and selection preservation; dirty nearby port interception; pending source/behavior, busy and modal admission.
- OA and SA ordinary incoming → reassignment → outgoing through an ordered native event batch, exact relation identity/metadata, work elements, source compile round trip and one-step Undo/Redo snapshots.
- Modal round trip, equal Fit/Undo, measured resize, Escape/unfocus, equal document replacement and actual canvas-origin change retirement; stale packets leave a newer token alone; release consumes once.
- One-shot Arrange consumption, snapped no-op preserving Redo, outside-viewport cancellation, atomic Document source-budget refusal and a fresh live-state retry.
- Semantic plans reused within/revisiting one target, distinct plans and stable relation IDs across targets, own-index projection; same snapped root point on opposite sides of a target border still rebuilds destination semantics even where conservative layout gates refuse placement.
- Semantic nested priority versus geometric peer overlap, half-open shared borders, card/overlay/port/edge controls and collapsed-header target regions.
- Role-only outward refusal with unchanged placement; same-effective arrangement without a direct Allocation; uniform folded parent drag moving its hidden child placement and assigning only semantic leaves.
Actual local validation is limited to successful scoped rustfmt.exe --edition 2024 --config skip_children=true parsing/formatting of the changed Rust files, source inspection and SHA-256 capture. No test pass, type-check pass, GPU behavior or native usability is claimed. The root compiler lane must run the 19 mounted tests, planner regressions and relevant existing App/diagram/architecture regressions, then independently review the integration.
Native acceptance remains required at 1100×700 and wider for normal empty/incoming/between/outgoing and uniform composite tasks; exact highlighted destination, candidate ports/routes and target readability; source comments/save/reopen; dirty text-control focus retention (the authored test checks editor cursor data, not native widget focus); keyboard activation and Escape; source refusal; target occlusion and cancellation. The renderer's label sizing and the low-zoom readability threshold are unverified heuristics. Frozen target outlining does not claim large-model layout usability. Mixed/distributed layout, role exit and collateral repair deliberately retain the planner's named refusals.
Frozen changed Rust sources
| Path relative to worktree | SHA-256 |
|---|---|
crates/oa-desktop/src/app/allocation_drag.rs |
40A57B54334477B5940C9DEC1E1F9E72AC2091672B2B352DDE0404AB58E883ED |
crates/oa-desktop/src/app/allocation_drag_tests.rs |
B0421511F945B76759F3162AABCCE6EE8BD988FA1FD836F450E0E1AF04A53845 |
crates/oa-desktop/src/diagram/work_drag.rs |
63818235CE77788975643B7BC5B44D133F72D3461ACC4F2A172F4407C495EDB7 |
crates/oa-desktop/src/app.rs |
03BA30E32FC8D7F67DABE2C6A928629D76AE856B07F2FCF6273D340128EF44CE |
crates/oa-desktop/src/diagram.rs |
A640B94EDDFFE57DCA51A9BCE8527E3FE51799CB6EFD30A69F54F26F8AAE999A |
crates/oa-desktop/src/diagram/port_labels.rs |
6643F0CBDE7A59D4772AE5284A488083E3B81F2FEFABC43619D75738F474646F |
crates/oa-desktop/src/views.rs |
F583BCF9D4A7ED90D2DE17E7D1321CB311071EC6C637DF4153F4D1D9088F44DE |
crates/oa-desktop/src/main.rs |
3C3EC86149393111275B811C28585CDB72BD99FA31FF23E746D76DEA4C3CFDF2 |
crates/oa-desktop/src/diagram/port_hit_tests.rs |
C3728F127711CB6D7F80A4670A798808B6E4239DD29C273445DE81706AB6F39E |
crates/oa-desktop/src/diagram/pointer_tests.rs |
AE68E091032FE2CF71559FF7E671B3B6D657EE8279330345F0C7A57EDFA472EF |
crates/oa-desktop/src/diagram/lifecycle_tests.rs |
03DD13106F3FDD06A26699BFDFBA006FAD086A0711CAD2BA1AEB09A4E8F8656E |
crates/oa-desktop/src/app/architecture_authoring_tests.rs |
2C41129220D103030E7EF22A14409CF8D874401CB1C767462BC27B8BB219628B |
crates/oa-desktop/src/app/architecture_authoring/tests.rs |
887D877FE33C45F2834A918D33F9A834E8A46BB65E07961F629265982F55BBE9 |
This handoff itself is the fourteenth changed path. It contains no live task ledger or independent publication claim.