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 — User Story | Un ID de Story en Ready For QA | ATP + ATR + QA comment · ticket transicionado a QA approved · TC outlines (native) o Tests ejecutados (xray) |
| Single — Bug | Un ID de Bug con fix en staging | Decisión de triage → solo Code Review, O verificación completa con ATP + ATR (sin TCs en el sprint) |
| Batch sprint | El framework SPRINT-N-TESTING.md | Artefactos por ticket + framework actualizado + resumen · con soporte de interrupción y resume |
Regla de selección
Story → story run · Bug → bug run · «process sprint 5» → batch. Si el sprint file no existe, se genera primero desde el backlog del sprint.
Misma cadencia siempre
Ambos modos pagan los mismos 4 despachos por ticket: Session Start → Stage 1 → 2 → 3. Batch solo los repite por ticket.
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.
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 Testing 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 | ATP + ATR creados en Jira: ATP: {KEY}: {título} (Test Plan → epic QA Master Test Plan) · ATR: {KEY}: Story Testing (Test Execution → epic QA Test Artifacts) |
Verificación de traza antes de tocar un browser (Gotcha 9). Story ↔ ATP y Story ↔ ATR («is tested by») · cada TC ↔ ATP (designed-by) y TC ↔ ATR (executed-by). Los TCs NO se linkean directo a la Story — agregan vía ATP/ATR.
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, 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 pero sin TCs en el sprint: el bug ES el retest inmediato. 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 fallido 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 batch · procesar el sprint entero
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 framework file 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
ATP + ATR en Jira · QA comment · ticket transicionado · bugs clasificados y linkeados · carpeta PBI con context.md, test-session-memory.md y evidence/ · 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ó: Story↔ATP↔ATR↔TC.
Pruébalo: «test UPEX-277» · ← → navegar · S presentador · O overview