AGENTIC QA · WORKFLOW SKILL
QA manual por ticket dentro del sprint: Planning → Execution → Reporting, con gates humanos en cada checkpoint.
El mapa completo · índice del deck
Las 4 fases del camino principal se despachan como subagentes secuenciales — cada reporte alimenta el briefing del siguiente. Este mapa es el índice: cada nodo tiene su slide.
Antes de empezar · elige el modo
| Modo | Entra | Sale |
|---|---|---|
| Single-issue — User Story | Un ID de Story en Ready For QA | ATS + ATP + ATR + QA comment · ticket transicionado a QA approved · TC outlines (native) o Tests agrupados en el ATS y ejecutados (xray) |
| Single-issue — Bug | Un ID de Bug con fix en staging | Decisión de triage → solo Code Review, O verificación completa con ATP + ATR (xray: 1 Test de repro en-sprint · native: sin TCs, difiere a Stage 4) |
| Sprint-wide | Un número de sprint («process sprint 5») → JQL construido con los work types coverable que el proyecto declara | Artefactos por issue + STP actualizado en Jira + resumen · con soporte de interrupción y resume |
Regla de selección
Story → story run · Bug → bug run · «process sprint 5» → sprint-wide. El alcance del sprint no es una lista fija de tipos: sale de una JQL construida con los work types coverable que el proyecto declara, resolviendo las alternativas A | B | C e intersectando con lo que la instancia realmente tiene. Un tipo declarado que la instancia no tiene se salta con una nota, nunca bloquea.
Misma cadencia siempre
Ambos modos pagan los mismos 4 despachos por issue: Session Start → Stage 1 → 2 → 3. Sprint-wide solo los repite por issue.
Gate 0 · corre ANTES que todo
Ley 1 · args-as-answers
«QA UPEX-123 on staging» ya responde env y alcance. Solo se preguntan los huecos, en un único checklist.
Ley 2 · probe, don't assume
Un MCP configurado sigue en RED hasta que responde de verdad. Se sondea cada capacidad antes de usarla.
| Capacidad | Sonda |
|---|---|
| Env alcanzable (REQUIRED) | curl -sI {{WEB_URL}} + API root — 2xx/3xx pasa; env muerto → STOP antes de escribir un solo plan |
| Credenciales + roles (REQUIRED) | .env por entorno · un token por rol vía bun run api:login |
| Jira + modalidad TMS (REQUIRED) | carga /acli · resuelve jira-xray vs jira-native · carga /xray-cli si aplica |
| Por superficie (según alcance) | OpenAPI MCP (solo schema) · DBHub MCP · Playwright · inbox que pueda recibir (magic-link) |
Framework aún genérico (URLs null) → STOP: correr antes /project-discovery → /adapt-framework. Las superficies UI/API/DB las decide el triage de Stage 1, nunca se le preguntan al usuario.
Phase 0 · nunca empieces a ciegas
Dos memorias, dos preguntas. progress.md decide «¿qué etapa sigue?» · test-session-memory.md lleva la modalidad TMS + contexto del ticket que cada subagente lee. Ambas se consultan al retomar. Las dos viven en .session/, nunca en la carpeta PBI: un re-sync del cache PBI destruiría el archivo.
Entrada universal · prepara la mesa
⏸ El gate del hand-off (S10). Escribe la Story Explanation en lenguaje llano y SE DETIENE: nada transiciona a In Test sin tu OK explícito. Carpeta PBI nueva por ticket, nunca reusada (S9); los [SYNC] jamás se escriben a mano (S14).
Stage 1 · Planning — de los ACs a un plan ejecutable
| Fase | Qué produce |
|---|---|
| 0 · Triage | Short-circuit si hay label shift-left-reviewed <30 días (salta fases 1-3) · veto · risk score · factibilidad de datos: Discover / Modify / Generate por AC |
| 1-2 · Análisis | Contexto de negocio + técnico · ambigüedades y gaps marcados NEEDS PO/DEV CONFIRMATION |
| 3 · ACs refinadas | Cada AC reescrita Given/When/Then con datos específicos |
| 4-5 · Test outlines | Derivación por técnica (1:N) · nombre Should <BEHAVIOR> <CONDITION> · edge cases + estrategia de datos |
| 6 · Trazabilidad | Orden Set-first (xray): ATS: {KEY}: {título} (Test Set → epic QA Test Artifacts, components de la Story) con TODOS los TCs → ATP: {KEY}: {título} (Test Plan → epic QA Master Test Plan, creado desde el field del shift-left) → ATR: {KEY}: Story Testing (Test Execution → epic QA Test Artifacts) SIEMPRE con Test Environment (active_env) · listas de Plan/Exec derivadas de la membership del ATS |
Verificación de traza antes de tocar un browser (Gotcha 9). El link ATS ↔ Story («is tested by») es el que llena el panel de coverage — verificado live. Los links ATP ↔ Story y ATR ↔ Story son administrativos: cero coverage. Cascade de resolución: TC → ATS → Story (primaria) · TC → ATP → Story (placement, sin coverage) · TC → Story directo (last resort) · si nada: orphan.
Stage 1 · la doctrina que gobierna el plan
Piso, no techo
Cobertura = conformidad-AC + riesgo más allá del AC (límites, errores, estados, anomalías). Nunca reportar «% de ACs verificados» como completitud.
1 : N por defecto
Cada AC no trivial explota en varios casos. Colapsar a uno exige justificación escrita trivially atomic.
Criterio ≠ caso
Un criterio es una afirmación de negocio; un caso es una exploración concreta de cómo se cumple o se rompe.
| Disparador en el AC | Técnica obligatoria |
|---|---|
| Cualquier input — siempre | Equivalence Partitioning · un caso por clase válida + inválida |
| Rango / límite / longitud / ventana de fecha | BVA · min−1 · min · min+1 … max−1 · max · max+1 · cero/vacío/null |
| Campo de estado / ciclo de vida | State-Transition · cada transición válida + cada inválida |
| 2+ condiciones que interactúan · 3+ factores | Decision Table · Pairwise (registrando la reducción) · charters de Error-Guessing |
Stage 1 · la regla que define la forma del skill
| Modality jira-native | Modality jira-xray (bun xray) | |
|---|---|---|
| Stage 1 | Solo outlines en el ATP (nombre + 1 línea). Sin issues Test: un Test nativo es documentación y espera al gate de Stage 4. | Crea + ejecuta issues Test para los outlines, a detalle ejecutable, agrupados en el ATS (Test Set per-Story) y ejecutados vía un Test Execution — el Test ES la unidad de ejecución de Xray. |
| Stage 2 | Corre los outlines + explora más allá; PASS/FAIL en la memoria de sesión. | Ejecuta los Tests + explora. Una sonda exploratoria se vuelve Test solo si halló un defecto o vale repetirla. |
| Stage 4 | Crea Tests solo para lo regression-worthy, tras el ROI. | Selecciona + promueve al Regression Test Plan + Test Set, y los enriquece. |
Pregunta única por batch (xray)
Antes de crear los Tests: ¿formato Manual o Gherkin/Cucumber? Se sugiere (Gherkin si es candidato a automatizar), tú eliges, y aplica a todo el batch.
Manual = creación en dos pasos
Xray Cloud descarta en silencio los steps inline: crear el Test sin steps y agregarlos uno a uno vía Add Test Step.
Stage 1 · rama Bug — triage antes que plan
| Veredicto | Disparadores |
|---|---|
| SKIP — solo Code Review | texto/label puro, CSS/visual, docs, config/infra, refactor sin cambio de comportamiento — Stages 2-3 colapsan al comentario + transición |
| REQUIRE — test completo | dinero/billing, integridad de datos, auth/autorización, integraciones externas, máquinas de estado, cálculos — sin importar el score |
Sin veto → risk score
Feature nueva +3 · datos dinámicos +3 · ACs explícitas +2 · user-facing +2 · esfuerzo >4h +2 · prioridad alta +1 · multi-componente +1 → 0-3 LOW (Code Review) · 4-7 MEDIUM (ATP completo) · 8+ HIGH (ATP + edges extendidos). El resultado se presenta al usuario.
Reglas del bug run
ATP + ATR de retest. jira-xray: 1 Test de repro creado en-sprint al verificar el fix (1:N si el scope lo justifica), ejecutado en la Execution ReTest:. jira-native: sin TCs en el sprint — difiere a Stage 4, como siempre. Ejecuta: reproducir el original → verificar el fix → regresión en áreas adyacentes → DB si es de integridad. Regla de oro: si amerita regresión, Stage 4 termina con un Test persistente — reusar el de repro o crear uno.
Stage 2 · Execution — primera acción obligatoria
Veredicto
PASS → continuar a la trifuerza · FAIL → STOP: blocker de nivel entorno, se reporta y no se explora nada.
Reachability ≠ smoke (S7)
El preflight preguntó «¿está levantado el env?»; el smoke pregunta «¿funciona la feature?». Ambos corren — saltarse el smoke produce bugs falso-positivo contra un entorno roto.
Stage 2 · exploración por capas
playwright-cli — happy path + edges: vacío, largo máximo, 0/−1/MAX_INT, <script>, refresh a mitad de flujo, botón atrás. Screenshot en el estado FALLIDO, a evidence/ (configurar outputDir antes).
Maniobra de 3 herramientas: OpenAPI MCP solo schema → bun run api:login → curl autenticado. Matriz de status: 200 happy · 400 campo faltante · 401 sin auth · 403 otro tenant · 409 duplicado.
DBHub MCP — filas persistidas, triggers (total == SUM de items), sondas de constraint FK/CHECK/UNIQUE envueltas en transacción + ROLLBACK.
Orden según la feature
UI-céntrica: UI→API→DB · API-first: API→DB→UI · data-céntrica: DB→API→UI. Un no-2xx en la UI te escala a la capa API; datos raros en pantalla te mandan a la DB.
Sonda RLS (multi-tenant)
Con A y B del mismo rol: ¿A lista/lee/edita datos de B? Cualquier VULNERABLE = Critical y BLOQUEANTE — los bugs de autorización nunca afloran en el happy path.
Stage 2 · pausa graduada
| Clase | Ejemplos | Acción |
|---|---|---|
| BLOCKING | smoke/env caído · corrupción de datos · explotable en seguridad (auth bypass, cross-tenant) | ⏸ pausa YA — se presenta el bug y se espera tu decisión; no se despacha la siguiente etapa |
| NON-BLOCKING | cosmético · gap menor de validación · edge en TC no crítico · default de framework por recalibrar | se registra, TC FAILED, y se terminan los TCs restantes — todo se lleva al cierre de Stage 2 |
| TOOL FAILURE | cualquier herramienta rota a mitad del pase | STOP — estado parcial reportado, tú eliges retry / skip / abort |
Casos dependientes del tiempo
TTL, magic links, OTPs: elegir la opción más alta — TTL corto de test → clock-mock → defer explícito documentado. Nunca un «BLOCKED» a secas: al cierre todo TC está PASSED o FAILED.
Evidencia
Capturas, traces y logs bajo evidence/ del ticket (gitignored). Se captura el bug, no la navegación hacia él.
Stage 3 · Reporting — el veredicto auditable
| Resultado | QA comment | Transición |
|---|---|---|
| Story PASSED | Template A | → QA approved (vía qa_sign_off) |
| Story FAILED (defecto confirmado) | Template B + reporte de bug | → blocked (+ issuelink is blocked by), o queda in_test con el bug linkeado |
| Bug VERIFIED | Template C | → closed (vía retest_passed) |
| Bug NOT FIXED | Template D | queda ready_for_qa, se etiqueta al dev |
ATR por modalidad
jira-xray: actualizar la descripción del Test Execution + status de cada Test Run. jira-native: custom field acceptance_test_results (o comentario fallback) → sync → releer. Sin snapshot de ATR no se reporta nada (S3).
Recalibración de severidad (§5.0)
FAIL de seguridad/auth que huele a default de framework (cookie flags, CSP/HSTS): hipótesis + un hecho de verificación + decisión humana → PASSED WITH ISSUES (GO-con-deuda), no un blocker.
Stage 3 · doctrina de defect management
La feature ya vive arriba de Staging (visible al usuario final).
Feature aún pre-release — la salida normal del sprint testing.
No es un AC roto: mejora o AC sub-especificada hallada probando más allá.
Tres ejes, nunca mezclados
parent = epic de proceso «QA Defect Management» (jamás un epic de producto) · issue link = la Story origen · components = módulo de producto afectado. qa_assignee = tú mismo, nunca sobrescribiendo un owner existente.
Severidad → prioridad (lookup)
Critical→Highest · Major→High · Moderate→Medium · Minor→Low · Trivial→Lowest. Título: <EPIC>: <COMPONENT>: <resumen>.
Disciplina. Repro reproducible + evidencia o no hay ticket (S12) · una capa por bug, nunca UI+API+DB mezclados (S8) · buscar duplicados primero · borrador completo a la vista y tu confirmación antes de crear nada.
Modo sprint-wide · procesar el sprint entero
El estado que ve el equipo = el STP
La descripción del STP lleva el plan estable (un solo escritor, read-first); los comentarios llevan el progreso append-only, uno por issue cerrado. Si el log de comentarios y el ATR de una Story se contradicen, manda el ATR.
Checkpoint por etapa (S11)
Tras cada subagente, el orquestador anota la etapa en progress.md — cada promote alimenta los Context docs del siguiente briefing.
Archive al cerrar
.session/… → .session/.archive/<fecha>-… + resumen a memoria persistente. Los artefactos PBI y el STP en Jira quedan: son los entregables.
Cómo lo invocas · lenguaje natural
Auto-cargado al arrancar
.agents/project.yaml · catálogos Jira (jira-required.yaml, fields, workflows) · business maps + master test plan · el ticket vía jira:sync-issues · .env · kata-manifest.json.
El humano conserva los juicios
OK de la Story · resultado del triage · confirmación de cada bug · retry/skip/abort en fallas. La IA teclea; tú decides.
Para llevarte · handoffs y artefactos
Stage 4
/test-documentation — ROI + veredictos Candidate / Manual / Deferred; crea o promueve los Tests de regresión.
Stage 5
/test-automation — Plan → Code → Review sobre KATA + Playwright (chequea kata-manifest.json antes de proponer ATCs).
Stage 6
/regression-testing — suites en CI + veredicto GO / CAUTION / NO-GO.
Artefactos que deja un run
ATS + ATP + ATR en Jira · QA comment · ticket transicionado · bugs clasificados y linkeados · carpeta PBI con context.md y evidence/ · test-session-memory.md en .session/sprint-testing/<scope>/ · sesión archivada.
Tres reglas de oro
1 El orden es ley: smoke antes de trifuerza, comment antes de transición. 2 Triage de todo: el veto gana, un FAIL no es auto-Critical. 3 Trazable o no ocurrió: la cascade TC→ATS→Story (el link ATS↔Story es el coverage; ATP/ATR son administrativos).
Pruébalo: «test UPEX-277» · ← → navegar · S presentador · O overview