Files
motor-de-encuestas/method/PATTERNS.md

24 KiB

Patrones operativos

Aplicaciones concretas de los 5 principios. Estructurados por categoría operativa.

Estado de cada patrón: propuesto (validado en 1 proyecto) o estable (validado en 2+ proyectos).

A la fecha, todos los patrones aquí son propuestos. Caso de validación: InQ ROI Sprint 1.5.


Categoría A — Disciplina antes de codear

A.1 Brief versionado antes que código

Estado: propuesto · Deriva de: Principio 1

Todo sprint o cambio mayor arranca con un brief en sprints/sprint-N/BRIEF.md antes de pedirle algo a un agente. El brief define alcance, decisiones tomadas, criterios de éxito y lo que NO entra.

Indicador de aplicación correcta: podés iniciar una sesión nueva con Claude Code pasándole solo el path del brief y CLAUDE.md, sin contexto adicional, y empieza a trabajar correctamente.

Indicador de violación: el agente te hace preguntas que ya están respondidas en otro lugar (o peor, no las hace y asume).


A.2 Mockup como contrato visual

Estado: propuesto · Deriva de: Principio 1

Si el cambio es visual, antes de implementarlo se construye un mockup interactivo (HTML, Figma, Visualizer) que el humano aprueba. El mockup es el contrato: el agente lo replica, no lo interpreta libremente.

Indicador de aplicación correcta: cuando ves el output del agente, podés compararlo lado a lado con el mockup y la diferencia es marginal.

Indicador de violación: llegás a Etapa N de un rediseño visual y descubrís que el output "no tiene nada que ver" con lo que esperabas.


A.3 Roadmap explícito antes de arrancar

Estado: propuesto · Deriva de: Principios 1 y 4

Todo sprint con más de 3 etapas tiene un roadmap explícito desde el inicio. Cada etapa tiene expectativa calibrada de qué cambia y qué NO cambia respecto a la anterior.

Indicador de aplicación correcta: después de cada checkpoint, el resultado coincide con lo que esperabas ver, no te sorprende ni para bien ni para mal.

Indicador de violación: te sorprende negativamente un output intermedio porque pensabas que ya tenía X feature que en realidad está agendado 3 etapas después.


Categoría B — Operación con agentes

B.1 Prompt como artefacto del repo

Estado: propuesto · Deriva de: Principios 4 y 5

Cada etapa de trabajo agéntico tiene su prompt en sprints/sprint-N/ETAPA_X_PROMPT.md, versionado. El chat con el agente es puente entre el prompt y el reporte, no contenedor de la decisión.

Por qué: los prompts en archivo son auditables, editables antes de ejecutar, replicables, y no se pierden al cerrar la sesión.

Estructura mínima de un prompt de etapa:

  1. Objetivo
  2. Pre-requisitos / contexto previo
  3. Decisiones ya tomadas (no consultar de nuevo)
  4. Tareas concretas
  5. Entregables (DoD checklist)
  6. Qué reportar al final
  7. Qué NO hacer en esta etapa

B.2 Mensaje inicial corto, contexto en archivos

Estado: propuesto · Deriva de: Principio 5

El mensaje al agente al arrancar una sesión es de 3-5 párrafos, NO el prompt entero pegado. Estructura:

  1. "Procedé con etapa X"
  2. Archivos a leer en orden
  3. Confirmaciones que esperás antes de que empiece
  4. Restricción de alcance ("no avances a Y sin OK")

Por qué: el contexto en archivos sobrevive a la sesión, queda versionado, y el agente lo consulta cuando lo necesita en vez de tenerlo permanentemente en ventana.


B.3 Decisiones tomadas como sección explícita

Estado: propuesto · Deriva de: Principio 4

En cada prompt de etapa, incluir sección "DECISIONES YA TOMADAS — no consultar de nuevo" con las definiciones cerradas. Esto impide que el agente vuelva a preguntar lo ya resuelto.

Ejemplo:

DECISIONES YA TOMADAS (no consultar de nuevo)
- Payback negativo → "Sin payback (costo aumenta)"
- Caracteres compactos: "<" y "~"
- Pluralización: siempre plural ("1.0 meses")

B.4 Reglas no negociables en CLAUDE.md

