Flujo de Desarrollo y Testing
🛠️ Flujo de Desarrollo y Testing
Sección titulada «🛠️ 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.
📦 Topología de Paquetes del Monorepo
Sección titulada «📦 Topología de Paquetes del Monorepo»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 DBReglas de Dependencias:
Sección titulada «Reglas de Dependencias:»core-domaintiene cero dependencias de frameworks externos (sin Vue, sin Hono, sin Axios, sin drivers SQL).shared-typessolo depende dezodpara la validación estricta de objetos de transferencia de datos (DTO).frontendjamá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>).
⚡ Flujo de Tareas con Turborepo
Sección titulada «⚡ Flujo de Tareas con Turborepo»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=1en 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.
🧪 Estrategia de Pruebas y Calidad
Sección titulada «🧪 Estrategia de Pruebas y Calidad»El control de calidad sigue principios de Desarrollo Guiado por Pruebas (TDD):
- Tests Unitarios del Dominio: Las pruebas en
packages/core-domainevalúan normalizadores, pipelines de ingesta y cálculos FIFO con vectores de prueba 100% deterministas. - Tests de Integración de Adaptadores: En
packages/databaseyapps/backendse 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 convue-tsc --noEmitsin 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.
La Filosofía “Frontend is King”:
Sección titulada «La Filosofía “Frontend is King”:»- Aunque los paquetes cuentan con versionado independiente, la versión de
@criptofolio/frontendactúa como la versión representativa global de la aplicación. - Durante las fases tempranas de desarrollo se prefieren incrementos
patchfrente aminorpara mantener una evolución deliberada de las versiones.
Cómo Declarar un Cambio:
Sección titulada «Cómo Declarar un Cambio:»Antes de abrir una Pull Request que modifique código de paquetes:
pnpm changeset- Selecciona los paquetes afectados por tus cambios.
- Escoge el tipo de incremento (
patch,minor,major). - Escribe un resumen conciso en markdown describiendo el cambio.
- 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.