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