Estado: propuesto · Deriva de: Principio 4

Las reglas que aplican a TODO el proyecto van en CLAUDE.md, no solo en briefs específicos. El agente carga CLAUDE.md en cada sesión nueva por defecto.

Ejemplo de qué va ahí:

  • Reglas de marca (cómo se escribe el nombre, qué colores)
  • Restricciones de comportamiento (qué no decir, qué no asumir)
  • Verificaciones obligatorias pre-entrega

Categoría C — Validación de output

C.1 Validación visual mandatoria del artefacto final

Estado: propuesto · Deriva de: Principio 2

Si el output de la etapa es un artefacto visible (PDF, screenshot, página renderizada, documento), el humano lo abre con sus ojos antes del OK. Tests verdes no es suficiente.

Tooling sugerido:

  • PDFs/imágenes: Preview en Mac, visor PDF en Linux
  • Páginas web: dev server en navegador
  • Documentos: editor que renderice (no solo source)

Cuándo evolucionar este patrón: ver methodology/AUTOMATION_STRATEGY.md. La validación visual humana es Fase 1. Puede complementarse con agentes auditores (Fase 3) pero NO se reemplaza completamente hasta que el equipo desarrolle criterio adversarial maduro.

Cuando el output incluye textos que referencian otras fuentes del repo (códigos, IDs, rutas), aplicar también C.8.


C.2 Validación programática antes de declarar completado (agente)

Estado: propuesto · Deriva de: Principios 2 y 3

Antes de declarar una etapa completada, el agente debe ejecutar validaciones programáticas, no solo confiar en tests unitarios. Para outputs visuales:

  • Análisis de píxeles (¿están los colores esperados?)
  • Text extraction (¿están las palabras clave?)
  • Tamaño de archivo (¿es razonable?)
  • Cantidad de páginas (¿coincide con el diseño?)

Por qué: un test unitario puede pasar mientras el output final está roto. La validación programática del artefacto cierra ese gap.


C.3 Auditoría adversarial al reporte

Estado: propuesto · Deriva de: Principio 3

Cuando llega un reporte de agente "todo OK", aplicar 3 preguntas:

  1. ¿Los números reportados cuadran si recalculo o pido dump?
  2. ¿El artefacto es el que pedí?
  3. ¿Lo que no menciona podría ser relevante?

Casos típicos de detección:

  • PDF de 36 KB con 4 páginas (es muy poco → algo no se renderizó)
  • KPI con valor "0.0 meses" (numéricamente correcto pero confuso)
  • Reporte que dice "PDF generado" sin abrir el PDF generado

C.4 Reporte con datos concretos, no descripciones (agente)

Estado: propuesto · Deriva de: Principio 3

Los reportes del agente deben incluir métricas concretas, no descripciones genéricas.

Mal reporte: "PDF generado correctamente, contiene todo lo esperado."

Buen reporte:

PDF generado: 78 KB, 4 páginas
- Página 1: KPI Hero + 4 cards secundarios + top 3 ahorros
- Página 2: tabla con 11 filas + footer
- Página 3: 3 secciones (composición, trayectoria, transparencia)
- Página 4: nota metodológica
Análisis de píxeles del heatmap: verde 36.329px, ámbar 3.889px, rojo 3.713px
Text extraction confirma palabras clave: "InQ ROI", "Powered by InQuality", "Payback"

C.5 Validaciones programáticas explícitas en el prompt

Estado: propuesto · Deriva de: Principios 2 y 5

Cada prompt de etapa incluye una sección "Validaciones automatizadas mandatorias" con criterios objetivos verificables por código que el agente debe ejecutar antes de declarar terminada la etapa o usar present_files.

Por qué: documenta explícitamente qué se va a auto-validar, hace transferible el conocimiento operativo al equipo, captura el aprendizaje sobre qué problemas son recurrentes y vale la pena chequear automáticamente.

Cómo se aplica:

## Validaciones automatizadas mandatorias

Antes de present_files, ejecutá y confirmá:

PDFs:
- pdf-parse confirma palabras clave esperadas: [lista]
- pdf-parse rechaza términos prohibidos: [lista]
- Cada página entre [N-M] KB
- Cantidad de páginas == [N exacto]

