FactorIA v3.1 — Manual Completo
Manual de Usuario Completo

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.

Validado con SpAIder
86+ endpoints
20+ páginas
0 regresiones
00

Quick Start

Si tienes prisa, esto es todo lo que necesitas saber.

  1. 1
    Una sola vez — Genera la plantilla

    Pega el Prompt 0 en Claude Code → genera la plantilla completa. Guárdala como FactorIA-APP-TEMPLATE y no la sobreescribas.

  2. 2
    Para cada proyecto — Duplica la plantilla

    Duplica el repositorio template → abre con Claude Code → ejecuta /init-project + describe tu proyecto.

  3. 3
    Cuando apruebas el plan — Inicia la ejecución

    Escribe /start-execution → Claude construye de forma autónoma.

  4. 4
    Si se corta la sesión — Retoma sin perder nada

    Abre nueva conversación → escribe /session-start.

  5. 5
    Después de la entrega — Gestiona los cambios

    Escribe /iterate + describe el cambio.

💡
Todo lo demás (reglas, seguridad, documentación, verificación) lo gestiona el sistema automáticamente. Solo pegas texto una vez en la vida (Prompt 0). Después, todo se hace con slash commands.
01

¿Qué es FactorIA?

Una plantilla reutilizable para crear software con IA de forma disciplinada.

🏗️
No es un framework

FactorIA no genera código directamente. Es un sistema operativo de trabajo que define cómo debe trabajar la IA.

♻️
Reutilizable

Creas la plantilla una vez. Cada proyecto nuevo duplica esa plantilla y ya tiene todo el sistema preparado.

⚙️
Sistema completo

Define cómo pensar, qué pasos seguir, cómo documentar, cómo revisar seguridad, y cómo mantener contexto entre sesiones.

ℹ️
Analogía perfecta: FactorIA es como construir la fábrica. Una vez construida, la usas para fabricar productos (proyectos) de forma estandarizada.
02

El Problema que Resuelve

El comportamiento natural de la IA sin gobernanza.

Sin FactorIA, una IA tiende a…

⚡ Ir directo al código

Empieza a programar sin entender bien el problema. Implementa desde suposiciones, no desde un plan.

🚫 Saltarse la planificación

La planificación se percibe como overhead. La IA optimiza para la ruta más corta: código sin preparación.

📄 No documentar

Sin documentación, cada sesión empieza de cero. La IA no recuerda lo que construyó ayer.

🔓 Ignorar la seguridad

La seguridad se revisa solo si se pide explícitamente, y tarde. Los problemas se acumulan.

🧱 Olvidar sesiones anteriores

La ventana de contexto se llena y resetea. Sin memoria externa, cada nueva conversación empieza desde cero.

✅ Marcar "completo" prematuramente

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.

03

Los 3 Prompts

Cómo se organiza el sistema. Cada prompt tiene una función distinta y solo se usa en un momento concreto.

Prompt 0

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.

Se usa UNA sola vez en la vida
Prompt 1

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-project
Prompt 2

Ejecució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
⚠️
Importante: Los Prompts 1 y 2 son documentos de referencia — nunca los copias-pegas. El Prompt 0 genera versiones compactas y operativas en .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
04

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 Code lee 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)

🚫
Rules — Do Not Violate

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.

🧑‍💻
Identity

La IA es un ingeniero, no un generador de código. Debe leer antes de implementar, documentar desviaciones, y nunca saltarse reglas silenciosamente.

⚙️
Work Units + Workflow

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.

🧠
Context Management

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.

🔒
Security Checklist

Los 11 ítems de seguridad inline (no en fichero separado). Se aplican después de cada tarea — no al final del proyecto.

📋
Project Files Reference

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)

R1

Planning Gate

Nunca escribir código antes de que la planificación esté aprobada. Sin excepción.

R2

No Hardcoded Secrets

Usar los 3 niveles de credenciales. Ningún secreto directo en el código.

R3

Security Audit Required

Checklist de seguridad después de cada tarea + auditoría holística final.

R4

Admin Panel Mandatory

