AGENTIC QA · WORKFLOW SKILL

/exploratory-testing

Exploración sin ticket de un flujo, un módulo o la app entera: Charter → Recon → Refute → Tie-break → Handoff.

Stage Execution, entrada por alcance NEW · WEAK · COVERED oracle: observed hasta que una persona confirma
Deck del skill /exploratory-testing: cómo la IA explora producto que ya corre sin una historia que lo describa, y qué entrega a documentación. → para avanzar, S modo presentador, O overview, F pantalla completa.

El mapa completo · índice del deck

Cinco pasos, dos en paralelo

Entrada flow un journey del mapa e2e module una Epic, su componente sweep la app entera ← opcional: la gap list de project-context coverage
Gate 0
Preflight
env, roles, DB, API schema, browser
capability ausente → STOP
→
Charter
Charter
alcance · cobertura existente · presupuesto de mutaciones
⏸ espera tu OK
→
Paralelo
Recon
un agente por superficie: UI · API · DB
schema fijo, created_rows siempre
→
Paralelo
Refute
un verificador por anomalía Medium+
su trabajo es tumbarla
→
Main thread
Tie-break
consulta decisiva + lectura del código vivo
nunca un tercer voto
→
Main thread
Handoff
hallazgos · candidatos · un deck de decisiones
cada escritura la firma una persona
Salida
Documentation
/test-documentation: solo NEW y WEAK, solo con el oráculo confirmado
Bugs
con tu OK; /sprint-testing los re-testea cuando se arreglan
Tech Story
ancla de cobertura para lo que no tiene historia

Planificar y desempatar nunca se delega. Lo paralelo es lo que no comparte estado: cada superficie en Recon y cada hallazgo en Refute.

El índice del deck. Sesión en .session/exploratory-testing/<fecha>-<alcance>/ del checkout principal, con resume en Phase 0. Cada paso cierra con su checkpoint en progress.md.

Antes de empezar · el modo se pregunta

Tres modos; un ticket te manda a otra skill

ModoEntraAgentes
Critical-Flow-Targeted · flowun journey de business-e2e-context o un flujo del Master Test Planuno por módulo que toca el flujo
Module-Targeted · moduleun módulo: su Epic, su componente, sus secciones en los mapas1 a 3: DB + API, más UI si tiene pantalla
Whole-App Sweep · sweepnada: una ronda periódica sobre todo el productouno por módulo, con tope en orchestration.max_workers

Lo que dijiste es la respuesta

/exploratory-testing module orders ya trae el modo, y «explora el módulo de pedidos» también. Si el pedido no nombra un flujo, un módulo o un barrido, o puede leerse de dos formas, la skill pregunta.

Con clave de ticket, otra skill

Si nombras PROJ-7123, el trabajo es probar ese ticket contra sus ACs: eso es /sprint-testing. Esta skill existe para lo que ningún ticket describe.

Un barrido arranca en solo lectura salvo que el charter diga otra cosa. Si todos los mapas de negocio son placeholders, el barrido se detiene y pide project-context e2e; un módulo puede seguir acotado a lo que muestran el código y el entorno, y lo deja escrito.

Charter · una página, antes de despachar a nadie

La misión por escrito, para revisarla y para retomarla

  • Misión. Qué intenta aprender o romper esta ronda.
  • Alcance. Qué entra y qué queda afuera, cada cosa con su fuente.
  • Riesgos primero. Integridad de datos y seguridad, después flujos de dinero, después lo que ve el cliente.
  • Cobertura existente. De dónde salió y cuánto ya está cubierto.
  • Agentes, presupuesto de mutaciones, entorno, time box.

Se presenta y se espera

Un barrido puede lanzar muchos agentes y tocar muchas tablas. Confirmar el charter cuesta segundos; descubrir a mitad de camino que el alcance estaba mal cuesta la ronda. Si tu pedido ya nombró el alcance y dijo «dale», esa es la confirmación.

El preflight se reusa

Entorno, roles con el login real de la app y la sonda de herramientas salen de preflight-gate.md. La sonda no se saltea: una capability faltante achica a todos los agentes a la vez.

El charter vive en charter.md, dentro del directorio de sesión, y plan.md apunta a él. Las fuentes del alcance: la gap list, los mapas de negocio, el Master Test Plan, el module-context.md sincronizado y los ATR recientes del módulo.

Charter · lo que ya existe, antes de explorar

Cada candidato sale NEW, WEAK o COVERED

MarcaCuándoVa a documentación
NEWningún test cuenta como cobertura de ese comportamientosí
WEAKun test pasa por ahí, pero nada de lo que verifica fallaría si se rompesí, nombrando el test débil para decidir si se refuerza o se suma uno nuevo
COVEREDun test cuya aserción falla si el comportamiento se rompeno: queda en el registro con la clave que lo cubre

