useSetupRows built a new row array on every render for the app-owned lists (accent, layout, theme). That recreated the card's stage callback, whose effect wrote $setupChooseStages, which re-rendered the card. The rows are memoized on their inputs now, and stageSetupChoose skips the atom write when a patch changes nothing.