Siempre. Sin negociación.

R5

Docker Deployment

El proyecto debe estar preparado para despliegue con Docker (EasyPanel).

R6

Scope Control

No añadir cosas no pedidas. Si parece "útil" pero no está en el plan → parar y preguntar.

R7

Journey Completeness

Una tarea no está "terminada" hasta que el usuario puede usarla end-to-end (backend + frontend + verificación).

R8

Document as You Work

Actualizar task_tracker y work_log después de cada tarea. No al final.

05

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.

/init-project
Al iniciar un proyecto nuevo
Planificación completa (9 pasos)

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.

/init-project Quiero construir una plataforma de gestión de contenidos... Los usuarios pueden configurar fuentes RSS, generar contenido con IA, y publicarlo en redes sociales.
/start-execution
Después de aprobar el plan
Pre-flight check + Construcción autónoma

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.

/start-execution # No necesitas añadir nada más. # El plan ya está en planning/ y design/
/session-start
Al abrir cada sesión nueva
Recuperar estado del proyecto

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."

/session-start # Si la sesión se cortó inesperadamente: /session-start La sesión anterior se cortó. Revisa los ficheros y dime dónde estamos.
/review
Al completar cada milestone
Subagente independiente con contexto limpio

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.

/review # O con contexto adicional: /review Acabo de terminar los primeros 3 journeys. Revisa que todo esté bien antes de continuar.
/iterate
Post-entrega, para cambios
Clasifica y gestiona cambios con 4 categorías

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.

/iterate El formulario no valida la URL. Si pones texto sin formato, se guarda y falla el scraping. — o — /iterate Quiero añadir programación de publicaciones. Fecha y hora en vez de publicar inmediatamente.

Las 4 Categorías de /iterate

Bug Fix

Algo no funciona bien

Identifica causa raíz → corrige → verifica que el journey afectado sigue funcionando end-to-end.

✓ Sin aprobación previa
Planning Gap

Algo 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 previa
Enhancement

Modificación a journey existente

Ej: añadir un filtro a la lista de fuentes. Evalúa regresión → implementa → verifica.

✓ Sin aprobación previa
New Feature

Journey completamente nuevo

Ej: programar publicaciones. Claude presenta el scope y espera tu aprobación antes de implementar.

⚠ Requiere aprobación
06

Work Units: IT + UJ

La decisión estructural más importante. Dos tipos de trabajo, con criterios de completitud distintos.

IT — Infrastructure Task

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)
COMPLETO CUANDO…
  • El componente técnico funciona y es verificable
  • El checklist de seguridad pasa
  • Está documentado en work_log.md
UJ — User Journey

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
UJ-03: Configurar Fuentes Backend: modelo Source, endpoints CRUD Frontend: página Sources, formulario, sidebar Verificación: crear, ver, editar, ejecutar Seguridad: solo admin, validación, queries parametrizadas
COMPLETO CUANDO…
  • 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
⚠️
Por qué User Journeys y no módulos técnicos: En v1, "M05: Backend de fuentes" se marcaba como completo sin que existiera la página donde el usuario pudiera usar esa funcionalidad. Con UJs, no puedes marcar "done" si el usuario no puede usarlo.
07

Sistema de Documentación

3 documentos operativos. Menos ficheros, más útiles.

💡
En v1 había que actualizar 10 ficheros después de cada módulo. En v2, hay exactamente 3 documentos operativos que se usan activamente. Cada fichero que la IA tiene que leer o actualizar consume contexto.
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.

### [Fecha] — [ID]: [Nombre] - Work Done: [qué se implementó] - Files Created/Modified: [lista] - Decisions: [decisiones tomadas, o "none"] - Security Check: [pass/fail, o "not applicable"] - Tests: [tests creados, o "none"] - Notes: [contexto para futuras sesiones]

Niveles de carga de documentos

Always load

Cada sesión. project_memory, task_tracker, design_summary.

Load per task

Solo secciones relevantes. data_model, api_contracts, ui_wireframes, work_log.

Load once

Leer durante planning, no releer. requirements, style_guide, stack_selection, decision_log.

