Prevenzione del Debito Tecnico Dipendenziale e Gestione delle Evoluzioni di LangChain
Progetto: FIRE Versione: 1.0 Data: 2025-11-11 Responsabile: Team di Sviluppo Stato: Approvato
1. Premessa
Durante la stabilizzazione dell’ambiente Python del progetto FIRE è emerso un debito tecnico critico: l’applicazione funzionava solo in un ambiente virtuale “magico”, non documentato e non riproducibile.
La causa principale è stata l’assenza di un file requirements.txt bloccato e l’impatto di una breaking-change dell’ecosistema LangChain (0.1 → 0.2 → 1.0) che ha:
spostato i moduli interni (langchain.chains → langchain.chains.combine_documents, ecc.)
introdotto vincoli di versione incrociata tra i sotto-pacchetti (langchain-openai, langchain-core, …)
reso obsoleto il vecchio helper load_qa_chain in favore di create_stuff_documents_chain / LCEL
Il presente documento definisce le regole, i controlli e i processi per evitare che situazioni analoghe si ripetano.
2. Obiettivi
a. Riproducibilità al 100 %: un nuovo dev deve clonare il repo e lanciare un solo comando per ottenere l’ambiente identico.
b. Upgrade controllati: ogni aggiornamento di dipendenza deve essere esplicito, testato, reversibile.
c. No-Sorprese: breaking-change, deprecations, cambi di nome modulo devono essere anticipati e documentati.
3. Strumenti e Flussi Obbligatori
Step
Tool
Comando / File
Descrizione
1
pip-tools
requirements.in
Unica fonte verità per le dipendenze di primo livello.
2
pip-tools
pip-compile
Genera requirements.txt bloccato con hash SHA.
3
pip-tools
pip-sync
Sincronizza l’ambiente locale con il lock (rimuove pacchetti orfani).
4
pre-commit
.pre-commit-config.yaml
Hook che blocca il commit se requirements.txt non è allineato a requirements.in.
5
CI
GitHub Actions / GitLab CI
Job che esegue pip-compile --generate-hashes e verifica che il lock sia aggiornato.
6
Renovate / Dependabot
renovate.json
PR automatiche per patch/minor; major bloccate e richiedono review umana.
4. Regole di Scrittura del requirements.in
Ogni dipendenza diretta deve essere elencata con upper-bound compatibile con la major corrente:
Numero di dipendenze outdated (minor / major) → threshold ≤ 5 minor, 0 major.
Tempo di setup ambiente da zero → target < 3 min.
Test suite verde dopo ogni pip-compile --upgrade → 100 % pass.
9. Ruoli e Responsabilità
Ruolo
Responsabilità
Tech Lead
approva ogni upgrade major; firma il documento di impatto.
DevOps
mantiene CI, pip-tools, pre-commit; aggiorna la dashboard metriche.
Ogni Developer
segue il flusso obbligatorio; non committa mai dipendenze “sciolte”.
10. Revisione e Scadenza
Il presente documento viene riveduto ogni 6 mesi o in occasione di major upgrade dell’ecosistema principale.
Prossima scadenza: 2025-05-11
Con l’adozione di questo documento il team FIRE garantisce che il debito tecnico dipendenziale non si ripeterà e che ogni evoluzione futura (LangChain 0.3, 1.x, PyTorch 3.x, ecc.) sarà gestita in modo controllato, tracciato e reversibile.