Tests:
- Tests previos verdes (>= [N])
- Tests nuevos verdes

Build:
- npm run build limpio
- Sin warnings TS ni lint nuevos

Indicador de aplicación correcta: los problemas que ya cazaste manualmente en sprints anteriores aparecen como validación automatizada en sprints siguientes. Aprendizaje acumulativo.

Indicador de violación: el agente declara etapa terminada y vos cazás el mismo tipo de problema que ya cazaste 3 etapas atrás. Significa que el aprendizaje no se está capturando como validación.

Relación con otros patrones:

  • Extiende C.2 (validación programática) haciéndola explícita en el prompt
  • No reemplaza C.1 (validación visual humana) — son complementarias
  • Es Fase 2 del roadmap de AUTOMATION_STRATEGY.md

C.6 Iniciativa agéntica con consulta clasificada por impacto

Estado: propuesto · Deriva de: Principios 3, 4 y 5

Cuando el agente detecta una oportunidad de mejora fuera del scope del prompt, debe clasificar el impacto del cambio antes de proceder y actuar según la política definida en PRINCIPLES.md sección "Política de iniciativa agéntica".

Niveles de impacto:

  1. Trivial (cambio interno, no visible al usuario, reversible sin costo) → ejecutar y reportar al final como "decisión menor tomada"

  2. Visible reversible (cambio visible al usuario pero sin afectar marca, datos, ni arquitectura) → ejecutar, mencionar explícitamente en el reporte final como "decisión proactiva, validar/revertir"

  3. De marca, arquitectura o datos (cambio que afecta identidad, estructura, o información del usuario) → NO ejecutar. Consultar antes de proceder.

Por qué: los agentes producen mejor cuando tienen libertad para optimizar lo local. Pero esa libertad sin límites lleva a cambios silenciosos que el humano descubre por casualidad. Una clasificación explícita preserva la velocidad agéntica sin perder gobernanza.

Caso real: InQ ROI Sprint 1.5 Etapa 3. Claude Code agregó "Hecho desde Paraguay 🇵🇾" al footer del web app sin estar en el brief. El cambio era razonable, alineado con identidad de marca, pero el humano lo descubrió revisando screenshots, no porque se reportara. Decisión retroactiva: mantener, pero documentar el patrón para que en el futuro este tipo de cambios (impacto nivel 3, afecta marca) sean consulta previa, no decisión unilateral.

Indicador de aplicación correcta:

  • El reporte final del agente tiene una sección explícita "Decisiones tomadas por iniciativa" listando cambios fuera del scope
  • Los cambios nivel 3 no se ejecutan sin consulta previa documentada
  • El humano puede aprobar o revertir cambios nivel 2 sin tener que reconstruir contexto

Indicador de violación:

  • Descubrir cambios en el output que no están ni en el prompt ni en el reporte
  • Cambios de marca, arquitectura o datos ejecutados sin consulta previa
  • "Pequeñas mejoras de UX" agregadas en silencio que cambian el comportamiento del producto

Relación con otros patrones:

  • Complementa E.2 (Hallazgos no esperados) — pero E.2 es para descubrimientos pasivos (cosas que el agente notó), C.6 es para decisiones activas (cosas que el agente hizo).
  • Refuerza C.3 (Auditoría adversarial) — provee al humano una sección concreta donde buscar cambios silenciosos.

Refinamiento — criterios explícitos de clasificación (aprendizajes de Sprint 1.5)

Durante Sprint 1.5 InQ ROI se detectaron dos casos de mala clasificación de impacto. A partir de esos casos, se refinaron los criterios para distinguir entre Niveles 1, 2 y 3:

Reglas de clasificación (en orden de evaluación)

Evaluar en este orden estricto. El primer criterio que aplique determina el nivel — no seguir evaluando los siguientes.

1. ¿El cambio resuelve un ítem listado en TECH_DEBT.md, BACKLOG.md, o archivos de planificación? → Nivel 3 (consulta previa). Sin importar el tamaño técnico.

Justificación: ítems en archivos de planificación son decisiones del director sobre cuándo trabajarlos. El agente no puede promover ítems al sprint en curso por iniciativa.

2. ¿El cambio choca con una restricción explícita del prompt de la etapa? → Nivel 3 (consulta previa). Sin excepciones.

