Agentic QA · Evolución del framework
Para quien mantiene el framework: un cambio a las bases KATA, a las fixtures, a cli/, a scripts/ o al pipeline de api/schemas/ pasa primero por un plan que vos aprobás, después por código, después por cuatro verificaciones, y cierra con la documentación al día en el mismo PR.
Alcance · 2 de 17
Sí: cambia el framework
Una fixture API nueva o un cambio de firma en ApiFixture / UiFixture / TestFixture |
Refactor de las bases KATA: TestContext, ApiBase, UiBase |
El instalador y el tooling de cli/, los scripts de scripts/ |
El pipeline OpenAPI (scripts/sync-openapi.ts), dependencias y scripts de package.json |
Doctrina compartida en agentic-qa-core/references/ o una skill nueva del repo |
Editar AGENTS.md, una sección de .agents/instructions/, el ROUTER o sus triggers:: modo instructions (references/instructions-doctrine.md) |
| "Sync AI context": poner los docs al día después de un cambio del boilerplate |
No: lo hace otra skill
| Pedido | Dueña |
|---|---|
| Escribir tests de un ticket | /test-automation |
| QA manual de un ticket | /sprint-testing |
| Documentar casos en el TMS | /test-documentation |
| Correr suites de regresión | /regression-testing |
| Context skills de un proyecto consumidor | project-context, modo context-skill |
| Docs propios de un proyecto downstream | test-framework-adaptation, Fase 9.3 |
Flujo · 3 de 17
Camino principal
Preflight
Toolchain listo
test · types · lint
skills · manifest
Fase 0 · inline
Rutas + resume
kata-invariants §10
resume / restart / abort
Fase 1 · Single
Plan
plan.md
vos lo aprobás
Fase 2 · Sequential
Code por lotes
progress.md
solo el orquestador
Fase 3 · Parallel
Verify ×4
+ docs follow-through
Fase 4 · inline
Archive
.session/.archive/
Caminos laterales
Tras aprobar el plan
ADR
si el cambio rehace la arquitectura de test y cuesta revertirlo
Ruta prohibida
Abortar y derivar
a la skill dueña de la fila
Un verificador en rojo
REJECT
retry · skip-and-document · abort
sin auto-fix, sin archivar
Editar instrucciones
Modo instructions
ubicar · editar · instructions:check
ADR si toca una fila del ROUTER
Lotes independientes
Ola de workers
opcional: se ofrece, nunca se entra solo
Después del Archive, el código lo publica /git-flow-master con el diff que produjo la Fase 2 y verificó la Fase 3.
Antes de la Fase 0 · 4 de 17
| Capacidad | Necesidad | Por qué |
|---|---|---|
| Toolchain de desarrollo | REQUIRED | La Fase 3 corre bun run test, bun run types:check, bun run lint:check y bun run skills:check: los cuatro tienen que resolver desde el arranque. |
kata-manifest.json limpio | REQUIRED | Fuente de verdad de componentes y ATCs (Critical Rule #12). bun run kata:manifest:check para verificar, bun run kata:manifest para regenerar. |
| Navegadores de Playwright | SCOPE | Solo si el cambio toca fixtures, bases KATA o tests: la verificación corre la suite (bun run pw:install). |
/github-actions-docs · /playwright-best-practices | OPTIONAL | Se inyectan en el briefing cuando el cambio toca YAML de CI o fixtures y tests. |
N/A en esta skill
Entorno, credenciales, API, DB, tracker, TMS: es meta-trabajo sobre este repo, sin sistemas vivos.
Cómo te lo muestra
Huecos y rojos llegan juntos, en un solo checklist. Se arregla con tu aprobación; un rojo bloqueante para todo.
Fase 0 · 5 de 17
Path self-check contra kata-invariants.md §10
| Resultado | Qué pasa |
|---|---|
| ALLOWED | Sigue: cli/, scripts/, tests/utils/, bases y fixtures. |
| FORBIDDEN | Aborta y deriva a la skill de la fila: tests/e2e/ a /test-automation, .context/PBI/ a /sprint-testing. |
| Ninguna tabla | La IA te pregunta. Nunca supone. |
| Las dos | Se parte: acá el framework, después la dueña de la fila prohibida. |
Tablas completas: kata-invariants.md §10.
Resume check
Busca .session/framework-development/<change-name>/progress.md. Si existe, te muestra el objetivo del plan, la última fase completa, la siguiente y las notas bloqueantes, y te da tres opciones: resume, restart (archiva lo anterior con sufijo -aborted) o abort.
Desde un worktree
La sesión se busca en el checkout principal: mirar solo el .session/ del worktree no encuentra nada y reinicia en silencio trabajo ya hecho.
Fase 1 · 6 de 17
plan.md, y lo aprobás vosQué hace la IA
Un subagente de Plan escribe un único artefacto en .session/framework-development/<change-name>/plan.md. Reúne lo que antes eran exploración, propuesta, spec, diseño y tareas.
Qué decidís vos
La IA te presenta el plan y espera tu aprobación antes de la Fase 2. Sin ese OK no se escribe código.
Dónde vive
.session/ está en el gitignore: el plan es local, no se commitea. Si la sesión se corta, el archivo persiste y la Fase 0 lo levanta.
Secciones propias de esta skill
| Invariants touched: qué reglas INVARIANT de KATA roza el cambio. |
| Public API delta: qué cambia en la superficie que usan los tests. |
| Strict TDD flag: apagado por defecto. Se prende solo si lo pediste; entonces cada tarea de código va precedida por un test que falla, en el mismo lote. |
Se suman a las secciones base del schema de agentic-qa-core/references/session-management.md §6 (Goal, Investigation, Task breakdown, Risks, Verification checklist y el resto).
Si el cambio ES una skill
El Task breakdown sigue skill-scaffold.md §2 para su tipo y el checklist incluye su Definition of Done (slide 12).
Tras aprobar el plan · 7 de 17
Cuándo hay ADR: las dos puertas
| 1 · Arquitectura de test. El enfoque rehace capas KATA, una fixture API, el runner, el modelo de aislamiento y paralelismo, o el pipeline OpenAPI y de tipos. |
| 2 · Difícil de revertir. Si se puede deshacer barato, no hace falta ADR. |
Test de las dos puertas: agentic-qa-core/references/adr-doctrine.md §1.
Por qué
Una decisión de framework ata a cada sesión de test que viene después. Si queda solo en un plan.md archivado, se vuelve a discutir o se viola sin que nadie lo note.
Cuándo y cómo
Se escribe en .context/ADR/ADR-NNNN-<slug>.md después de aprobar el plan y antes de codificar.
Estado
Tu aprobación del plan ya es la decisión, así que el ADR nace Accepted y su línea Deciders la cita. La IA no te pide que lo "aceptes" otra vez. Proposed queda solo para una parte que sigue abierta, y el ADR dice cuál.
Append-only
Un ADR no se reescribe ni se borra: un ADR nuevo lo reemplaza. Plantilla y ciclo de vida: .context/ADR/README.md.
Fase 2 · 8 de 17
Lotes
Salen de la lista de tareas del plan: 3 a 5 tareas acopladas por lote, o una sola cuando toca un archivo de carga (ApiBase.ts, UiBase.ts, TestContext.ts).
Cada subagente de Code
Aplica sus tareas en orden, corre la verificación de cada una y devuelve una línea por tarea. Si algo falla: para y reporta. Nunca se auto-arregla.
progress.md
Solo el orquestador, una entrada por lote. No lee los diffs de los subagentes: si querés verlos, corre git diff.
Ola de workers (opcional)
| Cuándo: los lotes del plan son de verdad independientes (archivos distintos, ninguna API pública compartida en vuelo). Se te ofrece; nunca se entra en silencio. |
| Propiedad de archivos: cada worker tiene su lista exacta y commitea con rutas explícitas. Dos lotes sobre un mismo módulo no comparten ola. |
launch.txt: una línea autosuficiente por worker, siempre. Lanzarlas y supervisarlas es orca-orchestration; sin él, una persona las pega a mano. |
| Fase 0 y Fase 3 siguen con el conductor: el path self-check corre una vez sobre la unión de rutas; los cuatro verificadores, una vez sobre el árbol integrado. Un verde por worker no es verde de la ola. |
Fase 3 · 9 de 17
| # | Comando | Qué protege |
|---|---|---|
| V1 | bun run test | La suite: que el cambio no rompa ningún test. |
| V2 | bun run types:check | Los tipos de todo el repo. |
| V3 | bun run lint:check | ESLint, con los bloques de imports (slide 14). |
| V4 | bun run skills:check | Lint de skills: cubre .agents/skills/, AGENTS.md y cli/install.ts, que los otros tres no miran. |
ACCEPT
Los cuatro salen con código 0. Sigue el docs follow-through y después la Fase 4.
REJECT
Uno distinto de 0: elegís retry del lote, skip-and-document o abort. Sin auto-fix y sin archivar.
Si la que se rompió es una skill, se reporta upstream (upstream-feedback.md): borrador local redactado, se abre solo con tu OK y se verifica con gh issue view.
Cierre de la Fase 3 · 10 de 17
Cuándo
El cambio agrega, renombra o retira una skill, un script de package.json o una ruta de doc, o cambia un comportamiento que alguna página describe.
Qué se toca
.agents/instructions/agent-context-map.md y agent-skills-and-mcps.md, README.md, INSTALLER.md, CONTEXT.md, docs/core/, los decks y la home de Pages, en el mismo PR.
Sin listas copiadas
Las páginas humanas apuntan a .agents/skills/REGISTRY.md y nunca enumeran las skills (Rule #17).
Qué prueba bun run docs:check
Cada skill del repo tiene su fila en el router de .agents/instructions/agent-skills-and-mcps.md. |
Cada bun run <script> citado en AGENTS.md, en sus secciones de .agents/instructions/ o en los docs existe en package.json. |
Cada link relativo y cada ruta citada existe, también los links markdown de .agents/, .context/ y .claude/. |
Sin citas archivo:línea ni afirmaciones sobre el presente (Rule #17). |
La prosa sigue siendo juicio, con dos ayudas. Una región de código marcada con LINT.IfChange nombra sus páginas: tocarla sin tocarlas bloquea el push y el CI, salvo un commit con Docs-Checked: <label> <motivo> (ADR-0016). Y si el cambio toca cli/, scripts/, .husky/ o las instrucciones, un quinto verificador (V5, solo reporta) busca en los docs la prosa que describe el comportamiento viejo.
Docs de un proyecto downstream: test-framework-adaptation, Fase 9.3.
Fase 4 · 11 de 17
Lo que hace el orquestador, inline
| 1. Confirma que el Verification checklist del plan pasa: los cuatro verificadores en 0. |
2. Mueve el directorio entero a .session/.archive/<YYYY-MM-DD>-framework-development-<change-name>/, con plan.md y progress.md lado a lado. |
| 3. Guarda el resumen de sesión en Engram con la ruta del archivo, para que una búsqueda posterior llegue a los artefactos. |
4. Te da esa ruta para que /git-flow-master la cite en el cuerpo del commit. |
Con REJECT no hay Archive
El directorio queda donde está para depurar, retomar o abortar.
Cierre de sesión
En el chat, nunca en Jira: la lista de capturas con rutas verificadas y el footer con skills, MCPs y CLIs usados y los niveles de testing tocados, con "none" explícito donde no hubo (session-footer-contract.md).
Lecciones
Lo aprendido se propone en refinements.md dentro del scope; nunca se aplica a una skill viva sin tu OK (skill-refinement-protocol.md).
Caso especial · 12 de 17
El constructor: skill-creator
Siempre. Es una skill de comunidad (T3) que cli/install.ts instala a nivel proyecto. Se carga para el borrador, los prompts de prueba, los evals y la pasada de descripción.
El contrato: este repo
Frontmatter con metadata.kind, archivos y secciones por tipo, Definition of Done: agentic-qa-core/references/skill-scaffold.md. skill-creator no es dueño de ese contrato.
Si falta en la máquina
Se arma desde la plantilla de la referencia y la IA te lo dice.
Definition of Done (skill-scaffold.md §5)
bun run skills:check en verde: tipo declarado, sufijo coherente, sin rutas viejas. |
bun run skills:registry regenerado y bun run skills:registry:check en verde. |
Fila en .agents/instructions/agent-skills-and-mcps.md (solo T1) y un cargador: qué flujo la carga y cuándo. |
evals/evals.json para una skill de tipo workflow. |
Las context skills de un proyecto consumidor no pasan por acá: las crea project-context, modo context-skill, con el mismo constructor.
La referencia de la skill · 13 de 17
KATA organiza la automatización en cuatro capas con una sola dirección de dependencia: TestContext, Base, domain Components y Fixtures. Steps es una capa intermedia opcional entre Components y Fixtures. Los archivos de test consumen las Fixtures: no son una capa.
INVARIANT: romperlo pide versión mayor
| Agregar una capa nueva entre las existentes: prohibido. |
| Colapsar capas "por simplicidad": prohibido. Son arquitectura, no abstracción especulativa. |
La regla de fixtures ({ api } · { ui } · { test }), la identidad del ATC, el alcance DRY, los alias de import, la forma de las tuplas HTTP. |
EXTENSIBLE: lista explícita
Utilidades agnósticas en tests/utils/, helpers reutilizables en ApiBase / UiBase. |
Una fixture API nueva: el archivo de fixture, kata-manifest.json y al menos un test que la use. |
Scripts con su entrada en package.json, facades OpenAPI, alias nuevos en tsconfig.base.json. |
Matriz "si cambiás X, verificá Y", tablas completas y lo que esta skill no puede tocar: .agents/skills/framework-development/references/kata-invariants.md.
.agents/instructions/agent-harnesses.md · 14 de 17
cli/ no importa nada de afueraLa regla
Nada bajo cli/ importa de un directorio hermano de la raíz: ni scripts/, ni config/, ni tests/, ni api/, ni packages/, tampoco a través de un alias.
Por qué
cli/ es el componente que se auto-actualiza: bun sync refresca esos archivos y re-ejecuta el proceso antes de sincronizar el resto. El cli/ nuevo corre contra la copia vieja de todo lo demás. Un import que escapa rompe bun sync al cargar el módulo, y con él el rollback, bun setup y bun run setup:doctor.
Dónde va lo compartido
En cli/lib/. Si un script de scripts/ lo necesita, importa desde cli/: esa dirección es segura porque scripts/ se sincroniza después y nunca se re-ejecuta a mitad de corrida.
Quién lo hace cumplir
El bloque CLI_IMPORT_CLOSURE de eslint.config.base.js, así que bun run lint:check lo atrapa en CI, en pre-push y en bun run repo:check. Al lado vive KATA_IMPORT_ALIASES, que prohíbe ./ y ../ bajo tests/.
Lo que nunca hace · 15 de 17
| Regla | Nunca | Por qué te importa |
|---|---|---|
| F1 · F3 | Trabajo por ticket ni componentes de módulo en tests/components/ | esa superficie es de /test-automation |
| F2 | Colapsar las capas KATA | rompe la cadena que asume cada componente |
| F4 | Saltear el pipeline en un "refactor rápido" | es la vía más segura a una regresión sin detectar |
| F5 | Subir de versión mayor Playwright, Bun o TypeScript sin una corrida de regresión E2E | los upgrades juntos esconden roturas de fixtures, locators y tipos |
| F6 | Una fixture API sin su archivo de fixture, kata-manifest.json y un test que la use | una fixture huérfana se pudre |
| F7 | Tocar cli/install.ts sin probar en un clon limpio | un bug ahí llega en silencio a cada usuario nuevo |
| F8 | Una decisión de arquitectura difícil de revertir sin ADR | se re-discute o se viola sin aviso |
Critical Rules en las que se apoya: #2, #7, #12, #15 y #17. Tampoco edita artefactos generados (api/openapi-types.ts, kata-manifest.json, reports/) ni credenciales.
Qué lee y qué escribe · 16 de 17
Lee, en este orden
kata-manifest.json: qué existe antes de proponer algo nuevo |
kata-architecture.md y typescript-patterns.md (de test-automation) |
tests/components/: forma de Api, Page y Steps |
cli/install.ts: si toca el instalador |
scripts/sync-openapi.ts y api/schemas/: pipeline de tipos |
package.json y el lockfile: antes de tocar versiones o scripts |
Escribe
| Qué | Dónde |
|---|---|
| Plan, progreso y archivo | .session/ (local) |
| ADR, cuando aplica | .context/ADR/ |
| El cambio | solo rutas ALLOWED de kata-invariants.md §10 |
| La doc | .agents/instructions/ (agent-context-map.md, agent-skills-and-mcps.md), README.md, INSTALLER.md, CONTEXT.md, docs/core/ |
Lo generado se regenera con su comando (bun run kata:manifest, bun run api:sync).
Cierre · 17 de 17
Cómo se invoca
Claude Code: /framework-development.
OpenCode y Codex: cargá la skill framework-development.
Modo por defecto: le das un <change-name> en kebab-case al arrancar. Modo instructions: cualquier edición de AGENTS.md, una sección, el ROUTER o los triggers. También la activan "evolve framework", "refactor cli", "sync AI context".
Antes y después
Después del Archive: /git-flow-master commitea y abre el PR.
Si hubo split: /test-automation migra los specs consumidores.
Ola opcional: orca-orchestration.
Doctrina compartida: agentic-qa-core (sus references/).
Dónde leer más
En .agents/skills/framework-development/: SKILL.md y kata-invariants.md.
En agentic-qa-core/references/: session-management.md, skill-scaffold.md, adr-doctrine.md.
La idea que ordena todo
El framework es el piso de cada test: un cambio ahí pasa por tu aprobación del plan, cuatro verificaciones y la doc en el mismo PR. Si algo falla, la IA para y te pregunta.
Inventario de skills: .agents/skills/REGISTRY.md. El canon de esta skill es su propia SKILL.md.