Make lineup undo self-contained and scoped to what it touched

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>
c50788cf3dDara Adedeji committed on 9/25/2026, 4:09:17 AMparentd80d79f
7 files changedLine totals unavailable