# Finish applied-effect undo for lineup images and stale entries \(\#200\) · dara/icarus

[View on GitCafe](https://git.cafe/dara/icarus/commit/217c07af4e5afcb810f45e68736705a782df931e)

Repository: [dara/icarus](https://git.cafe/dara/icarus)

Visibility: public

Requested revision: 217c07af4e5afcb810f45e68736705a782df931e

Requested commit: 217c07af4e5afcb810f45e68736705a782df931e

Commit: 217c07af4e5afcb810f45e68736705a782df931e

Tree: b22391b674c6c1f21b382840db2a072fe6a341e0

Author: Dara Adedeji

Committer: GitHub

## Message

```
Finish applied-effect undo for lineup images and stale entries (#200)

- 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>
```

## Parents

- [37e59ca30d28c20b5805fbc146929c3a3b73c438](https://git.cafe/dara/icarus/commit/37e59ca30d28c20b5805fbc146929c3a3b73c438?format=markdown)

[Source at this commit](https://git.cafe/dara/icarus/tree/217c07af4e5afcb810f45e68736705a782df931e?format=markdown)
