Saltar a contenido

Glosario

Página de consulta rápida. Los términos también aparecen subrayados (con tooltip al pasar el ratón) en el resto del book; haz clic para volver aquí.

Organizado en cuatro secciones:

  • Acrónimos — siglas técnicas con enlace a su especificación o estándar.
  • Herramientas — librerías, frameworks y servicios del stack actual.
  • Conceptos del proyecto — clases, patrones y archivos canónicos específicos de Custodiam.
  • Alternativas evaluadas y descartadas — herramientas mencionadas en los ADRs como opciones que se consideraron y no se eligieron. No forman parte del stack actual.

Acrónimos

ABAC

Attribute-Based Access Control. Modelo de autorización donde el acceso a un recurso depende de atributos (del usuario, del recurso, del entorno) evaluados por un motor de políticas. Más expresivo que RBAC pero más costoso de mantener. Custodiam optó por RBAC; ver ADR-013.

ADR

Architecture Decision Record. Documento breve que registra una decisión técnica importante con su contexto, alternativas evaluadas y justificación. La colección de Custodiam vive en la sección de ADRs.

AGPL

GNU Affero General Public License. Licencia copyleft fuerte que obliga a publicar el código fuente incluso cuando el software se ofrece como servicio en red. Custodiam se distribuye bajo AGPL-3.0.

BFF

Backend for Frontend. Patrón donde cada frontend (web, móvil, tercero) tiene un backend propio adaptado a sus necesidades en lugar de consumir un único API genérico. Se menciona en ADR-023 como contraste a la asimetría que sí adopta Custodiam.

CI/CD

Continuous Integration / Continuous Delivery. Prácticas que automatizan build, test y despliegue tras cada cambio en el repositorio. Custodiam usa GitHub Actions para la parte de CI y publica imágenes a GHCR.

CNAME

Canonical Name record. Tipo de registro DNS que apunta un nombre de dominio a otro nombre. Custodiam lo usa para que docs.custodiam.es resuelva al hosting de GitHub Pages; ver ADR-027.

CORS

Cross-Origin Resource Sharing. Mecanismo HTTP que permite a un servidor indicar qué orígenes (dominios) tienen permiso para hacer peticiones a sus recursos desde JavaScript de navegador.

DI

Dependency Injection. Patrón donde un objeto recibe sus dependencias de fuera en lugar de crearlas internamente, facilitando los tests y la sustitución por implementaciones alternativas. En el frontend de Custodiam el contenedor de DI es Riverpod; ver ADR-012.

DKIM

DomainKeys Identified Mail. Mecanismo que firma criptográficamente las cabeceras de un correo saliente para que el receptor pueda verificar que el mensaje no se ha modificado y procede del dominio declarado. Custodiam lo configura sobre Resend; ver ADR-021.

DoD

Definition of Done. Criterios objetivos que una historia o tarea debe cumplir para considerarse completada. Custodiam la aplica especialmente a las pruebas E2E con Patrol; ver ADR-024.

E2E

End-to-End test. Prueba que ejecuta la aplicación completa contra una infraestructura real (frontend, backend, base de datos, IdP) y valida flujos de usuario, no unidades aisladas. En Custodiam corre con Patrol; ver ADR-024.

FCM

Firebase Cloud Messaging. Servicio de Google para enviar notificaciones push a Android, iOS y web. Custodiam lo combina con ntfy como segundo canal de respaldo; ver arquitectura de notificaciones.

GHCR

