Agentic testing: el ciclo de QA visto desde el agente
Cuando un agente ejecuta el trabajo de QA, hace falta decir por escrito qué puede decidir solo, qué tiene que firmar una persona y qué evidencia debe quedar. Esta página explica ese contrato, cómo se cierra cada stage y las reglas de diseño de tests que el agente sigue.
La tabla de stages, skills y artefactos del repo vive en Metodología en este repo. Aquí se explica el porqué de ese diseño desde el punto de vista del agente.
El contrato de cada stage
Un tester humano cierra un ticket cuando siente que terminó. Un agente no tiene ese criterio, y si se lo dejas a él va a cerrar en cuanto su subagente devuelva algo. Por eso el repo define dos cosas para cada stage. La primera es el Definition of Done: una lista de condiciones observables (un archivo existe, un link resuelve, una línea tiene SÍ o un N/A con motivo). La segunda es el contrato agéntico, que responde cinco preguntas: qué hace el agente, qué firma la persona, qué evidencia debe sobrevivir, cuánta autonomía tiene el agente y si otro agente revisa al primero.
La lista de stages con nombre, su orden y el skill dueño de cada uno viven en
.agents/skills/agentic-qa-core/references/stage-gates.md; la tabla de abajo
recorre cada uno. Observation está declarado pero no tiene skill ni checklist, y así lo dice
el propio archivo: una checklist vacía parecería un gate que alguien podría marcar. El
cierre de sprint tampoco es un stage; es el límite del lote donde se cierran el STP y el
STR.
| Stage | La persona firma | Verificador separado |
|---|---|---|
| Shift-Left | El lote de historias candidatas y el resumen por historia | Ninguno: el PO o Dev que refina la historia ya revisa |
| Planning | El checkpoint donde el agente explica la historia y espera | Ninguno |
| Execution | El triage y el registro de cada bug; cualquier ajuste de severidad en seguridad | Ninguno |
| Reporting |
La transición del workflow (qa_sign_off o defect_reported)
|
Ninguno |
| Documentation | Cada veredicto de ROI, el epic de regresión y el Test Set | Recomendado |
| Automation | El plan antes de escribir una línea de código, el merge, la tercera vuelta de revisión | Obligatorio, en contexto limpio |
| Regression | El veredicto CAUTION | Ninguno |
Fíjate en que la persona casi nunca firma el trabajo operativo. Firma decisiones: qué entra, qué se registra como bug, qué merece automatizarse, cuándo se libera. El agente redacta, ejecuta y enlaza.
La columna "The person signs" decide además qué se pregunta y qué no. Una decisión técnica
dentro de un plan ya aprobado la toma el agente y la deja en el reporte como decidida, con
la opción que descartó. Solo se escala lo que pertenece a una persona: el comportamiento
esperado del producto, una postura de seguridad nueva, una acción irreversible o que sale
hacia afuera, y lo que esa columna reserva para el stage en curso. La regla completa está en
.agents/skills/agentic-qa-core/references/decision-protocol.md.
Autonomía 0-5 y el techo en 3
La escala tiene seis niveles. En 0 la persona hace el trabajo; en 1 aprueba cada acción; en 2 aprueba un plan o un lote; en 3 el agente decide dentro de límites escritos y escala lo que queda fuera; en 4 la supervisión es por monitoreo; en 5 no hay intervención humana de rutina. El repo fija que ningún stage pasa de 3, y esa es la decisión detrás de que las skills no corran de punta a punta sin nadie mirando.
stage-gates.md.
La excepción de Regression es deliberada y está documentada como tal en el contrato: ningún stage supera 3, salvo Regression, que llega a 4 solo con un GO limpio. Un GO sin fallos puede avanzar sin que nadie lo apruebe; CAUTION y NO-GO siempre los firma una persona.
Cada stage se gobierna por dos caminos. El feedforward condiciona el trabajo antes de que
ocurra: la skill con sus referencias, las reglas compactas que viajan en el briefing y el
plan aprobado primero (el ATP, spec.md, automation-plan.md). El
feedback corrige después: las checklists, los gates ejecutables, la suite de regresión y el
verificador separado. Automation es el único stage que llega a 3 y también el único con
verificador obligatorio. Más margen al entrar se paga con un control más duro al salir.
El verificador light al cerrar cada stage
Un DoD puede quedar marcado mientras el artefacto sigue en el status donde Jira lo dejó al
crearlo. El verificador light existe para atrapar lo que se saltó en silencio. Sus líneas
son las de la sección "Light stage verifier" de
.agents/skills/agentic-qa-core/references/artifact-lifecycle.md, y el agente
las responde con lo que ya hizo en el stage, más una sola lectura extra (un
Get Issue sobre la clave principal) para confirmar el status.
Light stage verifier: <Stage>
[ ] Artifacts exist: cada artefacto del stage, por KEY
[ ] Links present
[ ] Statuses: cada artefacto en su status esperado (transición disparada o motivo)
[ ] Assignee puesto en cada artefacto CREADO en el stage
[ ] Parent = el epic de proceso QA correcto; components puestos
[ ] Jira fields / comments escritos (el cuerpo llegó, no solo el item)
[ ] progress.md checkpoint agregado
[ ] Session footer impreso en el chat
Cada línea lleva SÍ o un N/A con su motivo. Una línea en blanco es un verificador fallido, y
cualquier NO deja el stage en NEEDS REVISION. Esto se apoya en la regla 16 de
AGENTS.md: un código de éxito describe la llamada y no el resultado. Un
ok: true o un id devuelto prueban que la petición estaba bien formada. Para
saber que la transición ocurrió, el agente vuelve a leer el status del issue.
Lifecycle de artefactos
Un artefacto creado y nunca movido no se distingue de uno que nadie trabajó. Sin un
lifecycle declarado para cada tipo de trabajo, eso pasa: ATP congelados en
Planning, Test Sets en Designing, Test Executions en
ACTIVE. Cada fila dice dónde nace el artefacto, qué stage lo mueve y dónde
termina; el canon es
.agents/skills/agentic-qa-core/references/artifact-lifecycle.md.
ready para siempre porque es un plan de larga vida, y una Precondition se
queda en active porque su workflow no tiene transiciones.
Dos reglas acompañan la tabla. El assignee se pone al crear: Xray rechaza
editar la membresía de un Test Plan que no es tuyo, y el bloqueo aparece mucho después. Y el
parent es siempre un epic de proceso QA (por ejemplo, QA Defect Management para bugs), nunca
un epic de producto. La historia de origen se enlaza con un issue link y el módulo afectado
va en components.
Cuando el status no está mapeado
Cada proyecto nombra sus status a su manera. Si el slug de transición que el agente necesita no existe en el catálogo del proyecto, el protocolo es este:
-
Resolver el slug
Si aparece en
.agents/jira-workflows.json, el agente dispara la transición por id y sigue. -
Listar las transiciones reales
Si no aparece, pide a Jira las transiciones disponibles desde el status actual.
-
Hacer una sola pregunta
Propone el candidato más parecido según una tabla de sinónimos (por ejemplo, "In QA" para
in_test) y espera tu respuesta: sí, elegir otro o saltar. -
Ejecutar con el id vivo y recomendar el resync
Registra la transición en el checkpoint y te sugiere
bun run jira:sync-workflowsseguido debun run jira:check, para que la próxima sesión la resuelva en el paso 1.
Un salto que tú elegiste queda como N/A con motivo en el verificador. Un salto que nadie vio es exactamente el defecto que este protocolo evita. Si la transición existe pero Jira la rechaza por un validador de campos, el agente reporta el error textual y no reintenta a ciegas.
Doctrina de diseño de tests
Un modelo de lenguaje tiende a generar un caso por criterio de aceptación y reportar "100% de ACs verificados". La doctrina del repo corrige ese sesgo con cinco principios. Los que más cambian el resultado son tres. Los ACs son el piso: la cobertura real es conformidad con los ACs más riesgo fuera de ellos (límites, errores, estados, anomalías). Un criterio describe una condición y un test case la explora con datos concretos. Y la relación es 1:N: por defecto el agente deriva varios casos por AC, y solo colapsa a uno cuando el AC es trivialmente atómico y lo justifica por escrito.
Cada técnica formal tiene su disparador:
| Técnica | Se dispara cuando |
|---|---|
| Equivalence Partitioning | Siempre; es el punto de partida |
| Boundary Value Analysis | Hay un rango o límite, y también sobre el valor derivado si la función redondea o trunca |
| State-Transition | La entidad tiene estados, incluidas las transiciones inválidas |
| Decision Table | Interactúan 2 o más condiciones |
| Pairwise | Hay 3 o más factores combinables |
Los stages de planificación cierran con la Test-Design Checklist, donde cada técnica recibe
SÍ o un N/A declarado ("sin rangos en este AC, BVA N/A"). Lo mismo aplica a los defectos: el
tipo se decide por la etapa de vida de la feature y no por el ambiente donde apareció. Un
fallo en una feature que todavía no llegó a producción es un Defect aunque lo veas en
qa; en una feature ya liberada es un Bug; si ningún AC se rompió y el hallazgo
vino de un test más allá del AC, es una Improvement.
Así lo hace este repo
Todo lo anterior sale de archivos que el agente carga antes de actuar. Si quieres verificar una regla, léela en la fuente:
| Archivo | Qué define |
|---|---|
.agents/skills/agentic-qa-core/references/stage-gates.md |
Los stages, el contrato por stage, la escala de autonomía, las checklists DoD y el status que cada stage debe dejar |
.agents/skills/agentic-qa-core/references/artifact-lifecycle.md |
La tabla de lifecycle (§1), el assignee al crear (§2), el fallback de status no mapeado (§4) y el verificador light (§5) |
.agents/skills/agentic-qa-core/references/test-design-doctrine.md
|
Los cinco principios, las técnicas por disparador y la Test-Design Checklist |
.agents/skills/agentic-qa-core/references/defect-management-doctrine.md
|
Bug, Defect o Improvement; QA Assignee; components; los tres ejes de parenting |
.agents/skills/shift-left-testing/SKILL.md |
Shift-Left |
.agents/skills/sprint-testing/SKILL.md |
Planning, Execution y Reporting |
.agents/skills/test-documentation/SKILL.md |
Documentation |
.agents/skills/test-automation/SKILL.md |
Automation |
.agents/skills/regression-testing/SKILL.md |
Regression |
Los gates ejecutables del feedback son scripts reales de package.json:
bun run test, bun run types:check y
bun run lint:check, en ese orden. Para ver qué skill posee cada stage, qué
artefactos deja y cómo se calcula el veredicto GO / CAUTION / NO-GO, consulta
Metodología en este repo.
- Reportar "% de ACs verificados" como si fuera cobertura. Ese número es el piso; falta decir qué se probó por encima.
- Confiar en un código de éxito sin leer de vuelta. Un id devuelto no prueba que el cuerpo del ATR llegó ni que el issue cambió de status.
-
Dejar artefactos en el status en que se crearon. Un ATR en
activedespués de Reporting le dice al equipo que la corrida sigue abierta. -
Adivinar un id de transición o editar a mano
.agents/jira-workflows.json. El archivo se genera; el camino es preguntar y resincronizar. - Dejar líneas del verificador en blanco. Un N/A sin motivo cuenta como fallo.
Para profundizar
- ISTQB Certified Tester Foundation Level v4.0: el syllabus define Equivalence Partitioning, BVA, Decision Tables y State-Transition, las mismas técnicas que usa la doctrina.
- Playwright Test Agents: los agentes planner, generator y healer de Playwright, con sus planes en Markdown versionados junto al código.
- Software Testing with Large Language Models: Survey, Landscape, and Vision (Wang et al., arXiv 2307.07221): revisión de cómo se usan los LLM en generación de tests, inputs y depuración.
- Humans and Agents in Software Engineering Loops (martinfowler.com): la diferencia entre revisar cada salida del agente y diseñar el harness que la controla.
- Flaky Tests at Google and How We Mitigate Them (Google Testing Blog): por qué clasificar un fallo como flaky exige historial y no una sola corrida.