uschacaso real · VMall
01 / 20
Sesión del 20–21 de julio de 2026 · datos extraídos del transcript y del ledger

Una migración real,
medida turno por turno.

Qué pasa cuando una metodología de desarrollo asistido por IA se aplica completa —de la idea al merge— sobre un sistema legacy en producción. Sin recortes, con los números reales: tiempo, tokens, hallazgos, y lo que salió mal.

2,6 h de trabajo activo· 22 commits en 2 repositorios· 1 BLOCKER atrapado antes del merge· 85–89% de ahorro medido
ContextoEl encargo
01

Un pedido de una línea sobre un sistema de 23.000 líneas

«Quiero comprimir los bytes que se envían al servidor, porque el vínculo es 4G y se paga por MByte.»

El sistema

Cliente Java 8 corriendo en Raspberry Pi dentro de locales comerciales, que recolecta datos de impresoras fiscales y los sube a un servidor central. Código legacy de 2019 en adelante, sin una sola prueba automática, 12 modos de operación distintos, y un servidor separado que persiste los datos para un tercer proceso río abajo.

El riesgo

Son datos fiscales. Si el cliente borra su copia local creyendo que el envío salió bien, y el servidor guardó basura, ese dato no existe más en ningún lado. No hay "lo reprocesamos mañana".

Lo difícil no era comprimir. Era comprimir sin poder confiar en la propia lectura del código viejo.
MediciónLa sesión en cifras
02

Lo que costó, exactamente

2,6 h
Trabajo activo
13,1 h transcurridas, 12 pausas
66
Mensajes del humano
425 turnos del agente
20
Subagentes lanzados
exploradores, jueces, constructores
707
Llamadas a herramientas
168 hilo principal + 539 subagentes

Tokens consumidos

Salida (lo que el modelo escribió)1,04 M
Entrada nueva + escritura de caché9,27 M
Lecturas de caché177 M
Entrada bruta total186 M

El 95% del volumen de entrada son lecturas de caché —el contexto se relee en cada turno pero se cobra a fracción del precio—. La cifra que refleja trabajo real del modelo es el 1,04 M de salida.

Modelos usados

Orquestador principal443 k salida
Subagentes (20)486 k salida
Tramos puntuales (modelo cambiado a mano)110 k salida

Casi la mitad del trabajo lo hicieron subagentes: contextos frescos y aislados, que es justamente lo que da valor a las revisiones adversariales.

Método: el tiempo activo se calculó sumando los intervalos entre mensajes menores a 5 minutos; los 10,5 h restantes son pausas del humano (la más larga, 6,2 h). Tokens y tiempos salen del transcript de la sesión, no de una estimación.

MediciónModelos, effort y reparto
02b

Qué modelo hizo qué, y con cuánto esfuerzo declarado

Modelos realmente usados

RolModeloSalida
Orquestador · fases 1 a 6claude-fable-5443.601
20 subagentesclaude-sonnet-5486.111
Tramos finales (tablero, documentos)sonnet-5 · opus-4-8110.330
Total salida1.040.042

El orquestador mantiene el hilo y las decisiones; los subagentes hacen el trabajo pesado en contextos frescos. Casi la mitad de los tokens de salida se produjo fuera del hilo principal.

Effort declarado por fase

FaseTierEffort
ideahumannone
discoverydeephigh
specdeephigh
adrdeephigh
buildstandardmedium
qachecker · no correlacionadohigh
verifystandardmedium
prodhumannone

Los 20 subagentes por rol

Exploradores de código (solo lectura)3
Constructores y verificadores11
Jueces adversariales ciegos4
Agentes de arreglo quirúrgico2

Una aclaración honesta sobre el effort

El registro de la sesión no guarda una etiqueta de esfuerzo por turno. Lo que ves arriba es lo que la metodología declara para cada fase y el entorno aplica: alto para descubrir, decidir y auditar; medio para construir y verificar. Es configuración real y auditable, no una medición del consumo.

Marcar la diferencia entre "lo declarado" y "lo medido" es la misma disciplina que atraviesa toda la metodología.

I
Parte 1 · Las seis fases

