Skip to content

La confirmación de «Limpiar base de datos» no tiene test de regresión que fije default: false #3

Open

Description

@brauliodiez

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.

Discovered during #1

Activity

  1. brauliodiez commented on Oct 17, 2026

    @brauliodiez
    MemberAuthor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    harness:managedIssue managed by the Lemony harness.harness:status:pendingManaged task: created, not yet started.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions