Saltar a contenido

ADR 0001: arquitectura de la fase 0 y estrategia de ejecución

  • Estado: aceptada para la fase 0
  • Fecha: 2026-09-19

Contexto

El repositorio comenzó vacío. El objetivo era validar el lifecycle antes de disponer de todos los repositorios Odoo, imágenes, módulos y dependencias necesarios para una ejecución real.

Decisión

El primer incremento usa un dominio independiente de frameworks, puertos estrechos de repositorio y runtime, SQLite mediante SQLAlchemy y servicios de aplicación compartidos por Typer y FastAPI.

La máquina de estados es explícita:

stateDiagram-v2
    direction LR
    [*] --> NEW
    NEW --> CHECKING_OUT
    CHECKING_OUT --> PREPARING
    PREPARING --> INSTALLING
    INSTALLING --> TESTING
    TESTING --> STARTING
    STARTING --> RUNNING

Cualquier estado activo puede fallar. Cualquier estado no destruido puede pasar por DESTROYING a DESTROYED; repetir la destrucción es exitoso. RUNNING puede expirar antes de destruirse.

Estrategia Git

Solo se aceptan alias configurados. Cada ref se resuelve a un SHA antes de crear un checkout detached bajo <builds_root>/<build_id>/sources/<target>. Nunca se modifica el working tree del usuario. Origen, ref, SHA, destino y prioridad quedan persistidos.

Estrategia Docker Compose

Una plantilla Jinja se renderiza únicamente con valores validados o generados. Cada build recibe proyecto Compose, red, volumen PostgreSQL, base de datos, workspace, filestore y puerto propios. El archivo se valida con docker compose config antes de crear recursos.

Instalación, pruebas y arranque son invocaciones separadas. El estado RUNNING exige comandos exitosos y healthcheck HTTP válido. La destrucción usa down --volumes --remove-orphans sobre el proyecto validado y se puede repetir.

Consecuencias

El dominio y la aplicación se prueban sin Docker y pueden cambiar de adaptadores sin modificar las reglas de CLI/API. El aislamiento reduce colisiones, pero no permite ejecutar repositorios hostiles.