El flujo operacional.

Cada fase tiene una salida concreta, y ninguna arranca hasta que la anterior cerró. Lo que sigue pasó en este orden, con estas herramientas.

PanoramaDe la idea al merge
03

Las seis fases y sus compuertas

1 · Reverse-discovery hechos del sistema 2 · Golden captura del viejo ▲ humano aprueba 3 · ADR-refine interrogar, luegodecidir 4 · Build TDD rojo → verde2 repos en paralelo 5 · QA loop revisión adversarial hasta converger 6 · Merge E2E + PRs ▲ humano decide si hay hallazgos sobre el umbral → volver a construir Salidas por fase: SYSTEM-MAP.md · golden aprobado · 4 ADR + CONSTITUTION + ACCEPTANCE · código con tests · ledger de QA · 2 PRs ▲ Las dos compuertas doradas no las puede cruzar el agente: las cruza una persona.

Las herramientas son comandos: /uscha-reverse-discovery, /uscha-characterize, /uscha-adr-refine, /uscha-devloop, más /uscha-rubric y /uscha-mirador para calidad no testeable y tablero de estado.

Traza realDiagrama de secuencia de la sesión
03b

Quién le habló a quién, y cuándo

Humano66 mensajes Orquestadorfable-5 · 425 turnos Subagentessonnet-5 · 20 agentes Ledgergates Reposgit FASE 1hechos min 0 «comprimir los bytes: el 4G se paga por MByte» ×3 en paralelo · mapear los dos sistemas min 9 12 modos · 9 fronteras · contrato exacto, con cita al código FASE 2golden min 15 correr el sistema ORIGINAL con datos reales 5 capturas .received (longitud + MD5 + SHA-256 verificados) ▲ COMPUERTA · «aprobá vos el golden, yo no puedo» min 40 renombrado a .approved por el humano FASE 3decisiones entrevista: una pregunta por vez, con recomendación «veredicto B» · «sí al roundtrip» · «no dropear telemetría» 4 ADR + CONSTITUTION (7 invariantes) + ACCEPTANCE (7 criterios) FASE 4build min 65 ×2 en paralelo · TDD estricto: prueba en rojo primero commits · 18 pruebas donde no había ninguna FASE 5QA min 77 vuelta 1 · revisión + 2 jueces CIEGOS entre sí 1 BLOCKER · 1 CRITICAL · 4 HIGH — con escenario reproducible min 92 ×2 · arreglo quirúrgico, con el rojo probado antes min 108 vuelta 2 · las mismas tres herramientas CLEAN · cero hallazgos sobre el umbral 32 pasos + gates persistidos CONVERGED · pr-ready derivado de hechos, no declarado FASE 6merge ▲ COMPUERTA · 2 PRs abiertos con la evidencia · «el merge es tuyo» merge a la rama principal — lo ejecuta la persona

Los tiempos son minutos desde el primer mensaje, tomados del registro de la sesión. Las flechas doradas son las dos compuertas que el agente no puede cruzar; la roja, el hallazgo que frenó el avance hasta corregirse. Entre la fase 5 y la 6 pasaron además dos verificaciones extremo a extremo que el diagrama omite por espacio.

Fase 1Reverse-discovery
04

Extraer hechos, no opiniones

La regla de la fase: el sistema ya existe, así que su comportamiento es la verdad. El agente mapea lo verificable y tiene prohibido escribir un "spec" de lo que cree que el sistema hace.

Lo que produjo

  • 12 modos de operación mapeados con su despacho por configuración
  • 9 fronteras externas: serial, dos canales TCP, HTTP, USB, archivos, procesos del sistema
  • Grafo de dependencias, estado compartido y el contrato exacto del protocolo, con cita archivo:línea en cada afirmación

Hallazgos que cambiaron el plan

  • 6 de 15 campos de telemetría viajan y el servidor nunca los lee — costo 4G puro
  • Una clave de configuración documentada en minutos está en segundos en el código
  • Los puertos del cliente y del servidor no coincidían en lo versionado
  • El productor del archivo a enviar no está en ninguno de los dos repos
