ADR 0017 — Servidor local `codarch serve`
This content is not available in your language yet.
Development
Estado: aceptado ✅ · Fecha: 2026-10-20
Contexto
Sección titulada «Contexto»La app web carga snapshots y reportes ya generados. Eso es rápido y determinista, pero obliga a
ejecutar codarch analyze a mano y refrescar el navegador. También deja fuera el caso natural de
“quiero ver el mapa mientras programo”.
El análisis en el navegador (tree-sitter WASM, FS virtual) es M6 y no resuelve el flujo local a corto
plazo. Un servidor local pequeño puede hacerlo sin duplicar el analizador: usa el mismo
analyzeRepository del CLI y sirve el build estático de la app.
Esto no es un monitor de GitHub ni un servicio remoto. Los PR siguen en la GitHub Action.
Decisión
Sección titulada «Decisión»- Comando
codarch serve [root]. Analiza el repo al arrancar, sirve la app web y expone el snapshot en/data/snapshot.cc.json. El reporte de.codarch/report.json, si existe, se sirve en/data/report.jsonpara la vista de PR. - Solo loopback y solo lectura. Por defecto escucha en
127.0.0.1:4173. No escribe en el repositorio, no habla con GitHub y no tiene autenticación. Se puede cambiar host/puerto de forma explícita, pero no está pensado para exponerse. - Watch live por defecto,
--no-watchpara desactivarlo. Observa el árbol confs.watchrecursivo, ignora.git,node_modules,.codarch,dist,coverage,.next,outytarget, y reanaliza con debounce de 350 ms. Cada actualización se publica por SSE en/events; la app se suscribe solo si/data/meta.jsonindicawatch: true. El modo sin watch queda para servidores de solo lectura o repos grandes. - La app entiende dos orígenes. Si existen
data/snapshot.cc.jsonydata/meta.json, carga el servidor; si no, usa la demo. El snapshot del servidor se actualiza conpreserveViewpara no perder área, color, búsqueda o foco en cada guardado. - Selección de carpeta y control live desde la web. Como el navegador no entrega una ruta
absoluta al seleccionar una carpeta, el servidor expone
GET /api/browseyPOST /api/root: la app navega el filesystem local y, al elegir una carpeta, el servidor la analiza y empieza a vigilarla.POST /api/watchactiva o detiene el watcher; la app reflejaliveoservido. - El build web viaja en el paquete.
build:clicopiaapps/web/distaapps/cli/dist/weby el manifiesto publicado incluyeweb. Asínpx codarch servefunciona sin Vite ni clonar el repo.pack:cliypublish:cliconstruyen la web antes del CLI. - Ciclo de vida en desarrollo.
npm run web:devarrancacodarch serve --no-webcon el código fuente víatsx, proxya/api,/datay/eventsdesde Vite y detiene el proceso al cerrar Vite.CODARCH_NO_AUTOSERVE=1lo desactiva. El botón Detener live apaga el watcher y pasa aservido; no mata el proceso que sirve los datos, porque en producción ese proceso es la propia app. El proceso se cierra con Vite o concodarch serve. - Mismo modelo y mismas métricas. El servidor no reimplementa nada: usa el snapshot del parser, con la lente de migración y el reporte existentes. La app solo cambia el transporte.
Consecuencias
Sección titulada «Consecuencias»- Ver el mapa en vivo cuesta un reanálisis completo; en repos pequeños es ~1-2 s. No hay caché incremental todavía.
- El paquete npm crece (~100 KB comprimidos) por el build web; a cambio, el visor local no depende de un checkout.
- El servidor es mono-usuario y local. No hay cuotas, sesiones ni autorización; exponerlo fuera de loopback es responsabilidad del usuario y no está soportado.
- La selección de carpeta desde la web solo funciona con
codarch servearrancado; no es análisis en el navegador. Expone el filesystem local a la app en loopback, con APIs sin autenticación. - En desarrollo, apagar Vite apaga el servidor de datos; en producción, apagar
codarch serveapaga también la app. El control live no debe prometer lo contrario. - El watch puede perder eventos si el editor escribe de forma no atómica; el debounce y el
reanálisis completo lo hacen tolerable. En repos muy grandes,
--no-watchevita reanálisis constantes. - La vista de PR del servidor solo muestra un
report.jsonya generado. No calcula un diff contra otra rama; para eso estáncodarch diffy la acción. - El análisis por navegador y la carga por URL siguen en M5.1/M6.
Alternativas descartadas
Sección titulada «Alternativas descartadas»- Solo servidor estático. No resuelve el análisis al arrancar ni el refresco; obliga a ejecutar el CLI y recargar a mano.
- Analizar en el navegador ahora. Requiere parser WASM y FS virtual; es M6, no un atajo.
- Servicio HTTP remoto con auth. Añade despliegue, cuotas y multi-tenant antes de validar el uso local. La cuña de PR ya está cubierta por la acción.
- Escribir el snapshot en
.codarchen cada cambio. Ensucia el repo, compite con el CLI y hace que el watch se realimente. El snapshot vive en memoria. - Watch externo o solo opt-in. Un watcher externo añade otra pieza; el opt-in hacía que el flujo
“abrir carpeta y ver cambios” no fuera el camino por defecto. Se elige live por defecto y
--no-watchpara el caso contrario.
Hoja de ruta
Sección titulada «Hoja de ruta»Sin fases abiertas; esta decisión se aplica en M5 y M5.1.