Ir al contenido

Flujo de Desarrollo y Testing

Criptofolio está estructurado como un Monorepo en PNPM Workspaces respaldado por Turborepo para la orquestación de tareas, compilación y caché inteligente.


El repositorio está diseñado para desacoplar de forma estricta las reglas de negocio de la infraestructura y la presentación visual:

criptofolio/
├── apps/
│ ├── frontend/ # UI en Vue 3, Pinia stores/Colada, TailwindCSS v4, shadcn-vue
│ └── backend/ # Servidor API Hono.js, Bóveda, orquestador DuckDB, jobs
└── packages/
├── core-domain/ # Lógica pura de negocio (Servicios, Normalizadores, Value Objects)
├── shared-types/ # Tipos TypeScript compartidos, schemas Zod de DTOs, contratos RPC
└── database/ # Migraciones SQLite, vistas SQL de DuckDB, adaptadores de DB
  1. core-domain tiene cero dependencias de frameworks externos (sin Vue, sin Hono, sin Axios, sin drivers SQL).
  2. shared-types solo depende de zod para la validación estricta de objetos de transferencia de datos (DTO).
  3. frontend jamás importa código interno del backend ni paquetes de base de datos. La comunicación transcurre íntegramente a través de Hono RPC (hc<AppType>).

Turborepo gestiona la caché de compilaciones y tests en .turbo/. Comandos habituales del espacio de trabajo:

Comando Acción Nota de Concurrencia
pnpm dev:full Arranca frontend y backend de forma simultánea Servidores de desarrollo en vivo
pnpm build Compila todos los paquetes (turbo run build) Respeta el orden topológico ^build
pnpm test Ejecuta las suites de Vitest (--concurrency=1) Limitado a 1 para evitar inanición de hilos en DuckDB
pnpm typecheck Ejecuta vue-tsc y chequeo estático de tipos Verificación estricta de TypeScript
pnpm lint Analiza el código con ESLint en todo el monorepo Control de calidad y estilo

[!WARNING] ¿Por qué --concurrency=1 en los tests? DuckDB genera hilos de trabajo nativos durante las consultas analíticas. Al ejecutar suites de tests en paralelo sobre bases de datos en archivo, puede producirse inanición de hilos de CPU, lo que DuckDB interpreta como un falso timeout de consulta. Correr los paquetes secuencialmente garantiza resultados deterministas y estables.


El control de calidad sigue principios de Desarrollo Guiado por Pruebas (TDD):

  • Tests Unitarios del Dominio: Las pruebas en packages/core-domain evalúan normalizadores, pipelines de ingesta y cálculos FIFO con vectores de prueba 100% deterministas.
  • Tests de Integración de Adaptadores: En packages/database y apps/backend se comprueba el comportamiento real de transacciones SQLite y Window Functions de DuckDB contra bases de datos en memoria (:memory:).
  • Política Cero any: El código de producción debe compilar limpiamente con vue-tsc --noEmit sin permitir excepciones de tipado.

🔖 Versionado y Lanzamientos (“Frontend is King”)

Sección titulada «🔖 Versionado y Lanzamientos (“Frontend is King”)»

Criptofolio utiliza Changesets para la gestión automatizada de versiones semánticas y changelogs.

  • Aunque los paquetes cuentan con versionado independiente, la versión de @criptofolio/frontend actúa como la versión representativa global de la aplicación.
  • Durante las fases tempranas de desarrollo se prefieren incrementos patch frente a minor para mantener una evolución deliberada de las versiones.

Antes de abrir una Pull Request que modifique código de paquetes:

Ventana de terminal
pnpm changeset
  1. Selecciona los paquetes afectados por tus cambios.
  2. Escoge el tipo de incremento (patch, minor, major).
  3. Escribe un resumen conciso en markdown describiendo el cambio.
  4. Realiza commit del archivo generado .changeset/*.md.

Al fusionar la rama a main, la GitHub Action de CD actualizará automáticamente los números de versión, el archivo CHANGELOG.md y publicará la release.