ADR-002 — Layout del frontend: una sola SPA¶
- Estado: aceptado
- Fecha: 2026-07-30
- Sustituye a: el esqueleto de monorepo npm en
apps/+packages/
Contexto¶
El repositorio mantenía dos layouts JavaScript en paralelo:
dkv-pet-flows-admin/— la SPA React 18 + Vite que se despliega de verdad.apps/web+packages/*— workspaces npm declarados en elpackage.jsonde la raíz, presentados como la extracción del canvas de flujos a paquetes reutilizables@jaraxa/flow-*.
La documentación afirmaba que el admin consumía esos paquetes y que los enlaces
de workspace debían resolver para que npm install funcionase. La inspección lo
desmiente:
| Ruta | Contenido real |
|---|---|
packages/core/ |
directorio vacío |
packages/flow-canvas/ |
6 líneas; devuelve un div con el texto Canvas Placeholder |
packages/flow-icons/ |
5 líneas; reexporta lucide-react y un console.log |
packages/flow-nodes/ |
3 líneas; TriggerNode, ActionNode y ConditionNode devuelven null |
apps/web/ |
plantilla de arranque de Vite + React sin modificar |
Ningún fichero del repositorio importaba @jaraxa/flow-*. El node_modules/ de
la raíz hospedaba 169 paquetes al servicio de 15 líneas de placeholder.
La dependencia real del admin es @jaraxa/ui-flows, declarada como enlace local:
"@jaraxa/ui-flows": "file:/home/amf/workspace.jaraxa/ui-flows/packages/ui-flows"
Se importa en src/pages/Escenarios.jsx, src/components/ExecutionOverlay.jsx y
src/components/SimulationWidget.jsx.
Decisión¶
Eliminar apps/, packages/, el package.json de la raíz y su
package-lock.json. El repositorio pasa a tener un único proyecto JavaScript,
dkv-pet-flows-admin/, con su propio package.json y su propio lockfile.
El workflow cloudflare-deploy-frontend.yml apuntaba a apps/web y se ha
reapuntado a dkv-pet-flows-admin, corrigiendo además el directorio de salida:
Vite está configurado con outDir: 'build', no dist.
Consecuencia pendiente: el repositorio no es reproducible¶
npm install en dkv-pet-flows-admin falla en cualquier máquina que no sea la
del autor original, porque la ruta del enlace es absoluta y apunta fuera del
repositorio. El lockfile registra "link": true con una ruta relativa que
también escapa del árbol.
Actualización 2026-07-31 — resuelto (ver ADR-003). Esta conclusión era
cierta para alpha.1, la versión que registraba el lockfile del admin, y ha
caducado:
- Desde
ui-flowsv0.1.0-alpha.5 las ocho dependencias internas@jaraxa/flow-*pasaron adevDependenciesydependenciesquedó vacío. Eldist/publicable está bundleado con tsup y sus únicos externals sonreact,react-dom,react/jsx-runtime,zustandy@xyflow/react. Publicar es un paquete, no nueve. - La migración a multirepo colocó
ui-flowsydkv-pet-flows-admincomo hermanos dentro del contenedorpet-flows/, así que la ruta relativa dejó de ser inviable. Verificado con instalación limpia: el lockfile pasó de dos rutas absolutas al$HOMEdel autor a cero, ynode_modules/@jaraxa/ui-flowsresuelve a../../../ui-flows/packages/ui-flows.
Sigue descartada la dependencia git: npm no admite subdirectorios en
dependencias git y el paquete vive en packages/ui-flows de un monorepo;
además dist/ no está versionado y no hay script prepare, así que la
instalación no construiría nada.
La resolución definitiva es publicar el paquete como @jaraxa/ui-flows en el
Nexus corporativo y consumirlo por versión, dejando la ruta relativa como
override para desarrollar la librería en paralelo. El enlace relativo cubre el
desarrollo local; el consumo por versión cubre además el CI.
Mientras tanto el despliegue automático a Cloudflare Pages queda desactivado y
el workflow solo se dispara con workflow_dispatch.
Notas¶
ui-flows vive hoy en github.com/jrx-amf/ui-flows, una cuenta personal,
mientras que el repositorio que lo consume ya está en la organización
jaraxasoftware. Trasladarlo es requisito previo a cualquier publicación.
Los antiguos packages/flow-{canvas,icons,nodes} eran una copia local temprana
de tres de los ocho paquetes internos que ui-flows acabó implementando.