- Link details replay by what they changed. LineUpProvider.replayLinkDetails writes the edit onto the link as it is now and returns an inverse holding only the fields that took a new value and the images actually put in or taken out; null when nothing changed. A redo that removed nothing can no longer set up an undo that brings back an image a teammate removed, and an edit that also changed notes replays only the notes. - History reconciliation follows each stack in replay order from the page as it is now and keeps a step only if what it acts on will be there when its turn comes (an undo step recovers a deleted target only through a deletion undo reaches first; a redo step only through an addition redo reaches first). It replaces the rule that any addition or deletion anywhere in history kept an edit alive. - Undo and redo step past entries that change nothing, dropping them, so one keypress does something visible while anything is left. - A clear no longer copies or filters the history before it: it is one step holding its deletions. Entries below it are only reached after it is undone, which restores their objects. Alternating clears grew history exponentially (150,039 retained entries after 20); they now grow linearly. History keeps the latest 200 steps. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
5 files changedLine totals unavailable