Lo de los runes siendo magia no me convence del todo. Sí, $effect puede ser opaco, pero en Svelte 5 tienes $inspect para depurar dependencias y el compilador te avisa de dependencias perdidas. React 19 con su compilador sigue teniendo el problema de que useEffect no es reactivo de verdad y tienes que listar dependencias manualmente, que es otra fuente de bugs. He migrado una app Svelte 4 a 5: los runes son opt-in, puedes mantener la sintaxis legacy con svelte:options o migrar componente a componente. Lo peor fue refactorizar stores personalizados, pero los nuevos runes $state y $derived son más limpios. Eso sí, si usabas mucho on:click con delegación de eventos, Svelte 5 lo cambia a onclick directamente, que rompe bindings condicionales. Para mí, la madurez del ecosistema React se compensa con la deuda técnica de los hooks mal usados. Al final, es trade-off entre claridad explícita (React) y concisión implícita (Svelte).