Saltar a contenido

ADR-035: Inmovilización de versiones de software

Estado: aceptado

Contexto

Hasta mayo de 2026, los servicios de SmallCountry se actualizaban sin un proceso formal. Cada administrador actualizaba según criterio propio, con riesgos de roturas por cambios en APIs, dependencias y formatos de datos.

El 11 de mayo de 2026 se tomó la decisión de congelar todas las versiones de software a las versiones estables disponibles en esa fecha.

Decisión

  1. Base inmutable: todo el desarrollo se construye sobre versiones conocidas y verificadas
  2. Actualizaciones controladas: ningún servicio se actualiza automáticamente. No se usa :latest en imágenes Docker
  3. Proceso explícito: cada cambio de versión requiere commit en Forgejo, revisión, prueba en staging y aprobación
  4. Trazabilidad: el historial de versiones se documenta en operaciones/versiones.md y en cada ficha individual

Cada ficha de servicio muestra la versión bloqueada con un badge 📌 vX.Y · YYYY-MM-DD debajo del badge de estado.

Alternativas consideradas

A. Actualización continua (rolling release)

Usar :latest en todas las imágenes Docker y actualizar semanalmente.

Descartada por riesgo de roturas imprevistas y falta de tiempo para verificar cada actualización.

B. Actualización por necesidad

Actualizar solo cuando un servicio requiera una función nueva o un parche de seguridad.

Descartada porque sin un registro de versiones es imposible saber qué versión corre en cada servicio, y los parches de seguridad críticos pueden pasar desapercibidos.

Consecuencias

Positivas

  • Entorno predecible: las versiones no cambian sin decisión explícita
  • Reproducibilidad: un backup puede restaurarse en una máquina con las mismas versiones
  • Seguridad controlada: las actualizaciones de seguridad se evalúan caso por caso

Negativas

  • Deuda técnica: las versiones se quedan obsoletas si no se actualizan periódicamente
  • Proceso adicional: cada actualización requiere tiempo de planificación y verificación
  • CVEs no parcheados: entre el descubrimiento de una vulnerabilidad y su actualización planificada puede pasar tiempo

Neutrales

  • El estado congelado es reversible: cualquier servicio puede actualizarse cuando se decida
  • La lista de versiones en operaciones/versiones.md permite auditorías rápidas