Two ways lineup history broke on cloud pages: - Delete undo died after hydration: restoration data lived in the lineup provider's _popped/_actionLinkIds maps, which clearAll() wipes when an ack rehydrates the page, while reconcileHistory() keeps the action. Undo then no-oped silently and still moved the action to redo. - Undoing an edit could delete a teammate's lineup: marker moves, link edits and landing visibility were recorded as whole-graph transaction snapshots, so undo restored the old graph, dropping lineups that had hydrated since, and live sync then sent LineupDeleteOps for them. Every lineup change is now a LineUpGraphAction carrying the origins, landings and links it touched, as they were and as they became. Undo and redo apply that to the current graph and leave everything else alone; a node is removed only when no remaining link uses it, and edits only replace entries that still exist (reconcile drops edits whose target is gone). The provider's side maps are gone, so hydration cannot separate an action from its data. Lineup edits record themselves, replacing the performTransaction wrappers at all five call sites (marker moves, lineup details and rename, landing visibility). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Dara Adedeji committed on 9/25/2026, 4:09:17 AMparentd80d79f
7 files changedLine totals unavailable