08

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 .envnunca 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.

01No hay secretos hardcodeados en el código
02No se expone información sensible en logs, errores o UI
03Se validan todas las entradas externas
04Las rutas protegidas verifican autenticación
05Se comprueba autorización (usuario no accede a recursos de otro)
06Las rutas de admin requieren nivel de acceso de administrador
07Las consultas a BD usan sentencias parametrizadas
08El contenido renderizado está escapado (prevención XSS)
09Las respuestas API no filtran detalles internos
10Si hay subida de ficheros, se valida tipo y tamaño
11Las dependencias son de fuentes confiables
ℹ️
Auditoría final holística: Antes de la entrega, se hace una auditoría completa que cubre la aplicación entera: autenticación, autorización, secretos, inyecciones, exposición API, logs, dependencias, y hardening de despliegue. Es adicional al checklist por tarea — busca problemas que solo aparecen cuando los componentes interactúan.
09

Sesiones y Gestión de Contexto

La memoria entre sesiones y los heurísticos para no degradar la calidad del trabajo.

El problema fundamental: Claude Code tiene una ventana de contexto limitada. En proyectos grandes necesitarás múltiples sesiones. Cada sesión nueva empieza con contexto limpio — la IA no "recuerda" lo que pasó antes. Los ficheros markdown son la única "memoria" que persiste.

Gestión de sesiones

▶️
Al abrir sesión

Ejecutar /session-start. Lee project_memory.md + task_tracker.md. Declara estado y próxima tarea.

⏹️
Al cerrar sesión

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

C1

Terminar la tarea actual antes de empezar otra

Nunca trabajar en dos tareas a la vez. Finaliza, documenta, luego avanza.

C2

No releer ficheros ya leídos en esta sesión

Salvo que hayan cambiado. Releer consume contexto sin aportar nueva información.

C3

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.

💡
Journeys demasiado grandes para una sesión: Dividir en sub-steps verificables. Cada sub-step se completa totalmente antes de cerrar la sesión. El journey permanece como in_progress en el tracker hasta que todos los sub-steps estén completos.
10

Skills y MCPs

Herramientas externas que amplían las capacidades de la IA. Exploración activa y obligatoria en v3.

🔧
Skills

Patrones de ejecución reutilizables documentados como markdown. Ejemplos: postgresql-table-design, tailwind-design-system.

