Files
ARCADIA-Studio/harness/scenario-group-spacing-policy-20260924.md
T

6.7 KiB

Saved Scenario group spacing

Derived from issue 29, the user-owned graphical editing requirements, the multiple-selection contract, and existing Saved singleton spacing. This specifies the next bounded implementation, not completed runtime acceptance.

Intent and scope

Ordinary dragging in a Saved Scenario already adjusts presentation spacing. Extend that operation to the complete homogeneous selected group: messages move their authored send coordinates by one vertical delta; lifelines move their authored horizontal positions by one horizontal delta. Measure each original coordinate from the actual rendered local occurrence, including lifecycle messages whose displayed receive row differs from the send endpoint. Click order and the pressed member do not choose a subset, reorder semantics or change primary.

Selected local messages may span immediate operands because spacing does not change their containment or step lists. All original targets must be unique, locally owned and actually rendered in the admitted Ready saved representation. Reject mixed lifeline/message sets, unsupported body/typed targets, foreign/referenced subjects, missing/ambiguous targets and fallback/unavailable originals as complete sets. Do not filter to eligible members. These refusals delimit this increment; mixed presentation movement, semantic reorder and aggregate removal remain required follow-ups.

Prepare all changed positions together in one command batch and validate the complete candidate geometry once. Preserve every semantic declaration, sequence, reference, binding, other view, route and unrelated authored position. The presentation resolver remains authoritative for legal layout; visible dependent geometry may respond to the new positions. Do not promise rigid translation of every line point, since lifecycle and other derived geometry already has its own constraints. Reject an invalid whole candidate without partially applying a member. A point whose requested delta is below its representable precision should not materialize or normalize its unchanged override.

Input and lifetime

Capture full Scenario document/owner/representation/visit/revision/epoch, camera/bounds and exact shared selection Snapshot. Copy event packets carry the captured selection generation; admission matches it and context before capturing the full live Snapshot into the session. Every later packet must match the same session token/stamp and full snapshot before status, selection, reconciliation or mutation. Selection-generation changes, source/model changes, representation visits, camera/bounds changes, focus loss, Escape and outside release retire the applicable input lifetime.

The original pressed member must belong to a captured group. First-press movement onto a different singleton retains existing behavior. A stationary release on a selected group member performs the existing explicit collapse to that member. For groups, once pointer displacement reaches three screen pixels in any direction, returning to the origin or moving only along the inactive axis is a no-op retaining the group and primary, not a delayed collapse. Singleton threshold semantics remain unchanged. A preview retains the original group/primary and frozen camera; it changes no document/source/history.

Consume admitted terminal outcomes and admitted failed starts even if the document is unchanged, so an old Begin cannot restart after cancel/no-op/refusal. Reject stale packets before they can consume a newer operation. Commit one Document transaction after revalidating the captured selection; a source-write failure preserves the accepted document/source/history, camera and complete group. Successful Undo/Redo and reopened source must reproduce the complete expected project. Selection membership is transient and is not persisted into source.

Movement ineligibility must not disable ordinary selection: an otherwise admitted stationary press/release on a mixed group's member still collapses to that member. A pending eligibility refusal may retain that member's original display as a hit/camera witness, but must never prepare or preview its singleton move. Once movement crosses the threshold, report the complete-set refusal and preserve the group.

Priority decision and alternatives

The existing semantic sibling-block planner remains useful but does not fulfill the user's ordinary group-move request. Extending default Saved spacing now is more direct than first building an explicit semantic reorder handle or one-shot arm. It also avoids silently giving the same body drag a different meaning for singleton versus group. This changes implementation priority, not the semantic reorder contract.

For the later explicitly named Reorder operation, compare a fixed drag handle plus order preview with a compact destination chooser plus the same preview; an arm introduces an extra lifetime and potential next-drag ambiguity. Saved authored positions may differ from semantic order, so exact before-anchor/parent and proposed/resulting order must be observable. Geometric input must use its actual nearest slot without substituting a farther legal target; direct named-slot choice is a distinct input contract that must be specified explicitly. The comparison and unavailable-candidate-display policy remain open; no chooser or handle is accepted here.

Discriminating acceptance

  • Shift-select two messages in reverse order and drag either member; both send coordinates change by the same world delta, primary/membership and all semantic steps/other views stay exact. Repeat with two lifeline headers and a horizontal delta.
  • Verify actual outgoing positions for lifecycle/self/repeated messages, local cross-operand groups, absent and existing overrides, and deterministic whole results independent of pressed/click order.
  • Preview remains transient and displays the whole selection. One commit, one Undo/Redo, save/reopen and the following singleton spacing operation retain their intended meanings.
  • Stationary collapse, off-axis drag, out-and-back, cancellation and invalid destination preserve the appropriate group/document and an existing redo branch. Mixed or hidden sets never become primary-only operations.
  • Reject selection ABA, representation A→B→A, stale Begin/Hover/Finish/Cancel and duplicate packets before newer state is disturbed. Include dirty source/property drafts and atomic source-write failure.
  • Run a mounted pointer/selection sequence and real packaged/direct desktop workflows, inspecting feedback and preserved group. Automated input and native operator evidence remain distinct; do not claim unexercised held-modifier accessibility or general usability.