Curso intensivo de 2 días

uscha

Desarrollo medido con agentes de código LLM

Día 1 — Fundamentos + Discovery (proyecto nuevo)
Día 2 — Reverse-Discovery + Migración + Adopción (sistema existente)

Instructor: Andrés Massello · uscha.dev

Día 1

Agenda — Fundamentos + Discovery

Mañana

  • Por qué existe uscha
  • Loop abierto vs. grafo medido
  • Las cinco reglas (en profundidad)
  • Artefactos centrales y QA-LEDGER

Tarde

  • La skill Discovery en detalle
  • Ejemplo de extremo a extremo greenfield
  • De la idea → SPEC → ACCEPTANCE → primer loop medido
  • Patrón práctico + preguntas

El problema

La mayoría de los equipos que usan agentes de código todavía operan en un loop abierto:

Loop abierto

  • El agente decide el recorrido
  • El agente se autoevalúa como "terminado"
  • Las afirmaciones viven en el chat
  • No hay contradicción externa

Consecuencia

  • Los tests se pueden debilitar
  • Producción se convierte en la primera compuerta real
  • Inaceptable cuando el software mueve dinero o personas

Nota de campo · Caso real 001

Humano: "Revisá los errores de QA."

El agente diagnosticó, editó tests y código de producción en el mismo turno, corrió el build y declaró "diseño cerrado" — con cero puntos de decisión humana.

La ejecución fue competente.
La gobernanza falló.

Ese es exactamente el agujero que uscha cierra.

Dos paradigmas

Loop abierto

  • El agente elige el recorrido
  • El agente se pregunta "¿terminamos?"
  • La narración = la verdad

Grafo medido

  • El humano define los caminos posibles
  • Cada compuerta se contesta con evidencia
  • Los loops están enjaulados → escalan al humano
uscha es el grafo medido.

"Los gates que leen HECHOS bloquean.
Los que ADIVINAN sobre prosa, avisan."

Mecanismo central: un ledger determinístico que separa
lo que fue medido de lo que fue narrado.

La columna vertebral — cinco reglas

  1. No hay código sin SPEC + ACCEPTANCE
  2. La verdad vive en archivos versionados
  3. El humano siempre aprueba el merge
  4. Los tests deben asertar
  5. Las migraciones se anclan con un golden

No negociables. Todo lo demás se deriva de estas.

1 No hay código sin SPEC + ACCEPTANCE

El agente no tiene permitido inventar la definición de "terminado".

SPEC.md

Qué y por qué. Restricciones, no-objetivos, interfaces.

ACCEPTANCE.md

Criterios concretos y testeables de "hecho".

2 La verdad vive en archivos versionados

Si no está en el repositorio, el método no lo trata como verdadero.

3 El humano siempre aprueba el merge

El pipeline frena en el gate de merge. Sin excepciones. El agente prepara y mide; el humano decide.

4 Los tests deben asertar

Un test que no aserta algo no es un test. El gate nunca se debilita para que el agente pase.

5 Las migraciones se anclan con un golden

El comportamiento actual se captura mecánicamente antes de cambiar. El agente jamás authorea archivos .approved.

Artefactos centrales y QA-LEDGER

  • SPEC.md · ACCEPTANCE.md
  • ADR/ — decisiones
  • Suites golden
  • RUBRIC.md

QA-LEDGER.json

Registro determinístico de mediciones, nunca de afirmaciones. Cero dependencias runtime. 11 stacks de lenguaje.

El chat es efímero. El ledger es la fuente de verdad.

El sendero — idea → producción

idea discovery spec adr build qa loop verify gate humano producción

Los loops existen pero están acotados. Escalan cuando no pueden converger.

Día 1 · Skill central

/uscha-discovery

Convierte una idea vaga en un paquete completo y versionado de SPEC + ACCEPTANCE mediante interrogación estructurada.

Qué hace

  • Hace preguntas clarificadoras, de a una
  • Saca a la luz restricciones y no-objetivos
  • Fuerza criterios de aceptación concretos
  • Escribe los artefactos en el repositorio

Qué no hace jamás

  • Escribir código de implementación
  • Inventar requisitos en silencio
  • Saltear la aprobación humana del paquete
Ejemplo de extremo a extremo · Greenfield

Feature nueva: "Motor de política de reembolsos"

Un servicio chico y realista en contexto retail/pagos.

Punto de partida (idea vaga):
"Necesitamos algo que decida si un reembolso está permitido según fecha de compra, categoría de producto y nivel del cliente."

Vamos a caminar el recorrido medido completo desde esta idea hasta la primera implementación con compuertas.

Paso 1 — Correr Discovery

1

Invocar /uscha-discovery con la idea vaga.

2

El agente interroga: ¿ventanas de tiempo? ¿categorías? ¿reglas por nivel? ¿casos borde? ¿no-objetivos?

3

El humano responde (o corrige).

4

El agente escribe SPEC.md + ACCEPTANCE.md en el repositorio.

5

El humano revisa y aprueba el paquete antes de cualquier código.

Todavía no se escribió código. La definición de "hecho" ya está cerrada.

Ejemplo · SPEC.md (extracto)

# Motor de política de reembolsos

Objetivo: Decidir elegibilidad de reembolso de una orden completada.

Entradas: order_id, request_timestamp

Reglas (iniciales):

- Estándar: ≤ 30 días desde la compra

- Nivel Premium: ≤ 60 días

- Categoría "Digital": nunca reembolsable después de la descarga