Ninguno de esos cuatro hallazgos estaba en la cabeza de nadie antes de empezar. Los cuatro afectaban la decisión.
Fase 2Golden · compuerta humana
05

El único artefacto que el agente no puede escribir

Antes de tocar una línea, se corre el sistema original con datos reales y se captura byte por byte lo que hace. Eso queda como verdad de campo contra la que se compara todo lo que venga después.

Se capturó

5 casos: 2 archivos de producción reales (48 KB y 25 KB) y 3 casos borde (vacío, 1 byte, binario 0–255), enviados por el ejecutable viejo sin modificar.

Se verificó

Longitud, MD5 y SHA-256 de cada captura contra el archivo origen. Coincidencia exacta en los 5.

Se aprobó

El agente emite archivos .received y para. Renombrarlos a .approved lo hace la persona. Un hook del sistema bloquea al agente si lo intenta.

# intento del agente de tocar un archivo aprobado, más tarde en la sesión: BLOCKED by INV-GOLDEN-01: the agent may not write or rename an .approved golden The .approved is field truth - a HUMAN approves it.

No es una convención de buena voluntad: es un bloqueo mecánico. Se disparó de verdad durante la sesión cuando el agente intentó agregar una regla de .gitattributes mencionando esa ruta.

Fase 3Decisiones
06

Interrogar antes de generar

La fase de decisiones no arranca escribiendo documentos: arranca haciendo preguntas de a una, y se niega a emitir artefactos hasta que los huecos estén cerrados.

La pregunta que cambió el diseño

La propuesta inicial era elegante: el servidor no se toca, y el proceso río abajo descomprime. La entrevista destapó el agujero — durante la transición, un terminal que se actualiza a mitad del día deja el archivo diario mezclado: mitad plano, mitad comprimido. Ilegible para ambos lados.

Resultado: la descompresión se movió al servidor. Más código tocado, pero convivencia de versiones sin fecha de corte ni coordinación.

Lo que quedó escrito

  • 4 ADR con alternativas consideradas y consecuencias, incluida una decisión negativa (qué NO se hizo y por qué)
  • CONSTITUTION.md: 7 invariantes que ninguna decisión posterior puede violar
  • ACCEPTANCE.md: 7 criterios, cada uno verificable por una prueba
Una decisión que el humano toma en 30 segundos, pero solo si alguien le muestra el agujero primero.
Fase 4Construcción
07

Prueba en rojo primero, en dos repositorios a la vez

0 → 18
Pruebas automáticas
no existía ninguna antes
2
Constructores en paralelo
cliente y servidor
22
Commits convencionales
13 cliente · 9 servidor
2.610
Líneas agregadas
75 archivos tocados

Cada criterio de aceptación se convirtió en una prueba que primero falló. El registro de la sesión conserva la evidencia del rojo: por ejemplo, el criterio que exige rechazar un archivo comprimido corrupto devolvía "OK" antes de implementar la validación.

// nombre de la prueba que cierra el criterio AC-01 test_AC01_gzip_and_plain_uploads_produce_byte_identical_raw // antes de implementar: FAILED — array length mismatch // después: Tests run: 4, Failures: 0

El nombre de la prueba lleva el identificador del criterio. Eso permite que la herramienta de medición diga después "7 de 7 criterios cerrados por prueba verde" en lugar de contar checkboxes tildados a mano.

Fase 5Revisión adversarial
08

Tres herramientas, dos vueltas, jueces a ciegas

Cada vuelta pasa por revisión de código, dos jueces independientes que no ven los hallazgos del otro, y una pasada final de calidad. Se corrige solo lo que supera el umbral de gravedad; el resto se documenta.

HerramientaHallazgosSobre umbralCorregidosDiferidos
code-review8126
judgment-day (2 jueces ciegos)9463
improve1110
Total18699

El BLOCKER

Un juez detectó que los archivos temporales del servidor se nombraban solo por terminal. Dos conexiones simultáneas del mismo terminal —escenario real, porque el cliente reintenta a los 5 segundos y el servidor tiene 25 hilos— podían pisarse los datos y responder "OK" igual. Pérdida de dato fiscal silenciosa.