Con gap list

La de project-context coverage: su orden por riesgo es la cola, y tests[].covers es el dedupe. Una fila stale o sin verificar no cuenta.

Sin gap list

La skill arma coverage-view.json con kata-manifest.json y los Tests del módulo en el TMS, con la misma escala: exercises o weak, una línea de evidencia cada uno.

Un cover débil nunca deduplica un candidato: esa es la regla que evita que la exploración entregue como "ya cubierto" algo que ningún test verifica de verdad. Nada se reclama por coincidencia de título.

Recon · paralelo, un agente por superficie

Un reporte con forma fija, no prosa libre

El schema de cada agente

surface · deployed · checks_run · anomalies[] con su hipótesis de severidad y la consulta textual · observed[] con covered_by · fixtures_used · created_rows, aunque esté vacío.

La técnica ya existe

Cada agente explora con la trifuerza de sprint-testing: UI con playwright-cli, API con el schema del OpenAPI MCP más curl autenticado, DB leyendo el schema vivo antes de cualquier consulta.

Dos o tres filas, y un grupo de control

Una fila rara o un GROUP BY flojo es una pista. Antes de llamarlo anomalía, el agente busca más filas con la misma forma y mira si la "anomalía" también aparece donde todo debería estar bien.

deployed: false

Si la superficie no existe en ese entorno, es un bloqueo de entorno. Nunca se reporta como "probado, sin anomalías".

Cada reporte se guarda en recon/<superficie>.json. Un agente que falla detiene la ronda con retry / skip / abort, y una superficie salteada queda escrita como "no cubierta esta ronda".

Refute · el verificador intenta tumbar el hallazgo

Un hallazgo sobrevive si nadie pudo explicarlo

  • Fan-out de un join. El "duplicado" son N filas legítimas.
  • Rareza de datos. Un valor extraño pero intencional.
  • Comportamiento previsto. El código hace lo que dice la regla.
  • Artefacto del arnés. La consulta o el fixture del agente lo produjo.

El propio invariante de la fila

Que dos filas difieran no prueba nada. La pregunta es si la fila cumple su propia fórmula, probada antes en una fila sin disputa, y si además coincide con algo con lo que no tendría por qué coincidir. Rompe su fórmula y copia otro valor: eso es un bug.

Ejecutar, no inferir

Cada hipótesis en competencia se corre y se pega con su salida, lado a lado. Un mecanismo inferido de la forma de una respuesta termina en un fix equivocado.

Canon compartido: agentic-qa-core/references/adversarial-verification.md, que también cita sprint-testing antes de que un hallazgo se vuelva propuesta de bug. A un agente al que le preguntas "es un bug?" le cuesta no estar de acuerdo con el encuadre; uno al que le pides "demuestra que no lo es" tiene que verificar de verdad.

Tie-break · en el hilo principal

Dos verificadores en desacuerdo: decide quien conduce la ronda

Consulta decisiva

Una consulta o llamada que separa las dos hipótesis. No se repite la de ningún verificador.

Código vivo

Lectura directa del camino que de verdad alcanza un usuario: ruta, handler, quién lo llama, entrada de navegación.

Sin tercer voto

Un tercer verificador suma ruido a dos opiniones inconclusas. Promediar tampoco vale.

Medido, después regla

Dos verificadores no coincidían sobre si un módulo con aritmética visiblemente mal estaba vivo. El desempate leyó el router y el menú: el módulo solo servía una ruta legacy sin enlace. El defecto era real y su severidad bajó a lo que de verdad alcanza un usuario. En integridad de datos, dinero o seguridad, el veredicto de un solo agente nunca queda en pie.

Las categorías de falsos positivos que ya costaron una ronda (gemelo oculto, valores placeholder, datos escasos en el entorno, drift de schema) están en la referencia compartida; las instancias concretas son del proyecto y viven en su module context.

Handoff · lo observado no es lo esperado

oracle: observed hasta que una persona responde

La pregunta va a una persona

"Este comportamiento es el esperado?" es comportamiento de producto. Docs y código se muestran como evidencia junto a la pregunta, y la respuesta la da alguien: confirmed con quién, dónde y cuándo, o not intended, que lo convierte en un defecto propuesto.

PASSED solo si se observó

Un candidato es PASSED o FAILED solo cuando se vio en el entorno que nombra su precondición. Una lectura de código, un test unitario, un CI verde u otro entorno lo dejan en NOT RUN, con BLOCKED o DEFERRED (execution) y la escalera de desbloqueo.