No-objetivos: ejecución de pago, restock de inventario, UI

Restricciones: función pura de decisión, determinística, sin efectos secundarios

Ejemplo · ACCEPTANCE.md (extracto)

1. Dado un cliente estándar con orden de 15 días → eligible = true

2. Dado un cliente estándar con orden de 35 días → eligible = false

3. Dado un cliente premium con orden de 45 días → eligible = true

4. Dada cualquier orden de categoría Digital después del flag de descarga → eligible = false

5. La función es pura: mismas entradas siempre producen la misma salida

6. Todos los casos de aceptación se expresan como tests automatizados que asertan

Estos se convierten en las primeras compuertas reales del ledger.

Paso 2 — Primer devloop medido

discovery spec + acceptance devloop gate humano

El agente nunca puede cerrar la historia solo. Se requieren evidencia + humano.

Fin del Día 1

Lo que logramos hoy

Convertimos una idea vaga en SPEC + ACCEPTANCE versionados,
y después corrimos el primer loop de desarrollo medido
que no puede cerrarse sin evidencia y aprobación humana.

Mañana: el mismo rigor aplicado a sistemas existentes.

Día 2

Reverse-Discovery
+ Migración

Compuertas medidas aplicadas a sistemas que ya existen
y que ya importan.

Día 2

Agenda — Reverse-Discovery y Migración

Mañana

  • Por qué la migración es diferente
  • /uscha-characterize
  • /uscha-reverse-discovery
  • Ejemplo de extremo a extremo de migración

Tarde

  • Evolución segura bajo suites golden
  • Patrones de adopción en equipos
  • Errores comunes y señales de éxito
  • Práctica + cierre

Por qué la migración es el camino de mayor valor

Nunca cambies un comportamiento que no mediste primero.
Skill central

/uscha-characterize

Congela el comportamiento actual como una suite golden antes de cualquier modificación.

Qué produce

  • Captura mecánica de las salidas observadas (.received)
  • Línea base aprobada que el agente no puede reescribir
  • Red de regresión para cambios futuros

Recordatorio de regla

La skill emite .received y FRENA. El agente tiene prohibido authorear archivos .approved — solo el humano promueve el golden.

Skill central

/uscha-reverse-discovery

Extrae hechos de un sistema existente cuando la documentación falta, está vieja o es incorrecta.

Ejemplo de extremo a extremo · Migración

Legado: "Calculadora simple de descuentos"

Realidad de partida:
Un módulo existente usado en producción durante años. Tests escasos. Las reglas de negocio viven en parte en comentarios de código y conocimiento tribal. El equipo quiere permitir que los agentes de código lo mejoren de forma segura.

Vamos a caracterizar → reverse-discovery → agregar una mejora medida → mantener el golden intacto.

Migración Paso 1 — Characterize

1

Seleccionar el módulo (o un conjunto crítico de funciones).

2

Correr /uscha-characterize.

3

La suite golden se genera a partir del comportamiento observado (.received).

4

El humano revisa y promueve el golden (o ajusta las entradas).

A partir de este momento, cualquier desviación del golden se convierte en evidencia visible en el ledger.

Migración Paso 2 — Reverse-Discovery

Ahora extraemos las reglas reales que el código implementa.

Hechos observados (ejemplo):

- 10% de descuento si el carrito > $100

- Extra 5% si el cliente es "gold"

- Los productos Digitales nunca reciben el descuento por valor de carrito

- El descuento se aplica antes del impuesto

- Redondeo: banker's rounding a 2 decimales

Con estos hechos, el humano escribe el nuevo SPEC si decidimos evolucionar el módulo.

Migración Paso 3 — Evolución medida

characterize reverse-discovery nuevo SPEC + ACCEPTANCE devloop gate humano

El golden es sagrado

Permitido

  • El humano actualiza el golden después de un cambio deliberado y revisado
  • Se agrega comportamiento nuevo con casos de aceptación nuevos

Prohibido

  • Que el agente reescriba archivos .approved
  • Cambiar en silencio las salidas esperadas para que los tests pasen
  • Eliminar casos golden sin decisión humana

Así es como dejás que los agentes toquen sistemas de producción sin perder el control.

Adoptar uscha en un equipo

  1. Empezá con un módulo crítico — no con todo el monorepo
  2. Caracterizá primero, siempre
  3. Hacé visible el gate humano — y no opcional
  4. Entrená en las cinco reglas, no en el CLI
  5. Usá el ledger en los stand-ups — "¿qué muestra la evidencia?"

El cambio cultural > la instalación de la herramienta.

Errores comunes

Cómo sabés que está funcionando

Patrón práctico (Día 2)

  1. Elegir una función o módulo existente chico
  2. Correr /uscha-characterize → producir el .received y promover el golden
  3. Correr /uscha-reverse-discovery → extraer las reglas reales
  4. Escribir un SPEC + ACCEPTANCE mínimo para una mejora segura
  5. Ejecutar adentro de /uscha-devloop
  6. Inspeccionar el ledger: regresiones + mediciones nuevas
  7. El humano aprueba o rechaza el merge

Recursos

El método construye el resto

Lo medido le gana a lo narrado.
Los hechos bloquean. Las conjeturas avisan.
Los humanos aprueban.

Día 1 — Discovery convirtió una idea en compuertas medidas.

Día 2 — Reverse-discovery + caracterización nos dejaron evolucionar sistemas existentes sin perder el control.

Andrés Massello · uscha.dev · info@uscha.dev

Preguntas y discusión