Skip to content

Architecture Decision Records (ADR)

Un ADR registra una decisione architetturale significativa: il contesto, la scelta e le conseguenze. Serve a ricordare perché le cose stanno così, evitando di rimettere in discussione decisioni già ponderate (o di cambiarle senza accorgersi del costo).

Quando scrivere un ADR

  • Si introduce una nuova dipendenza o tecnologia.
  • Si sceglie un pattern strutturale (es. modalità di idempotenza, formato di scambio).
  • Si cambia una convenzione che vale per tutto il repo.
  • Si abbandona/sostituisce una decisione precedente.

Come

  1. Copia il template qui sotto in NNNN-titolo-breve.md (numero progressivo).
  2. Compila contesto, decisione, conseguenze.
  3. Apri PR: l'ADR si discute e si approva come il codice.
  4. Quando una decisione viene superata, non cancellarla: imposta stato Sostituita da [NNNN].

Indice

N.TitoloStato
0001Registrare le decisioni architetturaliAccettata
0002ETL code-first in TypeScript (vs Talend)Accettata
0003Connettore Postgres basato su pg + pg-cursorAccettata
0004Connettore SQL Server basato su mssql (tedious)Accettata
0005Distribuzione come immagine container con CLIAccettata
0006RunReport come prodotto; servizio stateless/agnosticoAccettata
0007File connector: storage × codec (componibili)Accettata
0008Codec CSV (csv-parse / csv-stringify)Accettata
0009Storage S3 (AWS SDK v3 + lib-storage)Accettata
0010Codec Excel/XLSX (exceljs)Accettata
0011Storage SFTP (ssh2-sftp-client)Accettata
0012Codec XML (fast-xml-parser)Accettata
0013Codec Parquet (@dsnp/parquetjs)Accettata
0014Connettore dedicato per i file dei workspace NoevaAccettata
0015Storage FTP/FTPS basato su basic-ftpAccettata
0016Pipeline a grafo (DAG): nodi/edge validati a runtimeAccettata
0017Worker daemon su processes (@my-ginkgo/noeva-shared)Superata da 0019
0018Report sintetico e progress per nodo via writeReportAccettata
0019Worker daemon su processes: polling via noeva-server-api, non Supabase direttoAccettata
0020Descriptor del connettore per la visualizzazione dei nodi in UIAccettata
0021Worker daemon multi-workspace: un'istanza serve N workspace via N pollerAccettata
0022Workspace registry: i connettori Noeva possono puntare solo a workspace configuratiAccettata
0023Deploy della UI come immagine nginx su ECR, insieme al workerSuperata da 0025
0024Server HTTP dei grafi delle pipeline (etl serve)Accettata
0025noeva-etl-ui come app desktop Tauri v2 (non più web-app nginx)Accettata
0026Colonne dei nodi del DAG via introspezione degli schemi Zod + propagazioneAccettata
0027Dead-letter visibile nella DAG (nodo sintetico + edge d'errore)Accettata
0028etl serve co-locato col worker (avvio unico)Accettata
0029Nodo try/catch: instradamento errori downstream su un branch di catchAccettata (rivista da 0031)
0030Registry istanze connettore: N istanze per tipo, via lista env + registry genericoAccettata
0031Guard try/catch: cattura per-record di default (N record per branch)Accettata
0032Sink proteggibili da un guard e isolabili per-record (path di fallback)Accettata
0033Payload dei nodi non isolabili sul ramo catch (lastConsumed)Accettata
0034Corpo del record fallito nel report, dietro opt-in esplicito per guardAccettata
0035Identità di record e lineage derivedFrom, con snapshot al guardAccettata
0036Rimozione del DSL lineare: il grafo è l'unico modo di costruire un processoAccettata
0037Parallelismo reale e osservabile: onNodeStart e join non serializzanteAccettata
0038Il report di una run fallita conserva topologia e conteggi parzialiAccettata
0039Storico locale delle run: il core resta stateless, persiste il chiamanteAccettata
0040Eventi di run live via SSE dal server locale, non via pollingAccettata
0041Nodo lookup: query SQL in sola lettura in mezzo al grafoAccettata
0042Sorgente a cartella e sink multi-file su NoevaAccettata
0043Sito di documentazione generato da docs/ con VitePressAccettata
0044La documentazione vive nell'app desktop, al posto della guida in-appAccettata
0045La variante pubblica del sito si pubblica su Cloudflare WorkersAccettata

Template

markdown
# NNNN. Titolo della decisione

- **Stato:** Proposta | Accettata | Sostituita da [NNNN]
- **Data:** YYYY-MM-DD
- **Decisori:** nomi

## Contesto

Qual è il problema o la forza in gioco? Quali vincoli?

## Decisione

Cosa abbiamo deciso di fare, in modo netto.

## Alternative considerate

- Opzione A — perché scartata.
- Opzione B — perché scartata.

## Conseguenze

- Positive: ...
- Negative / costi: ...
- Cosa diventa più difficile da cambiare in futuro.

Noeva è un marchio registrato di 4D S.R.L.