tipre
1/0
Metodología agnóstica · v1.2 · discovery + skill + entrega verificable

spec-loop
construir software con evidencia, no con fe.

Una metodología independiente de herramienta: primero se transforma una idea bruta en una SPEC verificable, se registran decisiones con ADR cuando corresponde, se implementa con límites claros y se avanza solo con evidencia.

Idea → Discovery → SPEC → Build → Verify → Evidence → Human gate·Tool-agnostic·Legacy-aware
00La corrección conceptual
spec ≠ adr
El punto que ordena todo

ADR no es SPEC. SPEC no es ADR.

SPEC

Define qué debe hacer el sistema, bajo qué reglas, con qué entradas, salidas, errores, criterios de aceptación, tests esperados y límites operativos. Es el contrato de construcción y verificación.

ADR

Registra por qué se tomó una decisión técnica, qué alternativas se descartaron y cuáles son sus consecuencias. Es memoria arquitectónica, no una lista de tareas.

La SPEC dice “qué comportamiento debe existir”. El ADR dice “por qué elegimos esta forma de resolverlo”.
Regla baseToda entrega necesita SPEC. Solo algunas entregas necesitan ADR formal.
0AAntes de la SPEC
idea bruta
El usuario no tiene que conocer el sistema todavía

Primero viene la idea bruta.

En un sistema nuevo, normalmente no sabés entidades, endpoints, tablas ni arquitectura. Sabés qué querés lograr. La metodología no debe pedirte una SPEC; debe ayudarte a descubrirla.

Lo incorrecto

  • Pedirle al usuario que escriba entidades, endpoints y casos de error desde el inicio.
  • Saltar directo al prompt de implementación.
  • Confundir una idea de negocio con una especificación ejecutable.

Lo correcto

  • Arrancar con una frase imperfecta: “quiero lograr X”.
  • Hacer discovery interactivo por capas.
  • Recién después destilar SPEC, ADRs y prompt de ejecución.
La SPEC no es input del usuario. La SPEC es output de la conversación.
Cambio metodológicoAntes de Risk → Ready → SPEC agregamos una fase obligatoria: Idea → Discovery → Modelo candidato.
0BEntrevista guiada
capas
La conversación tiene orden; no es brainstorming libre

Discovery por capas.

Idea bruta
Objetivo
Actores
Flujos
Dominio
Riesgos
SPEC candidata

1 · Resultado buscado

Qué problema resuelve, para quién, qué duele hoy, qué significa éxito y qué queda fuera.

2 · Actores y canales

Quién llama al sistema, desde dónde, con qué protocolo, credenciales, frecuencia y criticidad.

3 · Flujos principales

Happy path, errores, reintentos, duplicados, estados intermedios, vencimientos y consultas.

4 · Dominio candidato

Entidades tentativas, invariantes, reglas de negocio, estados y relaciones. Se valida, no se impone.

5 · Decisiones técnicas

Solo cuando hay alternativa real: sync vs async, REST vs SOAP, persistencia, seguridad, idempotencia.

6 · Evidencia

Tests esperados, contratos, datos de prueba, smoke test, rollback y criterios de aceptación.

0CRegla de oro
no saltar
El asistente debe resistir la tentación de codear

No se genera código. Se genera claridad.

La primera sesión no apunta a crear archivos de proyecto. Apunta a convertir una intención vaga en un sistema pensable, verificable y ejecutable.

El output de discovery no es “la solución final”. Es un modelo candidato suficientemente claro para discutir.
  • El asistente pregunta, contradice, enumera supuestos y detecta huecos.
  • El usuario responde en lenguaje natural, sin saber arquitectura.
  • El asistente traduce la conversación a artefactos.

Condición para avanzar

Solo se pasa a SPEC cuando están claros: objetivo, actores, canales, flujos principales, errores críticos, datos persistidos, riesgos, decisión de MVP y criterios de aceptación.

# Anti-patrón
Usuario: quiero un gateway fiscal.
Asistente: perfecto, acá va el pom.xml.

# Patrón correcto
Usuario: quiero un gateway fiscal.
Asistente: primero cierro alcance, actores,
protocolos, idempotencia, CAE/CAEA,
certificados, numeración y operación.
0DEjemplo realista
idea inicial
El usuario arranca con intención, no con diseño

Entrada inicial: idea bruta.

Mensaje del usuario

“Necesito armar un server que atienda muchos POS vía SOAP/REST para gestionar la obtención de CAE de ARCA mediante los WS de factura electrónica. Revisá el manual ARCA COMPG. Quiero Java 21, Spring Boot 4.0.3, UI React y base MSSQL. Necesito SPEC, ADR y un prompt inicial para el agente de código.”

Lo que todavía NO sabemos

CAE solamente o también CAEA, tenant por CUIT, manejo de certificados, numeración, idempotencia, auditoría, reintentos, SLA, seguridad POS.

Lo que sí sabemos

Dominio fiscal, integración externa SOAP, alto riesgo de duplicados, necesidad de persistencia fuerte y trazabilidad operativa.

Lo que debe hacer el chat

Convertir esa idea en mapa de actores, flujos, entidades candidatas, APIs, riesgos, MVP y decisiones ADR.

CriterioEl usuario no escribe la página 24. La conversación debe producirla.
0EEntrevista simulada
chat
Cómo el asistente extrae sistema desde una idea

Sesión interactiva SPEC/ADR.