Estado del candidatoQué sigue
observado en vivo, sin respuestava a documentación sin puntaje: no hay ROI sobre un oráculo sin confirmar
confirmadoPASSED contra el resultado confirmado; documentación lo puntúa
no previstoFAILED y propuesta de bug, que firma una persona
Escribir lo observado como resultado esperado congela el defecto que se haya observado, y si después se automatiza, lo congela dos veces. Canon: discovery-driven-doctrine.md §4 y §5.

Handoff · un solo deck de decisiones

El agente propone; cada escritura la firma una persona

Un archivo por hallazgo

findings/FNN-*.md para los confirmados y también para los refutados: un falso positivo documentado le ahorra a la próxima ronda el mismo callejón.

candidate-scenarios.md

Cada candidato con su comportamiento, marca de cobertura, precondición, acción, lo observado, entorno, resultado, estado del oráculo, señal de riesgo y evidencia.

El deck de la ronda

Las respuestas del oráculo, qué hallazgo se reporta o se descarta, qué Tech Story se crea y con qué grano, y el harvest del module context van juntos en un deck de mkd. Una sola pregunta chica va por la herramienta de preguntas.

El ancla de cada Test

Un coverable que ya describe el comportamiento, la Tech Story de cobertura de un gap de la lista, o una propuesta nueva con los campos de la doctrina. Esta skill no crea Tests ni puntúa ROI.

Los bugs se redactan con la plantilla de sprint-testing (reporting-templates.md §1) y su gate de confirmación humana; la sección Related cita la ronda en vez de una historia. La evidencia que llega a una persona pasa por la skill evidence-artifact.

Recon · lo que nunca se hace

Nada que envíe, nada que quede sin limpiar

Never-call

Ningún endpoint, job o comando que mande un email o una notificación real, empuje datos a otro sistema o dispare una operación masiva. Leer y previsualizar está bien. Un proyecto escribe su propia lista en agent-project.md y viaja literal en cada briefing.

Presupuesto de mutaciones

Solo para montar una precondición, y solo lo que el charter permitió. Cada fila creada entra en created_rows en el momento en que existe.

Limpieza releída

Antes de cerrar se vuelve a leer cada fila. Un DELETE con timeout puede haber hecho commit y uno con 200 puede no haberlo hecho: solo cuenta la relectura.

Una fila que no se puede borrar es un bloqueo que se le nombra a la persona, con su id, antes de cerrar la ronda. Los efectos que quedan fuera de la base (un blob subido, un job encolado) se anotan para seguimiento humano.

quién decide qué · Execution sin ticket

El agente explora. La evidencia prueba. La persona decide.

El agente haceLa persona firmaAutonomíaVerificador separado
escribe el charter, reparte el recon por UI / API / DB, refuta cada anomalía Medium+, desempata en el hilo principal, marca cada candidato contra la cobertura, redacta bugs y propuestas de Tech Storyel charter · cada respuesta del oráculo · el alta de cada bug · cada Tech Story · cada escritura en el module context3ninguno: el paso Refute es un chequeo adversarial interno

El mismo stage, otra puerta

Execution sigue siendo un solo stage. /sprint-testing entra por el ticket y esta skill entra por el alcance; los dos usan las mismas palabras para los resultados y la misma regla de observación. Su DoD está en stage-gates.md, en el bloque de Execution sin ticket.

Fuente: agentic-qa-core/references/stage-gates.md. El DoD dice qué tiene que ser verdad para cerrar la ronda; el contrato dice quién tuvo permiso de decidir mientras corría.

Para llevarte · handoffs y artefactos

Lo que no estaba cubierto llega a documentación verificado

Documentation

/test-documentation lee candidate-scenarios.md: NEW y WEAK, puntuados solo con el oráculo confirmado.

Bugs

Reportados con tu OK, bajo QA Defect Management; /sprint-testing los re-testea cuando llega el fix.

Cobertura

La próxima corrida de project-context coverage compara contra la anterior y muestra qué huecos se cerraron.

Lo que deja una ronda

charter.md, recon/, findings/, candidate-scenarios.md, session.md y evidence/ en .session/exploratory-testing/<scope>/; en Jira, solo lo que aprobaste.

Tres reglas de oro

1 Un cover débil no es cobertura. 2 Lo observado no es lo esperado hasta que alguien lo confirma. 3 Un hallazgo vale cuando quien intentó tumbarlo no pudo.

Pruébalo: /exploratory-testing module orders · ← → navegar · S presentador · O overview

Todo el contenido sale del SKILL.md de exploratory-testing y sus references; ante duda manda el SKILL.md.
← → navegar · O resumen · S presentador · N notas · F pantalla