Prueba del hallazgo: al revertir el arreglo, la prueba de concurrencia falla exactamente como el juez predijo.

El bug que apareció tres veces

Un patrón de Java donde el constructor de un flujo comprimido hace entrada/salida: si falla, el archivo subyacente queda abierto. Apareció en el servidor, en la descompresión del cliente y —lo encontró la última pasada— en la compresión del cliente. Las tres veces se probó en rojo antes de arreglar.

Fase 6Integración y compuerta humana
09

Verificar de punta a punta, y frenar

Regresión contra el golden

10/10 idéntico. El ejecutable viejo contra el arnés de captura reproduce exactamente lo aprobado: el camino sin comprimir quedó intacto.

Extremo a extremo

5/5 por SHA-256. Cliente nuevo contra servidor nuevo: el archivo persistido es idéntico al original en los cinco casos del corpus.

Flota mixta

Verificado. El ejecutable viejo contra el servidor nuevo sigue funcionando — la actualización puede hacerse en cualquier orden.

85,3%
Ahorro medido en el cable
48.429 → 7.130 bytes
89,0%
Ahorro medido en el cable
25.590 → 2.811 bytes
83,3
Índice de preparación
sin impedimentos activos
2
Pull requests abiertos
el merge lo hizo la persona

La herramienta calcula si el estado permite abrir un PR a partir de hechos registrados —convergencia, pruebas verdes, cero bloqueantes abiertos— y no de una declaración del agente. Después de abrir los PRs, se detiene.

II
Parte 2 · Por qué funciona

Los tres principios
que sostienen todo.

Sacá cualquiera de los tres y la metodología se vuelve teatro: mucho proceso, misma confianza que antes.

Principio 1Medido gana a relatado
10

Un checkbox tildado no cierra nada

Todo lo que la metodología afirma tiene que salir de un artefacto verificable. Si el agente dice "listo" pero no hay una prueba verde que lo respalde, el sistema lo marca como narrado y no lo cuenta.

READINESS: 50.0/100 — IN PROGRESS acceptance medido: 0.0% (0/7 criterios cerrados por test verde) ! narrated-only: AC-1..AC-7 — checkbox marcado SIN testcase verde (measured beats narrated: NO cierra)

Eso apareció de verdad en esta sesión: los 7 criterios estaban tildados y el índice igual marcaba 0% medido, porque los reportes de prueba no estaban donde la herramienta los busca. Dos criterios —configuración y compatibilidad de versión de Java— ni siquiera tenían prueba: se escribieron ahí, y recién entonces el número subió a 100%.

La herramienta no discutió con el agente. Simplemente no le creyó hasta ver el archivo.
Principio 2Las compuertas son humanas
11

Tres decisiones que el agente no puede tomar

Aprobar el golden

Es la definición de "cómo se comportaba el sistema antes". Si el agente la escribe, está certificando su propia lectura del código viejo — exactamente el error que el golden existe para atrapar.

Decidir la arquitectura

La entrevista propone y muestra los costos de cada opción, pero la elección queda registrada como decisión de una persona, con su fundamento escrito.

Hacer el merge

El agente abre el PR con la evidencia reunida. Integrar a la rama principal es el acto que no delega.

En esta sesión el humano además rechazó una propuesta del agente —eliminar los 6 campos de telemetría que nadie lee— porque conocía un valor de diagnóstico futuro que el código no muestra. Esa decisión negativa quedó escrita como ADR, con su razón, para que dentro de un año nadie la "arregle" por ignorancia.

Y una prueba en el mundo real

Durante el ensayo manual, el envío falló: el servidor no podía crear un archivo porque el identificador del terminal no estaba configurado y llegaba como ?, carácter ilegal en Windows. El cliente reintentó y conservó el dato. El invariante de no perder datos fiscales funcionando en vivo, sobre un error de configuración que nadie había previsto.

Principio 3Converger, no perseguir el cero
12

Nueve hallazgos arreglados, nueve documentados

La metodología bloquea solo en gravedad alta o superior. Todo lo demás va a un archivo de deuda visible, versionado junto al código. Sin esa regla, el ciclo de revisión no termina nunca.

