- Add docs/README.md as the index of all documentation. - Split the 52 DEC entries of decisioni-e-limiti.md into docs/adr/ADR-NN files (same numbers), add ADR-53 (audit log), TEMPLATE.md and an ADR index with a feature -> ADR table. - Rename decisioni-e-limiti.md to limiti-noti.md (LIM only) and rewrite all DEC-nn references as links to the ADRs. - Document the docs-first / SSOT / ADR rules in processo-di-modifica.md and map the docs in CLAUDE.md and README.md. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
1.2 KiB
1.2 KiB
ADR-13 — Un solo processo, un solo file SQLite
- Stato: Accettata
- Area: Configurazione e ambiente
- Fonte di verità per: la scelta di progetto descritta qui sotto; i requisiti (
PREFISSO-NN) che la attuano stanno nei documenti di dominio, indicati nelle Conseguenze.
Decisione
Un solo processo, un solo file SQLite (modalità WAL con
busy_timeout, synchronous=FULL, BEGIN IMMEDIATE per ogni transazione
che sposta denaro, vedi architettura.md, B-88).
Canale SSE, blocchi per-utente, limitatori di tentativi e cache sono in
memoria.
- Motivazione: semplicità a scala di ~100 utenti concorrenti.
- Alternative scartate: Redis o un database con lock condivisi, da non introdurre in via speculativa.
- Conseguenze: nessuna distribuzione su più worker ([LIM-18]). L'unico invariante che non dipende dal processo singolo è «al più un round attivo», garantito da un indice (ADR-22).
Codice: app/db/base.py:_register_sqlite_pragmas · app/db/base.py:begin_immediate · app/tx/locks.py:UserLocks · app/rounds/events.py:RoundEventBroadcaster ·
Test: tests/unit/test_db_base.py · tests/unit/test_sqlite_transactions.py