Tras un rollback las generaciones más nuevas quedan inalcanzables (no hay redo). prune(state, keep) borra esas huérfanas (la cadena viva = current+ancestros vía parent siempre se conserva); --keep N recorta además la profundidad de rollback. live_chain() expuesto. 2 tests nuevos + paso prune en upgrade-e2e-test.sh (3->1 gens, árbol vivo intacto). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>