🔌
MCPs

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)

  • 1
    Descubrir

    Buscar en registries (skills.sh, MCP registry) herramientas que coincidan con el stack del proyecto.

  • 2
    Evaluar

    Comparar cada herramienta descubierta con las necesidades reales del proyecto.

  • 3
    Instalar y Verificar

    Configurar las seleccionadas y confirmar que funcionan antes de continuar.

  • 4
    Documentar

    Registrar selecciones y rechazos (una línea cada uno). No párrafos — conciso.

  • 5
    Integrar

    Anotar en user_journeys.md qué journeys usarán cada skill/MCP.

  • ⚠️
    Lenguaje imperativo en este paso: "Do not skip this step. Do not write 'None selected' without exploring first." En v2, la IA "evaluaba" y escribía "None selected" sin explorar nada. En SpAIder, no usar MCPs costó horas de debugging que postgres MCP y playwright MCP habrían prevenido.
    11

    Limitaciones que Debes Conocer

    El sistema no es perfecto. Estas son las fricciones predecibles y documentadas.

    ⚡ Cumplimiento ~90-95%

    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.

    💰 Overhead de tokens ~20-30%

    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.

    📋 Subagentes dependen de la documentación

    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.

    🧠 Memoria imperfecta

    project_memory.md es un resumen, no captura todo. Conviene revisar lo que Claude escribió al final de cada sesión.

    📦 Prompt 0 es largo

    Prompt 0 tiene más de 800 líneas. Cuando lo pegues, usa una sesión limpia sin otro contexto previo.

    12

    Puesta en Marcha: Paso a Paso

    Todo el proceso, desde instalar hasta iterar post-entrega.

    A

    Fase A — Generar la Plantilla (una sola vez)

    Abre Claude Code en sesión limpia → Pega el Prompt 0 → Espera la generación completa

    # Verificar que existe: CLAUDE.md en la raíz .claude/commands/ con 5 ficheros planning/, design/, implementation/, docs/ implementation/task_tracker.md # Después: git init && git add . && git commit -m "Initial FactorIA template v3" # Subir a GitHub como repositorio privado
    B

    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

    # Verificar que CLAUDE.md se cargó: "¿Qué fichero CLAUDE.md has leído?"
    C

    Fase C — Planificación (obligatoria antes de programar)

    Ejecuta /init-project + describe tu proyecto. Claude arranca los 9 pasos de planificación.

    Espera que Claude…
    • 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
    Tu papel…
    • Revisar lo planificado
    • Decir si algo no convence
    • Aprobar el plan
    • No pedir código todavía
    D

    Fase D — Ejecución Autónoma

    Escribe /start-execution. Claude verifica readiness y comienza.

    # Orden de construcción: 1. Infrastructure Tasks (IT) en orden 2. User Journeys (UJ) agrupados en milestones 3. Después de cada tarea → actualiza task_tracker + work_log 4. Al completar cada milestone → ejecuta /review 5. Si el contexto se llena → actualiza project_memory → cierra sesión # Si la sesión se agota: Nueva conversación → /session-start
    E

    Fase E — Entrega

    Cuando Claude termina todos los ítems, completa la fase de entrega.

    1. /review final (subagente independiente) 2. Crear seed script con datos realistas 3. Verificar visualmente todas las páginas con datos 4. Verificar estados vacíos también 5. Auditoría de seguridad holística 6. Preparar deployment (Docker, deployment_guide.md) 7. Resumen final: qué se construyó, seguridad, riesgos, cómo desplegar
    F

    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.

    13

    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
    14

    SpAIder v3.1 — La Prueba de Fuego

    Resultados reales del proyecto que validó FactorIA v3.1. Content Intelligence & Marketing Automation Platform.

    11Infrastructure Tasks completados
    27User Journeys completados
    86+Endpoints API (FastAPI)
    22Tablas en base de datos
    20+Páginas frontend (Next.js)
    6Milestones con review independiente
    23Findings de seguridad (6 críticos corregidos)
    0Regresiones post-fix

    Lo que FactorIA aportó (en palabras del ingeniero IA)

    🏗️ IT → UJ evitó deuda técnica

    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.

    ✅ User Journeys = 0 backends huérfanos

    Ningún UJ se marcó como completo sin su página frontend. Los 27 journeys cruzaron todo el stack sin excepción.

    🔒 Checklist por tarea detectó problemas

    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.

    🔍 Reviews detectaron 3 bugs críticos

    Import roto en seed script. Healthcheck apuntando a URL inexistente. Header HSTS documentado pero ausente en nginx.conf. Todos encontrados por el subagente independiente.

    📋 design_summary redujo relecturas 80%

    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.

    🚫 Scope control efectivo

    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.

    🏆
    Conclusión: FactorIA v3.1 pasó de "en validación" a validado. Las fricciones son predecibles, documentables y resolubles. Sin el sistema, los problemas son impredecibles, silenciosos y acumulativos.
    15

    FAQ — Preguntas Frecuentes

    Las dudas más comunes, respondidas directamente.

    ¿Tengo que usar los 3 prompts cada vez?

    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.

    ¿Qué pasa si ejecuto /start-execution sin planificar?

    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.

    ¿Puedo modificar CLAUDE.md para un proyecto concreto?

    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.

    ¿CLAUDE.md se lee entero cada vez?

    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.

    ¿Todos los User Journeys necesitan frontend?

    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.

    ¿El subagente de /review cuesta dinero extra?

    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.

    ¿Qué es un "planning gap"?

    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.

    ¿Cuántas sesiones necesita un proyecto típico?

    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.

    16

    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.

    🗂️
    Los retos están organizados en 3 fases: Fase 1 (lenguaje permisivo), Fase 2 / v1 (sobrecorrección), y Fase 3 / v2 en producción (SpAIder). Cada uno tiene causa raíz, consecuencia real y solución aplicada.

    Fase 1 — Retos del inicio permisivo (Retos 1–6)

    R01

    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."

    R02

    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."

    R03

    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.

    R04

    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."

    R05

    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.

    R06

    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)

    RetoSolución v1Status 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)

    R14

    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.

    R15

    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.

    R16

    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.

    R17

    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.

    R18

    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.

    R19

    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.

    R20

    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.

    R21

    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.

    R22

    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)

    R23

    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%.

    R24

    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.

    R25

    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.

    R26

    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."

    R27

    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.

    R28

    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).

    17

    Los 9 Pasos de /init-project

    Lo que ocurre exactamente cuando ejecutas la planificación. Sin código en ningún paso.

    ℹ️
    Durante todo el proceso de planificación, la IA NO puede programar. Solo puede pensar, preguntar, diseñar y documentar. La regla R1 bloquea cualquier código hasta que el plan esté aprobado.
  • 1
    Entender el proyecto

    Claude lee la descripción del usuario y construye un entendimiento inicial del problema, el dominio y los usuarios objetivo.

  • 2
    Hacer preguntas de clarificación

    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.

  • 3
    Definir requisitos y alcance

    Con las respuestas del usuario, documenta los requisitos funcionales y no funcionales, y los límites explícitos del proyecto en planning/requirements.md.

  • 4
    Diseñar la solución

    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/.

  • 5
    Descomponer en Infrastructure Tasks y User Journeys

    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.

  • 6
    Evaluar Skills y MCPs activamente

    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.)

  • 7
    Registrar decisiones

    Documenta las decisiones arquitectónicas significativas tomadas durante la planificación, con su justificación y alternativas descartadas, en docs/decision_log.md.

  • 8
    Generar el design_summary

    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.

  • 9
    Presentar para aprobación

    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.

  • 18

    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.

    ⚠️
    Ningún sistema es perfecto. Estas fricciones no invalidan FactorIA — demuestran que los problemas son predecibles, documentables y resolubles, a diferencia de los problemas silenciosos que aparecen sin el sistema.
    F1

    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.

    F2

    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.

    F3

    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.

    F4

    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.

    19

    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.

    ❌ Generador de código

    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.

    ✅ Ingeniero disciplinado

    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

    I1

    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."

    I2

    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.

    I3

    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.

    I4

    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.

    20

    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.

    ℹ️
    Estas decisiones existen en CLAUDE.md para garantizar consistencia entre proyectos y evitar que la IA reinvente la rueda en cada uno. Son el resultado de las decisiones que probaron ser sólidas en proyectos anteriores.
    🔐
    Autenticación

    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.

    🤖
    IA / LLM

    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.

    🎨
    Design UI

    Glassmorphism premium, dark mode, Framer Motion como punto de partida visual. Consistente entre proyectos salvo que el usuario defina una dirección diferente.

    🔒
    Cifrado de credenciales

    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.

    🐳
    Deployment

    Docker multi-stage builds + nginx reverse proxy con usuarios no-root, preparado para EasyPanel. Siempre incluido en la entrega final.

    🛡️
    Admin Panel

    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.

    21

    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é.

    ⚙️
    Backend
    Python 3.12 FastAPI async SQLAlchemy 2.0 async Alembic (migraciones) PostgreSQL 16 asyncpg (driver async)
    🖥️
    Frontend
    Next.js 14 (App Router) TypeScript 5 Tailwind CSS 3 Zustand 4 (estado) TanStack Query 5 (fetching) Framer Motion (animaciones)
    🔐
    Auth y Seguridad
    JWT httpOnly cookies bcrypt cost 12 slowapi (rate limiting) AES-256-GCM (credenciales L3)
    🎨
    Design
    Glassmorphism premium Dark mode nativo Framer Motion transiciones # tokens renombrados a t-primary, # bg-from (ver Fricción F1)
    🐳
    Producción
    Docker multi-stage builds nginx reverse proxy non-root users HSTS Strict-Transport-Security EasyPanel compatible
    📊
    Escala del proyecto
    22 tablas BD (con migraciones Alembic) 13 routers FastAPI 86+ endpoints API 20+ páginas Next.js 15+ componentes UI reutilizables 1.259 líneas de seed data 8 agentes de IA
    💡
    Nota importante: Este stack fue seleccionado por FactorIA durante el Step 4 de /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.
    22

    Diagrama Completo del Sistema v3

    El flujo visual completo desde Prompt 0 hasta /iterate, con milestones, reviews y entrega.

    ┌─────────────────────────────────────────────────────────┐ │ PROMPT 0 │ │ (genera la plantilla — una vez) │ └─────────────────────┬───────────────────────────────────┘ | v ┌─────────────────────────────────────────────────────────┐ │ FactorIA-APP-TEMPLATE v3 │ │ │ │ CLAUDE.md <── se carga automáticamente (~140 líneas) │ │ .claude/commands/ <── 5 comandos │ │ planning/ design/ implementation/ <── lifecycle │ │ docs/ <── 3 docs operativos │ │ design/design_summary.md <── referencia compacta (NEW) │ │ skills/ mcps/ <── inventarios (exploración activa) │ │ backend/ frontend/ tests/ <── código │ │ deployment/ <── docker + easypanel │ └─────────────────────┬───────────────────────────────────┘ | (duplicar para cada proyecto) v ┌─────────────────────────────────────────────────────────┐ │ PROYECTO CONCRETO │ │ │ │ /init-project ──> Planificación (9 pasos, sin código) │ │ | incluye: design_summary + skills/MCPs │ │ v │ │ Usuario aprueba │ │ | │ │ v │ │ /start-execution ──> Pre-flight check │ │ | │ │ ├── M0: Foundation (Infrastructure Tasks) │ │ │ ├── IT-01 ──> verify ──> security ──> log │ │ │ ├── IT-02 ──> verify ──> security ──> log │ │ │ └── IT-03 ──> verify ──> security ──> log │ │ │ /review M0 │ │ │ │ │ ├── M1: [Milestone] (User Journeys) │ │ │ ├── UJ-01 ──> backend+frontend+e2e ──> security │ │ │ ├── UJ-02 ──> backend+frontend+e2e ──> security │ │ │ └── UJ-03 ──> backend+frontend+e2e ──> security │ │ │ /review M1 │ │ │ │ │ ├── M2: [Milestone] (User Journeys) │ │ │ ├── UJ-04 ──> ... │ │ │ └── UJ-05 ──> ... │ │ │ /review M2 │ │ │ │ │ └── Demo data ──> Visual verification │ │ └── Security audit ──> Deployment ──> Entrega │ │ | │ │ /iterate │ │ para cambios │ └─────────────────────────────────────────────────────────┘
    💡
    Cada milestone (M0, M1, M2…) es un grupo semántico de 3–6 journeys relacionados. Los reviews ocurren al completar cada milestone completo — no cada 3 ítems arbitrarios. Esto hace que cada /review coincida con un punto natural de verificación donde hay suficiente trabajo nuevo para que el subagente encuentre cosas útiles.
    23

    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)

    FicheroPropósitoCuándo leerCuá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)

    FicheroPropósitoCuándo leerCuá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)

    FicheroPropósitoCuándo leerCuá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
    ⚠️
    Regla crítica: No releer ficheros "Load once" en sesiones posteriores aunque la tabla diga "Before frontend work". La distinción es: la primera vez que hagas frontend vs cada vez que hagas frontend. Solo la primera cuenta.
    24

    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.

    FactorIA-APP-TEMPLATE/ ├── CLAUDE.md # El único fichero de gobernanza. Se carga automáticamente. ├── .claude/ │ └── commands/ # Los 5 slash commands │ ├── init-project.md # Versión compacta del Prompt 1 │ ├── start-execution.md # Versión compacta del Prompt 2 (ejecución) │ ├── session-start.md # Inicio de sesión │ ├── review.md # Revisión independiente por milestone │ └── iterate.md # Versión compacta del Prompt 2 (iteración) ├── planning/ # Artefactos de planificación (generados en /init-project) │ ├── requirements.md # Requisitos funcionales y no funcionales │ ├── user_journeys.md # Definición detallada de cada UJ │ └── nfr.md # Requisitos no funcionales ├── design/ # Documentos de diseño (generados en /init-project) │ ├── design_summary.md # Referencia compacta ~50 líneas — Always load │ ├── data_model.md # Esquema BD completo │ ├── api_contracts.md # Contratos de API completos │ ├── ui_wireframes.md # Wireframes y specs de UI │ ├── style_guide.md # Sistema de diseño y tokens │ └── stack_selection.md # Stack elegido con justificación ├── implementation/ # Control de implementación │ └── task_tracker.md # Tabla de progreso de ITs y UJs — Always load ├── docs/ # Documentación operativa │ ├── project_memory.md # Estado del proyecto entre sesiones — Always load │ ├── work_log.md # Registro cronológico unificado de trabajo │ └── decision_log.md # Decisiones arquitectónicas (solo cuando aplica) ├── skills/ # Inventario de skills exploradas y seleccionadas │ └── inventory.md # Skills seleccionadas + rechazadas con justificación ├── mcps/ # Inventario de MCPs explorados y seleccionados │ └── inventory.md # MCPs seleccionados + rechazados con justificación ├── backend/ # Código del backend (generado durante ejecución) ├── frontend/ # Código del frontend (generado durante ejecución) ├── tests/ # Tests automatizados (generados durante ejecución) └── deployment/ # Configuración de despliegue ├── docker-compose.prod.yml # Docker production con nginx └── deployment_guide.md # Instrucciones de despliegue para EasyPanel
    ℹ️
    Criterio de existencia: Cada fichero en la plantilla existe porque se lee activamente durante la ejecución. Si un fichero no se lee activamente — no existe. Esta es la regla que llevó de 92 ficheros (v1) a ~30 ficheros (v2/v3).
    25

    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.

    Regla R1: "Never write code before planning is approved." El pre-flight check es el mecanismo que hace esta regla verificable. Sin él, la regla sería solo una sugerencia.

    Artefactos que deben existir para pasar el pre-flight

    ✓1

    planning/requirements.md

    Los requisitos funcionales y no funcionales deben estar documentados y haber sido revisados por el usuario.

    ✓2

    planning/user_journeys.md

    Todos los User Journeys definidos con su backend, frontend, criterios de verificación y seguridad.

    ✓3

    implementation/task_tracker.md

    La tabla de tareas completa con todos los ITs y UJs listados, ordenados por dependencias y agrupados en milestones.

    ✓4

    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.

    ✓5

    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

    ❌ Si falta un 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.

    ✅ Si todos existen

    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.

    26

    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.

    ℹ️
    Un UJ permanece como in_progress en el task_tracker hasta que todos sus sub-steps estén completos. No se marca como done parcialmente.

    El protocolo completo

  • 1
    Dividir en sub-steps verificables dentro de la definición del journey

    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.

    # Ejemplo: UJ-12 demasiado grande para una sesión UJ-12: Sistema de Generación de Contenido con IA Sub-step A: Backend — modelo Content, endpoints CRUD, integración OpenAI Sub-step B: Frontend — página de generación, formulario de parámetros Sub-step C: Frontend — visor de resultados, opciones de edición y guardado Sub-step D: Verificación end-to-end + security check completo
  • 2
    Completar cada sub-step totalmente antes de cerrar la sesión

    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.

  • 3
    Actualizar project_memory con qué sub-steps están hechos

    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)."

  • 4
    Mantener el journey como 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.

  • 5
    Al retomar: /session-start primero

    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.

  • 27

    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

  • 1
    Buscar en el inventario existente

    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.

  • 2
    Si no existe: buscar en registries externos

    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.

  • 3
    Si no existe en registries: crear una nueva

    Documentar por qué no existe una skill que cubra la necesidad. Crear la skill. Clasificarla:

    base

    Aplicable a cualquier proyecto con este stack. Candidata a incluirse en la plantilla base de FactorIA.

    project-specific

    Específica para este proyecto concreto. No generalizable. Vive solo en este repositorio.

  • 4
    Registrar en 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.

  • 💡
    El formato del inventario es conciso por diseño: una línea por skill, no párrafos. El objetivo es que sea scaneable en segundos, no que sea exhaustivo.
    28

    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í.

    ℹ️
    El checklist de 11 ítems por tarea detecta problemas localizados. La auditoría final detecta problemas sistémicos — los que solo emergen cuando backend, frontend, auth y base de datos funcionan juntos. Ambos son necesarios y se complementan.
    A1
    Autenticación

    JWT correctamente validado en todos los endpoints protegidos. Cookies httpOnly configuradas. Refresh tokens si aplica. Expiración y revocación.

    A2
    Autorización

    Un usuario no puede acceder a recursos de otro. Rutas de admin requieren nivel de acceso correcto. No hay escalada de privilegios posible.

    A3
    Manejo de Secretos

    Ningún secreto hardcodeado en el código. Los 3 niveles de credenciales correctamente implementados. Validación de secretos al arrancar en producción.

    A4
    Riesgos de Inyección

    SQL injection: todas las queries parametrizadas. XSS: todo el contenido renderizado escapado. CSRF: si aplica, tokens de protección presentes.

    A5
    Exposición de API

    Las respuestas API no filtran detalles internos (stack traces, nombres de ficheros, estructura de BD). CORS configurado correctamente para producción.

    A6
    Exposición de Logs

    Los logs no contienen información sensible (contraseñas, tokens, PII). Los errores muestran mensajes genéricos al usuario, no detalles internos.

    A7
    Riesgos de Dependencias

    Dependencias de fuentes confiables. Sin versiones con vulnerabilidades conocidas graves. Sin dependencias no mantenidas en componentes críticos.

    A8
    Hardening de Despliegue

    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.

    ⚠️
    En SpAIder, la auditoría final encontró 23 issues. Solo 6 eran críticos — los demás ya habían sido mitigados durante la implementación gracias al checklist por tarea. Sin el checklist por tarea, la auditoría final habría encontrado ~23 issues críticos en vez de 6.
    29

    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.md

    Qué tareas se marcaron como completadas. El subagente verifica que las tareas marcadas "done" realmente cumplen los criterios de completitud definidos.

    🗺️
    user_journeys.md

    La 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.md

    El registro de trabajo. El subagente verifica que los security checks fueron aplicados y que las decisiones importantes fueron documentadas.

    💻
    Código fuente

    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

    V1

    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?

    V2

    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.

    V3

    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).

    ⚠️
    El subagente no tiene sesgo de confirmación. Empieza con contexto limpio — no sabe lo que el agente principal "quiso hacer" ni recuerda sus decisiones. Solo ve el código y los docs. Esta es exactamente su ventaja: detecta lo que el agente principal no puede ver porque está demasiado cerca del trabajo.
    30

    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

    v1 — El manual de 500 páginas

    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.

    v2/v3 — El manual de 10 páginas

    ~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

    Disciplina /\ / \ / \ / SWEET \ / SPOT \ /____________\ Eficiencia Contexto (hacer rápido) (lo que cabe)
    Demasiada disciplina (v1)

    Consume todo el contexto. La IA produce trabajo superficial porque no le queda espacio para pensar.

    Poca disciplina (Fase 1)

    La IA se salta todo lo que puede. Sin reglas imperativas, optimiza para velocidad y calidad cae.

    El punto dulce (v2/v3)

    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.

    31

    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.

    🏆
    Las métricas de producto (86+ endpoints, 22 tablas) miden el qué. Las métricas de proceso miden el cómo. Un proyecto puede tener muchos endpoints y ser un desastre de proceso. SpAIder v3.1 obtuvo resultados sólidos en ambas dimensiones.
    Métrica de procesoResultadoQué 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)

    CRIT

    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.

    MED

    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.

    MED

    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.