# Propuesta de arquitectura: reservas idempotentes y un outbox local

Una propuesta verificable con Python y SQLite: conserva una sola reserva, rechaza claves conflictivas y revierte una escritura incompleta.

Python 3.9 o superior con sqlite3 de la biblioteca estándar. Descarga main.py. Se usa un archivo temporal que se elimina al terminar.

```sh
python main.py
```

Salida esperada / Expected output:

```text
OK: replay persisted once; conflicting request rejected
```

## Ejercicio

Escribe un ADR con contexto, alternativas, decisión, consecuencias y criterios de rechazo. Añade un test con dos conexiones que compitan por la misma clave.

## English

Architecture proposal: idempotent reservations and a local outbox

A verifiable Python and SQLite proposal: persist one reservation, reject conflicting keys and roll back an incomplete write.

Python 3.9 or newer with the standard-library sqlite3 module. Download main.py. Uses a temporary file deleted when the example finishes.

Write an ADR covering context, alternatives, decision, consequences and rejection criteria. Add a test with two connections competing for the same key.

## Scope / Alcance

Educational local example with assertions. No production readiness or performance claim. / Ejemplo local educativo con aserciones; no se afirma preparación para producción ni rendimiento.

## Sources

- https://docs.python.org/3/library/sqlite3.html
- https://www.sqlite.org/lang_UPSERT.html
