4.8 KiB
Outgoing allocation dragging
Scope: issue 40,
based on published Windows source 715036e132677dd2bc2fb37ed316d93dc9987aec.
This contribution is not integrated release acceptance. User requirements remain
in PROJECT_GOAL.md; this note records a revision to derived interaction policy.
Reproduction and cause
The released executable SHA256
2c03bd6cc3f1110c219e4f57ab94874a121590f83779239a93289b7170664399
opened a copied Allocation/Process companion fixture on Windows. At 1440x900,
72% Fit, the OA assign view's X-receive was dragged from window (486,546) to
(365,546), just beyond A's left edge. It remained assigned at its original
position, reporting enlarged card overlap. A control drag to (625,572) removed
assignment; Undo restored the original scene. These are actual native end-state
observations; intermediate jitter was diagnosed from source, not frame capture.
Frozen targets resolve from the pointer, while placement retains its grab offset. The pointer therefore leaves its performer before the full work card does. Former parent/child intersection becomes unrelated overlap after removing allocation. Refused motion previously cleared the preview and redrew the saved scene. Additionally, whole-header viewport containment rejects a useful outgoing position in the fitted reproduction even when its model geometry is valid.
Selected policy
Try exact snapped pointer placement first. Only an outgoing assignment candidate with a placement refusal may propose bounded source clearance: move the entire captured work footprint through a crossed frozen source boundary, clearing the post-removal source enclosure by one 10-world-unit grid cell. Consider at most four directions, ordered by press-to-pointer boundary-crossing fraction and a fixed direction tie-break. Existing placement, collision, semantic, exact-command and source/history admission remain authoritative. No neighbor is moved, no general packing/search occurs, and no semantic refusal is overridden.
The accepted/candidate semantic indexes are reused during fallback projections. Outgoing headers may be partly clipped but each must retain a 24x24 logical-pixel grab region. Other assignment and Arrange visibility rules remain unchanged. The exact corrected candidate is previewed; release recomputes it. Blocked in-bounds motion retains its last admitted scene and adds an orange pointer outline. This display state confers no permission to commit on refused release. Cancel, outside release and gesture invalidation retire it normally.
Rejected alternatives: retaining a moving outline alone leaves the boundary
dead band; allowing unrelated overlap makes unassigned work look allocated;
general auto-layout changes unrelated placement and makes drag intent harder to
predict. The previous unconditional pointer-offset rule is narrowed in
docs/language.rst and its HTML copy. Real neighboring-card collisions and
insufficient visible grab area can still refuse a drop.
Verification status
Independent source diagnosis and repair critique found no semantic/stale/cancel
bypass. Review exposed the remaining whole-header camera restriction and an
obsolete retained-preview assertion; both were revised. Added checks cover
OA/SA boundary clearance, corners, source shrinkage, rigid descendants/groups,
real App frame-by-frame input, exact source/history, cancellation, blocked release
and outgoing grab-area boundaries. At clean source
1a669130fb6d2b65279aab3847e966a1a282c191, the Windows allocation-drag
suite passes 121 tests (none failed or ignored; 1,424 filtered out), strict
desktop all-target Clippy passes, and the normal desktop development build
passes. Raw results and reproduction commands
preserve the source, platform, failed attempts and exact scope. These checks do
not prove native usability. Computer Use was stopped with the physical Escape
key before the changed executable could be inspected. Fitted-view dragging,
clipped-card identification/regrabbing, native Undo/Redo and Save/reopen remain
unverified. The issue remains open; no integration or release acceptance follows
from the targeted gates.
The first build attempt failed before tests because the sparse checkout omitted
build/windows_manifest.rs; restoring the tracked build directory corrected the
checkout. The local drive initially had about 22 MB free. Git sparse checkout and
Cargo's package-scoped cleanup of inactive desktop artifacts recovered capacity.
Automatic review rejected recursive deletion of the extracted preview; it was
left intact. No published package or unique evidence was deleted.
The second attempt also exposed omitted tracked harness fixtures and a Self
typo in a standalone test helper; both were corrected before the passing run.
That failed compiler process was terminated after its errors were captured.