Se arregló (9)

1 bloqueante de concurrencia · 1 crítico de escritura parcial · 3 fugas de recursos · 1 cobertura ausente del código que protege el invariante fiscal · 1 tope contra bombas de descompresión · 2 arreglos de infraestructura de pruebas.

Se difirió (9)

Consumo de memoria sin tope en el camino sin comprimir (riesgo bajo con archivos de 48 KB) · un caso compuesto teórico empíricamente inalcanzable · huérfanos preexistentes de archivos temporales · cuatro observaciones menores de registro y pruebas.

Dos vueltas completas hicieron falta para converger: en la segunda, las tres herramientas reportaron cero hallazgos sobre el umbral en ambos repositorios. El indicador de "salió bien a la primera" quedó en 0% — y así está registrado, sin maquillaje.

HonestidadFricciones reales
13

Lo que no salió liso

Ninguna demo es útil si esconde los tropiezos. Estos son los de esta sesión, todos registrados en el propio ledger.

Qué pasóCómo se resolvió
La versión de Java del sistema rompía una biblioteca nativa del proyecto Se detectó al primer intento de ejecución y se fijó la JDK correcta por ruta absoluta en todos los scripts
Una de las herramientas de medición se colgó con un error de rutas en Windows Quedó registrada como NO EJECUTADA, no como "limpia" — el ledger distingue una cosa de la otra
Un comando mal escrito del agente vació el archivo de criterios de aceptación Se detectó al leerlo de nuevo y se reconstruyó completo en el mismo turno
El archivo de criterios no tenía el formato exacto que el validador espera El validador lo rechazó explícitamente; se reformateó sin tocar el contenido acordado
Dos paneles del tablero de estado aparecen vacíos Es correcto: el motor no calcula esas métricas todavía y prefiere el vacío antes que un número inventado
Que la herramienta anote "no ejecutada" en lugar de "limpia" vale más que cualquier panel verde.
BalanceArtefactos
14

Qué quedó en el repositorio

Documentación viva

  • SYSTEM-MAP.md — el sistema completo, con citas al código
  • DISCOVERY-SUMMARY.md — hechos y cobertura del golden
  • 4 ADR — decisiones con alternativas y consecuencias
  • CONSTITUTION.md — 7 invariantes inviolables
  • ACCEPTANCE.md — 7 criterios, todos verificados por prueba
  • RUBRIC.md — la vara de lo no testeable
  • ISSUES-DEFERRED.md — la deuda, visible

Verificación y entrega

  • Golden aprobado — 10 archivos de verdad de campo
  • Arnés de captura — reproducible, determinístico
  • 18 pruebas automáticas donde no había ninguna
  • QA-LEDGER.json — 32 pasos medidos de la corrida
  • 2 ejecutables de release, probados al arrancar
  • 2 pull requests con toda la evidencia enlazada
  • Tablero de estado y este documento, generados del ledger
7/7
Criterios cerrados por prueba
10/10
Golden idéntico
1,00
Rúbrica de calidad (umbral 0,80)
0
Escalamientos al humano por bloqueo
CierrePara llevarse
15

Qué mirar si querés probarla

La metodología no es un prompt largo: es una secuencia de compuertas donde cada una produce algo verificable, y donde el humano conserva las tres decisiones que importan.

Empezá por los hechos

Si el sistema ya existe, mapealo y capturá su comportamiento actual antes de decidir nada. Ese golden es lo que después te deja refactorizar sin miedo.

Exigí evidencia

Que cada criterio tenga una prueba con su identificador en el nombre. "Está listo" no es un estado; "hay una prueba verde que lo demuestra" sí.

Poné un umbral

Definí qué gravedad bloquea y qué se documenta. Sin ese corte, la revisión adversarial no converge: encuentra cosas para siempre.

2,6 horas de trabajo activo para migrar un sistema fiscal legacy sin una sola prueba previa, atrapando un bloqueante de concurrencia que ningún humano apurado hubiera visto.
Sesión 20–21 jul 2026· corrida 20260720-233608· Todas las cifras provienen del transcript y del ledger, sin estimaciones