CI: add a mutation check — 11 mutations across #222/#223/#224 left the suite green
Los mantenedores suelen responder en 4 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- typescript
- Área
- ci-cd, testing-qa
Línea de trabajo
Comienza con un spike de runtime usando @stryker-mutator/core y su compatibilidad con vitest, midiendo las ~1,090 pruebas existentes en packages/outpost. Después, evalúa la cobertura de las líneas modificadas en packages/outpost/** y apps/** frente a los commits registrados de CPK-8037. Se considera terminado cuando se detectan las cuatro clases de mutación indicadas y la comprobación se mantiene acotada para la CI requerida.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Why
A review round on 2026-08-20 across three open PRs found eleven mutations that delete a claimed fix while leaving the test suite green. Every one was a test that read as coverage and was not.
The distribution matters more than the individual cases:
- Several were in newly added code, i.e. the tests written alongside a fix did not pin that fix.
- Two were worse than absent coverage, because the test documents the behaviour it fails to pin — a future reader treats it as proof, and a reviewer treats it as reviewed.
- One survived removing the exact line the test is named after.
This is not a review-diligence problem. It survived a seven-agent review on the largest of the three PRs until mutation testing was enforced, and the same round produced several confidently-stated findings that were wrong for the same underlying reason: claims about what a test would do, asserted without running it.
Specifics per PR are in CPK-8037, kept there rather than here.
What to build
A CI check that, for source lines a PR touches, applies mechanical mutations and fails if the suite still passes.
Priority order, based on which classes actually caught real gaps in the review round:
- Predicate relaxation — comparison operators widened, a truthiness check substituted for a normalising one, a regex anchor dropped. Cheapest to implement, caught the most.
- Guard deletion — remove a newly added early-return or throw.
- Call-site un-wiring — where a diff extracts a helper and calls it, revert the call site while leaving the helper defined and exported. This is the class a human reviewer is least likely to imagine, and it produced a full-green suite twice in one day.
awaitremoval on newly added awaits.
Scope to changed lines, not the tree, or the runtime is unbounded.
Known limit, worth designing around
Assertions made against strings that are never executed are the structural blind spot this cannot close. Where a query or template is built as text and the dependency is mocked, a substring assertion can be satisfied by an unrelated occurrence while a real semantic mutation passes through. Mutation testing catches "this test cannot fail"; it does not catch "this test asserts the wrong thing about text it never runs." Closing that needs execution against a real dependency, which is separate work.
Acceptance
- Runs on PRs touching
packages/outpost/**andapps/** - The mutation classes above are detected as survivors when run against the relevant pre-fix commits (recorded in CPK-8037)
- Bounded enough to sit in the required check set rather than a nightly
@stryker-mutator/core supports vitest and is the obvious starting point, but spike the runtime first — packages/outpost alone is ~1090 tests and mutation runs multiply that.
- Lenguaje dominante
- TypeScript
- Estrellas
- 10
- Forks
- 4
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 7
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de CopilotKit/outpost
-
area: docs area: security roadmap: now
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
CopilotKit/outpost#277 ·
Los mantenedores suelen responder en 4 días
-
area: infrastructure roadmap roadmap: later
Dificultad 1/5 Menos de una hora Aptitud para principiantes 74/100
CopilotKit/outpost#179 ·
Los mantenedores suelen responder en 4 días
-
area: ai roadmap roadmap: now
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
CopilotKit/outpost#145 ·
Los mantenedores suelen responder en 4 días
-
area: integrations priority: low roadmap roadmap: later
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
CopilotKit/outpost#124 · 3 comentarios ·
Los mantenedores suelen responder en 4 días
-
area: integrations priority: low roadmap roadmap: later
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
CopilotKit/outpost#123 · 2 comentarios ·
Los mantenedores suelen responder en 4 días
Todos los issues de CopilotKit/outpost
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 84/100
answerLoops/answerLoops#345 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
siyuan-note/siyuan#20313 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
LanternOps/breeze#8254 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 82/100
gofish-graphics/gofish-graphics#1084 ·
Los mantenedores suelen responder en 1 día