Ejemplo de restricciones explícitas:

  • "NO entra: X" en sección de alcance
  • "NO tocar Y" en reglas operativas
  • "X está agendado para Etapa Z" en decisiones tomadas

3. ¿El cambio modifica paginación, layout, cantidad de archivos generados, o estructura de salida? → Nivel 2 mínimo. Reportar.

4. ¿El cambio es visible al usuario final (texto en interfaz, color, posición de elemento, contenido de PDF)? → Nivel 2 mínimo. Reportar.

5. ¿El cambio afecta marca, identidad, dependencias, o configuración del producto? → Nivel 3 (consulta previa).

6. Si nada de lo anterior aplica → Nivel 1

Ejemplos válidos de Nivel 1:

  • Renombrar variable interna por claridad
  • Reordenar imports
  • Mejorar comentario de código
  • Extraer función helper usada en múltiples lugares
  • Eliminar código muerto evidente (sin riesgo de uso futuro)
  • Limpiar artefactos accidentales del refactor (variables void no usadas)

Argumentos que NO son justificación válida para Nivel 1

El agente puede invocar argumentos que parecen razonables pero violan los criterios de arriba:

  • "Es mejora de legibilidad" → si afecta contenido visible, es Nivel 2 mínimo
  • "Es consistencia con etapa anterior" → verificar si la etapa anterior fue autorizada o si también es adelanto silencioso (ver AP.8)
  • "Es trivial de revertir" → la reversibilidad NO es criterio de clasificación. Cambios reversibles también pueden ser Nivel 3.
  • "Resuelve un bug menor" → si el bug está documentado en TECH_DEBT.md, es Nivel 3
  • "Es lo que el usuario esperaría" → eso es asumir. La política existe para no asumir.

Casos reales documentados (Sprint 1.5 InQ ROI)

Caso 1 (Etapa 5): compactación de páginas reportada como Nivel 1.

  • Realidad: Nivel 2 mínimo (modificó paginación visible)
  • Resultado: nota metodológica truncada, descubierto en validación visual
  • Lección: paginación es estructura de salida, criterio 3 aplica

Caso 2 (Etapa 7-8): reescritura de fórmulas Σ → "SUM" reportada inicialmente sin clasificación, después como Nivel 1.

  • Realidad: Nivel 3 (resolvía ítem de TECH_DEBT.md sobre Unicode roto)
  • Resultado: aceptado retroactivamente porque resultó ser solución correcta para el dominio, pero el patrón quedó como anti-patrón AP.8
  • Lección: ítem en TECH_DEBT.md activa criterio 1 directo, sin importar el tamaño

Implicancia para CLAUDE.md del proyecto

En el CLAUDE.md de cada proyecto, agregar a la sección "Política de iniciativa proactiva":

Antes de aplicar un cambio fuera del scope explícito del prompt actual:

1. Verificá si el cambio está listado en TECH_DEBT.md, BACKLOG.md, o 
   archivos de planificación equivalentes. Si está, es Nivel 3 — consultá.

2. Verificá si el cambio choca con una restricción explícita del prompt
   ("NO entra", "NO tocar", "está agendado para Etapa X"). Si choca, 
   es Nivel 3 — consultá.

3. Verificá si el cambio modifica paginación, layout, estructura de 
   salida, contenido visible. Si lo hace, es Nivel 2 mínimo — reportá.

4. Solo si nada de lo anterior aplica, ejecutá como Nivel 1.

Argumentos NO válidos para evitar la consulta:
- "Es mejora de legibilidad"
- "Es consistencia con etapa anterior" (verificar si esa etapa fue 
  autorizada o también fue adelanto silencioso)
- "Es trivial de revertir"
- "Resuelve un bug menor"

Categoría D — Estructura del repo

D.1 Carpeta sprints/ para activos de planificación

Estado: propuesto · Deriva de: Principio 4

Cada sprint tiene su carpeta sprints/sprint-N/ con todos sus artefactos:

  • BRIEF.md
  • ETAPA_X_PROMPT.md (uno por etapa)
  • ETAPA_X_REPORT.md (opcional, reporte del agente capturado)
  • etapa-X-audit.md (cuando aplica)
  • screenshots/ con evidencia visual

