You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
La confirmación de «Limpiar base de datos» no tiene test de regresión que fije default: false #3
console-runner/src/main.ts:116 usa correctamente default: false en el confirm de @inquirer/prompts, de modo que Enter cancela. Pero voltearlo a default: true — convirtiendo Enter en «borra la base de datos» — deja la suite verde (7/7): ninguna prueba lo sujeta. Es la única operación destructiva de la aplicación, en un grupo que declara [risk: data-loss], y hoy sólo la protege una observación manual puntual.
Detectado por el Reviewer de la tarea #1 (mutación probada a mano).
Cierre barato y sin TTY: extraer las opciones del confirm (o una factoría buildCleanConfirm(database)) y afirmar default === false. Unas 10 líneas.
Nota: design.md de #1 decidió expresamente no testear la capa de prompts, y el humano aceptó el hallazgo como no bloqueante en el checkpoint; esto no contradice esa decisión, la completa en el único punto donde el fallo destruye datos.
Segundo mutante supervivalente, misma raíz — y es peor
La pasada completa de revisión del PR #2 encontró un segundo mutante que sobrevive, en console-runner/src/main.ts:119: sustituir confirmed por un literal true convierte la confirmación en puro teatro — el usuario escribe n, y la base de datos se borra igualmente — y la suite sigue verde 7/7.
Es peor que el volteo de default: true que motivó este issue (ahí al menos había que pulsar Enter; aquí la respuesta del usuario se ignora entera), y tiene la misma causa: la capa que une el prompt con la operación no está sujeta por ninguna prueba.
El arreglo propuesto cubre ambos: una factoría buildCleanConfirm(database) que se pueda testear sin TTY, afirmando default === false, más una aserción de que la operación sólo se invoca cuando la respuesta es afirmativa. Unas 10 líneas.
Mutación total de la revisión: 13 mutantes en 7 ficheros, 11 muertos. Los dos supervivientes caen aquí.
Activity
brauliodiez commentedon Oct 17, 2026
Segundo mutante supervivalente, misma raíz — y es peor
La pasada completa de revisión del PR #2 encontró un segundo mutante que sobrevive, en
console-runner/src/main.ts:119: sustituirconfirmedpor un literaltrueconvierte la confirmación en puro teatro — el usuario escriben, y la base de datos se borra igualmente — y la suite sigue verde 7/7.Es peor que el volteo de
default: trueque motivó este issue (ahí al menos había que pulsar Enter; aquí la respuesta del usuario se ignora entera), y tiene la misma causa: la capa que une el prompt con la operación no está sujeta por ninguna prueba.El arreglo propuesto cubre ambos: una factoría
buildCleanConfirm(database)que se pueda testear sin TTY, afirmandodefault === false, más una aserción de que la operación sólo se invoca cuando la respuesta es afirmativa. Unas 10 líneas.Mutación total de la revisión: 13 mutantes en 7 ficheros, 11 muertos. Los dos supervivientes caen aquí.