usuarioQuiero un gateway/server para muchos POS que obtenga CAE de ARCA. SOAP y REST hacia los POS. Java 21, Spring Boot 4, React, MSSQL.
asistenteAntes de diseñar, cierro alcance. ¿El MVP autoriza solo CAE online o también CAEA? ¿El POS envía factura completa o solo ticket crudo? ¿El gateway asigna numeración fiscal o la recibe del POS?
usuarioMVP: CAE online. El POS manda ticket completo. La numeración debe administrarla el gateway por CUIT/punto de venta/tipo.
asistenteEso define tres invariantes: numeración secuencial sin huecos lógicos, idempotencia por requestId/POS, y lock por CUIT+PtoVta+TipoCbte. ¿Un reintento del mismo POS debe devolver el mismo CAE si ya fue aprobado?
usuarioSí. No puede emitir dos facturas por reintento.
asistenteCierro dominio candidato: POSClient, Merchant/CUIT, FiscalPoint, InvoiceRequest, FiscalAuthorization, ArcaCredential, NumberSequence, AuditLog. Falta seguridad: ¿apikey por POS, mTLS, IP allowlist, usuario interno?
usuarioPara MVP apikey por POS y allowlist opcional. Certificados ARCA por CUIT guardados seguros.
asistenteCon esto puedo emitir SPEC v0.1 + ADRs: protocolo externo REST/SOAP, idempotencia, numeración, persistencia MSSQL, cliente ARCA, manejo de certificados, UI operativa. Marco preguntas abiertas antes de Codex.
0FSalida del discovery
artefactos
Lo que el usuario recibe después del chat

Del chat salen artefactos.

Paquete resultante

