| title | Registro de Decisiones Arquitectónicas Locales |
|---|---|
| type | hub |
| classification | Product ADR |
| owner | Evolith Tracker Team |
Bilingual Navigation: English (this document) · Versión en Español
Este documento sirve como el Hub de Decisiones Arquitectónicas Locales para Evolith Tracker. Documenta las decisiones y desviaciones específicas de este producto satélite frente al Core.
Nota: Las decisiones universales se heredan del Upstream Base (evolith_arch32).
- Upstream base:
https://github.com/beyondnetcode/evolith_arch32 - Última clasificación:
2026-06-28 - Convención de IDs de ADR upstream: calificados por categoría —
core/,nodejs/,dotnet/,android/(p. ej.core/0074,nodejs/0075).
| ID | Título | Operación | Ref Upstream | ADR Local | Notas |
|---|---|---|---|---|---|
| T-001 | Orquestación de Monorepo con Nx | Adoptar | ADR-0001 | — | Inicializado en src/ utilizando npm workspaces con Nx. |
| T-002 | Adopción de Microfrontends en Fase 1 | Sobrescribir | N/A | T-002 | Desviación de topología para escalabilidad de UI. |
| T-003 | Arquitectura Hexagonal (Ports & Adapters) | Adoptar | ADR-0002 | — | Capa de dominio pura sin dependencias externas. |
| T-004 | TypeScript estricto como lenguaje primario | Adoptar | ADR-0003 | — | strict: true habilitado. |
| T-005 | TypeORM como ORM (Data Mapper pattern) | Adoptar | ADR-0043 | — | Data Mapper elegido sobre Active Record. |
| T-006 | React con Vite como base del frontend | Adoptar | ADR-0044 | — | Topología microfrontends. |
| T-007 | Zustand + TanStack Query (State Management) | Adoptar | ADR-0045 | — | Zustand (cliente) + TanStack Query (servidor). |
| T-008 | Convención de nombres de schema PostgreSQL | Definir | N/A | T-008 | Canónico: tracker_discovery, tracker_design... |
| T-009 | REST + OpenAPI 3.0 como única API en Fase 1 | Definir | N/A | T-009 | GraphQL fuera de alcance en Fase 1. |
| T-010 | Framework de agentes configurable por tenant | Extender | N/A | T-010 | Core usa BMAD internamente; el Tracker es framework-agnóstico. El tenant configura su harness agéntico por fase (bmad, spec-kit, custom). |
| T-011 | Estándar de numeración para épicas e historias | Extender | N/A | T-011 | Extiende upstream US-\d{3} a US-{MOD}-{NNN} con códigos de módulo de 3 letras. Épicas: EPIC-{NNN}. |
| T-012 | Contratos de eventos de dominio en libs/shared/ | Definir | N/A | — | Eventos compartidos (DriftDetectedEvent, ExternalCheckpointRegisteredEvent) se definen como contratos TypeScript en libs/shared/src/domain/events/. Pact tests pendientes (Phase 0). |
| T-013 | Value Object canónico ExternalReference en Shared Kernel | Definir | N/A | — | Unifica shapes dispares en 6 contextos. ExternalReference con system, externalId, url, type, linkedAt, label, metadata. Ubicado en libs/shared/src/domain/external-reference.vo.ts. |
| T-014 | UC-005 dividido en UC-005a y UC-005b | Definir | N/A | — | Plan Release y Authorize Deployment son operaciones distintas con distintos actores y precondiciones. UC-005a (Planning), UC-005b (Execution). |
| T-015 | Core BFF Gateway como único canal de comunicación | Adoptar | core/0074, nodejs/0075, core/0080 | — | El Tracker se comunica exclusivamente con Evolith Core a través del Core BFF Gateway (Tier 1 Kong Edge → Tier 2 NestJS BFF). Se prohíben llamadas directas a servicios internos de Core. El BFF valida UMS/RBAC en el perímetro de usuario y usa autenticación B2B API key para el canal máquina-a-máquina hacia Core; core/0080 complementa el payload con repositoryRef + workspaceRef + operationId, pero no reemplaza el canal B2B. |
| T-016 | Capa Anti-Corrupción para Integración PPM (Funnel 0) | Definir | N/A | — | Se implementa una ACL (PpmIntakeACL) en el módulo tracker_intake para mapear y normalizar los esquemas de herramientas PPM externas (ej. Meisterplan) antes de que toquen el dominio del Tracker. Esto evita la contaminación de modelos financieros externos en el core del Tracker. |
| T-017 | Core API Exposure Layer (REST-only) | Adoptar | core/0074 | — | (CR-01/CR-02) Core-API es REST-only bajo /api/v1 (sin GraphQL/SSE) + gateway MCP. Salidas con envelope ADR-0073; errores RFC 9457. Reemplaza supuestos de transporte previos. |
| T-018 | Contrato de Referencia de Repositorio Remoto | Adoptar | core/0080 | — | (CR-26) Las llamadas BFF → Core incluyen repositoryRef {url, revision} + workspaceRef opaco + operationId para evaluación stateless y correlación. Este contrato no autoriza usuarios finales ni persiste ownership; la autorización tenant/usuario queda en el Tracker BFF. |
| T-019 | Separación Dominio/Financiero | Adoptar | core/0078 | — | (CR-17) ROI/finanzas fuera del dominio de gobernanza. Revisar Discovery Canvas / Business Case (hoy embeben ROI). |
| T-020 | Corpus Multi-Topología Componible | Adoptar | core/0079 | — | (CR-08/CR-09) Topología = 5 dimensiones componibles (progressive-axis/execution/integration/data/ai), no un ladder mono→micro. F1/F2/F3 = madurez de progressive-axis (modular-monolith/distributed-modules/microservices), no fases SDLC. |
| T-021 | PhaseId Canónico Semántico | Adoptar | core (GT-343) | — | (CR-28) Ids canónicos discovery|design|construction|qa|release; f1..f5 son alias deprecados solo de entrada; el namespace F# es madurez de topología. |
| T-022 | Contrato de Evaluación de Satélite | Adoptar | core/0073, core/0074 | — | (CR-03) POST /api/v1/evaluate → EvaluationVerdict (OPA real vía SatelliteEvaluationPipeline). El verdict es evidencia técnica, no un GateDecision canónico: el Tracker decide el gate. |
| T-023 | Distribución OPA-wasm Agnóstica | Adoptar | core/0085 | — | (CR-03) Evaluación de reglas vía rulesets/opa/policy.wasm; resultado por regla passed|failed|skipped (skipped si falta el wasm — manejar con gracia). |
| T-024 | Colisión de Nombre GateDecision |
Definir | N/A | T-024 | (CR-12/CR-13) Core ya define un VO GateDecision (estrecho). El GateDecision canónico del Tracker (rico: status/snapshots/approvals/exceptions) se renombra/namespacea (p. ej. TrackerGateDecision) y mapea el VO de Core como entrada de TechnicalEvaluation. |
| T-025 | Gobernanza de IA Agéntica (cluster) | Referenciar | core/0081–0083, 0086–0089 | — | (CR-21/CR-27) Sandbox isolation, trust boundary, action-authorization audit, telemetry/cost, ABAC tool execution, sovereign identity, event-driven workflows. Base para la superficie "AI Governance" del Tracker. |
| T-026 | Navegación Multi-Perspectiva SDLC | Definir | N/A | propuesta | Reemplaza navegación lineal por modelo de 8 perspectivas canónicas (Tenant, Producto, Iniciativa, Grupo, Fase, Cumplimiento, Impactos, Arquitectura). Icon Rail + Context Panel. React Router v7. ~165 persona-días. Incluye: GateDecision, ArtifactInstance, EvidenceRecord, InitiativeImpact, DeploymentRecord. |
| T-027 | Architecture Drift Monitor como capacidad de producto | Extender | core/0073, core/0080 | — | Tracker adopta el contrato de evaluación de Core (POST /api/v1/evaluate) para evaluaciones de tipo architecture_drift. Tracker opera el lifecycle del drift (detección → registro → visualización → remediación → excepción → auditoría). Core se mantiene stateless. Agent Runtime orquesta adaptadores de detección. Se crean entidades: ArchitectureDriftFinding, ArchitectureBaseline, DriftRemediationTask, DriftException, DriftApproval. Ver PRODUCT_VISION.md §10.3. |
| T-028 | CoreEvaluationTransaction como entidad de primera clase | Definir | N/A | — | Todo intercambio Tracker ↔ Core se modela como CoreEvaluationTransaction (request + response + contexto + metadata). Core no persiste nada — Tracker es el único responsable de la persistencia operacional. Se crea la transacción como agregado en tracker_integration con 30+ campos. Ver tracker-core-integration-design.md §N. |
| T-029 | ADR contextual en Tracker vs ADR general de Core | Definir | N/A | — | Dos niveles de ADR: (1) ADR contextual en Tracker — decisión operacional por tenant/producto/iniciativa, persiste en Tracker como evidencia. (2) ADR general de Core — modifica el estándar de Evolith Core, debe proponerse mediante flujo formal (issue → ADR → branch → PR → review → merge). Tracker no modifica el Core directamente; solo propone, registra y da seguimiento. |
| T-030 | Core Standard Change Request — flujo de evolución del Core | Definir | N/A | — | Las propuestas de cambio al estándar general del Core siguen un lifecycle formal: TechnicalDecision → CoreImprovementProposal → RepositoryIssue → DraftADR → Branch → PR → Review → Approval → Merge → CoreVersionUpdate → TrackerTrace. Campos: id, estado (draft→merged/rejected), refs a issue/ADR/PR en repositorio Core. |
Plantilla para nuevos ADRs: Al crear un nuevo documento para "ADR Local", utilice el esquema de Frontmatter definido en los estándares de Evolith Core y ubíquelo en la carpeta de gobernanza correspondiente.