Back out the render-at-release drop presentation

The settle rule 3f4125e introduced — at release the shadow swaps for the
dropped card(s) drawn in place immediately — is withdrawn on review. The
board returns to the presentation the committed-overlay hold has always
had: the shadows keep standing at their landing slot and the originals
keep their lift until the echo reload lands, whatever the operation was,
and the real faces arrive with the snapshot that carries the write.

Gone with it: the DropLanding/DroppedItem seam and the three landing
accessors, the hold's landing/operation payload and the removesOriginals
and keepsIdentity halves it decided, the pickup-captured titles a
cross-board arrival's face needed, LaneSlot.dropped with DroppedFace and
DroppedCardFace, the strip's dropped-lane run, and the trash column's
settled tombstone rows — the same presentation at the delete gesture's
end, which goes for the same reason while the drop-to-delete write and
its shadow row stay exactly as they were.

Kept: the hold itself, which predates the commit, along with the 1500 ms
failed-write timeout, its injectable duration and its extracted expire,
and the guard that keeps a settled release past retargeting. The tests
pinning those stay; the ones asserting what the landing slot drew are
gone, and the suite now pins the hold's own claim — the arrangement does
not move at the release.

The pause between the release and the echo is therefore an open design
question again, filed on the Redesign board.

Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
This commit is contained in:
2026-07-28 09:57:32 -04:00
parent 1e65b7c986
commit 7f1adf47c5
7 changed files with 108 additions and 619 deletions
+6 -10
View File
@@ -502,13 +502,10 @@ struct BoardDropContext {
/// bracket (`BoardStore.deleteByDrag`), so a card deleted by drop is indistinguishable on disk
/// from one deleted by keystroke (04-interactions.md The trash, settled 2026-07-28).
///
/// The write is the first half; the second is the **settle** (`DragSession.commit`). The write is
/// still in flight when this returns, so the session flips from proposing to committed and the
/// slot the shadows were holding starts drawing the dropped cards themselves "at release the
/// shadow is replaced by the dropped card(s) drawn in place immediately, the appear never waiting
/// for the echo" (03-board-ui.md § Motion, sharpened 2026-07-28). The survivors and the resolved
/// operation are handed over rather than re-derived, because the overlay must show exactly what
/// this call wrote: the same run, and a copy's originals back where a copy leaves them.
/// The write is the first half; the second is the **committed-overlay hold**
/// (`DragSession.commit`). The write is still in flight when this returns, so the session flips
/// from proposing to committed and keeps drawing the arrangement it was showing the shadows at
/// their landing slots, the originals lifted out until this store's echo reload lands.
func commitDrop() -> Bool {
guard session.isActive, let kind = session.kind, let sourceRoot = session.sourceRoot else {
return false
@@ -598,9 +595,8 @@ struct BoardDropContext {
}
}
// The committed-overlay hold: keep drawing the arrangement the dropped cards included
// until this store's next snapshot.
session.commit(into: store, survivors: survivors, operation: operation)
// The committed-overlay hold: keep drawing the arrangement until this store's next snapshot.
session.commit(into: store)
return true
}