Roadmap
Desarrollo
Cada milestone deja el producto funcionando y verificable. Nada de big-bang.
Hoy CodArch tiene:
- CLI (
codarch):analyze,diff,render,inspectyserve. Publicado en npm. - Modelo
cc.json2.x: árbol de ficheros, métricas, grafo de dependencias, ciclos, lente de migración y checksum determinista. Es la verdad del producto y la comparten todas las apps. - Reglas de arquitectura en
.codarch.yml: capas, prohibiciones, umbrales y ciclos, con severidad y política de bloqueo. - MCP de solo lectura: doce consultas para agentes.
- GitHub Action: analiza base y head del PR, comenta el resultado y bloquea si la política falla.
- App web: mapa, inspector, vista de PR, nivel de detalle para repos grandes y análisis de una carpeta en el navegador con el mismo checksum que el CLI.
- App de escritorio: Electron con su propia interfaz, análisis nativo con git, menú del sistema e instaladores sin firmar.
Las fases M0–M64 están cerradas (M24 descartada). M65–M76 están cerradas. M77 está abierta.
Las fases
Sección titulada «Las fases»Cada fase vive en la hoja de ruta de la decisión que la trae: el ADR tiene un ## Hoja de ruta
con lo abierto y lo que está en curso. Aquí solo está el índice; el detalle de lo hecho vive en
el feed de la guía (/guia/). Si una fase crece, crece en su ADR, no aquí.
flowchart TD subgraph base["Base: modelo, parser, diff"] M0["M0 · Modelo y mapa"] --> M1["M1 · Parser TS"] M1 --> M2["M2 · Diff y PR"] M2 --> M3["M3 · MCP y distribución"] end subgraph apps["Apps: migración, web, navegador, escritorio"] M4["M4 · Lente de migración"] --> M5["M5 · App web"] M5 --> M6["M6 · Análisis en el navegador"] M6 --> M7["M7 · App de escritorio"] M7 --> M26["M26 · La UI compartida"] M26 --> M37["M37 · La ficha del fichero"] M37 --> M38["M38 · Las reglas tienen su pestaña"] M38 --> M39["M39 · Tres pestañas"] M39 --> M40["M40 · Una tabla de métricas"] M40 --> M41["M41 · El marco del proyecto"] M41 --> M42["M42 · Los símbolos también se pliegan"] M42 --> M43["M43 · Todos los símbolos del módulo"] M43 --> M44["M44 · La ficha no esconde nada"] M44 --> M45["M45 · Cada componente su versión"] M45 --> M46["M46 · La acción vuelve al monorepo"] M46 --> M47["M47 · La ficha enseña el código"] M47 --> M48["M48 · Editor y dependencias"] M48 --> M50["M50 · Dos pestañas"] M50 --> M51["M51 · Una lista de ficheros"] M51 --> M52["M52 · La tabla base → head"] M52 --> M53["M53 · Cambios desde el último commit"] M53 --> M54["M54 · Una sola interfaz"] M54 --> M55["M55 · Una sola sesión"] M55 --> M56["M56 · Cambios es de git"] M56 --> M57["M57 · Las líneas no son código"] end subgraph lentes["Lentes: migración, dominio, símbolos, tiempo"] M8["M8 · La migración donde faltaba"] --> M9["M9 · Lente de dominio"] M9 --> M10["M10 · Evolución temporal"] M10 --> M11["M11 · Lente de símbolos"] M11 --> M12["M12 · Vida de un símbolo"] end subgraph ext["Ajustes y extensiones"] M13["M13 · Los ajustes"] --> M14["M14 · Los plugins"] M14 --> M15["M15 · La vista 3D"] M15 --> M16["M16 · Los addons"] M16 --> M17["M17 · Instalar y quitar"] end subgraph docs["Documentos y web"] M18["M18 · Documentos ordenados"] --> M19["M19 · Iconos y diagramas"] M19 --> M20["M20 · La guía, en HTML"] M20 --> M21["M21 · Versiones y actualizaciones"] M21 --> M22["M22 · El repo, con sus papeles"] M22 --> M23["M23 · La web del proyecto"] M23 --> M24["M24 · Índice SQLite"] end subgraph delivery["Entrega"] M25["M25 · La entrega se automatiza"] M25 --> M27["M27 · La app web en Docker"] M26 --> M28["M28 · El escritorio se instala y se actualiza"] end subgraph idiomas["Más lenguajes"] M61["M61 · Java, Python, Go y C#"] end subgraph agentes["Para agentes"] M62["M62 · El mapa, en una captura"] end subgraph carpeta["La carpeta"] M63["M63 · La carpeta tiene su ficha"] end subgraph resto["Lo que no es código"] M64["M64 · El mapa de lo que no es código"] M64 --> M76["M76 · Las reglas del resto"] end subgraph lint["El lint"] M65["M65 · El lint, en el mapa"] M67["M67 · El lint es del proyecto"] M65 --> M75["M75 · El lint se lee por hallazgos"] end subgraph proyecto["El proyecto"] M66["M66 · El proyecto tiene su ficha"] end subgraph duplicacion["La duplicación"] M68["M68 · La duplicación, medida"] M69["M69 · La duplicación, en el mapa"] M70["M70 · La divergencia, con nombre"] M71["M71 · La duplicación, en el diff"] end M3 --> M4 M7 --> M8 M12 --> M13 M17 --> M18 M21 --> M25 M1 -.-> M61 M1 -.-> M62 M1 -.-> M63 M1 -.-> M64 M1 -.-> M65 M65 -.-> M66 M66 -.-> M67 M1 -.-> M68 M68 -.-> M69 M69 -.-> M70 M70 -.-> M71 M2 -.-> M71| Fase | Qué | Estado | Decisión |
|---|---|---|---|
| M0 | Modelo y mapa, sin parsers | cerrada | ADR 0005 |
| M1 | Parser propio de TypeScript | cerrada | ADR 0003 |
| M2 | Diff y PR | cerrada | ADR 0010 |
| M3 | MCP y distribución | cerrada | ADR 0014 |
| M4 | Lente de migración | cerrada | ADR 0016 |
| M5 | App web | cerrada | ADR 0008 |
| M5.1 | Básicos de uso | cerrada | ADR 0008 |
| M6 | Análisis en el navegador | cerrada | ADR 0020 |
| M7 | App de escritorio | cerrada | ADR 0021 |
| M8 | La migración, donde ya faltaba | cerrada | ADR 0022 |
| M9 | Lente de dominio, por pasos | cerrada | ADR 0023 |
| M10 | La evolución temporal | cerrada | ADR 0024 |
| M11 | La lente de símbolos | cerrada | ADR 0025 |
| M12 | La vida de un símbolo | cerrada | ADR 0026 |
| M13 | Los ajustes | cerrada | ADR 0027 |
| M14 | Los plugins | cerrada | ADR 0028 |
| M15 | La vista 3D, retirada en el ADR 0114 | cerrada | ADR 0028 |
| M16 | Los addons | cerrada | ADR 0029 |
| M17 | Instalar y quitar plugins y addons | cerrada | ADR 0030 |
| M18 | Los documentos ordenados | cerrada | ADR 0031 |
| M19 | Los documentos, con iconos y diagramas | cerrada | ADR 0031 |
| M20 | La guía, en HTML | cerrada | ADR 0031 |
| M21 | Las versiones y las actualizaciones | cerrada | ADR 0032 |
| M22 | El repo, con sus papeles | cerrada | ADR 0033 |
| M23 | La web del proyecto | cerrada | ADR 0034 |
| M24 | El índice SQLite de los documentos | descartada | ADR 0036 |
| M25 | La entrega se automatiza | cerrada | ADR 0042 |
| M26 | La UI compartida | cerrada | ADR 0043 |
| M27 | La app web en Docker | cerrada | ADR 0044 |
| M28 | El escritorio se instala y se actualiza | cerrada | ADR 0045 |
| M29 | Los documentos con Starlight | cerrada | ADR 0046 |
| M30 | El changelog es la guía | cerrada | ADR 0047 |
| M31 | El sitio en dos idiomas | cerrada | ADR 0046 |
| M32 | El escritorio persiste en .codarch/ | cerrada | ADR 0048 |
| M33 | La orquestación compartida | cerrada | ADR 0049 |
| M34 | El estado vive en el repositorio | cerrada | ADR 0050 |
| M35 | La segunda red del lint | cerrada | ADR 0054 |
| M36 | El live no repite el análisis | cerrada | ADR 0056 |
| M37 | La ficha del fichero habla de sus lentes | cerrada | ADR 0057 |
| M38 | Las reglas tienen su pestaña | cerrada | ADR 0058 |
| M39 | Tres pestañas | cerrada | ADR 0059 |
| M40 | Una tabla de métricas | cerrada | ADR 0060 |
| M41 | El marco del proyecto | cerrada | ADR 0061 |
| M42 | Los símbolos también se pliegan | cerrada | ADR 0062 |
| M43 | Todos los símbolos del módulo | cerrada | ADR 0063 |
| M44 | La ficha no esconde nada | cerrada | ADR 0064 |
| M45 | Cada componente su versión | cerrada | ADR 0065 |
| M46 | La acción vuelve al monorepo | cerrada | ADR 0066 |
| M47 | La ficha enseña el código | cerrada | ADR 0067 |
| M48 | La ficha abre el editor y sus dependencias | cerrada | ADR 0068 |
| M49 | El lenguaje de la ficha, en todo el reporte | cerrada | ADR 0061 |
| M50 | Dos pestañas: el fichero y el cambio | cerrada | ADR 0069 |
| M51 | Los ficheros del cambio, en una lista | cerrada | ADR 0070 |
| M52 | La tabla de Cambios va de base a head | cerrada | ADR 0071 |
| M53 | Cambios desde el último commit | cerrada | ADR 0072 |
| M54 | Una sola interfaz | cerrada | ADR 0073 |
| M55 | Una sola sesión de análisis | cerrada | ADR 0074 |
| M56 | Cambios es de git | cerrada | ADR 0075 |
| M57 | Las líneas no son código | cerrada | ADR 0076 |
| M58 | El diff, al abrir el fichero | cerrada | ADR 0077 |
| M59 | Balance de deuda | cerrada | ADR 0078 |
| M60 | El inspector con barra de actividad | cerrada | ADR 0079 |
| M61 | Java, Python, Go y C# | cerrada | ADR 0090 |
| M62 | El mapa, en una captura | cerrada | ADR 0091 |
| M63 | La carpeta tiene su ficha | cerrada | ADR 0092 |
| M64 | El mapa de lo que no es código | cerrada | ADR 0093 |
| M65 | El lint, en el mapa | cerrada | ADR 0094 |
| M66 | El proyecto tiene su ficha | cerrada | ADR 0095 |
| M67 | El lint es del proyecto | cerrada | ADR 0096 |
| M68 | La duplicación, medida | cerrada | ADR 0102 |
| M69 | La duplicación, en el mapa | cerrada | ADR 0102 |
| M70 | La divergencia, con nombre | cerrada | ADR 0102 |
| M71 | La duplicación, en el diff | cerrada | ADR 0102 |
| M72 | El checksum es del código | cerrada | ADR 0103 |
| M73 | El navegador lee el mismo alcance | cerrada | ADR 0103 |
| M74 | La app compara código e historial | cerrada | ADR 0103 |
| M75 | El lint se lee por hallazgos | cerrada | ADR 0104 |
| M76 | Las reglas del resto | cerrada | ADR 0105 |
| M77 | El Atlas, un plugin de vista | abierta | ADR 0113 |
Backlog
Sección titulada «Backlog»Ítems abiertos que no son fase todavía. Viven aquí (no como casillas sueltas en cada ADR) hasta que nazca su fase. Cada línea enlaza la decisión donde se decidió.
Live e índice
Sección titulada «Live e índice»- Decidir si la caché de parseo se comparte entre el análisis del escritorio y
serve— ADR 0056 - Medir si el churn al añadir o borrar un fichero puede pedir solo los caminos nuevos — ADR 0056
- Red de seguridad del vigilante ante desbordes de avisos (p. ej. Windows) — ADR 0056
Ficha, reglas y pestañas
Sección titulada «Ficha, reglas y pestañas»- Reglas que tocan un símbolo (no solo el fichero), cuando el reporte sepa la línea — ADR 0057
- Enseñar la evolución del fichero en Lentes cuando el historial tenga más de una foto — ADR 0057
- Filtrar Reglas por severidad u origen y buscar por nombre — ADR 0058
- Catálogo de reglas configuradas que no se violan — ADR 0058
- Recordar la última sección abierta de la ficha al cambiar de celda — ADR 0059
- Agrupar imports bajo un pliegue si la tabla de métricas crece — ADR 0060
- Atajo para plegar o desplegar todas las secciones — ADR 0061
- Filtrar símbolos por nombre en ficheros con lista enorme — ADR 0062
- Distinguir el valor de una variable (texto, número, objeto) en la fila — ADR 0063
- Espacios de nombres y código suelto, solo si aparecen en un repo real — ADR 0064
- Claves de objetos, como detalle de una variable — ADR 0064
- Elegir el editor (VS Code, Cursor, otro) en los ajustes — ADR 0068
- Enseñar el tipo de arista (import normal, type-only, dinámico) — ADR 0068
Acción y Marketplace
Sección titulada «Acción y Marketplace»- Añadir
action.ymlen la raíz del monorepo si se quiere GitHub Marketplace — ADR 0066
Documentación (capturas)
Sección titulada «Documentación (capturas)»- Rehacer las capturas de la webapp y de primeros pasos con el marco nuevo — ADR 0082
- Rehacer las capturas del engranaje y del rail/dock — ADR 0083
Diseño del mapa
Sección titulada «Diseño del mapa»- Checklist de la captura del mapa (carpetas, rojo dominante, hallazgos sin zoom, selección sin color, blanco y negro) — diseño del mapa
Resto / docs
Sección titulada «Resto / docs»- Lente
rest.linkscon la línea del enlace (queda fuera de v1 de M76; reabrir solo si el snapshot del resto guarda la lente) — ADR 0105
Cómo se lee esto
Sección titulada «Cómo se lee esto»- Una fase nace en la hoja de ruta de su decisión (
## Hoja de rutadel ADR); aquí solo se le añade la línea. - Una decisión que crece agranda su hoja de ruta y deja lo hecho en la guía, no en este fichero.
- Las ideas que todavía no son fase viven en el backlog de este fichero (con enlace al ADR) o en la guía, por orden cronológico.
- El índice de las decisiones —con su fecha y su estado— está en
docs/adr/index.md.