Ir al contenido
CodArchel mapa vivo de la arquitectura
ESEN

Plan de migración a Rust (M4)

Este documento valida la lente de migración sobre el propio CodArch. Los números salen de codarch analyze . y cambian con el código; no son un compromiso, son una foto para priorizar.

SeñalValor
Ficheros analizados211
TS/JS211 ficheros · 33.621 rloc
Rust0
WASM/Node0
Puentes2
Aristas FFI0
Deuda de migración5.871

La deuda es (maxComplexity + 1) × (1 + fanIn) por fichero TS/JS. No cuenta líneas: un fichero grande y trivial pesa menos que uno complejo con muchos consumidores. Los fixtures de test ya no entran: el .codarch.yml de este repo los excluye con ignore (ADR 0038), así que la foto mide solo código de producción.

DeudaRLOCFichero
357499packages/render/src/model.ts
210281packages/parsers/src/migration.ts
195682packages/metrics/src/diff.ts
185313packages/parsers/src/analyze-core.ts
132234apps/cli/src/commands/compare.ts
1262.588apps/web/src/App.tsx
117359packages/schema/src/legacy.ts
112732apps/mcp/src/store.ts
108237packages/parsers/src/graph.ts
105147packages/versions/src/index.ts
104256packages/addons/src/index.ts
102535apps/cli/src/commands/serve.ts
901.910apps/desktop/src/renderer/App.tsx
9095packages/metrics/src/report.ts
90124packages/parsers/src/walk.ts
  1. Contratos puros. schema/identity, schema/stats, schema/tree y las estructuras de datos. Son código determinista, sin I/O ni tree-sitter; el primer crate Rust puede validarse contra los mismos fixtures y checksums.
  2. Grafo y métricas. graph, diff, risk y rules. Son transformaciones puras sobre datos; ideales para property tests y para comparar JSON byte a byte con la implementación TS.
  3. Parser TS. parsers/walk, resolve y el parser tree-sitter. Es la fase de mayor riesgo: resolución de imports, gramáticas y métricas. Mantener una frontera napi con el parser actual permite migrar fichero a fichero y comparar resultados.
  4. Render y adaptadores. El render puede quedarse en TS o pasar a WASM; el CLI y MCP son adaptadores finos. No son la prioridad: cambian más y no concentran la deuda.
  5. Acción de GitHub. YAML y render-comment.mjs; no migrar. Consume el CLI publicado.

La estrategia natural es un crate Rust con una API estable expuesta por napi, y adaptadores TS que sustituyan módulo a módulo. Cada sustitución debe comparar snapshots y checksums del mismo commit. La lente de migración sirve para medir el avance: rust sube, migrationDebt baja, y ffiCrossings dice cuánto acoplamiento nuevo introduce el puente.

Ventana de terminal
npm run analyze -- .
npm run inspect -- .codarch/snapshot.cc.json --metric migrationDebt --top 15
npm run render -- .codarch/snapshot.cc.json -o .codarch/sitio
  • Rust se mide, no se parsea: no hay imports ni complejidad Rust en v1.
  • Las aristas napi no son observables sin el glue generado; solo se marca el puente.
  • Los fixtures de test de este repo se excluyen en .codarch.yml; no son deuda de producción.
  • La deuda prioriza; no estima semanas ni personas.