Files
ARCADIA-Studio/harness/drag-out-20260925.md
T

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.