Generar QA Checklist desde Diff a Develop
Esta skill genera un archivo qa_checklist.md para el equipo de QA a partir del análisis del diff de la rama actual contra develop. El archivo debe poder leerse de forma independiente, sin necesidad de conocer el código ni el reporte de issue.
Cuándo usar esta skill
- El usuario quiere comunicarle al QA qué flujos verificar tras los cambios de la rama.
- Se necesita un checklist estructurado con casos de prueba listos para ejecutar.
Cuándo NO usar esta skill
- Generar el reporte o descripción técnica de PR / MR →
generate-pr-report
- Actualizar o generar notas de release en CHANGELOG.md →
generate-changelog
- Ejecutar pruebas unitarias automatizadas →
nestjs-unit-tester o component-qa
Metodología
Paso 1: Analizar cambios con Git
Obtén el nombre de la rama actual:
git branch --show-current
Resuelve la rama base y el merge-base (punto de divergencia). Usa develop; si no existe localmente, cae a origin/develop:
BASE="develop"
[ -z "$(git rev-parse --verify -q "$BASE")" ] && BASE="origin/develop"
MB="$(git merge-base "$BASE" HEAD)"
echo "BASE=$BASE MB=$MB"
Opcional: si querés que develop esté actualizado, corré git fetch origin develop antes de resolver el merge-base.
Compara la rama actual contra el merge-base, NO contra el puntero actual de develop (diff three-dot). Esto es crítico: si tu rama está desactualizada y otras ramas ya se mergearon a develop, git diff develop (two-dot) incluye cambios ajenos y la checklist incluiría flujos que no corresponden a tu trabajo.
git diff --stat "$BASE"...HEAD
git diff "$BASE"...HEAD
git diff "$BASE"...HEAD -M # con detección de renames (mover archivos)
El diff three-dot (A...B) compara B contra el merge-base de A y B: muestra SOLO los cambios propios de la rama.
Si el diff queda vacío, la rama no tiene cambios propios contra develop (ya fue mergeada o es ancestro): avisá al usuario en lugar de generar una checklist vacía.
Extrae los commits propios de la rama para informar el título y la descripción:
git log --oneline "$MB"..HEAD
A partir del diff (three-dot), identificá:
- Flujos directos: acciones del usuario o llamadas al sistema tocadas directamente por los cambios.
- Un componente de selección modificado → flujo: "seleccionar un representado".
- Un guard o validación nueva → flujo: "acceso a ruta restringida".
- Un endpoint con response type cambiado → flujo: "llamada API y lectura de respuesta".
- Un modal nuevo o modificado → flujo: "visualización y acción en el modal".
- Flujos de regresión: componentes o módulos que no fueron el objetivo del cambio pero que consumen los mismos tipos, utilities o servicios modificados. Buscalos en los imports del diff.
Para cada flujo, identificá también:
- Qué precondiciones necesita (tipo de usuario, nivel, sesión activa, datos cargados, etc.).
- Qué variantes de usuario son relevantes (menor de edad, sin nivel, con hijos, entidad legal, etc.).
- Variables de Entorno y Configuración (Precondiciones de Ambiente):
Si el diff introduce variables de entorno (
.env.example), feature flags o flags booleanos (detectables con python scripts/detect_env_vars.py), es obligatorio declararlas explícitamente como precondiciones de infraestructura para que el QA configure su entorno antes de iniciar la prueba (ej: Precondición: FEATURE_PAYMENTS_ENABLED=true en .env).
Paso 2: Construir la Checklist
Para cada flujo directo, creá una subsección con:
Título del flujo
### Flujo: Nombre descriptivo en lenguaje de usuario
Precondiciones
Un bloque de texto antes de la tabla describiendo el estado inicial necesario, roles requeridos y variables de entorno/flags activas. Si no hay precondiciones especiales, omitirlo.
Tabla de casos
| # | Caso | Tipo | Esperado |
|---|---|---|---|
Columnas:
#: número de caso dentro del flujo.
Caso: descripción concisa del escenario. En lenguaje de usuario, no de código.
Tipo: uno de ✅ Happy path, ⚠️ Edge case, ❌ Caso negativo.
Esperado: lo que el QA ve o puede verificar — texto en pantalla, URL de redirección, modal que aparece, dato mostrado, ausencia de error. No describir implementación interna.
Tipos de casos a cubrir por flujo
Siempre intentá cubrir los cuatro tipos cuando apliquen:
| Tipo |
Qué cubrir |
| ✅ Happy path |
El caso base funciona correctamente con datos y usuario válidos |
| ⚠️ Edge case |
Valores límite (exactamente la edad/nivel mínimo), campos vacíos, listas sin datos, usuario en el borde de la condición |
| ❌ Caso negativo |
Usuario sin permisos, datos inválidos, flujo interrumpido, acceso directo por URL sin cumplir condiciones |
| 🔁 Regresión |
Flujo no modificado que usa los mismos componentes o tipos — verificar que no se rompió |
Paso 3: Agregar Flujos de Regresión
Al final del archivo, agregá una sección:
## 🔁 Flujos de regresión sugeridos
Listá brevemente (sin tabla) los flujos que no fueron modificados directamente pero que conviene smoketestear:
- Indicá el nombre del flujo.
- Explicá en una línea por qué podría verse afectado (qué utility, tipo o componente comparte con los cambios).
Paso 4: Reglas de escritura
- Lenguaje de usuario, no de código: evitá nombres de funciones, tipos o variables internas a menos que el QA los vea en pantalla (ej: un mensaje de error que incluya un campo).
Esperado siempre verificable: el QA debe poder confirmar o refutar sin leer código. "Se redirige a /inicio", "aparece el modal con el texto 'Edad mínima requerida'", "el botón queda deshabilitado".
- Autocontenido: el archivo debe funcionar solo. Incluí contexto suficiente en las precondiciones y descripciones de caso para que el QA no necesite consultar el diff ni el reporte de issue.
- Una fila por escenario: no agrupés múltiples variantes en una sola fila de la tabla.
Paso 5: Generar el archivo (Direct-to-Disk Writing)
- Plantilla oficial: Utilizar la estructura definida en
templates/qa-checklist.template.md.
- Escribir directamente a disco: Escribir la checklist completa en
qa_checklist.md usando la herramienta de escritura de archivos (write_to_file).
- Asegurar Markdown válido: Verificar que las tablas incluyan la fila separadora
|---|---|---|---|.
- Fecha y Metadata: La fecha en el encabezado debe ser la del día actual y reflejar el commit hash del merge-base.
- Prohibido volcar las tablas completas en el chat: NO imprimas todas las tablas de casos de prueba en la respuesta conversacional para evitar sobrecargar el contexto.
- Formato obligatorio de reporte final en chat (Sintético):
- Archivo: confirmación y enlace a
qa_checklist.md.
- Métricas de cobertura: total de flujos directos identificados y desglose de casos (Happy path, Edge cases, Negativos).
- Flujos de regresión: lista sintética de los flujos sugeridos para smoketest y justificación.
Referencia: Estructura completa
# 🧪 QA Checklist — Tipo: Título del issue
> **Rama**: `nombre-de-rama`
> **Fecha**: YYYY-MM-DD
---
## Flujos a verificar
### Flujo: Nombre del flujo
**Precondiciones**: usuario autenticado con hijos asociados, nivel ≥ 2, etc.
| # | Caso | Tipo | Esperado |
|---|---|---|---|
| 1 | Caso base con datos válidos | ✅ Happy path | Descripción de lo que debe verse |
| 2 | Usuario exactamente en el límite de edad | ⚠️ Edge case | Descripción de lo que debe verse |
| 3 | Usuario sin permisos accede directo por URL | ❌ Caso negativo | Descripción de lo que debe verse |
---
### Flujo: Otro flujo
**Precondiciones**: ...
| # | Caso | Tipo | Esperado |
|---|---|---|---|
| 1 | ... | ✅ Happy path | ... |
---
## 🔁 Flujos de regresión sugeridos
- **Nombre del flujo**: por qué podría verse afectado.
- **Nombre del flujo**: por qué podría verse afectado.
Reglas de lo que SÍ debe hacer
- Usar siempre diff three-dot (
"$BASE"...HEAD) para comparar exclusivamente los cambios propios de la rama.
- Identificar flujos directos y flujos de regresión a partir de los componentes y dependencias modificadas.
- Incluir tablas completas con Happy Path, Edge Cases y Casos Negativos.
- Escribir
qa_checklist.md directamente en disco (write_to_file) reportando únicamente el balance sintético en el chat.
Reglas de lo que NO debe hacer
- NO usar two-dot diff sin justificación para evitar reportar flujos correspondientes a cambios ajenos.
- NO escribir descripciones que requieran que el tester deba consultar el código fuente o los PRs.
- NO volcar el archivo completo o tablas masivas en la respuesta de chat.
- NO omitir precondiciones críticas para los casos de prueba.
Verificación
- Validar que el archivo
qa_checklist.md generado cubra todos los flujos directos impactados por el diff.
- Comprobar que la sección de flujos de regresión sugiera las áreas con dependencias compartidas.
- Asegurar que la sintaxis de las tablas markdown sea correcta y renderizable.
Al terminar
Notificar al usuario y compartir el archivo qa_checklist.md generado para su distribución al equipo de QA.
1---2name: generate-qa-checklist3description: Genera qa_checklist.md para QA desde el three-dot diff contra develop. Mapea flujos directos, indirectos y de regresión con matrices de happy path, edge cases y negativos. Incluye precondiciones de ambiente y env vars. Usar con "generar qa checklist", "casos de prueba", "checklist de qa".4---56# Generar QA Checklist desde Diff a Develop78Esta skill genera un archivo `qa_checklist.md` para el equipo de QA a partir del análisis del diff de la rama actual contra `develop`. El archivo debe poder leerse de forma independiente, sin necesidad de conocer el código ni el reporte de issue.910## Cuándo usar esta skill11- El usuario quiere comunicarle al QA qué flujos verificar tras los cambios de la rama.12- Se necesita un checklist estructurado con casos de prueba listos para ejecutar.1314## Cuándo NO usar esta skill15- **Generar el reporte o descripción técnica de PR / MR** → `generate-pr-report`16- **Actualizar o generar notas de release en CHANGELOG.md** → `generate-changelog`17- **Ejecutar pruebas unitarias automatizadas** → `nestjs-unit-tester` o `component-qa`1819---2021## Metodología2223### Paso 1: Analizar cambios con Git24251. Obtén el nombre de la rama actual:26 ```bash27 git branch --show-current28 ```29302. Resuelve la rama base y el **merge-base** (punto de divergencia). Usa `develop`; si no existe localmente, cae a `origin/develop`:31 ```bash32 BASE="develop"33 [ -z "$(git rev-parse --verify -q "$BASE")" ] && BASE="origin/develop"34 MB="$(git merge-base "$BASE" HEAD)"35 echo "BASE=$BASE MB=$MB"36 ```37 *Opcional: si querés que `develop` esté actualizado, corré `git fetch origin develop` antes de resolver el merge-base.*38393. Compara la rama actual contra el **merge-base**, NO contra el puntero actual de `develop` (**diff three-dot**). Esto es crítico: si tu rama está desactualizada y otras ramas ya se mergearon a `develop`, `git diff develop` (two-dot) incluye cambios **ajenos** y la checklist incluiría flujos que no corresponden a tu trabajo.40 ```bash41 git diff --stat "$BASE"...HEAD42 git diff "$BASE"...HEAD43 git diff "$BASE"...HEAD -M # con detección de renames (mover archivos)44 ```45 *El diff three-dot (`A...B`) compara B contra el merge-base de A y B: muestra SOLO los cambios propios de la rama.*46 *Si el diff queda vacío, la rama no tiene cambios propios contra `develop` (ya fue mergeada o es ancestro): avisá al usuario en lugar de generar una checklist vacía.*47484. Extrae los commits propios de la rama para informar el título y la descripción:49 ```bash50 git log --oneline "$MB"..HEAD51 ```52535. A partir del diff (three-dot), identificá:54 - **Flujos directos**: acciones del usuario o llamadas al sistema tocadas directamente por los cambios.55 - Un componente de selección modificado → flujo: "seleccionar un representado".56 - Un guard o validación nueva → flujo: "acceso a ruta restringida".57 - Un endpoint con response type cambiado → flujo: "llamada API y lectura de respuesta".58 - Un modal nuevo o modificado → flujo: "visualización y acción en el modal".59 - **Flujos de regresión**: componentes o módulos que no fueron el objetivo del cambio pero que consumen los mismos tipos, utilities o servicios modificados. Buscalos en los imports del diff.60616. Para cada flujo, identificá también:62 - Qué **precondiciones** necesita (tipo de usuario, nivel, sesión activa, datos cargados, etc.).63 - Qué **variantes de usuario** son relevantes (menor de edad, sin nivel, con hijos, entidad legal, etc.).64 - **Variables de Entorno y Configuración (Precondiciones de Ambiente)**:65 Si el diff introduce variables de entorno (`.env.example`), feature flags o flags booleanos (detectables con `python scripts/detect_env_vars.py`), es obligatorio declararlas explícitamente como precondiciones de infraestructura para que el QA configure su entorno antes de iniciar la prueba (ej: `Precondición: FEATURE_PAYMENTS_ENABLED=true en .env`).6667---6869### Paso 2: Construir la Checklist7071Para cada flujo directo, creá una subsección con:7273#### Título del flujo74```75### Flujo: Nombre descriptivo en lenguaje de usuario76```7778#### Precondiciones79Un bloque de texto antes de la tabla describiendo el estado inicial necesario, roles requeridos y variables de entorno/flags activas. Si no hay precondiciones especiales, omitirlo.8081#### Tabla de casos82```83| # | Caso | Tipo | Esperado |84|---|---|---|---|85```8687Columnas:88- `#`: número de caso dentro del flujo.89- `Caso`: descripción concisa del escenario. En lenguaje de usuario, no de código.90- `Tipo`: uno de `✅ Happy path`, `⚠️ Edge case`, `❌ Caso negativo`.91- `Esperado`: lo que el QA **ve o puede verificar** — texto en pantalla, URL de redirección, modal que aparece, dato mostrado, ausencia de error. No describir implementación interna.9293#### Tipos de casos a cubrir por flujo9495Siempre intentá cubrir los cuatro tipos cuando apliquen:9697| Tipo | Qué cubrir |98|---|---|99| ✅ Happy path | El caso base funciona correctamente con datos y usuario válidos |100| ⚠️ Edge case | Valores límite (exactamente la edad/nivel mínimo), campos vacíos, listas sin datos, usuario en el borde de la condición |101| ❌ Caso negativo | Usuario sin permisos, datos inválidos, flujo interrumpido, acceso directo por URL sin cumplir condiciones |102| 🔁 Regresión | Flujo no modificado que usa los mismos componentes o tipos — verificar que no se rompió |103104---105106### Paso 3: Agregar Flujos de Regresión107108Al final del archivo, agregá una sección:109110```markdown111## 🔁 Flujos de regresión sugeridos112```113114Listá brevemente (sin tabla) los flujos que no fueron modificados directamente pero que conviene smoketestear:115- Indicá el nombre del flujo.116- Explicá en una línea por qué podría verse afectado (qué utility, tipo o componente comparte con los cambios).117118---119120### Paso 4: Reglas de escritura121122- **Lenguaje de usuario, no de código**: evitá nombres de funciones, tipos o variables internas a menos que el QA los vea en pantalla (ej: un mensaje de error que incluya un campo).123- **`Esperado` siempre verificable**: el QA debe poder confirmar o refutar sin leer código. "Se redirige a `/inicio`", "aparece el modal con el texto 'Edad mínima requerida'", "el botón queda deshabilitado".124- **Autocontenido**: el archivo debe funcionar solo. Incluí contexto suficiente en las precondiciones y descripciones de caso para que el QA no necesite consultar el diff ni el reporte de issue.125- **Una fila por escenario**: no agrupés múltiples variantes en una sola fila de la tabla.126127---128129### Paso 5: Generar el archivo (Direct-to-Disk Writing)1301311. **Plantilla oficial**: Utilizar la estructura definida en [`templates/qa-checklist.template.md`](./templates/qa-checklist.template.md).1322. **Escribir directamente a disco**: Escribir la checklist completa en `qa_checklist.md` usando la herramienta de escritura de archivos (`write_to_file`).1333. **Asegurar Markdown válido**: Verificar que las tablas incluyan la fila separadora `|---|---|---|---|`.1344. **Fecha y Metadata**: La fecha en el encabezado debe ser la del día actual y reflejar el commit hash del merge-base.1355. **Prohibido volcar las tablas completas en el chat**: NO imprimas todas las tablas de casos de prueba en la respuesta conversacional para evitar sobrecargar el contexto.1366. **Formato obligatorio de reporte final en chat (Sintético)**:137 - **Archivo**: confirmación y enlace a `qa_checklist.md`.138 - **Métricas de cobertura**: total de flujos directos identificados y desglose de casos (Happy path, Edge cases, Negativos).139 - **Flujos de regresión**: lista sintética de los flujos sugeridos para smoketest y justificación.140141---142143## Referencia: Estructura completa144145```markdown146# 🧪 QA Checklist — Tipo: Título del issue147148> **Rama**: `nombre-de-rama`149> **Fecha**: YYYY-MM-DD150151---152153## Flujos a verificar154155### Flujo: Nombre del flujo156157**Precondiciones**: usuario autenticado con hijos asociados, nivel ≥ 2, etc.158159| # | Caso | Tipo | Esperado |160|---|---|---|---|161| 1 | Caso base con datos válidos | ✅ Happy path | Descripción de lo que debe verse |162| 2 | Usuario exactamente en el límite de edad | ⚠️ Edge case | Descripción de lo que debe verse |163| 3 | Usuario sin permisos accede directo por URL | ❌ Caso negativo | Descripción de lo que debe verse |164165---166167### Flujo: Otro flujo168169**Precondiciones**: ...170171| # | Caso | Tipo | Esperado |172|---|---|---|---|173| 1 | ... | ✅ Happy path | ... |174175---176177## 🔁 Flujos de regresión sugeridos178179- **Nombre del flujo**: por qué podría verse afectado.180- **Nombre del flujo**: por qué podría verse afectado.181```182183---184185## Reglas de lo que SÍ debe hacer186187- Usar siempre diff three-dot (`"$BASE"...HEAD`) para comparar exclusivamente los cambios propios de la rama.188- Identificar flujos directos y flujos de regresión a partir de los componentes y dependencias modificadas.189- Incluir tablas completas con Happy Path, Edge Cases y Casos Negativos.190- Escribir `qa_checklist.md` directamente en disco (`write_to_file`) reportando únicamente el balance sintético en el chat.191192## Reglas de lo que NO debe hacer193194- NO usar two-dot diff sin justificación para evitar reportar flujos correspondientes a cambios ajenos.195- NO escribir descripciones que requieran que el tester deba consultar el código fuente o los PRs.196- NO volcar el archivo completo o tablas masivas en la respuesta de chat.197- NO omitir precondiciones críticas para los casos de prueba.198199## Verificación200201- Validar que el archivo `qa_checklist.md` generado cubra todos los flujos directos impactados por el diff.202- Comprobar que la sección de flujos de regresión sugiera las áreas con dependencias compartidas.203- Asegurar que la sintaxis de las tablas markdown sea correcta y renderizable.204205## Al terminar206207Notificar al usuario y compartir el archivo `qa_checklist.md` generado para su distribución al equipo de QA.