Skip to content

Latest commit

 

History

History
56 lines (48 loc) · 9.48 KB

File metadata and controls

56 lines (48 loc) · 9.48 KB
title Registro de Decisiones Arquitectónicas Locales
type hub
classification Product ADR
owner Evolith Tracker Team

DECISIONS.md — Evolith Tracker (ADR Hub)

Bilingual Navigation: English (this document) · Versión en Español

Propósito

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).

Índice de Decisiones Locales

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/evaluateEvaluationVerdict (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.