Por qué: en 6 meses, abrir esa carpeta te da el historial completo de cómo se construyó el sprint. Sin esto, el conocimiento queda en commits + memoria, que es frágil.


D.2 Carpeta methodology/ para el método en sí

Estado: propuesto · Deriva de: Principio 4

El método de trabajo vive en methodology/, separado del producto. Esto permite que el método evolucione independiente de cualquier producto específico.


D.3 ADRs para decisiones arquitectónicas

Estado: propuesto · Deriva de: Principio 4

Las decisiones arquitectónicas importantes se registran como ADR (Architectural Decision Record) en ARCHITECTURE.md o docs/adr/. Estructura mínima:

  • Contexto (qué problema teníamos)
  • Decisión (qué elegimos)
  • Alternativas consideradas
  • Consecuencias (qué implica)

D.4 Permisos del agente versionados en .claude/

Estado: propuesto · Deriva de: Principios 4 y 5

Las decisiones sobre qué comandos puede ejecutar el agente sin consultar al humano se versionan en archivos de configuración del repo. Esto evita dos extremos: la fricción de aprobar cada comando manualmente, y el bypass total que abre la puerta a acciones no intencionadas.

Estructura recomendada:

repo/
└── .claude/
    ├── settings.json          ← commitable: deny patterns críticos
    └── settings.local.json    ← gitignored: allow personales del dev

Reglas:

  1. settings.json es del proyecto — contiene patrones deny (comandos peligrosos prohibidos para todos: rm -rf /, git push --force, npm publish, etc.). Se comitea al repo.

  2. settings.local.json es del desarrollador — contiene patrones allow personales (cada uno decide qué comandos pre-aprueba). Va en .gitignore. Cuando un dev nuevo arranca, debe construir su propio archivo siguiendo el template, no copiar el de otro.

  3. El equipo hereda las protecciones, no las preferencias — los deny son compartidos, los allow son individuales.

Por qué:

  • La fricción de aprobar cada npm install destruye el flow de trabajo
  • Pero el bypass total elimina los puntos de control donde se detectan acciones no intencionadas
  • La gobernanza está en clasificar comandos por riesgo, no en aprobar todo o aprobar nada

Indicador de aplicación correcta:

  • En cada sesión de Claude Code, los comandos rutinarios pasan sin pedir aprobación
  • Los comandos no rutinarios siguen pidiendo aprobación (es bueno — ahí prestás atención)
  • Si un comando peligroso aparece, está bloqueado por deny o pide aprobación explícita

Indicador de violación:

  • El dev usa --dangerously-skip-permissions rutinariamente
  • El archivo settings.json contiene allow que deberían ser personales (paga la complejidad de mantenerlo sincronizado entre devs)
  • No hay archivo de configuración y cada dev aprueba todo manualmente cada vez (fricción crónica, señal de que falta este patrón)

Template: ver methodology/TEMPLATES/CLAUDE_PERMISSIONS_TEMPLATE.md.

Relación con otros patrones:

  • Complementa B.4 (reglas no negociables en CLAUDE.md) — pero B.4 es sobre comportamiento del agente, D.4 es sobre permisos del sistema operativo
  • Refuerza Principio 5 (humano director) — sin permisos configurados, el dev se vuelve operador de aprobación

Casos reales que valida:

  • InQ ROI: el director identificó fatiga de aprobación después de ~30 etapas. Configurar permisos eliminó la fricción sin perder gobernanza.

Categoría E — Comunicación humano ↔ agente

E.1 Separar lo validado de lo asumido

Estado: propuesto · Deriva de: Principios 2 y 3

En los reportes del agente, marcar explícitamente qué fue verificado vs qué se asume funcionando.

Ejemplo:

Verificado:
- Tests verdes (455/455)
- PDF generado y abierto con pdf-parse
- Análisis de píxeles confirma heatmap completo

Asumido:
- El componente se renderiza igual en Firefox (solo testeado en Chromium)
- La fuente Roboto está disponible en el sistema cliente (no validado)

E.2 Hallazgos no esperados como sección explícita

Estado: propuesto · Deriva de: Principios 3 y 5

