The list reloaded and your pick is gone.

One line decides whether it should have been.

rows() [r-101, r-102, r-103]→[r-201, r-202] you picked r-103
computation: (rows, previous) =>
  previous?.value
    ?? rows[0].id
r-201
r-202
r-103NOT IN THIS LIST
selected() →'r-103' previous.value was never checked against the new data
computation: (rows, previous) =>
  rows.some(r => r.id === previous?.value)
    ? previous.value : rows[0].id
r-201SELECTED
r-202
r-103NOT IN THIS LIST
selected() →'r-201' rows.some(...) says the pick is not in the new data
and it is already right the reset is pulled, not scheduled — the very next read of selected() returns the new answer, with no tick to wait for; a hand-written signal + effect reset returns the old id until the next flush
Angular 21.2.22 · TypeScript 5.9.3 · every value asserted by the demo's 22 tests
gdhami.net