FactorIA v3.1
El sistema operativo de trabajo para construir software con IA de forma disciplinada. Todo lo que necesitas saber, en orden, sin saltarte nada.
Quick Start
Si tienes prisa, esto es todo lo que necesitas saber.
-
1Una sola vez — Genera la plantilla
Pega el Prompt 0 en Claude Code → genera la plantilla completa. Guárdala como
FactorIA-APP-TEMPLATEy no la sobreescribas. -
2Para cada proyecto — Duplica la plantilla
Duplica el repositorio template → abre con Claude Code → ejecuta
/init-project+ describe tu proyecto. -
3Cuando apruebas el plan — Inicia la ejecución
Escribe
/start-execution→ Claude construye de forma autónoma. -
4Si se corta la sesión — Retoma sin perder nada
Abre nueva conversación → escribe
/session-start. -
5Después de la entrega — Gestiona los cambios
Escribe
/iterate+ describe el cambio.
¿Qué es FactorIA?
Una plantilla reutilizable para crear software con IA de forma disciplinada.
FactorIA no genera código directamente. Es un sistema operativo de trabajo que define cómo debe trabajar la IA.
Creas la plantilla una vez. Cada proyecto nuevo duplica esa plantilla y ya tiene todo el sistema preparado.
Define cómo pensar, qué pasos seguir, cómo documentar, cómo revisar seguridad, y cómo mantener contexto entre sesiones.
El Problema que Resuelve
El comportamiento natural de la IA sin gobernanza.
Sin FactorIA, una IA tiende a…
Empieza a programar sin entender bien el problema. Implementa desde suposiciones, no desde un plan.
La planificación se percibe como overhead. La IA optimiza para la ruta más corta: código sin preparación.
Sin documentación, cada sesión empieza de cero. La IA no recuerda lo que construyó ayer.
La seguridad se revisa solo si se pide explícitamente, y tarde. Los problemas se acumulan.
La ventana de contexto se llena y resetea. Sin memoria externa, cada nueva conversación empieza desde cero.
Backend hecho = tarea completa. El usuario no puede usar la funcionalidad pero el tracker dice ✓.
🎯 La lección clave
Las IAs son optimizadores de eficiencia. Si el lenguaje deja margen para saltarse un paso, lo aprovechan. No por malicia — por eficiencia. FactorIA existe para corregir estos comportamientos, obligando a la IA a trabajar como un ingeniero disciplinado: primero entender → planificar → implementar → documentar → verificar.
Los 3 Prompts
Cómo se organiza el sistema. Cada prompt tiene una función distinta y solo se usa en un momento concreto.
Creación de FactorIA
Genera la plantilla base completa: ~30 ficheros, CLAUDE.md con todas las reglas, los 5 comandos en .claude/commands/, y toda la estructura de carpetas.
Inicialización de Proyecto
Guía la planificación completa en 9 pasos: entender, preguntar, diseñar, definir ITs y UJs, evaluar skills/MCPs, y presentar todo para aprobación. Sin código.
Invocado via /init-projectEjecución e Iteración
Define dos momentos: start-execution (verificar + construir el plan aprobado) e iterate (gestionar cambios post-entrega con 4 categorías).
Invocado via /start-execution e /iterate.claude/commands/ que se invocan como slash commands automáticamente.Flujo real del usuario
| Paso | Lo que haces | Lo que pasa |
|---|---|---|
| 1 | Pegas el Prompt 0 en sesión limpia | Se genera la plantilla completa con CLAUDE.md, comandos y estructura |
| 2 | Duplicas la plantilla para un proyecto nuevo | Repositorio limpio con todo preparado |
| 3 | Abres el proyecto en Claude Code | Claude Code carga CLAUDE.md automáticamente |
| 4 | Escribes /init-project |
Claude arranca la planificación (9 pasos) — no pegas el Prompt 1 |
| 5 | Apruebas el plan | — |
| 6 | Escribes /start-execution |
Claude construye — no pegas el Prompt 2 |
| 7 | Si se corta la sesión | Nueva conversación → /session-start |
| 8 | Después de la entrega | /iterate + describir el cambio |
CLAUDE.md — El Único Fichero de Gobernanza
El fichero más importante del sistema. Se carga automáticamente cada vez que abres el proyecto.
CLAUDE.md automáticamente al abrir el proyecto. No necesitas hacer nada. Es el único mecanismo que se carga automáticamente — todo lo demás necesita invocarse.Qué contiene (~140 líneas)
8 reglas críticas que nunca se pueden violar. Planning Gate, No secrets hardcodeados, Seguridad obligatoria, Admin panel, Docker, Scope control, Journey completeness, Documentar siempre.
La IA es un ingeniero, no un generador de código. Debe leer antes de implementar, documentar desviaciones, y nunca saltarse reglas silenciosamente.
Define IT y UJ, sus criterios de completitud, y el flujo paso a paso: por tarea, por milestone, verificación con demo data, auditoría final, cierre de sesión.
Reglas para gestionar la ventana de contexto: terminar la tarea actual antes de empezar otra, no releer ficheros ya leídos, priorizar si el contexto se llena.
Los 11 ítems de seguridad inline (no en fichero separado). Se aplican después de cada tarea — no al final del proyecto.
Tabla con cada fichero: propósito, cuándo leerlo, cuándo actualizarlo. Organizada en 3 niveles: Always load, Load per task, Load once.
Las 8 Reglas Críticas (Do Not Violate)
Planning Gate
Nunca escribir código antes de que la planificación esté aprobada. Sin excepción.
No Hardcoded Secrets
Usar los 3 niveles de credenciales. Ningún secreto directo en el código.
Security Audit Required
Checklist de seguridad después de cada tarea + auditoría holística final.
Admin Panel Mandatory
Siempre. Sin negociación.
Docker Deployment
El proyecto debe estar preparado para despliegue con Docker (EasyPanel).
Scope Control
No añadir cosas no pedidas. Si parece "útil" pero no está en el plan → parar y preguntar.
Journey Completeness
Una tarea no está "terminada" hasta que el usuario puede usarla end-to-end (backend + frontend + verificación).
Document as You Work
Actualizar task_tracker y work_log después de cada tarea. No al final.
Los 5 Comandos
El ciclo de vida del proyecto en acción. Ficheros .md en .claude/commands/ que se convierten en slash commands automáticamente.
Claude hace preguntas, propone arquitectura, define Infrastructure Tasks y User Journeys, evalúa skills/MCPs, y presenta un resumen para aprobación. No escribe ni una línea de código.
Verifica que todos los artefactos de planificación existen, y comienza a construir: primero ITs, luego UJs. Después de cada tarea: actualiza docs. Al completar cada milestone: ejecuta /review. Si tiene dudas, pregunta.
Lee project_memory.md y task_tracker.md. Declara dónde está el proyecto y qué toca hacer. La salida es como: "Última completada: UJ-04 → siguiente: UJ-05 → sin blockers."
Lanza un segundo Claude sin sesgo del trabajo anterior. Verifica que los journeys funcionan end-to-end, el checklist de seguridad se aplicó, y no hay gaps entre lo planificado y lo implementado. Detecta errores que el agente principal no ve.
Claude analiza tu petición, la clasifica (bug fix, planning gap, enhancement, new feature), y aplica el workflow correspondiente. Bug fixes y gaps actúan directamente. New features esperan tu aprobación.
Las 4 Categorías de /iterate
Algo no funciona bien
Identifica causa raíz → corrige → verifica que el journey afectado sigue funcionando end-to-end.
✓ Sin aprobación previaAlgo que debía estar en el plan
Algo que se omitió pero ya estaba en scope (ej: no se definió un journey para eliminar, pero eliminar es parte lógica de gestionar). Se implementa directamente.
✓ Sin aprobación previaModificación a journey existente
Ej: añadir un filtro a la lista de fuentes. Evalúa regresión → implementa → verifica.
✓ Sin aprobación previaJourney completamente nuevo
Ej: programar publicaciones. Claude presenta el scope y espera tu aprobación antes de implementar.
⚠ Requiere aprobaciónWork Units: IT + UJ
La decisión estructural más importante. Dos tipos de trabajo, con criterios de completitud distintos.
Trabajo Fundacional
No tiene interfaz de usuario directa, pero es necesario para que los User Journeys funcionen. Se hace primero.
EJEMPLOS- IT-01: Project scaffolding (backend + frontend + Docker)
- IT-02: Database setup (modelos, migraciones, seed data)
- IT-03: Authentication system (JWT, login, registro)
- El componente técnico funciona y es verificable
- El checklist de seguridad pasa
- Está documentado en work_log.md
Acción Completa End-to-End
Una acción completa que un usuario puede realizar de principio a fin. Cruza todo el stack.
EJEMPLO REAL- El backend soporta la funcionalidad
- El frontend la expone al usuario
- El usuario puede realizar la acción end-to-end
- El checklist de seguridad pasa
- Los estados vacíos y de error están manejados
- Existen tests para paths críticos
Sistema de Documentación
3 documentos operativos. Menos ficheros, más útiles.
| Fichero | Qué contiene | Cuándo se actualiza | Prioridad |
|---|---|---|---|
implementation/task_tracker.md |
Tabla de progreso: estado, milestone, security_checked, review_passed | Después de cada IT o UJ | Always load |
docs/work_log.md |
Registro cronológico unificado: qué se hizo, ficheros, decisiones, checks, tests, notas | Después de cada IT o UJ | Load per task |
docs/project_memory.md |
Estado actual, punto de retoma, blockers, ficheros recientes, contexto para la próxima sesión | Al final de cada sesión o cuando el contexto se llena | Always load |
design/design_summary.md |
Referencia compacta (~50 líneas): stack, módulos, entidades, patrones, credenciales | Después de planificación, cuando cambia arquitectura | Always load |
docs/decision_log.md |
Decisiones arquitectónicas significativas | Solo cuando hay decisiones que registrar — no después de cada tarea | Load once |
Formato del work_log
Un formato simple y cronológico que reemplaza 6 ficheros separados de v1.
Niveles de carga de documentos
Cada sesión. project_memory, task_tracker, design_summary.
Solo secciones relevantes. data_model, api_contracts, ui_wireframes, work_log.
Leer durante planning, no releer. requirements, style_guide, stack_selection, decision_log.
Sistema de Seguridad
Tres niveles de credenciales + checklist por tarea + auditoría holística final.
3 Niveles de Credenciales
| Nivel | Qué incluye | Dónde se guarda |
|---|---|---|
| Level 1 Infraestructura |
Conexión a BD, claves JWT, claves de cifrado | Fichero .env — nunca expuesto en UI |
| Level 2 Entorno |
URLs, feature flags | Variables de entorno del servidor (EasyPanel) |
| Level 3 Integraciones |
API keys de terceros | Panel de Admin, cifradas en BD (AES-256), enmascaradas en pantalla |
Checklist de Seguridad por Tarea (11 ítems)
Se aplica después de cada IT o UJ. Está inline en CLAUDE.md, por lo que siempre está disponible.
Sesiones y Gestión de Contexto
La memoria entre sesiones y los heurísticos para no degradar la calidad del trabajo.
Gestión de sesiones
Ejecutar /session-start. Lee project_memory.md + task_tracker.md. Declara estado y próxima tarea.
Actualizar project_memory.md con: estado actual, última tarea completada, siguiente tarea, blockers, y ficheros clave modificados.
Heurísticos de Contexto (nuevos en v3)
4 señales observables que indican cuándo terminar la sesión antes de que se degrade la calidad.
4+ tareas completadas en esta sesión
Terminar la tarea actual → actualizar docs → cerrar sesión.
8+ ficheros diferentes leídos
El contexto está lleno. Misma acción: terminar → actualizar → cerrar.
La sesión fue compactada por el sistema
Señal definitiva de que el contexto fue recortado. Cerrar preventivamente.
Confiando en memoria en vez de releer
Si la IA "recuerda" lo que había en un fichero en vez de verlo, es hora de cerrar.
Reglas de gestión de contexto
Terminar la tarea actual antes de empezar otra
Nunca trabajar en dos tareas a la vez. Finaliza, documenta, luego avanza.
No releer ficheros ya leídos en esta sesión
Salvo que hayan cambiado. Releer consume contexto sin aportar nueva información.
Leer solo secciones relevantes de design docs
No leer data_model.md entero (300+ líneas) cuando solo necesitas 10 líneas sobre una entidad.
in_progress en el tracker hasta que todos los sub-steps estén completos.Skills y MCPs
Herramientas externas que amplían las capacidades de la IA. Exploración activa y obligatoria en v3.
Patrones de ejecución reutilizables documentados como markdown. Ejemplos: postgresql-table-design, tailwind-design-system.
Model Context Protocol — integraciones externas que amplían capacidades: acceso a BD, navegadores, APIs. Ejemplos: postgres MCP, playwright MCP.
El proceso obligatorio en v3 (5 sub-pasos)
Buscar en registries (skills.sh, MCP registry) herramientas que coincidan con el stack del proyecto.
Comparar cada herramienta descubierta con las necesidades reales del proyecto.
Configurar las seleccionadas y confirmar que funcionan antes de continuar.
Registrar selecciones y rechazos (una línea cada uno). No párrafos — conciso.
Anotar en user_journeys.md qué journeys usarán cada skill/MCP.
postgres MCP y playwright MCP habrían prevenido.Limitaciones que Debes Conocer
El sistema no es perfecto. Estas son las fricciones predecibles y documentadas.
El enforcement es "behavioral". Las reglas están en CLAUDE.md y la IA las sigue con alta probabilidad, pero no hay nada que lo impida físicamente. Los /review ayudan a detectar violaciones después.
El sistema consume más tokens que un uso normal. Leer docs, checklists, actualizar documentación, y subagentes de revisión añaden ese overhead. Vs 30-50% en v1.
Los subagentes de /review solo saben qué revisar leyendo los ficheros. Si la IA no documentó bien, el subagente no sabrá qué ficheros de código mirar.
project_memory.md es un resumen, no captura todo. Conviene revisar lo que Claude escribió al final de cada sesión.
Prompt 0 tiene más de 800 líneas. Cuando lo pegues, usa una sesión limpia sin otro contexto previo.
Puesta en Marcha: Paso a Paso
Todo el proceso, desde instalar hasta iterar post-entrega.
Fase A — Generar la Plantilla (una sola vez)
Abre Claude Code en sesión limpia → Pega el Prompt 0 → Espera la generación completa
Fase B — Crear Proyecto Nuevo (cada vez)
Duplicar el repositorio template en GitHub → Nombrar según el proyecto → Clonar en local → Abrir con Claude Code
Fase C — Planificación (obligatoria antes de programar)
Ejecuta /init-project + describe tu proyecto. Claude arranca los 9 pasos de planificación.
- Te haga preguntas de clarificación
- Proponga arquitectura y stack
- Defina ITs y UJs
- Evalúe skills y MCPs activamente
- Presente resumen con estimación
- Revisar lo planificado
- Decir si algo no convence
- Aprobar el plan
- No pedir código todavía
Fase D — Ejecución Autónoma
Escribe /start-execution. Claude verifica readiness y comienza.
Fase E — Entrega
Cuando Claude termina todos los ítems, completa la fase de entrega.
Fase F — Iteración Post-Entrega
Para cualquier cambio después de la entrega: /session-start (si sesión nueva) → /iterate + describir el cambio → Claude clasifica y actúa.
Evolución: Por qué el Sistema es así
4 fases de evolución. Cada decisión de diseño tiene una historia de fracasos detrás.
🎯 La lección maestra de todo el proceso
La evolución fue: no bastante → demasiado → lo justo → validado. Hay un punto de rendimiento decreciente donde cada fichero adicional, cada regla adicional, consume más valor del que aporta. El sistema de gobernanza debe operar dentro de la ventana de contexto de la IA, no competir con ella.
| Aspecto | Fase 1 (vago) | v1 (pesado) | v2 (punto dulce) | v3.1 (validado) |
|---|---|---|---|---|
| Lenguaje | "should", "consider" | "must", "never" | "must", "never" | "must" + heurísticos |
| Ficheros plantilla | Pocos, sin estructura | ~92 | ~30 | ~31 (+design_summary) |
| Ficheros gobernanza | 1 (vago) | 7 (redundantes) | 1 (denso, operativo) | 1 (con prioridades) |
| Docs por tarea | Ningún requisito | 10 ficheros | 2 + 1 por sesión | 2 + 1 sesión + design_summary |
| Unidad de trabajo | No definida | Módulos técnicos | User Journeys | UJs agrupados en milestones |
| Reviews | Ninguna | Cada módulo | Cada 3 ítems | Por milestone (semántico) |
| Verificación visual | Ninguna | Ninguna | Ninguna | Demo data + verificación |
| Skills/MCPs | Ninguna | Pasiva (inventario) | Pasiva (inventario) | Activa (explorar, instalar) |
| Gestión contexto | Ninguna | Ninguna | Reglas básicas | Heurísticos concretos |
| Resultado real | Ignora reglas | Sin contexto para trabajar | Sigue reglas Y tiene contexto | Proyecto completo entregado |
SpAIder v3.1 — La Prueba de Fuego
Resultados reales del proyecto que validó FactorIA v3.1. Content Intelligence & Marketing Automation Platform.
Lo que FactorIA aportó (en palabras del ingeniero IA)
Construir infraestructura primero significó que cuando llegó el dashboard, el endpoint ya tenía auth, rate limiting y validación. No hubo que volver a parchearlo.
Ningún UJ se marcó como completo sin su página frontend. Los 27 journeys cruzaron todo el stack sin excepción.
WebSocket tragaba errores silenciosamente. Un endpoint de admin era accedido por todos. Secrets sin validar en producción. Todos detectados durante el desarrollo, no al final.
Import roto en seed script. Healthcheck apuntando a URL inexistente. Header HSTS documentado pero ausente en nginx.conf. Todos encontrados por el subagente independiente.
En vez de releer 700 líneas de design docs en cada sesión, el resumen de ~50 líneas condensaba lo esencial. Contexto ahorrado = mejor calidad de trabajo.
En múltiples momentos habría sido "útil" añadir notificaciones push, Slack, o roles más granulares. La regla R6 forzó implementar el plan. Cero feature creep.
FAQ — Preguntas Frecuentes
Las dudas más comunes, respondidas directamente.
No. Prompt 0 se usa una sola vez para crear la plantilla. Después, para cada proyecto solo usas /init-project (Prompt 1) y /start-execution + /iterate (Prompt 2) como slash commands.
CLAUDE.md tiene la regla R1: "Never write code before planning is approved." El pre-flight check de /start-execution verifica que los artefactos de planificación existen. Si no existen, para y los completa primero.
Sí, pero con cuidado. Si cambias el checklist de seguridad en CLAUDE.md, actualiza también review.md para que el subagente aplique el mismo checklist.
Sí. Claude Code lo lee al abrir el proyecto. Las ~140 líneas se cargan en el contexto. Mucho menos que las ~350 líneas de v1, con mayor densidad operativa.
Sí. Esa es la definición de User Journey — algo que el usuario puede hacer end-to-end. Si un componente no tiene interfaz, es un Infrastructure Task.
Sí. Cada revisión es una llamada API adicional. Pero se ejecuta por milestone (no por cada módulo como en v1). Un proyecto típico tiene 3-5 milestones.
Algo que debía estar en el plan original pero se omitió. Ej: el plan dice "gestionar fuentes" pero no define un journey para eliminar fuentes. No es feature nueva (ya estaba en scope) — se implementa directamente sin aprobación.
Depende del tamaño. Como referencia: SpAIder v3.1 (38 tareas, 86+ endpoints, 20+ páginas) se construyó en aproximadamente 8-10 sesiones, incluyendo planificación, implementación, reviews, seed data, Docker y auditoría.
Los 28 Retos Históricos — Causa, Consecuencia y Solución
Cada decisión de diseño de FactorIA tiene un fracaso documentado detrás. Esta es la memoria completa del proyecto.
Fase 1 — Retos del inicio permisivo (Retos 1–6)
La IA no leía los docs de planificación antes de implementar
Causa: "Consider reading the planning docs" → la IA "consideraba" y decidía que no era necesario.
Consecuencia: Implementación basada en suposiciones, no en el plan.
Solución v2: Lenguaje imperativo + regla "Read planning docs. You may not implement from memory alone."
La documentación no se generaba o era superficial
Causa: "You should document your decisions" → sugerencia, no obligación.
Consecuencia: Sin memoria persistente, cada sesión empezaba de cero.
Solución v2: R8 en CLAUDE.md — actualizar task_tracker y work_log tras cada tarea. "This is not optional."
El checklist de seguridad se aplicaba aleatoriamente
Causa: "It would be good to apply a security checklist" → opcional.
Consecuencia: Módulos sin revisión de seguridad.
Solución v2: Checklist inline en CLAUDE.md (siempre visible) + R3 como regla crítica.
La IA añadía funcionalidades no pedidas
Causa: "Try to stay within scope" → intento sin consecuencia.
Consecuencia: Scope creep, tiempo gastado en features innecesarias.
Solución v2: R6 — "Build what the user requested. If adding something 'because it seems useful' → stop and ask."
La IA programaba sin esperar aprobación
Causa: No había Planning Gate formal.
Consecuencia: Código escrito antes de entender los requisitos.
Solución v2: R1 — "Never write code before planning is approved." + pre-flight check en /start-execution.
No había verificación de cumplimiento
Causa: Las reglas existían pero nadie comprobaba que se seguían.
Consecuencia: Violaciones invisibles e irrecuperables.
Solución v2: Subagentes de /review con contexto limpio que verifican independientemente.
🎯 Lección Fase 1
Las IAs son optimizadores de eficiencia. Interpretan "should" como "puedo saltarme esto si quiero ir más rápido". Para que una regla se cumpla necesita tres propiedades: ser imperativa (must/never), ser verificable (algo comprueba si se cumplió), y tener consecuencias (algo bloquea si no se cumplió).
Fase 2 — Retos que v1 resolvió bien (Retos 7–13)
| Reto | Solución v1 | Status en v2 |
|---|---|---|
| R07 La IA se autorevisaba y siempre aprobaba | Subagentes con contexto limpio para revisión independiente | Conservado como /review |
| R08 No había continuidad entre sesiones | project_memory.md + comando /session-start | Conservado y simplificado |
| R09 Checklist de seguridad en fichero externo (la IA olvidaba leerlo) | Inlineado directamente en CLAUDE.md | Conservado |
| R10 La IA programaba sin planificar | Planning Gate como regla imperativa en CLAUDE.md | Conservado |
| R11 No había bloqueo por documentación pendiente | Task tracker con semántica de bloqueo | Conservado (simplificado) |
| R12 El UI baseline no estaba en CLAUDE.md (se perdía entre sesiones) | Añadido a Default Technology Decisions | Conservado |
| R13 La IA no sabía qué comandos ejecutar ni cuándo | Tabla de enforcement en CLAUDE.md | Conservado (simplificado) |
Fase 2 — Retos que v1 creó por exceso de estructura (Retos 14–22)
Presión de contexto por exceso de ficheros
Causa: 92 ficheros, 7 de gobernanza, 11 roles, 3 skills, 10 docs por módulo. La ventana de contexto se llenaba antes de poder hacer trabajo real.
Consecuencia: La IA marcaba docs como "actualizados" sin leerlos. "Completitud aparente" — todo parecía hecho pero la calidad era baja.
Solución v2: Reducir a ~30 ficheros y 1 fichero de gobernanza. Criterio: si un fichero no se lee activamente durante la ejecución, no debe existir.
Módulos técnicos que no cruzan el stack
Causa: Módulos como "M05: Backend de fuentes" se marcaban como completos sin que existiera la página frontend.
Consecuencia: En SPAIDER (v1), varios backends marcados como terminados sin páginas frontend correspondientes.
Solución v2: User Journeys como unidad de trabajo. No está "done" hasta que el usuario puede usarlo end-to-end.
Gobernanza redundante con riesgo de divergencia
Causa: Las mismas reglas en CLAUDE.md, SYSTEM_RULES.md, FactorIA_SYSTEM_PROMPT.md, skills y prompts. A veces con variaciones sutiles.
Consecuencia: La IA no sabía cuál era la fuente de verdad y seguía la versión más fácil de interpretar.
Solución v2: Una sola fuente de verdad (CLAUDE.md). Los otros 6 ficheros de gobernanza no existen.
10 ficheros de documentación por módulo
Causa: execution_journal, change_log, task_tracker, decision_log, security_findings, issue_log, risk_log, remediation_log, iteration_log, phase_status.
Consecuencia: La IA hacía actualizaciones superficiales o se las saltaba — creando exactamente el problema que el sistema intentaba prevenir.
Solución v2: 2 ficheros por tarea (task_tracker + work_log) + 1 por sesión (project_memory). El work_log unifica 6 ficheros anteriores.
Fases de lifecycle como carpetas vacías
Causa: 8 phase_status.md — de las cuales solo 1 se actualizó durante la ejecución real de SPAIDER (v1).
Consecuencia: Las carpetas existían pero nadie las usaba. Peso muerto.
Solución v2: 3 carpetas funcionales (planning, design, implementation). Seguridad y validación integradas en el workflow, no en carpetas separadas.
Roles de agente como peso muerto
Causa: 11 ficheros en agents/ (architect.md, backend_engineer.md, etc.) que nunca fueron consultados durante la implementación.
Consecuencia: 11 ficheros bien escritos que nadie leía. Consumo de espacio sin valor operativo.
Solución v2: No existe la carpeta agents/. Un único agente principal + subagentes temporales de /review.
Skills base redundantes con CLAUDE.md
Causa: 3 skills de gobernanza (planning_gate_enforcement, traceable_execution, scope_control) con reglas ya presentes en CLAUDE.md.
Consecuencia: La IA debía leer CLAUDE.md Y las skills, encontrando las mismas instrucciones con palabras diferentes.
Solución v2: No hay skills base. Las reglas viven exclusivamente en CLAUDE.md.
Falta de iteración formalizada
Causa: v1 no tenía mecanismo formal para cambios post-entrega.
Consecuencia: Cuando el usuario pedía modificaciones, la IA trabajaba sin protocolo, sin clasificar el tipo de cambio, sin evaluar regresiones.
Solución v2: Comando /iterate con 4 categorías (bug fix, planning gap, enhancement, new feature) y workflows específicos para cada una.
No había gestión explícita del contexto
Causa: Ni Fase 1 ni v1 mencionaban la ventana de contexto. El recurso más escaso del sistema y nadie lo gestionaba.
Consecuencia: La IA llenaba el contexto hasta que no quedaba espacio para implementar.
Solución v2: Sección "Context Management" en CLAUDE.md con reglas explícitas + heurísticos concretos en v3.
Fase 3 — Retos descubiertos usando v2 en SpAIder (Retos 23–28)
Relectura masiva de design docs
Causa: Cada UJ leía data_model.md (~300 líneas), api_contracts.md (~400 líneas) y ui_wireframes.md completos. Tras cada compactación de contexto, los volvía a leer. El 80% era irrelevante para la tarea actual.
Consecuencia: Gran parte del contexto de cada sesión consumida releyendo docs ya leídos.
Solución v3: design/design_summary.md — documento compacto de ~50 líneas que condensa stack, módulos, entidades y patrones. Reduce relectura ~80%.
Reviews cada 3 ítems — arbitrario y disruptivo
Causa: El número 3 era una constante arbitraria. A veces los 3 ítems eran ITs triviales donde el review era excesivo. Otras veces, 3 UJs grandes se beneficiaban enormemente.
Consecuencia: Reviews sobre trabajo trivial donde el coste superaba el beneficio. Reviews sobre trabajo complejo que llegaban demasiado pronto o tarde.
Solución v3: Reviews por milestone semántico (conjuntos de 3-6 journeys que forman una unidad funcional). El review coincide con puntos naturales de verificación.
Sin verificación visual — páginas construidas pero nunca vistas con datos
Causa: v2 no tenía fase de verificación visual obligatoria. Todas las páginas mostraban estados vacíos al terminar.
Consecuencia: Al añadir datos reales aparecieron: un botón superpuesto ilegible, el campo metadata_ de SQLAlchemy no se mapeaba a Pydantic (errores 500 en 4 endpoints), varias páginas admin mostraban "No data" cuando los datos existían.
Solución v3: Fase obligatoria de verificación visual antes de la entrega: seed script con datos realistas + verificar cada página con datos + verificar empty states.
Skills y MCPs ignorados — la IA no exploraba lo disponible
Causa: El Step 6 usaba "evaluate" (sugerente, no imperativo). La IA "evaluaba mentalmente" y escribía "None selected" sin explorar nada.
Consecuencia: En SpAIder no se instaló ningún skill ni MCP. postgresql-table-design habría detectado el problema de metadata_. tailwind-design-system habría evitado el conflicto PostCSS (.mjs vs .js) que consumió una sesión de debugging.
Solución v3: Step 6 reescrito con lenguaje imperativo y 5 sub-pasos concretos. "Do not skip. Do not write 'None selected' without exploring first."
Gestión de contexto sin heurísticos — "context is getting large" es subjetivo
Causa: v2 tenía la regla pero "getting large" es subjetivo. La IA no tiene un indicador visible de cuánto contexto ha consumido.
Consecuencia: La sesión se compactaba varias veces sin previo aviso, perdiendo detalles de design docs ya leídos.
Solución v3: 4 heurísticos concretos y observables: 4+ tareas completadas, 8+ ficheros leídos, sesión compactada, confiando en memoria en vez de releer.
La tabla de Project Files Reference no distinguía prioridades
Causa: La tabla listaba todos los archivos sin distinguir entre "leer siempre" y "leer una vez". La IA releía style_guide (que ya había absorbido) en cada sesión de frontend.
Consecuencia: Consumo de contexto innecesario releyendo docs estáticos que no habían cambiado.
Solución v3: Tabla reorganizada en 3 niveles: Always load, Load per task, Load once (ver Sección 07).
Los 9 Pasos de /init-project
Lo que ocurre exactamente cuando ejecutas la planificación. Sin código en ningún paso.
Claude lee la descripción del usuario y construye un entendimiento inicial del problema, el dominio y los usuarios objetivo.
Claude identifica ambigüedades y pregunta lo necesario para completar el cuadro: integraciones requeridas, usuarios y roles, restricciones técnicas, preferencias de stack, casos límite importantes.
Con las respuestas del usuario, documenta los requisitos funcionales y no funcionales, y los límites explícitos del proyecto en planning/requirements.md.
Propone arquitectura, stack técnico y decisiones de diseño. Genera documentos con distintos niveles de detalle: data model, API contracts, UI wireframes, stack selection. Los documenta en design/.
Identifica todos los ITs (trabajo fundacional sin UI) y UJs (acciones completas end-to-end), los ordena por dependencias, y los agrupa en milestones semánticos. Los documenta en implementation/task_tracker.md y planning/user_journeys.md.
Exploración obligatoria en registries. Descubrir → evaluar → instalar → verificar → documentar → integrar. No se puede escribir "None selected" sin haber explorado primero. (Ver Sección 10 para detalle completo.)
Documenta las decisiones arquitectónicas significativas tomadas durante la planificación, con su justificación y alternativas descartadas, en docs/decision_log.md.
Crea design/design_summary.md — la referencia compacta (~50 líneas) con stack, módulos, entidades clave, patrones y mapa de credenciales. Se cargará en cada sesión en lugar de releer los docs completos.
Resume todo: número de ITs, UJs, milestones, estimación de sesiones, riesgos identificados, skills/MCPs seleccionados, y stack elegido. El usuario lo aprueba, pide cambios, o hace preguntas. Solo después de la aprobación puede ejecutarse /start-execution.
Fricciones Técnicas Reales de SpAIder
Los 4 problemas concretos encontrados durante la construcción. No son bugs del sistema — son fricciones predecibles y documentadas.
Tokens de Tailwind en colisión con utilidades reservadas
Qué pasó: El style_guide definía tokens como text.primary y background.from que generaban clases Tailwind (text-text-primary, bg-background-from) colisionando con utilidades reservadas de Tailwind CSS v3.
Impacto: Hubo que renombrar todos los tokens a t-primary, bg-from, etc., con impacto en 12 archivos de frontend.
Lección: El style_guide debe documentar restricciones de naming específicas del framework CSS elegido.
APScheduler en entornos sin psycopg2
Qué pasó: El scheduler usaba SQLAlchemyDataStore que internamente requiere psycopg2 (driver sync). El proyecto usaba asyncpg (driver async). En entorno local solo con asyncpg, el scheduler fallaba al arrancar.
Solución aplicada: Scheduler no-bloqueante — si falla, logea un warning y el resto de la app arranca normalmente. Funciona correctamente en el entorno Docker de producción.
Lección: Verificar compatibilidad entre drivers sync y async al elegir librerías de scheduling.
CORS en desarrollo con puertos dinámicos
Qué pasó: La config original solo preveía localhost:3000 como origen CORS. Cuando el preview tool de Claude Code asignaba puertos dinámicos, las peticiones del frontend al backend fallaban con error CORS.
Solución aplicada: Implementar allow_origin_regex para aceptar cualquier localhost:* en desarrollo.
Lección: La configuración CORS en desarrollo debería usar regex por defecto para aceptar cualquier puerto localhost desde el inicio.
El cache de preflight CORS del browser es persistente
Qué pasó: Cuando un preflight CORS falla y el servidor devuelve un max-age, el browser cachea ese fallo. Cambiar la configuración del servidor no tiene efecto hasta que el cache expira o se reinicia el browser.
Consecuencia: Causó confusión durante el debugging porque los cambios en el servidor parecían no tener efecto.
Lección: Ante errores CORS persistentes después de cambiar la config: reiniciar el browser o limpiar el cache de preflight antes de asumir que el problema sigue en el servidor.
Identidad del Agente en CLAUDE.md
Qué significa que la IA sea un "ingeniero" y no un "generador de código". La distinción que lo cambia todo.
Recibe una petición → genera código lo más rápido posible → entrega → listo. Sin planificación, sin verificación, sin memoria. Optimiza para velocidad.
Lee antes de implementar. Documenta desviaciones. Verifica que el trabajo está completo. Nunca se salta reglas silenciosamente. Optimiza para calidad duradera.
Los 4 principios de identidad
Leer antes de implementar
Antes de escribir cualquier código, la IA debe leer los documentos de planificación relevantes para la tarea. No puede implementar desde memoria de lo que "cree que estaba en el plan."
Documentar desviaciones
Si la implementación se desvía del plan (por una razón técnica válida), la IA debe documentar la desviación y su justificación en el work_log. No puede desviarse silenciosamente.
Nunca saltarse reglas silenciosamente
Si una regla de CLAUDE.md no puede cumplirse por algún motivo, la IA debe declararlo explícitamente al usuario. No puede ignorarla sin avisar. La transparencia es parte del rol.
Preguntar antes de asumir
Ante requisitos ambiguos o decisiones que afecten el alcance, la IA debe preguntar al usuario en lugar de asumir y proceder. Las decisiones de alcance pertenecen al usuario, no al agente.
🎯 Por qué importa esta distinción
Un generador de código producirá código más rápido en la primera sesión. Un ingeniero disciplinado producirá un proyecto funcional, documentado y mantenible al final del proceso. FactorIA optimiza para el segundo — porque el objetivo no es generar código, es entregar un proyecto que funciona end-to-end.
Default Technology Decisions
Las decisiones tecnológicas que CLAUDE.md define por defecto para todos los proyectos. Se aplican salvo que el usuario especifique lo contrario.
JWT + bcrypt (cost 12) con cookies httpOnly. Rate limiting con slowapi. Esta combinación probada no se sustituye salvo petición explícita del usuario.
OpenAI SDK como integración estándar de IA. Se puede añadir otros providers (Anthropic, etc.) pero el SDK de OpenAI es el baseline por defecto.
Glassmorphism premium, dark mode, Framer Motion como punto de partida visual. Consistente entre proyectos salvo que el usuario defina una dirección diferente.
AES-256-GCM para credenciales Level 3 (API keys de terceros). Almacenadas en BD, enmascaradas en pantalla. No se guardan en texto plano bajo ningún concepto.
Docker multi-stage builds + nginx reverse proxy con usuarios no-root, preparado para EasyPanel. Siempre incluido en la entrega final.
Siempre presente. Incluye gestión de credenciales Level 3 cifradas, visualización de logs, y control del pipeline. Esto es la R4 — no negociable.
¿Por qué definir defaults en CLAUDE.md y no en los prompts?
Porque CLAUDE.md se carga automáticamente en cada sesión. Si los defaults vivieran solo en los prompts, la IA podría "olvidarlos" en sesiones posteriores cuando el contexto del prompt ya no está activo. Al estar en CLAUDE.md, los defaults son parte del contexto permanente del proyecto — tan constantes como las 8 reglas críticas.
Stack Técnico Completo de SpAIder v3.1
El stack seleccionado durante la planificación con /init-project. Referencia completa para entender qué eligió FactorIA y por qué.
/init-project. No es el único stack posible — FactorIA puede planificar con cualquier stack. Este es simplemente el que probó ser sólido en un proyecto de producción real con 38 tareas.Diagrama Completo del Sistema v3
El flujo visual completo desde Prompt 0 hasta /iterate, con milestones, reviews y entrega.
Tabla Completa de Project Files Reference
Cada fichero de la plantilla, su propósito, cuándo leerlo y cuándo actualizarlo. Esta tabla vive en CLAUDE.md y es la referencia operativa del sistema.
Nivel 1 — Always Load (cada sesión)
| Fichero | Propósito | Cuándo leer | Cuándo actualizar |
|---|---|---|---|
docs/project_memory.md |
Estado actual, última tarea completada, siguiente tarea, blockers, ficheros clave recientes | Al inicio de cada sesión | Al final de cada sesión o cuando el contexto se llena |
implementation/task_tracker.md |
Tabla de progreso: ID, nombre, estado, milestone, security_checked, review_passed | Al inicio de cada sesión | Después de cada IT o UJ completado |
design/design_summary.md |
Referencia compacta (~50 líneas): stack, módulos, entidades clave, patrones, mapa de credenciales | Al inicio de cada sesión | Después de planificación; cuando cambia arquitectura |
Nivel 2 — Load Per Task (solo secciones relevantes)
| Fichero | Propósito | Cuándo leer | Cuándo actualizar |
|---|---|---|---|
design/data_model.md |
Esquema completo de base de datos: tablas, campos, relaciones, índices (300+ líneas) | Solo sección relevante al task actual | Si se añaden o modifican entidades durante implementación |
design/api_contracts.md |
Contratos completos de API: endpoints, request/response schemas, códigos de error (400+ líneas) | Solo endpoints del journey actual | Si se añaden endpoints o cambian contratos |
design/ui_wireframes.md |
Wireframes y especificaciones de UI para cada página y componente | Solo páginas del journey actual | Si se modifican layouts o componentes significativamente |
docs/work_log.md |
Registro cronológico unificado: qué se hizo, ficheros, decisiones, checks de seguridad, tests, notas | Al iniciar una tarea (entradas recientes) | Después de cada IT o UJ completado |
planning/user_journeys.md |
Definición detallada de cada User Journey: backend, frontend, verificación, seguridad | Al iniciar cada UJ concreto | Si se modifican los criterios de completitud de un journey |
Nivel 3 — Load Once (leer durante planning, no releer)
| Fichero | Propósito | Cuándo leer | Cuándo actualizar |
|---|---|---|---|
planning/requirements.md |
Requisitos funcionales y no funcionales, límites explícitos del proyecto, casos límite | Durante planificación | Solo si el usuario cambia requisitos formalmente |
design/style_guide.md |
Sistema de diseño: tokens de color, tipografía, componentes base, restricciones de naming | Primera sesión de frontend | Si se actualizan tokens o patrones visuales |
design/stack_selection.md |
Stack técnico elegido con justificación, alternativas descartadas y razones | Durante planificación | Solo si hay un cambio arquitectónico mayor aprobado por el usuario |
docs/decision_log.md |
Decisiones arquitectónicas significativas con justificación y alternativas descartadas | Al inicio del proyecto (si existe) | Cuando se toma una decisión arquitectónica significativa |
planning/nfr.md |
Requisitos no funcionales: performance, escalabilidad, disponibilidad, restricciones de despliegue | Durante planificación | Raramente — solo si cambian restricciones de infraestructura |
deployment/deployment_guide.md |
Instrucciones de despliegue: variables de entorno, pasos, troubleshooting | Durante fase de deployment | Al completar la configuración de despliegue |
Estructura Completa de Carpetas de la Plantilla
Qué genera el Prompt 0 y para qué sirve cada carpeta. ~30 ficheros, todos con propósito activo.
El Pre-flight Check de /start-execution
Lo que verifica el sistema antes de empezar a construir. Si algo falta, para y lo completa primero.
Artefactos que deben existir para pasar el pre-flight
planning/requirements.md
Los requisitos funcionales y no funcionales deben estar documentados y haber sido revisados por el usuario.
planning/user_journeys.md
Todos los User Journeys definidos con su backend, frontend, criterios de verificación y seguridad.
implementation/task_tracker.md
La tabla de tareas completa con todos los ITs y UJs listados, ordenados por dependencias y agrupados en milestones.
design/data_model.md
El modelo de datos diseñado. La implementación no puede empezar si no hay un esquema de base de datos definido.
design/design_summary.md
El resumen compacto del proyecto generado al final de la planificación. Sin él, la IA no tiene una referencia rápida y tendrá que releer los docs completos en cada sesión.
Qué pasa si falta algún artefacto
Claude para completamente. No inicia la construcción. Completa el artefacto faltante — ya sea haciendo las preguntas necesarias al usuario o ejecutando los pasos de planificación que quedaron incompletos.
Claude declara "Pre-flight check passed" y comienza la construcción en el orden correcto: primero todos los ITs en secuencia, luego los UJs agrupados por milestones.
Journeys Demasiado Grandes para una Sesión
Cómo dividir un User Journey complejo para que pueda completarse en múltiples sesiones sin perder estado.
in_progress en el task_tracker hasta que todos sus sub-steps estén completos. No se marca como done parcialmente.El protocolo completo
Antes de empezar, documentar en planning/user_journeys.md los sub-steps del journey complejo. Cada sub-step debe ser verificable de forma independiente — tiene un resultado concreto que se puede comprobar.
No cerrar la sesión en medio de un sub-step. Si el contexto se llena mientras se trabaja en el Sub-step B, terminar el sub-step B antes de actualizar docs y cerrar. Un sub-step a medias es peor que no haberlo empezado.
Al cerrar la sesión, project_memory.md debe indicar explícitamente: "UJ-12 in_progress — Sub-steps A y B completados. Siguiente: Sub-step C (frontend visor de resultados)."
in_progress en el tracker
En task_tracker.md, el UJ permanece como in_progress hasta que todos los sub-steps estén completos, incluyendo la verificación end-to-end final y el security check. Solo entonces se marca done.
La siguiente sesión empieza con /session-start, que lee project_memory y declara "UJ-12 in_progress — retomando desde Sub-step C." No hay que reconstruir el estado manualmente.
Gobernanza de Skills — Crear vs Reusar
El principio que evita duplicar trabajo y garantiza que el inventario de skills sea útil.
🎯 El principio fundamental
Antes de crear una skill nueva, verificar si ya existe una que cubra la necesidad. Si existe — usarla. Si no existe — documentar por qué no cubre la necesidad, crearla, clasificarla, y registrarla en el inventario.
Flujo de decisión para skills
Consultar skills/inventory.md antes de buscar externamente. Si ya se evaluó una skill para este proyecto, la decisión (seleccionada o rechazada) ya está documentada.
Buscar en skills.sh y el MCP registry. Si se encuentra una skill que cubre la necesidad — evaluar, instalar, verificar, y registrar en el inventario.
Documentar por qué no existe una skill que cubra la necesidad. Crear la skill. Clasificarla:
Aplicable a cualquier proyecto con este stack. Candidata a incluirse en la plantilla base de FactorIA.
Específica para este proyecto concreto. No generalizable. Vive solo en este repositorio.
skills/inventory.md
Una línea por skill: nombre, clasificación (base/project-specific), propósito, y journeys que la usan. Las skills rechazadas también se registran con el motivo del rechazo — para no volver a evaluar la misma skill en la siguiente sesión.
La Auditoría Final Holística
Las 8 categorías que cubre la auditoría antes de la entrega. Es adicional al checklist por tarea — busca problemas que solo aparecen cuando los componentes interactúan entre sí.
JWT correctamente validado en todos los endpoints protegidos. Cookies httpOnly configuradas. Refresh tokens si aplica. Expiración y revocación.
Un usuario no puede acceder a recursos de otro. Rutas de admin requieren nivel de acceso correcto. No hay escalada de privilegios posible.
Ningún secreto hardcodeado en el código. Los 3 niveles de credenciales correctamente implementados. Validación de secretos al arrancar en producción.
SQL injection: todas las queries parametrizadas. XSS: todo el contenido renderizado escapado. CSRF: si aplica, tokens de protección presentes.
Las respuestas API no filtran detalles internos (stack traces, nombres de ficheros, estructura de BD). CORS configurado correctamente para producción.
Los logs no contienen información sensible (contraseñas, tokens, PII). Los errores muestran mensajes genéricos al usuario, no detalles internos.
Dependencias de fuentes confiables. Sin versiones con vulnerabilidades conocidas graves. Sin dependencias no mantenidas en componentes críticos.
Docker con usuarios no-root. Headers de seguridad presentes en nginx (HSTS, X-Frame-Options, CSP). Healthchecks apuntando a URLs que existen. Variables de entorno requeridas validadas al arrancar.
Qué Verifica Exactamente el /review
El subagente independiente sabe qué revisar porque lee ficheros específicos. Si los ficheros no están bien actualizados, el review es menos efectivo.
Ficheros que lee el subagente
task_tracker.mdQué tareas se marcaron como completadas. El subagente verifica que las tareas marcadas "done" realmente cumplen los criterios de completitud definidos.
user_journeys.mdLa definición de cada UJ. El subagente compara lo que se implementó contra lo que se especificó — detecta gaps entre plan y realidad.
work_log.mdEl registro de trabajo. El subagente verifica que los security checks fueron aplicados y que las decisiones importantes fueron documentadas.
Los ficheros reales de backend y frontend. El subagente lee el código para verificar que lo implementado coincide con lo documentado y que no hay gaps entre ambos.
Las 3 verificaciones concretas del subagente
Los journeys funcionan end-to-end
Para cada UJ marcado como "done": ¿existe el backend (modelo + endpoints)? ¿existe el frontend (página + formulario + link en sidebar/nav)? ¿el usuario puede realizar la acción completa de principio a fin? ¿los estados vacíos y de error están manejados?
El checklist de seguridad se aplicó
Para cada IT y UJ completado: ¿hay una entrada en el work_log con "Security Check: pass"? Si hay entradas sin security check, el subagente los marca como gaps y el agente principal los completa antes de continuar.
No hay gaps entre lo planificado y lo implementado
Comparación directa entre user_journeys.md (lo que se planificó) y el código real (lo que se implementó). El subagente busca funcionalidades definidas en el plan que no tienen implementación correspondiente, y funcionalidades implementadas que no estaban en el plan (scope creep).
La Metáfora del Manual de Seguridad
Por qué más estructura no significa mejor ejecución. El principio de rendimiento decreciente aplicado a la gobernanza de IA.
📖 La metáfora original
"La metáfora es un trabajador con un manual de seguridad: si el manual tiene 10 páginas, lo lee y lo sigue. Si tiene 500 páginas, no lo lee y hace lo que le parece. El manual de 10 páginas es más efectivo aunque tenga menos reglas."
Aplicado a FactorIA
92 ficheros, 7 de gobernanza, 10 docs por tarea. Resultado: la IA no podía leer todo, recortaba esquinas silenciosamente, producía "completitud aparente". Las reglas existían pero nadie las seguía realmente.
~30 ficheros, 1 de gobernanza (~140 líneas), 2 docs por tarea. Resultado: la IA lee todo, aplica las reglas, tiene contexto para hacer trabajo real. Menos reglas, más cumplimiento.
El triángulo de equilibrio
Consume todo el contexto. La IA produce trabajo superficial porque no le queda espacio para pensar.
La IA se salta todo lo que puede. Sin reglas imperativas, optimiza para velocidad y calidad cae.
Reglas suficientes para mantener calidad, pocas para que quede contexto. La IA sigue las reglas y tiene espacio para hacer trabajo real.
🎯 La lección que define todo el sistema
Hay un punto de rendimiento decreciente donde cada fichero adicional, cada regla adicional, cada verificación adicional consume más valor del que aporta. El sistema de gobernanza debe operar dentro de la ventana de contexto de la IA, no competir con ella.
Métricas de Calidad de Proceso — SpAIder v3.1
No solo cuánto se construyó, sino cómo se construyó. Estas métricas miden la calidad del proceso, no del producto.
| Métrica de proceso | Resultado | Qué significa |
|---|---|---|
| Journeys marcados "done" sin frontend | 0 | Ningún UJ se marcó completo sin que el usuario pudiera usarlo. La definición de "done" se respetó al 100%. |
| Reglas de CLAUDE.md violadas | 0 detectadas | Los subagentes de /review no encontraron ninguna violación de las 8 reglas críticas a lo largo de 6 milestones. |
| Sesiones con contexto corrompido | 0 | Los heurísticos de contexto (4+ tareas, 8+ ficheros, compactación) funcionaron. Ninguna sesión continuó con contexto degradado. |
| Reviews que detectaron errores reales | 100% | Todos los /review de milestone (M0–M5) encontraron al menos 1 issue. Los subagentes independientes aportaron valor en cada ejecución. |
| Veces que la IA intentó añadir scope no pedido | 0 | La regla R6 (scope control) fue efectiva. Cero feature creep durante todo el desarrollo. |
| Bugs en producción por falta de security checklist | 0 | El checklist de 11 ítems por tarea detectó todos los problemas de seguridad durante el desarrollo, no en producción. |
| Ficheros de documentación actualizados correctamente | task_tracker + work_log: 100% | La regla R8 se cumplió después de cada tarea sin excepción. El work_log y el task_tracker estuvieron siempre actualizados. |
| Regresiones detectadas post-fix de auditoría | 0 | Los 6 fixes críticos de la auditoría final (M5) no introdujeron nuevos problemas. La verificación end-to-end post-fix funcionó. |
Los 3 bugs críticos encontrados por el subagente de /review final (M5)
Import roto en el seed script
El seed script importaba async_session de app.database, pero esa variable no existía — solo existía async_session_factory. El seed habría fallado en cualquier entorno. Corregido antes de la entrega.
Healthcheck apuntando a URL inexistente
El docker-compose.prod.yml tenía un healthcheck que apuntaba a /api/v1/health pero el endpoint real era /health. El contenedor habría fallado el healthcheck en producción. Corregido antes de la entrega.
Header HSTS documentado pero ausente en nginx
El work_log afirmaba que nginx configuraba HSTS, pero el header Strict-Transport-Security no estaba en nginx.conf. Se añadió antes de la entrega. Un ejemplo de por qué el subagente lee el código real, no solo la documentación.
🎯 Conclusión final del sistema
FactorIA v3.1 pasó de "en validación" a validado. La clave no es que el sistema sea perfecto — tiene fricciones documentadas. La clave es que las fricciones son predecibles, documentables y resolubles, mientras que sin el sistema los problemas son impredecibles, silenciosos y acumulativos. SpAIder v3.1 se construyó íntegramente con este sistema: 11 ITs + 27 UJs, 6 milestones con reviews independientes, 86+ endpoints, 20+ páginas, auditoría de seguridad con 23 findings resueltos, Docker production con nginx — todo entregado end-to-end sin intervenciones correctivas del usuario.