Al final de cada etapa, el agente reporta "hallazgos no esperados" — cosas que descubrió durante la implementación que merecen decisión arquitectónica, aunque no formen parte del DoD.

Ejemplo: "El cambio de --primary propagó a focus rings de inputs (no estaba en el plan). Decisión necesaria: ¿se mantiene o se vuelve a slate?"


E.3 Anti-racionalización explícita

Estado: propuesto · Deriva de: Principio 3

Cuando un test revela algo raro, un cálculo no cuadra, o un output difiere de lo esperado: investigar causa raíz, no minimizar.

Patrón típico de violación: el agente dice "el cálculo es numéricamente correcto" cuando lo que está reportando es un problema de presentación (ej. "0.0 meses" es matemáticamente correcto pero un bug de UX).


C.7 Control preventivo de scope — git diff antes de reportar

Estado: propuesto · Deriva de: Principios 3 y 4 · Origen: Sprint 2 Etapa 1

Incluir en todo prompt de Claude Code la siguiente verificación como paso obligatorio antes de reportar:

git diff --name-only HEAD

El resultado debe contener únicamente los archivos listados como autorizados en el prompt. Si aparece un archivo no autorizado:

  1. Revertirlo: git checkout HEAD -- <archivo>
  2. Listarlo bajo "Conflictos de scope" en el reporte
  3. No incluirlo en el entregable de la etapa

Por qué es preventivo, no detectivo: los controles detectivos (grep de tipos, build, tests) verifican que el código resultante funciona, pero no detectan archivos modificados fuera del scope. Un agente puede tocar ActivityPanel.tsx y los tests seguir verdes si el cambio no rompe nada. El git diff captura el cambio antes de que se declare la etapa terminada.

Indicador de aplicación correcta: el reporte del agente incluye explícitamente la salida de git diff --name-only HEAD y todos los archivos listados son los autorizados.

Indicador de violación: el reporte no incluye la salida del git diff, o el diff contiene archivos no listados sin explicación.

Relación con otros patrones:

  • Es respuesta directa al daño documentado en AP.9 (resolución unilateral de restricciones contradictorias).
  • Complementa C.3 (auditoría adversarial) dándole al humano una checklist concreta de qué verificar.

C.8 — Verificación de códigos contra fuente única · deriva de P3, P4 · origen: 2do proyecto

Cuando un prompt menciona códigos de un instrumento, esquema o contrato (preguntas, columnas, campos), el agente verifica cada código contra la fuente única (SEED_SPEC.md, schema.sql, ADRs) antes de ejecutar. Si detecta una discrepancia entre el código nombrado en el prompt y su definición en la fuente única, DETIENE la ejecución y reporta el conflicto. Ejecutar "literalmente" y delegar la verificación semántica al director es AP.10.

  • Correcto: el reporte del agente incluye una sección "Verificación C.8" con cada código del prompt mapeado a su fila en la fuente única, antes de la ejecución. Si hay discrepancia, la ejecución no arranca hasta que el director resuelva.
  • Violación: el agente ejecuta el prompt al pie de la letra y reporta "los textos son los solicitados literalmente; la validación semántica la hace el director" — exporta el trabajo de verificar al humano y propaga la inconsistencia.

Cómo se incorpora a un prompt: agregar un paso "Verificación C.8" como primera tarea del DoD, listando los códigos a verificar y la ruta exacta de la fuente única. Casos reales en Datos País: Etapa 2D (no se aplicó — daño AP.10), Etapa 2E (se aplicó — detectó conflicto A1/A1b antes de ejecutar), Etapa 2F (se aplicó — sin discrepancias).


Cómo agregar un patrón nuevo

  1. Identificar el patrón durante un proyecto real (no inventarlo en abstracto).
  2. Documentarlo con: nombre, categoría, principio del que deriva, descripción, indicador de aplicación correcta, indicador de violación.
  3. Marcarlo como propuesto con cita del proyecto donde apareció.
  4. Después de aplicarlo en un 2do proyecto distinto, promoverlo a estable.

Cómo retirar un patrón

Si un patrón no se sostiene en práctica o tiene falsos positivos frecuentes, se retira con un PR que documente:

  • Por qué no funcionó
  • Qué alternativa probamos
  • Si hay un patrón nuevo que lo reemplaza