GitHub Container Registry. Registro de imágenes Docker integrado en GitHub, ligado a la organización o usuario del repositorio. Custodiam publica todas sus imágenes a ghcr.io/custodiam/*; ver ADR-007.

IdP

Identity Provider. Sistema que autentica usuarios y emite tokens o aserciones de identidad para que aplicaciones externas confíen en él. El IdP de Custodiam es Keycloak; ver ADR-010.

JSONB

Tipo de datos de PostgreSQL que almacena JSON en formato binario descompuesto, permitiendo indexar y consultar campos internos con buen rendimiento. Custodiam lo usa para los campos variables de los catálogos extensibles; ver ADR-025.

JWKS

JSON Web Key Set. Documento JSON con las claves públicas que un emisor de tokens (p. ej. Keycloak) publica para que los receptores puedan verificar la firma de los JWT. Custodiam lo consume desde el backend; ver ADR-010.

JWT

JSON Web Token. Formato de token compacto y firmado que codifica información sobre un sujeto (usuario, sesión) en un objeto JSON. En Custodiam el access token es JWT firmado por Keycloak y verificado por el backend; ver ADR-010.

MFA

Multi-Factor Authentication. Autenticación que combina dos o más factores distintos (conocimiento, posesión, inherencia). Custodiam no exige MFA en el MVP, pero Keycloak la soporta nativamente para activarla en fases posteriores.

MTA

Mail Transfer Agent. Servidor responsable de enviar y reenviar correos electrónicos siguiendo el protocolo SMTP. Custodiam no operara su propio MTA, sino que delega en Resend; ver ADR-021.

OAuth 2.0

Marco de autorización delegada estandarizado por el IETF. Permite a una aplicación obtener un token de acceso a recursos en nombre de un usuario sin manejar sus credenciales. Custodiam lo combina con OIDC y PKCE; ver ADR-010.

OIDC

OpenID Connect. Capa de identidad construida sobre OAuth 2.0 que añade un id_token con información del usuario autenticado. Es lo que permite que la app Flutter sepa "quién es" el usuario, no solo "qué puede hacer".

PII

Personally Identifiable Information. Cualquier dato que, solo o combinado con otros, permita identificar a una persona física. En Custodiam las operaciones sobre PII (alta, edición, anonimización) se registran en audit_log por requisito RGPD.

PKCE

Proof Key for Code Exchange. Extensión de OAuth 2.0 que protege el flujo Authorization Code contra interceptación del código de autorización en clientes públicos (móvil y SPA). Custodiam lo usa en los tres clientes (Android, iOS, Web); ver ADR-010.

PWA

Progressive Web App. Aplicación web que ofrece capacidades tradicionalmente nativas (instalación, offline, notificaciones). La versión web de Custodiam se distribuye como PWA servida por Nginx Alpine; ver ADR-006.

RBAC

Role-Based Access Control. Modelo de autorización donde los permisos se asignan a roles y los roles a usuarios. Custodiam lo implementa con un catálogo canónico de permisos espejado entre backend y frontend; ver ADR-013.

RFC

Request for Comments. Documentos publicados por el IETF que establecen estándares y prácticas de Internet (HTTP, OAuth, JWT, SMTP, DKIM, etc.). Custodiam cita los RFCs relevantes cuando justifica decisiones de seguridad o protocolo.

RGPD

Reglamento General de Protección de Datos (en inglés GDPR). Reglamento UE 2016/679 que regula el tratamiento de datos personales de residentes en la Unión Europea. Custodiam aplica el Art. 17 sobre derecho de supresión vía anonimización irreversible.

SMTP

Simple Mail Transfer Protocol. Protocolo estándar para enviar correo electrónico entre servidores. Keycloak lo usa para enviar emails de verificación y reset de contraseña a través de Resend; ver ADR-021.

SPA

Single Page Application. Aplicación web cuyo HTML inicial se carga una sola vez y donde el cambio de "página" se hace por JavaScript sin recargar. Las versiones web de Flutter son técnicamente SPAs y eso condiciona cómo se sirven; ver ADR-006.

SPF

Sender Policy Framework. Mecanismo que publica en DNS qué servidores están autorizados a enviar correo en nombre de un dominio, ayudando a detectar spoofing. Custodiam lo configura junto con DKIM para el dominio del proyecto; ver ADR-021.

SSO

Single Sign-On. Esquema en el que un único login da acceso a múltiples aplicaciones que confían en el mismo IdP. Custodiam queda preparada para SSO porque centraliza la autenticación en Keycloak.

WSL2

Windows Subsystem for Linux versión 2. Capa de Microsoft que ejecuta un kernel Linux real dentro de Windows. Docker Desktop la usa por debajo para correr contenedores Linux en máquinas Windows del equipo.


Herramientas

age

Herramienta moderna de cifrado de archivos con sintaxis simple y soporte de clave pública (X25519). Custodiam la usa con sops para cifrar los archivos .env versionados; ver ADR-019.

Alembic

Herramienta de migraciones de esquema para SQLAlchemy. Compatible con SQLModel. Custodiam la usa para versionar el esquema de PostgreSQL con autogenerate semiautomático; ver ADR-003.

Paquete Dart que captura deep links (App Links de Android y Universal Links de iOS) y los entrega a la app Flutter. Custodiam lo usa en el flujo de OAuth para recibir el callback del IdP; ver ADR-011.

CARTO

Proveedor de teselas de mapa basadas en OpenStreetMap, con estilos cartográficos listos para usar (el estilo Voyager recuerda a un mapa de calles clásico). Custodiam lo usa para el mapa interactivo en web, sin clave ni facturación; ver ADR-030.

Cloudflare Tunnel

Servicio de Cloudflare que crea un túnel saliente desde tu infraestructura hasta su red, exponiendo servicios internos sin abrir puertos. Custodiam lo usa para acceder al stack local desde internet sin VPN; ver ADR-020.

cloudflared

Daemon ligero que mantiene abierto el Cloudflare Tunnel desde el servidor o el contenedor. Se distribuye como binario único y contenedor Docker oficial.

D2

Lenguaje declarativo moderno para diagramas, alternativo a Mermaid, con sintaxis más compacta y mejor manejo de tablas SQL y topologías estáticas. Custodiam lo usa junto con Mermaid en el book; ver ADR-027.

FastAPI

Framework Python para construir APIs HTTP basado en pydantic para validación y tipado, con soporte nativo de OpenAPI y ASGI. Es el framework backend de Custodiam (custodiam-api).

Firebase

Plataforma de Google que agrupa servicios para apps móviles y web (Cloud Messaging, Analytics, Crashlytics, etc.). Custodiam la usa para FCM como canal primario de notificaciones push.

firebase_core

Paquete Flutter que inicializa Firebase en la app antes de poder usar ningún otro paquete de la familia (Messaging, Analytics, etc.). Requiere configuración nativa por plataforma (Android, iOS, Web).

Flutter

Framework de Google para construir aplicaciones nativas para Android, iOS, Web y desktop desde un único código base en Dart. Es la plataforma del cliente de Custodiam (custodiam-app).

flutter_riverpod

Paquete Flutter que adapta Riverpod al árbol de widgets, exponiendo ConsumerWidget, ref.watch() y ref.read(). Custodiam lo usa como contenedor de DI y gestión de estado en toda la app.

flutter_secure_storage

Paquete Flutter que guarda pares clave-valor cifrados usando Keystore (Android) y Keychain (iOS). Custodiam lo usa para persistir tokens OAuth en móvil; en web los tokens viven en memoria (no hay sustituto seguro equivalente).

GoRouter

Paquete oficial de Flutter para enrutado declarativo, soporte de deep links y manejo del back button. Custodiam lo usa como router único de la app; ver ADR-011.

just

Command runner escrito en Rust, alternativa moderna a make orientada a tareas (no a builds). Sirve como envoltura uniforme de comandos en custodiam-infra y custodiam-app; "envuelve, no sustituye".

KeePassXC

Gestor de contraseñas de escritorio que almacena credenciales en una base de datos local cifrada (.kdbx). Custodiam lo recomienda al equipo como sitio donde guardar la clave age personal y secretos no versionados; ver ADR-019.

Keycloak

Servidor OIDC y OAuth 2.0 de código abierto. Hace de Identity Provider de Custodiam: maneja login, registro, reset de contraseña, emisión de tokens y gestión de realms; ver ADR-010.

Material Design 3

Tercera generación del sistema de diseño de Google, con tokens dinámicos de color y mayor flexibilidad de personalización. Custodiam lo adopta como base del Design System de la app; ver ADR-018.

Material for MkDocs

Theme y plugins para MkDocs muy mantenido, con búsqueda integrada, modo oscuro, soporte de instant navigation y muchas extensiones. Es el theme que renderiza este book; ver ADR-027.

Mermaid

Lenguaje basado en texto para describir diagramas (sequence, state, flowchart). Renderiza en el navegador. Custodiam lo usa junto con D2; ver ADR-027.

MkDocs

Generador de sitios estáticos a partir de archivos Markdown, escrito en Python. Base sobre la que corre el book; ver ADR-027.

n8n

Plataforma de automatización tipo workflow ("Zapier autoalojado"). Custodiam la levanta en el stack local para integrar flujos auxiliares.

Nominatim

Servicio público de geocodificación sobre datos de OpenStreetMap, sin registro ni clave. Custodiam lo usa para la geocodificación inversa (coordenada → dirección) en la versión web del selector de ubicación; ver ADR-030.

ntfy

Servicio de notificaciones push HTTP-based, autoalojable, sin requerir cuentas. Custodiam lo usa como segundo canal de notificaciones, en paralelo con FCM, para reducir dependencia de Google.

oauth2

Paquete Dart oficial (no confundir con el estándar OAuth 2.0) mantenido por el equipo de Dart, que implementa el flujo OAuth 2.0 con soporte de PKCE. Custodiam lo usa en móvil; en web el flujo se gestiona manualmente; ver ADR-023.

Patrol

Framework de testing E2E para Flutter, con soporte de gestos nativos, permisos del sistema y orquestación en Android, iOS y Web. Custodiam lo adopta como herramienta E2E oficial; ver ADR-024.

psycopg3

Versión 3 del driver de PostgreSQL para Python. Soporta async, type hints nativos y mejor performance que psycopg2. Custodiam lo usa con URL postgresql+psycopg://...; ver ADR-008.

Pydantic

Librería Python de validación y serialización basada en type hints. Es el motor de validación de FastAPI y la base sobre la que SQLModel construye sus modelos.

PyJWT

Librería Python de referencia para emitir y verificar JWTs. Custodiam la usa en el backend para verificar los tokens emitidos por Keycloak contra el JWKS publicado.

pytest

Framework de testing más usado en el ecosistema Python. Sintaxis declarativa, fixtures y plugins ricos. Es el runner de tests de custodiam-api.

Resend

Servicio SaaS de envío transaccional de correo, con SMTP relay y API HTTP. Custodiam lo elige sobre AWS SES y otros por simplicidad de onboarding y precio; ver ADR-021.

Riverpod

Framework de gestión de estado e inyección de dependencias para Flutter, sucesor moderno de Provider. Custodiam lo adopta como base para ViewModels y servicios; ver ADR-012.

Ruff

Linter y formatter de Python escrito en Rust, varias órdenes de magnitud más rápido que Flake8/Pylint. Custodiam lo usa como única herramienta de lint y formato en custodiam-api.

sops

Secrets OPerationS. Herramienta de Mozilla (hoy CNCF) para cifrar archivos estructurados (YAML, JSON, ENV) campo a campo con backends intercambiables (age, GPG, KMS). Custodiam la usa con age para versionar .env.sops; ver ADR-019.

sqflite

Paquete Flutter de SQLite para Android y iOS. Custodiam lo usa como almacenamiento local offline-first; ver ADR-005.

SQLAlchemy

ORM y toolkit SQL de referencia en Python, con dos APIs (Core y ORM). SQLModel se construye encima. Custodiam lo usa indirectamente vía SQLModel.

SQLModel

Capa de modelos que combina SQLAlchemy y Pydantic en una sola declaración. Custodiam la adopta como ORM de custodiam-api para evitar duplicar modelo ORM y modelo de validación; ver ADR-002.

url_launcher

Paquete Flutter para abrir URLs externas (navegador, app de correo, teléfono) desde la app. Custodiam lo usa en el flujo web de OAuth para abrir la pantalla de login del IdP en pestaña nueva o _self.

uv

Toolchain de empaquetado y entornos virtuales para Python escrita en Rust por Astral. Sustituye pip + venv + pip-tools + pipx con un único binario muy rápido. Adoptada como toolchain canónica de custodiam-api por ADR-026.


Conceptos del proyecto

anonimización Art. 17

Operación que pisa los campos PII de una fila de voluntario con valores neutros y conserva su keycloak_id y audit_log, cumpliendo el derecho de supresión del Art. 17 RGPD sin perder integridad referencial. Se distingue del soft delete (que solo marca como borrado).

Mecanismo de Android para vincular un dominio HTTPS a una app de forma que abrir la URL desde un navegador o cliente de correo arranque directamente la app (verificación de propiedad por assetlinks.json). Equivalente Android de los Universal Links de iOS; ver ADR-011.

AppPermissionGate

Widget Flutter que envuelve cualquier afordancia del UI condicionada a un permiso. Si el CurrentUser no tiene el Permission requerido, devuelve SizedBox.shrink() (oculta) o un AppEmptyState con copy "Sin acceso". Patrón espejado en backend (require_permission()). Documentado en ADR-013.

AppStartup

Caso de uso que ejecuta toda la lógica de arranque de la app (carga de configuración, restauración de sesión, comprobación de versión) antes de decidir a qué ruta navegar. Convive con SplashPage para ofrecer feedback visual durante el proceso; ver ADR-017.

Authorization Code

Tipo de concesión (grant) de OAuth 2.0 en el que el cliente intercambia un código de autorización corto por un access token. Es el grant recomendado para clientes con UI (móvil, web) y el único que Custodiam acepta; ver ADR-010.

AuthService

Servicio Dart de la app que coordina el flujo OAuth 2.0 contra Keycloak (login, refresh, logout) y expone el estado de sesión al resto de la app vía Riverpod. Tiene implementaciones distintas para móvil y web; ver ADR-023.

audit_log

Tabla del backend que registra eventos de auditoría (crear/editar/borrar voluntario, cambio de rol, anonimización, login fallido). Cumple obligación RGPD y de trazabilidad operativa. Documentado en arquitectura.

Clean Architecture

Aproximación arquitectónica con capas concéntricas (entidades, casos de uso, adaptadores, frameworks) donde las dependencias siempre apuntan hacia el centro. Custodiam la aplica de forma estricta en custodiam-app; ver arquitectura.

client scope

Concepto de Keycloak: conjunto de roles, claims y protocolos mappers que se pueden asignar a un cliente OIDC. Custodiam usa scopes distintos para el cliente web y el móvil; ver guía de configuración de Keycloak.

code_verifier

Cadena aleatoria secreta que el cliente OAuth genera al iniciar un flujo PKCE y envía al servidor en el intercambio del código. Junto con code_challenge (su hash SHA-256), demuestra que quien canjea el código es quien inició el flujo; ver ADR-010.

custom scheme

Esquema de URL no estándar (p. ej. com.custodiam.app://callback) que una app registra en el sistema operativo para recibir deep links. Alternativa a App Links / Universal Links cuando no se quiere configurar verificación por dominio; ver ADR-011.

Genéricamente, cualquier URL que abre una vista concreta dentro de una app móvil. Bajo este paraguas caben App Links, Universal Links y custom schemes; ver ADR-011.

EnvConfig

Clase Dart que centraliza la lectura de variables de entorno inyectadas en build time con --dart-define. Evita strings hardcoded dispersos y permite cambiar el endpoint del backend/IdP sin recompilar. Documentado en ADR-015.

geocodificación inversa

Traducción de una coordenada (latitud, longitud) a una dirección postal legible. Custodiam la usa al elegir la ubicación de un servicio en el mapa, para sugerir la dirección del punto marcado; el geocodificador es nativo del sistema operativo en móvil y Nominatim en web (ver ADR-030).

mapper

Concepto de Keycloak: regla que transforma datos de un usuario en claims del token. Custodiam configura mappers para incluir los roles del realm en el access_token que verifica el backend; ver guía de configuración de Keycloak.

Permission enum

Catálogo cerrado de permisos canónicos del dominio (voluntarios.crear, servicios.editar, etc.). Reside en el backend y se espeja literal en el frontend para garantizar el lockstep; ver ADR-013.

polyrepo

Estructura de proyecto donde cada componente vive en su propio repositorio Git, en contraste con monorepo. Custodiam adopta polyrepo con cuatro repos (custodiam-app, custodiam-api, custodiam-infra, custodiam-book); ver ADR-001.

RBAC lockstep

Disciplina por la que cualquier cambio en el catálogo de permisos debe aplicarse de forma síncrona en backend y frontend en el mismo PR, manteniendo ambos espejos de la misma matriz. Documentado en ADR-013.

realm

Concepto de Keycloak: contenedor lógico aislado con sus propios usuarios, roles, clientes y políticas. Custodiam usa dos realms distintos (master para administración de Keycloak, custodiam para los usuarios de la app); ver la página de usuarios de prueba.

Result

Tipo sellado del frontend que representa o bien un valor de éxito (Success<T>) o bien una Failure tipada. Sustituye al manejo de excepciones para flujos previsibles (red, validación, autenticación); ver ADR-014.

sessionStorage

Almacenamiento por pestaña del navegador (se borra al cerrarla). Custodiam lo usa en web para guardar el code_verifier mientras dura el redirect del flujo OAuth, evitando exponerlo en localStorage; ver ADR-023.

soft delete

Borrado lógico: la fila no se elimina físicamente sino que se marca con un campo deleted_at. Custodiam lo usa para "dar de baja" un voluntario manteniendo histórico. Distinto de la anonimización Art. 17, que pisa los datos personales.

SplashPage

Pantalla inicial de la app Flutter que se muestra durante el arranque mientras se ejecuta el caso de uso AppStartup. Documentada en ADR-017.

Mecanismo de iOS análogo a los App Links de Android: vincula un dominio HTTPS a una app verificando la propiedad mediante un archivo apple-app-site-association. Si la app está instalada, abre directamente; si no, abre el navegador como fallback. Ver ADR-011.

ValueKey

Identificador estable que se asigna a un widget de Flutter para que los tests lo localicen de forma fiable con find.byKey(...), en lugar de depender del tipo o del texto visible. En Custodiam todas las ValueKey estables viven en una única clase K (lib/app/test_keys.dart), compartida entre las pantallas y los tests. Ver ADR-028.


Alternativas evaluadas y descartadas

Estas herramientas no son parte del stack actual

Esta sección lista herramientas que aparecen mencionadas en los ADRs como alternativas evaluadas y finalmente no elegidas. Se incluyen para que el lector entienda por qué se descartaron, pero no se usan en Custodiam.

Auth0

Plataforma SaaS de Identity-as-a-Service. Descartada en ADR-010 en favor de Keycloak autoalojado, por compatibilidad con AGPL y para evitar lock-in y costes por usuario activo.

BLoC

Patrón de gestión de estado basado en streams para Flutter. Descartado en ADR-012 frente a Riverpod por boilerplate más alto y curva de aprendizaje menos cómoda para el equipo.

Caddy

Servidor web moderno con HTTPS automático integrado. Descartado en ADR-006 en favor de Nginx Alpine por ecosistema mucho más maduro para servir bundles SPA/PWA.

Casbin

Librería multi-lenguaje de autorización con soporte de RBAC, ABAC y políticas custom. Descartada en ADR-013 frente a un enum estático por sobreingeniería para un catálogo pequeño y estable.

Cedar

Lenguaje de políticas de AWS para autorización fine-grained. Descartado en ADR-013 por el mismo motivo que Casbin: demasiada maquinaria para un RBAC clásico.

Chopper

Cliente HTTP con generación de código para Flutter. Descartado en ADR-004 en favor del paquete oficial http por no necesitar build_runner en el cliente y minimizar generación de código.

Cypress

Framework de E2E para web. Descartado en ADR-024 por no soportar móvil nativo (Android/iOS) y por requerir mantener dos frameworks distintos.

Dio

Cliente HTTP popular para Flutter con interceptors, cancelación y adapters. Descartado en ADR-004 en favor del paquete oficial http por mantener el stack deliberadamente minimalista.

drift

ORM moderno y tipado para SQLite en Flutter con generación de código. Descartado en ADR-005 en favor de sqflite puro por evitar build_runner y mantener queries SQL explícitas.

Flyway

Herramienta de migraciones de BD basada en JVM (Java). Descartada en ADR-003 frente a Alembic por evitar el runtime Java en el contenedor de migraciones y mantener el stack en Python.

GetIt

Service locator simple para Flutter. Descartado en ADR-012 frente a Riverpod por no ofrecer gestión reactiva de estado además de DI.

GitBook

Plataforma SaaS de documentación con editor WYSIWYG. Descartada en ADR-027 por lock-in al editor propietario y dificultad para versionar el contenido en Git plano.

Hatch

Toolchain Python moderno de PyPA (gestor de proyectos, entornos y builds). Descartado en ADR-026 frente a uv por no integrar resolución de dependencias tan rápida ni envoltura del intérprete.

hive

Base de datos NoSQL ligera para Flutter, escrita en Dart puro. Descartada en ADR-005 frente a SQLite por no soportar queries relacionales ni migraciones de esquema robustas.

isar

Base de datos NoSQL embebida para Flutter, sucesora moderna de hive. Descartada en ADR-005 por el mismo motivo: modelo NoSQL no encaja con queries relacionales del dominio.

Liquibase

Herramienta de migraciones de BD multi-formato (XML, YAML, SQL). Descartada en ADR-003 frente a Alembic por preferir migraciones declaradas en Python (mismo lenguaje que el backend).

Maestro

Framework de E2E para móvil con sintaxis declarativa en YAML. Descartado en ADR-024 por menos expresivo que un test programado en Dart y por no integrarse nativamente con la app Flutter.

mdBook

Generador de sitios estáticos para libros técnicos escrito en Rust. Descartado en ADR-027 frente a MkDocs+Material por ecosistema de plugins más limitado.

OPA

Open Policy Agent. Motor de políticas de propósito general (CNCF). Descartado en ADR-013 por la misma razón que Casbin: complejidad excesiva para un RBAC clásico.

Ory

Suite de productos (Kratos, Hydra, Keto, Oathkeeper) para identidad y autorización. Descartada en ADR-010 frente a Keycloak por preferir una solución más integrada y mejor documentada para el caso de uso de Custodiam.

PDM

Toolchain Python alternativo a Poetry, basado en estándares PEP. Descartado en ADR-026 frente a uv por velocidad de resolución y por no incluir gestión del intérprete.

Pipenv

Toolchain Python que combina pip y virtualenv en un solo CLI. Descartado en ADR-026 por velocidad muy inferior a uv y por ritmo de mantenimiento irregular.

Poetry

Toolchain Python con manejo de dependencias, builds y publicación. Descartado en ADR-026 frente a uv por velocidad y por sintaxis propia de pyproject.toml no perfectamente alineada con PEPs recientes.

Provider

Librería de gestión de estado anterior y base sobre la que se construyó Riverpod. Descartada en ADR-012 porque Riverpod la sustituye con menos dependencia del árbol de widgets y mejor ergonomía.

Rye

Toolchain Python anterior de Astral, predecesor parcial de uv. Descartada en ADR-026 porque la propia Astral recomienda migrar a uv.

Sphinx

Generador de documentación clásico del ecosistema Python, basado en reStructuredText. Descartado en ADR-027 frente a MkDocs por sintaxis RST menos cómoda que Markdown para el flujo del equipo.

Vercel

Plataforma de despliegue serverless con foco en frontend. Descartada en ADR-006 frente a Nginx Alpine autoalojado para evitar dependencia de plataforma propietaria al servir el bundle de Flutter Web.