ArchivoContenido
SPEC.mdObjetivo, alcance, actores, flujos, entidades candidatas, APIs, errores, tests, operación.
docs/adr/*.mdDecisiones: REST/SOAP, idempotencia, numeración, persistencia, certificados, cliente ARCA.
ACCEPTANCE.mdChecklist verificable: emisión CAE, reintento, rechazo, consulta, auditoría, seguridad.
RISKS.mdRiesgos fiscales, duplicados, certificados, indisponibilidad ARCA, concurrencia, seguridad.
HANDOFF.mdPrompt final para el agente de código, ya armado desde la conversación.

Prompt final generado por la herramienta

El prompt de ejecución no lo redacta el usuario. Se genera al final, cuando el sistema ya fue modelado y tiene suficiente contexto.

# HANDOFF.md
Leé SPEC.md, ADRs y ACCEPTANCE.md.
No implementes todo el sistema.
Primero creá esqueleto backend + modelo
de dominio + endpoints MVP + tests base.
Antes de tocar código, resumí plan de archivos,
riesgos y primer test.
0GQuién escribe el prompt
responsabilidad
El usuario no escribe el prompt largo

El prompt de ejecución lo genera la herramienta.

El humano no debería tener que saber entidades, endpoints, tablas ni prompts finales. Su trabajo es explicar la intención inicial y validar/corregir las conclusiones de la entrevista.

Lo que escribe el usuario

  • Una idea bruta en lenguaje natural.
  • Respuestas a preguntas de discovery.
  • Correcciones cuando el modelo candidato está mal.
  • Aprobación o rechazo del confirmation gate.

Lo que NO debería escribir el usuario

  • El prompt largo de implementación.
  • La lista inicial de endpoints.
  • El modelo de entidades definitivo.
  • Los ADRs técnicos completos desde cero.
Usuario: idea bruta
Tool / skill: entrevista
Tool / skill: SPEC + ADR + acceptance
Tool / skill: HANDOFF.md
Agente de código: implementación

Único prompt manual aceptable

Un arranque mínimo: Use spec-discovery. Tengo esta idea.... Desde ahí, el skill conduce la entrevista y genera el handoff técnico.

Regla finalEl prompt largo no es input. Es output del proceso de discovery.
0HModelo candidato
no definitivo
El asistente propone; el usuario valida

Modelo inicial descubierto.

Actores

  • POS externo
  • Gateway fiscal
  • ARCA WSFEv1 / WSAA
  • Operador/admin
  • Soporte técnico

Entidades candidatas

  • PosClient
  • MerchantCuit
  • FiscalPoint
  • InvoiceRequest
  • FiscalAuthorization
  • ArcaCredential
  • NumberSequence
  • AuditLog

Flujos MVP

  • Solicitar CAE
  • Consultar estado
  • Reintentar idempotente
  • Consultar último comprobante
  • Health ARCA
  • Administrar credenciales

Advertencia

Esto no es todavía diseño final. Es el primer modelo coherente para discutir. Si el usuario corrige algo —por ejemplo “la numeración la trae el POS”— cambian SPEC, ADRs y tests.

0ILa página que antes aparecía demasiado pronto
handoff
El prompt final es producto del discovery

Ahora sí: prompt de ejecución.

HANDOFF.md · ejemplo generado
# Objetivo Construir el MVP de un gateway fiscal para POS externos que autorice comprobantes vía CAE online contra ARCA WSFEv1. # Contexto obligatorio Leé primero: SPEC.md, docs/adr/*.md, ACCEPTANCE.md, RISKS.md. No inventes alcance fuera del MVP. # Stack objetivo Java 21, Spring Boot 4.0.x, MSSQL, React para UI operativa. # Primer incremento 1. Crear estructura backend. 2. Modelar dominio mínimo. 3. Implementar endpoint REST MVP para solicitud de CAE. 4. Persistir request, estado e idempotencia. 5. Stub/adapter ARCA detrás de interfaz testeable. 6. Tests unitarios e integración mínima. # Reglas duras No emitir dos comprobantes ante el mismo requestId. No guardar secretos en texto plano. No llamar ARCA real en tests automáticos. No marcar READY sin acceptance + tests + evidencia. # Antes de tocar código Responder con: plan de archivos, riesgos, tests iniciales y dudas bloqueantes.
ResultadoEl prompt que ejecuta el agente no nace de una ocurrencia. Sale de SPEC, ADR, riesgos y acceptance.
REFVocabulario mínimo
glosario
Para que el proceso no dependa de interpretación

Glosario operativo.

Idea bruta
Deseo inicial de negocio/producto: objetivo, dolor o resultado buscado, todavía sin modelo ni endpoints.
Discovery
Entrevista guiada que convierte una idea bruta en contexto, alcance, riesgos, dominio y SPEC candidata.
SPEC
Especificación verificable del cambio: comportamiento, reglas, aceptación, tests, errores, operación.
ADR
Architecture Decision Record. Registro de una decisión técnica, sus alternativas y consecuencias.
DoR
Definition of Ready. Condiciones mínimas para empezar a construir sin adivinar.
DoD
Definition of Done. Condiciones para declarar completo el cambio.
Gate
Control que bloquea avance: tests rojos, security HIGH, contrato roto, migration peligrosa.
Ledger
Registro de evidencia: comandos, resultados, cobertura, findings, decisiones, estado final.
Baseline
Estado conocido de deuda legacy que no se limpia ahora pero se congela para no empeorar.
Blocker
Condición que impide merge o release aunque el score parezca alto.
Contract test
Test que verifica compatibilidad entre sistemas: API, eventos, schemas, payloads.
Rollback
Plan para volver atrás o neutralizar el cambio si falla en ambiente real.
Churn
Ruido del proceso: iteraciones, regresiones, oscilaciones. No suma readiness.
Human gate
Punto donde una persona decide merge, release o trade-off. No se automatiza.
01Separación de responsabilidades
comparativa
Qué documento responde qué pregunta

SPEC y ADR trabajan juntos.

AspectoSPECADR
Pregunta¿Qué debe pasar?¿Por qué decidimos hacerlo así?
UsoConstrucción, testing, aceptación, handoffMemoria técnica, trade-offs, restricciones
FormatoChecklist + reglas + casos + contratosContexto + alternativas + decisión + consecuencias
FrecuenciaCasi todo cambio no trivialSolo decisiones con impacto técnico duradero
Bloquea avanceSí: si no hay SPEC verificable, no se construyeA veces: si falta decisión arquitectónica o de riesgo
Ejemplo“POST /tickets valida importes y devuelve 422 si no cierra IVA.”“Se valida en service, no en controller, para compartir regla con batch.”
Criterio prácticoSi describe comportamiento observable, va en SPEC. Si justifica una elección entre alternativas, va en ADR.
02Contrato de construcción
anatomía spec
La SPEC no es literatura: tiene que ser testeable

Anatomía de una SPEC.

# SPEC-014: recepción de ticket fiscal

## Objetivo
Aceptar tickets de terceros y persistirlos sin duplicar.

## Scope
- POST /api/tickets
- Validación de API key y punto de venta
- Idempotencia por cuit + pv + nrocomprobante

## Out of scope
- Conciliación ERP
- Reproceso masivo

## Reglas
- importetotal debe cerrar contra neto + IVA + percepciones
- fecha futura mayor a 24h → 422
- API key inválida → 401

Debe poder convertirse en tests

Cada regla importante debe tener un caso de prueba o verificación manual explícita. Si no se puede testear, probablemente está escrita como deseo, no como especificación.

Debe limitar scope

Una buena SPEC dice qué entra y qué queda afuera. El out-of-scope protege contra el “ya que estamos”.

No reemplaza el criterio técnico

La SPEC define comportamiento. Si hay que elegir arquitectura, persistencia, protocolo o estrategia de idempotencia, ahí aparece el ADR.

03Memoria de decisiones
anatomía adr
Una decisión sin alternativas no está documentada

Anatomía de un ADR.

# ADR-014: idempotencia de tickets

## Estado
Aceptado

## Contexto
El cliente puede reenviar el mismo ticket por timeout.
Necesitamos evitar duplicados sin perder trazabilidad.

## Alternativas
A) Idempotency-Key externa
B) Hash del JSON completo
C) Clave natural: cuit + pv + nrocomprobante

## Decisión
C) Clave natural + log de request.

## Consecuencias
+ Simple para integradores legacy
- Cambios de numeración requieren coordinación

Cuándo sí ADR

Cuando la decisión cambia cómo se mantiene, opera o evoluciona el sistema: persistencia, idempotencia, seguridad, contratos, colas, migraciones, costos, tolerancia a fallos.

Cuándo no ADR

No uses ADR para cada campo, rename o validación menor. Eso genera burocracia y después nadie lee los ADR importantes.

ReglaEl ADR debe poder explicar una decisión seis meses después, cuando el contexto ya no está en la cabeza del equipo.
ADR+Decisiones como especificación operativa
adr ejecutable
El ADR no es una minuta: debe poder guiar implementación

ADR como decisión ejecutable.

Una buena decisión técnica no solo dice “elegimos X”. Debe dejar explícito qué restricciones gobiernan el código, qué alternativas se descartaron, qué archivos o patrones quedan afectados y cómo se verifica que la decisión fue respetada.

Contexto autocontenido

Debe entenderse sin depender de memoria tribal: problema, disparador, restricciones, alternativas, opción elegida y consecuencias.

Plan implementable

Incluye rutas afectadas, patrones a seguir, tests esperados, migraciones, flags, datos y límites de scope.

Verificación concreta

Los criterios se escriben como checks verificables: tests, contratos, linters, smoke test, rollback o revisión manual explícita.

## Implementation Plan
- Affected paths: src/fiscal/, src/api/, tests/integration/
- Pattern: toda llamada fiscal pasa por FiscalGatewayPort
- Tests: idempotencia, timeout, error ARCA, replay
- No tocar: UI operativa fuera del MVP

## Verification
- [ ] Reintento no duplica comprobante
- [ ] Timeout queda auditable
- [ ] No se loguea certificado ni clave privada
- [ ] Contract tests REST/SOAP verdes

Regla práctica

Si un agente o dev no puede implementar sin volver a preguntar “¿cómo era la decisión?”, el ADR todavía está incompleto.

ADR+Cuándo frenar y decidir
triggers
La arquitectura no debe aparecer escondida dentro del código

Triggers proactivos de ADR.

Durante discovery o implementación, el proceso debe detectar decisiones que no pueden resolverse “de paso”. Si aparece una de estas señales, se pausa el build-loop y se abre una decisión.

Nueva dependencia

Se introduce una librería, framework, cliente externo, motor de cola o componente que condiciona el mantenimiento futuro.

Nuevo patrón

Se crea una forma nueva de manejar errores, persistencia, seguridad, integración, logging, validación o contratos.

Trade-off no obvio

Hay más de una alternativa razonable y la elección impacta costo, performance, operación, seguridad o reversibilidad.

Contradicción

El cambio propuesto contradice un ADR aceptado o un patrón dominante del repo. No se pisa: se supersede.

Comentario largo de “por qué”

Si el código necesita un comentario extenso para justificar la decisión, probablemente ese razonamiento pertenece a un ADR.

Hard to reverse

Si después de escribir código será caro cambiarlo —schema, protocolo, auth, persistencia— la decisión merece registro formal.

Stop conditionUn agente no debe resolver arquitectura implícita solo. Debe proponer la decisión, pedir confirmación y recién después continuar.
ADR+Workflow de decisión
fases adr
Antes de escribir, mirar el contexto real

Cuatro fases para crear ADR.

00

Scan

Leer ADRs existentes, README, build files, dependencias, patrones de código y referencias ADR↔código.

01

Intent

Entrevista socrática: qué se decide, por qué ahora, restricciones, opciones, lean, non-goals y éxito medible.

02

Draft

Escribir ADR autocontenido con alternativas, decisión, consecuencias, implementation plan y verificación.

03

Review

Revisar contra checklist de agent-readiness. Si hay gaps, no finalizar salvo aceptación explícita del humano.

Confirmation gate

Antes del draft, el asistente muestra un resumen: título, trigger, restricciones, opciones, lean, non-goals, áreas afectadas y verificación. Si el humano corrige, se actualiza el intento.

Repo existente ≠ hoja en blanco

En un sistema ya iniciado, no se entrevista ignorando lo que existe. Primero se detectan convenciones reales para no generar ADRs incompatibles con el código.

confirmation gate · ejemplo
assistant Estoy capturando esto: - Decisión: idempotencia de solicitudes CAE - Trigger: POS puede reintentar por timeout - Opciones: requestId externo / hash payload / clave fiscal natural - Lean: clave fiscal natural + requestId técnico - Non-goal: no resolver conciliación ERP en este ADR - Áreas afectadas: fiscal service, persistence, REST/SOAP adapters, tests - Verificación: replay no duplica, timeout queda auditable ¿Confirmás antes de redactar el ADR?
ADR+Vida útil y trazabilidad
lifecycle
Las decisiones cambian; la historia no se borra

Lifecycle, índice y vínculo código↔ADR.

proposed
accepted
implemented
superseded
rejected · deprecated · superseded · amended with learnings

Un ADR aceptado no se contradice silenciosamente. Si la decisión cambió, se crea uno nuevo que supersede al anterior y se enlazan ambos.

ADR → Código

El implementation plan lista paths, patrones y tests gobernados por la decisión.

Código → ADR

Comentarios livianos en puntos de entrada permiten que un agente futuro encuentre la razón de una decisión.

// ADR-0003: idempotencia CAE por POS + comprobante
// See: docs/adr/fiscal/ADR-0003-idempotencia-cae.md
public CaeResponse solicitarCae(CaeRequest request) { ... }

Índice

docs/adr/README.md lista estado, fecha, categoría y ADR superseded.

Categorías

backend, fiscal, integration, security, operations, data. Facilita búsqueda y revisión.

Post-acceptance

Cada consecuencia relevante se convierte en tarea, test, verificación o riesgo registrado.

04Cómo se encadenan
relación
La SPEC consume decisiones; el ADR las justifica

Modelo documental mínimo.

SPEC
Acceptance
Tests
Evidence
↑ referencias cuando hay decisiones relevantes ↑
ADR-001
ADR-002
ADR-003

SPEC

Documento vivo del cambio. Debería estar cerca del ticket o PR.

ADR

Documento durable. No se reescribe por cada ajuste; se supersede si cambia la decisión.

Ledger

Documento factual. Registra qué se ejecutó y con qué resultado.

05No todo cambio merece el mismo peso
risk profile
Antes de escribir, clasificar riesgo

Workflow basado en riesgo.

PerfilEjemploDocumentosGates mínimos
A · BajoTexto, UI menor, config no críticaSPEC mini / ticket claroBuild + test relevante
B · NormalFeature local, bugfix de dominioSPEC + acceptanceTests + static gate + review
C · CríticoPagos, facturación, seguridad, datosSPEC formal + ADR si hay decisiónUnit + integration + security + rollback
D · Multi-sistemaAPI pública, eventos, multi-repoSPEC formal + contratos + ADRContract tests + integración + versionado
E · Legacy grandeRefactor, migración, módulos viejosSPEC incremental + baselineCharacterization + no regression + no new debt
Pregunta inicial¿Qué puede romper este cambio y cuánto cuesta si se rompe?
06No se codea con niebla
dor
El freno más barato del proceso

Definition of Ready: listo para empezar.

## Definition of Ready
- [ ] Objetivo claro
- [ ] Scope definido
- [ ] Out-of-scope explícito
- [ ] Entradas y salidas conocidas
- [ ] Errores esperados definidos
- [ ] Reglas de negocio escritas
- [ ] Ambiente de prueba disponible
- [ ] Riesgo clasificado
- [ ] ADR requerido: sí/no
- [ ] Rollback esperado: sí/no

Si falla DoR, se refina

La etapa correcta no es implementar “algo” y corregir después. Es volver a SPEC hasta que el cambio sea construible.

DoR protege al equipo

Reduce retrabajo, discusiones tardías y decisiones improvisadas dentro del código.

07La SPEC tiene dientes
acceptance
La aceptación tiene que ser observable

Acceptance criteria no son deseos.

Mal escrito

  • El endpoint debe ser robusto.
  • Debe manejar errores correctamente.
  • Debe estar seguro.
  • Debe funcionar rápido.

Bien escrito

  • API key inválida devuelve 401 y no persiste.
  • Importe inconsistente devuelve 422 con código AMOUNT_MISMATCH.
  • El log no guarda API key completa.
  • p95 menor a 300ms con 50 requests concurrentes en staging.
Si acceptance no puede fallar, no sirve como acceptance.
08El proceso completo
loop
Tool-agnostic: lo puede ejecutar una persona, agente o CI

Loop de entrega verificable.

Risk
Ready
SPEC
ADR?
Build
Verify
Evidence
Human gate

Construcción

Implementar solo lo que la SPEC permite. Cambios fuera de scope vuelven a refinamiento.

Verificación

Tests, static analysis, security, contratos, operación, rollback. Separar señales.

Evidencia

El resultado final no dice “listo”. Dice por qué está listo o qué lo bloquea.

09QA dividido por tipo de verdad
verification layers
No todo verde significa lo mismo

Cinco capas de verificación.

1Funcional

¿Cumple la SPEC y los acceptance criteria?

2Técnica

¿Compila, tiene tests, respeta estándares y no introduce bugs obvios?

3Regresiva

¿No rompió comportamiento existente, especialmente legacy?

4Contractual

¿No rompió APIs, schemas, eventos, clientes o integraciones?

5Operacional

¿Se puede desplegar, observar, apagar o revertir?

Separar señales

Coverage alto no prueba operación. CI verde no prueba contrato externo. Smoke OK no prueba seguridad.

10Regla anti-caos para repos viejos
legacy baseline
No limpiar todo; no empeorar nada

Baseline legacy congelado.

En sistemas legacy, exigir “cero findings” es una receta para no entregar nunca. La estrategia correcta es congelar la deuda conocida y bloquear deuda nueva.

## Legacy policy
- No new HIGH / CRITICAL findings
- No regression in existing tests
- Touched files cannot introduce new warnings
- Existing debt outside scope goes to deferred backlog
- Refactor only when protected by characterization tests

Realista

Permite avanzar sin convertir cada feature en una limpieza global.

Exigente donde importa

El cambio nuevo no puede empeorar el sistema. La deuda vieja se tolera, la deuda nueva se bloquea.

11Estado, no numerología
readiness
Menos precisión falsa, más blockers explícitos

Readiness como semáforo evidencial.

86/100
RELEASE CANDIDATE
SPEC
OK
tests
OK
static gate
OK
contracts
WARN
operation
MISS
bloquea READY: falta smoke test + rollback validado

El número es auxiliar. El estado real lo definen los blockers. Un cambio no es READY si falta evidencia crítica, aunque el promedio dé alto.

Regla de honestidad

Mostrar siempre: estado, score entero, blockers, evidencia y riesgos residuales. Nunca score solo.

Estados propuestos

NOT READY · IN PROGRESS · MERGE READY · RELEASE CANDIDATE · READY

12La salida debe ser auditada
evidence ledger
No alcanza con que alguien diga que corrió algo

Ledger de evidencia.

## Evidence entry
- timestamp: 2026-06-28T22:40:00-03:00
- change_id: SPEC-014
- commit: a1b2c3d
- command: mvn test
- exit_code: 0
- tests: 42 passed / 0 failed
- coverage: 71%
- static_gate: 0 HIGH/CRITICAL new
- artifacts:
  - target/surefire-reports
  - target/site/jacoco/jacoco.xml

Fuente de verdad

El ledger registra hechos verificables. No interpreta negocio ni reemplaza criterio humano.

Anti-alucinación

Si una herramienta no corrió, no se inventa verde. Ausente significa “sin evidencia”, no “OK”.

13Control del blast radius
budgets
Los loops necesitan límites

Presupuesto de cambio.

## Change budget
Máximo:
- 3 iteraciones automáticas
- 12 archivos modificados
- 0 cambios de schema sin ADR
- 0 dependencias nuevas sin aprobación
- No tocar módulos fuera de scope

Escalar si:
- Un fix revierte otro fix anterior
- Aparece un test rojo nuevo
- Cambia contrato público
- Se supera el scope previsto

Sin presupuesto, el scope se expande

Un agente, un dev o un equipo bajo presión tienden a resolver “un poco más”. Esa expansión es donde nacen regresiones y deuda accidental.

Escalar no es fallar

Escalar significa que apareció una decisión humana o arquitectónica. El proceso funcionó: detectó que no debía seguir solo.

14Listo también significa reversible
rollback
La pregunta que suele llegar tarde

Rollback y operación.

Para cambios no triviales, la SPEC debe decir cómo se neutraliza el cambio si falla en ambiente real.

## Rollback
- Código: revert del PR
- DB: sin migration destructiva
- Config: feature flag `new_flow_enabled=false`
- API: backward compatible
- Smoke test post-rollback: GET /health + flujo base

Migration peligrosa

Si hay cambio de schema forward-only o transformación de datos, el rollback debe ser decisión explícita. No se asume.

Operabilidad

Logs, métricas, alertas, feature flags y runbook son parte del readiness cuando el cambio toca producción.

15Done no es release
state model
Separar estados evita mentiras útiles

Modelo de estados honesto.

DRAFT
READY TO BUILD
DEV DONE
MERGE READY
RELEASE READY

DEV DONE

Implementado localmente, tests relevantes verdes, evidencia inicial.

MERGE READY

CI verde, review cerrada, acceptance cumplida, sin blockers de merge.

RELEASE READY

Deploy, rollback, smoke, monitoreo y comunicación listos.

16Plantilla base
spec template
Documento recomendado para cualquier cambio no trivial

Template SPEC.md.

# SPEC-000: título del cambio

## Objetivo
Qué problema resuelve y para quién.

## Riesgo
Bajo / Normal / Crítico / Multi-sistema / Legacy grande.

## Scope
Qué entra.

## Out of scope
Qué NO entra.

## Comportamiento esperado
Reglas observables del sistema.

## Entradas / salidas / errores
Payloads, códigos, mensajes, validaciones.

## Acceptance criteria
Checklist verificable.

## Test plan
Unit / integration / contract / manual smoke.

## Operación
Logs, métricas, config, permisos, monitoreo.

## Rollback
Cómo se revierte o neutraliza.
17Plantilla para decisiones durables
adr template
Solo cuando hay decisión técnica real

Template ADR.md.

# ADR-000: título de la decisión

## Estado
Propuesto / Aceptado / Superseded

## Contexto
Qué problema técnico fuerza una decisión.

## Fuerzas / restricciones
Performance, operación, seguridad, legacy, costo, plazos.

## Alternativas consideradas
A) ...
B) ...
C) ...

## Decisión
Qué se eligió.

## Consecuencias
Positivas, negativas y riesgos residuales.

## Relación con SPECs
- SPEC-014
- SPEC-021
DisciplinaUn ADR no es para justificar todo: es para que las decisiones importantes no se pierdan.
18Ejemplo concreto
ticket api
Cómo se vería aplicado a una API real

Ejemplo: recepción de tickets.

SPEC

POST /api/tickets recibe comprobante, valida API key, valida importes, evita duplicados, persiste y responde con estado. Define 401, 422, 409, payloads y test matrix.

ADR

La idempotencia se resuelve con clave natural cuit + punto de venta + nrocomprobante, no con hash de payload ni Idempotency-Key externa, por compatibilidad con integradores legacy.

evidence summary · ejemplo
STATE: MERGE READY SPEC: 12/12 acceptance criteria closed TESTS: 58 passed / 0 failed SECURITY: 0 HIGH/CRITICAL new findings RELEASE: pending staging smoke test RESIDUAL RISK: no volume test with real third-party client yet
19Cómo empezar sin burocracia
adopción
No implementar todo el sistema de una vez

Plan de adopción incremental.

01

SPEC mínima

Usar SPEC para cambios medianos: objetivo, scope, acceptance y test plan.

02

ADR selectivo

Registrar solo decisiones durables: seguridad, datos, contratos, operación.

03

Evidencia

Guardar build, tests, coverage y static gate en un resumen estándar.

04

Readiness

Estados + blockers explícitos. Score opcional, nunca solo.

La mejora real no es documentar más. Es documentar lo justo para poder verificar mejor.
ANEXOCómo se modela antes de codear
chat spec/adr
El chat no es para pedir código: es para cerrar ambigüedad

Sesión interactiva para modelar SPEC/ADR.

La conversación sirve como una entrevista técnica: el asistente pregunta, contradice, detecta huecos y destila una SPEC verificable. El código recién empieza cuando la SPEC está lista para ejecutarse.

1Contexto inicial

El humano describe objetivo, sistema actual, restricciones, datos disponibles, actores y dolores. No hace falta que venga perfecto.

2Interrogatorio

El asistente fuerza precisión: casos borde, errores, idempotencia, seguridad, operación, rollback, compatibilidad y out-of-scope.

3Destilado

La salida es un paquete versionable: SPEC.md, ADRs necesarios, acceptance, riesgos, preguntas abiertas y handoff técnico.

La regla: si el asistente puede empezar a codear sin hacer preguntas, probablemente la tarea estaba subespecificada.
Criterio de salidaLa sesión termina cuando hay comportamiento observable, criterios de aceptación, errores definidos, riesgos residuales y decisiones técnicas registradas.
ANEXOArranque mínimo
contrato de conversación
Primero se define cómo conversar

Arranque mínimo para activar la entrevista.

En chat libre podés escribir este contrato una vez. Si existe el skill, no hace falta repetirlo: basta invocar spec-discovery y dar la idea bruta.

No buscar velocidad todavía

En esta fase la productividad es eliminar dudas. Cada ambigüedad resuelta en chat evita código equivocado, tests falsos y retrabajo.

prompt · entrevista spec/adr
Actuá como analista técnico adversarial. No escribas código todavía. Objetivo: ayudarme a transformar este requerimiento en una SPEC verificable y ADRs solo si hacen falta. Primero preguntame lo necesario para cerrar: - alcance y fuera de alcance - actores y flujos - reglas de negocio - errores y casos borde - seguridad/permisos - datos y persistencia - contratos externos - operación, monitoreo y rollback - criterios de aceptación Cuando consideres que convergió, entregá: 1. SPEC.md 2. ADRs necesarios 3. ACCEPTANCE.md 4. riesgos residuales 5. handoff para implementación
ANEXOEjemplo conversacional
modelo realista
Ejemplo: API de recepción de tickets

La conversación que descubre la SPEC.

humanoNecesito una API para recibir tickets de terceros. Que manden los datos de venta y yo los guarde.
asistenteAntes de escribir SPEC: ¿la API recibe tickets fiscales ya emitidos o pedidos para facturar? ¿La clave de idempotencia es comprobante, requestId o ambos? ¿Qué pasa si el importe total no coincide con los ítems?
humanoSon tickets ya emitidos. Idempotencia por cuit + punto de venta + nrocomprobante. Si no coincide el importe, rechazo.
asistenteBien. Falta precisar: código de error, tolerancia de centavos, notas de crédito, fecha futura, API key inválida, comercio deshabilitado, logging de payload y si guardamos intentos rechazados.
humanoTolerancia cero salvo redondeo a 2 decimales. Error 422 AMOUNT_MISMATCH. Guardamos rechazados en apilog. API key inválida 401. Comercio deshabilitado 403.
asistenteCon eso ya hay SPEC funcional. Veo un ADR necesario: dónde validar importes. Propongo service-layer, no controller, porque batch/reproceso deben reutilizar la misma regla. ¿Aceptado?
humanoAceptado.
asistenteConvergió. Entrego SPEC.md, ADR-001 validación en service, ACCEPTANCE.md, riesgos residuales y handoff de implementación.
ANEXOQué queda después del chat
paquete versionable
El output no es una respuesta linda: son archivos

Salida esperada de la sesión de modelado.

ArchivoContenido
SPEC.mdComportamiento, reglas, errores, tests, operación y evidencia esperada.
docs/adr/*.mdSolo decisiones relevantes: alternativas, decisión, consecuencias.
ACCEPTANCE.mdChecklist verificable que luego se tilda contra evidencia.
RISKS.mdRiesgos residuales, supuestos y puntos que requieren aprobación humana.
HANDOFF.mdInstrucciones para quien implemente: humano, agente, CI o equipo.
HANDOFF mínimo Objetivo: - Implementar recepción idempotente de tickets emitidos. Leer antes de tocar código: - SPEC.md - docs/adr/ADR-001-validation-layer.md - ACCEPTANCE.md No hacer: - No cambiar contrato público fuera de SPEC. - No loguear API keys completas. - No modificar schema sin ADR. Evidencia requerida: - Tests unitarios de importes. - Tests de 401/403/422. - Test de idempotencia. - Ledger final con comandos y resultados.
CODEXEjemplo concreto sin atar la metodología
chat + ejecución
ChatGPT modela · Codex implementa dentro del repo

Anexo práctico: ChatGPT Chat + Codex.

ChatGPT Chat
SPEC + ADR + Acceptance
Copiar al repo
Codex
Build + tests + gates
Evidence summary

ChatGPT

Se usa para conversación larga, modelado conceptual, preguntas adversariales, SPEC y ADR.

Repo

La verdad queda en archivos versionados. Nada importante vive solo en el chat.

Codex

Se usa para leer el repo, modificar código, correr comandos, iterar y producir evidencia.

ReglaChatGPT define intención y contratos. Codex ejecuta contra archivos. El merge sigue siendo humano.
CODEXHandoff operativo
pasos
De una conversación a una tarea ejecutable

Flujo de trabajo paso a paso.

01

Modelar

En ChatGPT: entrevista SPEC/ADR hasta converger. No pedir código todavía.

02

Versionar

Crear en el repo SPEC.md, ACCEPTANCE.md y ADRs necesarios.

03

Instruir

Codex lee esos archivos y propone plan de archivos + estrategia de tests antes de editar.

04

Ejecutar

Implementa, corre build/tests/gates, registra evidencia y deja PR/diff listo.

codex · prompt de handoff
Leé estos archivos antes de tocar código: - SPEC.md - ACCEPTANCE.md - docs/adr/*.md Tarea: 1. Resumí el comportamiento esperado. 2. Marcá ambigüedades o contradicciones. 3. Proponé plan de archivos. 4. Proponé tests antes de implementar. 5. Implementá solo el scope de la SPEC. 6. Corré build/tests/gates disponibles. 7. Entregá evidence summary y blockers. No hagas merge. No cambies contratos fuera de SPEC.
CODEXLayout recomendado
archivos
Codex funciona mejor si el repo contiene el protocolo

Estructura mínima para pasar de chat a repo.

repo · layout
repo/ ├─ AGENTS.md ├─ SPEC.md ├─ ACCEPTANCE.md ├─ RISKS.md ├─ HANDOFF.md ├─ docs/ │ └─ adr/ │ └─ ADR-001-validation-layer.md ├─ tools/ │ └─ qa_ledger.py └─ src/...

AGENTS.md

Reglas estables del repo: comandos, convenciones, no-go zones, definition of done y cómo registrar evidencia.

SPEC.md cambia por tarea

No mezclar reglas permanentes con requerimientos puntuales. Lo permanente vive en AGENTS/guías; lo puntual vive en SPEC/ADR/Acceptance.

CODEXSeparación de responsabilidades
límites
Evitar que el agente reabra decisiones cerradas

Qué hace cada capa y qué no.

ChatGPT Chat

  • Explorar contexto
  • Preguntar huecos
  • Redactar SPEC/ADR
  • Detectar riesgos

Codex / agente de código

  • Leer archivos
  • Editar código
  • Correr comandos
  • Reportar evidencia

Humano

  • Define trade-offs
  • Aprueba riesgos
  • Hace smoke test
  • Decide merge/release
Un agente puede proponer cambios a la SPEC. No puede cambiar unilateralmente la SPEC para que su implementación parezca correcta.
ControlSi aparece una contradicción, se vuelve a la SPEC/ADR. No se resuelve escondida en código.
ANEXODesde entrevista inicial hasta desarrollo verificable
dos modos
No es una herramienta obligatoria; es un recorrido completo

¿Se puede hacer todo ahí? Sí, con condiciones.

La metodología puede cubrir el ciclo completo desde una idea bruta hasta dejar un cambio listo para revisión humana: SPEC/ADR generados, código implementado, tests/gates ejecutados, evidencia registrada y PR/diff preparado.

AModo separado

Chat de modelado para discovery, SPEC, ADR, acceptance y riesgos. Luego agente de repo para implementar, correr comandos y producir evidencia.

  • Más control conceptual.
  • Mejor para sistemas nuevos o ambiguos.
  • La verdad pasa al repo como archivos versionables.

BModo end-to-end

Un mismo agente puede entrevistar, escribir SPEC/ADR, confirmar con el humano, implementar, testear y dejar evidencia final.

  • Requiere acceso real al repo.
  • Requiere permisos de escritura.
  • Requiere poder ejecutar build/tests/gates.
Idea bruta
Entrevista
SPEC/ADR
Confirmación humana
Implementación
Tests/gates
Evidence ledger
PR/diff

Gate humano obligatorio

“Final del desarrollo” no significa merge o release automático. El agente puede dejar el cambio listo para revisión; el smoke test, aprobación de riesgos, merge y release siguen siendo decisión humana.

Frase operativaEl proceso puede ser end-to-end hasta ready for human review; no debe venderse como autonomía total sin control.
SKILLLa fase cero empaquetada
spec-discovery
Un skill para no exigirle al usuario que ya sepa diseñar el sistema

spec-discovery: de idea vaga a artefactos versionables.

El skill toma una intención inicial —incompleta, ambigua, incluso mal nombrada— y conduce una entrevista estructurada hasta producir SPEC, ADRs, modelo de dominio, acceptance, riesgos y handoff.

Idea bruta
Entrevista guiada
Modelo candidato
SPEC
ADR?
Acceptance
Handoff

No pide endpoints

Pregunta comportamiento, actores, reglas, fallos, volumen, seguridad, operación y límites. Luego deriva interfaces.

No implementa

Su salida no es código. Su salida es claridad ejecutable para un agente de código o un dev humano.

No inventa certeza

Todo queda marcado como confirmado, asumido, abierto o diferido. Las dudas no desaparecen: se administran.

PrincipioEl skill no reemplaza al humano. Lo interroga hasta que el sistema tenga forma suficiente para construir sin adivinar.
SKILLContrato de entrada y salida
input / output
El usuario trae intención; el skill produce especificación

Contrato del skill.

Input mínimo

Una frase de objetivo más restricciones conocidas. No hacen falta entidades, tablas, endpoints, pantallas, contratos ni arquitectura.

# Ejemplo de input válido
Necesito un server que atienda muchos POS vía SOAP/REST
para gestionar CAE contra ARCA. Quiero Java, Spring,
React y MSSQL. No sé todavía entidades ni endpoints.

Modo de entrevista

Pregunta de a 3 a 7 cosas por ronda. Prioriza los huecos de mayor riesgo. Si el usuario no sabe, propone default y lo marca como supuesto.

Output esperado

ArchivoPropósito
docs/spec/00-discovery-notes.mdNotas, supuestos, preguntas abiertas, decisiones preliminares.
docs/spec/SPEC.mdComportamiento verificable del sistema.
docs/spec/DOMAIN-MODEL.mdConceptos, estados, invariantes, source of truth.
docs/spec/ACCEPTANCE.mdCriterios testeables de aceptación.
docs/spec/RISKS.mdRiesgos, mitigaciones, rollout, rollback.
docs/adr/ADR-0001-*.mdDecisiones técnicas relevantes.
docs/spec/HANDOFF-CODE-AGENT.mdPrompt inicial para implementación.
SKILLCómo pregunta
entrevista
Preguntar por comportamiento, no por implementación prematura

La entrevista no pregunta tablas.

Preguntas correctas

  • ¿Qué pasa si el POS reintenta el mismo comprobante por timeout?
  • ¿Quién es fuente de verdad de la numeración: POS, gateway o tercero externo?
  • ¿Qué debe poder hacer soporte cuando el proveedor externo no responde?
  • ¿Qué casos deben quedar auditados aunque fallen?
  • ¿Qué queda explícitamente fuera del MVP?

Preguntas incorrectas

  • ¿Qué endpoints querés?
  • ¿Qué tablas querés?
  • ¿Querés microservicios?
  • ¿Qué clases Java genero?
  • ¿Qué pantalla React hacemos primero?
El diseño aparece después de entender comportamiento, invariantes, errores, operación y riesgos.
ReglaPrimero dominio y flujos. Después interfaces. Después arquitectura. Recién al final, prompt de implementación.
SKILLFases internas
pipeline
La entrevista tiene estructura, no es charla libre

Pipeline interno del skill.

00

Intake

Objetivo, usuarios, restricciones, documentos externos, integraciones existentes.

01

Outcome

Éxito, MVP, fuera de scope, volumen, SLA, compliance, operación manual/automática.

02

Actores

Clientes máquina, usuarios humanos, soporte, sistemas externos, jobs, canales.

03

Dominio

Entidades candidatas, lifecycle, invariantes, idempotencia, auditoría.

04

Flujos

Happy path, retry, validación, no autorizado, falla externa, reproceso.

05

Interfaces

REST/SOAP/UI/jobs/eventos con contratos y modelo de error.

06

ADRs

Solo para decisiones de largo impacto: persistencia, seguridad, idempotencia, integración.

07

Handoff

Primer slice implementable, tests iniciales, comandos, límites y stop conditions.

SKILLEjemplo de uso
runbook
Un comando mental: “grillame hasta tener SPEC”

Cómo se usa en una sesión real.

chat / agente · spec-discovery
user Use spec-discovery. Necesito armar un server que atienda muchos POS vía SOAP/REST para gestionar CAE contra ARCA. Quiero Java 21, Spring Boot, React y MSSQL. No sé entidades ni endpoints. assistant Entendido. No voy a proponer endpoints todavía. Primero cierro riesgos altos. Lo que sé: muchos POS, doble protocolo, integración fiscal externa, gateway auditable. Preguntas ronda 1: 1. ¿El POS emite numeración propia o el gateway asigna/valida numeración? 2. ¿El MVP requiere CAE solamente o también CAEA/consulta/reproceso? 3. ¿Qué debe pasar si ARCA responde timeout después de recibir la solicitud? 4. ¿Cada POS tiene credenciales propias o hay API keys por comercio/sucursal? 5. ¿Qué operación mínima necesita soporte desde la UI React? user El gateway valida numeración. MVP solo CAE. Timeout: reintentar sin duplicar. API key por POS. Soporte debe ver solicitudes y reintentar. assistant Perfecto. Supuestos confirmados: idempotencia obligatoria, auditoría por solicitud, UI operativa mínima. Ahora derivo modelo candidato y sigo con actores/flujos antes de escribir SPEC.
Salida finalLa conversación termina cuando el skill puede decir READY FOR IMPLEMENTATION, READY WITH ASSUMPTIONS o NOT READY.
SKILLInstalable como paquete
estructura
Tool-agnostic por concepto, agent-friendly por formato

Estructura reusable del paquete.

.agents/
└─ skills/
   └─ spec-discovery/
      ├─ SKILL.md
      ├─ templates/
      │  ├─ SPEC.template.md
      │  ├─ DOMAIN-MODEL.template.md
      │  ├─ ACCEPTANCE.template.md
      │  ├─ RISKS.template.md
      │  ├─ ADR.template.md
      │  └─ HANDOFF-CODE-AGENT.template.md
      └─ scripts/
         └─ init_spec_docs.py

El formato puede vivir en cualquier agente que soporte instrucciones reutilizables. Si no hay filesystem, el skill emite markdown copiable.

Política de escritura

Antes de pisar un archivo existente, se lee. Los supuestos confirmados se preservan. Las preguntas abiertas no se borran. Un ADR no se reescribe silenciosamente: se crea uno nuevo si la decisión cambió.

Script opcional

init_spec_docs.py crea la estructura inicial. No decide nada: solo prepara carpetas y templates para que la entrevista escriba sobre archivos reales.

$ python .agents/skills/spec-discovery/scripts/init_spec_docs.py --name "arca-gateway"
20Resumen ejecutivo
cierre
El núcleo independiente de herramientas

La metodología final: evidencia antes que confianza.

SPEC primero

El cambio se construye contra comportamiento verificable, no contra una idea ambigua.

ADR cuando corresponde

Las decisiones importantes quedan justificadas sin burocratizar cada tarea.

Evidence ledger

La salida se sostiene con hechos: tests, gates, contratos, rollback y blockers.

Risk
Ready
SPEC
ADR?
Build
Evidence
Human gate
Principio finalLa herramienta ejecuta. La metodología gobierna. La evidencia decide. El humano aprueba.
navegar · Home inicio · End final