Capa de interoperabilidad · Prueba técnica de arquitectura

ADR-017: la configuración de cada tópico vive en el contrato AsyncAPI

Aceptado el 10/11/2026 por Andrés.

Contexto

El contrato contracts/asyncapi/eventos.v1.yaml declara los canales, los mensajes y sus esquemas, pero no las propiedades operativas de cada tópico: particiones, réplicas, política de limpieza (compactado o por tiempo) y retención. Hoy esos valores viven en una tabla de docs/to-be/06-eventos.md y el carril f3-plantillas los transcribió a mano en scripts/topics-plan.js para crear los tópicos en local.

Eso deja dos fuentes que pueden divergir. Además el contrato no declara:

Un tópico mal configurado no se nota en una revisión de código y sí en producción: un tópico de estado sin compactar pierde la capacidad de reconstruir Redis (05-modelo-de-lectura.md), y una DLQ que nadie declaró no existe cuando hace falta.

Opciones

Opción Fuente de verdad A favor En contra
A. Bindings de Kafka en el AsyncAPI El contrato Una sola fuente para qué viaja y cómo se guarda; la CLI oficial lo valida; consumidores y revisores lo ven junto al evento Mezcla datos operativos con el contrato; las diferencias por ambiente se resuelven fuera
B. Dejarlo como hoy Tabla en 06-eventos.md más script Sin trabajo Dos fuentes; nada valida que coincidan
C. Archivo propio, por ejemplo topics.yaml Un tercer formato Separado del contrato Una fuente más, sin validador estándar
D. OpenTofu como fuente El proveedor de Confluent en infra/tofu Es lo que crea los tópicos en la nube (F7) No sirve en local; el consumidor no lo ve; ata el contrato a un proveedor
E. Recursos de un operador de Kafka en Kubernetes Manifiestos del operador Declarativo F7 usa Confluent Cloud, no un operador; no sirve en compose

Decisión

Opción A, con los bindings de Kafka de AsyncAPI en su versión 0.5.0 (la vigente, verificada el 10/11/2026 en el repositorio oficial asyncapi/bindings):

Por qué el contrato y no otra fuente: CLAUDE.md pone los contratos primero, y el AsyncAPI ya es lo que leen productores y consumidores. Si la retención o la compactación de un tópico cambia lo que un consumidor puede hacer (releer desde cero, por ejemplo), es parte del contrato, no un detalle de infraestructura.

Verificación

Qué se sacrifica