Escribir contrato (v3)
Goal
Producir el único documento que leen el TESTER y el DEV: lo que la unidad de trabajo tiene que cumplir vista desde afuera, con la precisión suficiente para que dos agentes que no se ven lleguen al mismo resultado. El contrato fija lo observable; lo interno queda libre para el DEV.
Hay dos tipos de contrato:
| Tipo | Qué fija |
|---|---|
| Feature | El comportamiento nuevo que hay que construir |
| Refactor | El comportamiento actual que no puede cambiar + la mejora medible |
Esta skill no construye nada. Escribe, pregunta y se detiene.
Novedades v3: tipo refactor; contexto de proyectos existentes (
docs/contexto/); rutas de cada rol propuestas en el contrato cuandoAGENTS.mdno las define.
Input
- La tarea: una HU (desde Jira vía MCP o el archivo/enlace indicado), un pedido de feature, o
un ítem de deuda (
docs/contexto/DEUDA.md). Si una HU tiene puntos abiertos sin resolver, detenerse: se escalan antes de escribir el contrato. - El contexto del proyecto, empezando por
AGENTS.mdcomo índice:- proyecto nuevo:
TECH-DESIGN.md(la sección de esta HU) +adrs/; - proyecto existente:
docs/contexto/(ARQUITECTURA.md,PATRONES.md,DEUDA.md…) +adrs/. Solo los ADRs y documentos que tocan esta unidad de trabajo.
- proyecto nuevo:
- Contratos anteriores en
contratos/, para no contradecir nombres ya fijados.
Workflow — común a los dos tipos
-
Armar el paquete de contexto: la tarea + los ADRs y documentos que aplican. Nada más. Listar qué entró y por qué.
-
Identificar la interfaz observable por la que se usa o se ve la funcionalidad (una ruta HTTP, una pantalla, un comando, un evento…). El contrato se escribe sobre esa interfaz.
-
Fijar las rutas de cada rol. Si
AGENTS.mdya dice qué rutas son del TESTER y cuáles del DEV, citarlo. Si no lo dice, proponerlas (por ejemplo: pruebas en la carpeta de pruebas que usa el proyecto; código en la zona del cambio) y marcarlas comoDECISIÓN PROPUESTA. -
Revisar
PATRONES.mdsi existe: si la tarea toca un tema sin canon o una pregunta abierta, no se elige: va a "Preguntas abiertas para el humano". -
Seguir con el workflow del tipo (feature o refactor).
Workflow — Feature
-
Por cada escenario Gherkin y cada criterio de aceptación, derivar los casos:
- entrada exacta (ruta, parámetros, formato);
- salida exacta por caso (status, datos, texto visible, efecto persistente);
- errores (qué entrada inválida produce qué respuesta).
-
Fijar los nombres que no se negocian: rutas, campos, mensajes visibles, formatos. Son los que el TESTER verificará textualmente.
-
Si la feature pasa por una zona de
DEUDA.md, anotarlo en el contrato como aviso para el humano (puede convenir resolver esa deuda antes, como un refactor aparte).
Workflow — Refactor
-
Delimitar el alcance: qué archivos o módulos reordena el DEV, según la evidencia del ítem de deuda. Lo que queda fuera del alcance no se toca.
-
Listar el comportamiento que no cambia: los casos observables de la zona afectada (camino feliz, entradas inválidas, recursos inexistentes, errores). Incluir lo raro: si hoy el sistema responde algo que parece incorrecto, se lista tal cual y se marca como "se conserva". Los valores exactos los confirma el TESTER al fotografiar el sistema; si no coinciden con el contrato, se corrige el contrato.
-
Definir la mejora medible: qué se mide, cuánto vale hoy (con evidencia) y qué valor se espera después. Ejemplos:
Tipo de deuda Qué se mide Código duplicado Cuántas copias hay Archivo o función gigante Líneas del archivo o de la función Rendimiento Tiempo o memoria, con el mismo comando antes y después Dependencia fija Cuántos archivos importan el módulo directo Indicar cómo se comprueba (comando, búsqueda, CodeGraph, diff).
-
Pruebas que ya tenía el proyecto: listar los comandos que tienen que seguir en verde.
Cierre — común a los dos tipos
-
Anotar el origen de cada línea (escenario Gherkin, criterio, ADR, ítem de deuda,
archivo:línea). Una línea sin origen es una decisión nueva: se marcaDECISIÓN PROPUESTAy entra en la lista de preguntas. Nunca se presenta como si viniera de la tarea. -
Declarar qué queda fuera del contrato (todo lo interno) → libertad del DEV.
-
Guardar
contratos/CONTRATO-<ID>.mdcon la plantilla del tipo, versiónv1:- feature:
assets/contrato-template.md; - refactor:
assets/contrato-refactor-template.md.
- feature:
-
Detenerse. Presentar el contrato y las preguntas al humano. No invocar a nadie.
Versionado
Cuando durante el ciclo aparece un hueco (lo reporta el TESTER, el DEV o el veredicto):
- se formula la pregunta al humano;
- con la respuesta, se edita el contrato, se sube la versión (
v2,v3…) y se agrega una fila al changelog (qué cambió, por qué, quién lo aprobó); - el LEAD avisa a TESTER y DEV de la nueva versión.
Constraints
- No se completa con suposiciones lo que la tarea no dice: se pregunta.
- No se describe implementación interna en el contrato.
- En un refactor, no se "arregla" ningún comportamiento observable: se conserva.
- No se contradice un nombre fijado en un contrato anterior sin decirlo explícitamente.
- No se publica nada.
