Documentazione da codebase 📖
La documentazione è la funzione che tutti vorrebbero e nessuno vuole scrivere. Un agente di coding può farlo al posto tuo — ma con una condizione: devi verificare ciò che genera. Una documentazione sbagliata è peggio di nessuna documentazione, perché qualcuno la leggerà e la crederà. E quando la crederà, prenderà decisioni basate su informazioni false.
Generare documentazione è facile. Generare documentazione corretta richiede lo stesso rigore di generare codice.
Quando usare l’agente per questo caso 🎯
- README iniziale — descrizione del progetto, installazione, usage, contribuzione.
- API reference — documentazione delle interfacce esposte, parametri, tipi di ritorno.
- Changelog automatico — riepilogo delle modifiche tra versioni.
- ADR (Architecture Decision Record) — documentazione delle decisioni architetturali e del loro contesto.
- Guide di contribuzione — come contribuire, standard di codifica, processo di review.
Quando NON usare l’agente ⛔
- Il codice è troppo complesso da comprendere — se l’agente non capisce il codice, la documentazione sarà un riassunto di illusioni.
- La documentazione riguarda processi non codificati — workflow manuali, decisioni organizzative, policy aziendali. L’agente non può documentare ciò che non esiste nel codice.
- Devi documentare API instabili — prima stabilizza l’API, poi documentala.
Prompt di apertura 📝
“Genera [tipo di documento] per [modulo/package]. Formato: [README / API reference / changelog / ADR]. Pubblico: [sviluppatori / utenti]. Vincoli: [lingua, stile, doc-as-code]. Cita il codice sorgente come riferimento.”
Esempi concreti:
“Genera un README.md per il modulo
src/auth/. Pubblico: sviluppatori interni. Formato: installazione, usage, API pubblica. Vincoli: lingua inglese, stile diretto, esempi di codice funzionanti.”“Genera un ADR per la scelta di PostgreSQL come database. Contesto: [descrizione]. Decisione: PostgreSQL. Conseguenze: [elenco]. Formato: standard ADR con sezioni Context/Decision/Consequences.”
Setup del contesto 🔧
- Indica i file sorgente — l’agente deve leggere il codice per documentarlo. Non inventare: estrarre.
- Definisci il pubblico — sviluppatori interni? utenti finali? devops? Il livello di dettaglio cambia drasticamente.
- Specificare il formato — README, ADR, API reference, changelog. Ogni formato ha le sue convenzioni.
Ciclo di lavoro 💡
- Pianifica: definisci cosa documentare e in che formato.
- Estrai: l’agente legge il codice e genera la documentazione.
- Verifica coerenza: ogni affermazione deve essere verificabile contro il codice. Se l’agente scrive “l’endpoint accetta un parametro
iddi tipostring”, verifica che sia davvero così. - Aggiorna: la documentazione vive con il codice. Ogni modifica al codice deve aggiornare la doc corrispondente.
La verifica è il passaggio più importante. Un agente può inventare parametri, errori, comportamenti che non esistono. Sempre verificare sul codice reale.
Per la doc-as-code, mantieni la documentazione nel repository insieme al codice: versionata, revisionabile, parte del CI.
Pipeline doc-as-code 🔧
La generazione di documentazione non è un atto singolo: è un processo che va dalla scoperta del codice alla verifica di coerenza.
flowchart LR
A[Scan 🔍] --> B[Plan 📋]
B --> C[Generate ✍️]
C --> D[Verify ✅]
D --> |Drift detected| A
| Fase | Obiettivo | Meccanismo |
|---|---|---|
| Scan | Individuare cosa documentare | Tree-sitter AST, public API detection |
| Plan | Definire formato e pubblico | Template per audience (user vs dev) |
| Generate | Creare la documentazione | LLM + template strutturati |
| Verify | Verificare coerenza doc-codice | Drift detection, doctests, CI |
La fase di Verify è quella che separa la documentazione utile da quella dannosa. Usa tool di drift detection per intercettare quando codice e documentazione divergono.
Drift detection e verifica 📐
Il drift tra documentazione e codice è il nemico silenzioso della doc-as-code. I dati mostrano che:
- Nested README scoperte solo ~40% delle volte dagli agenti
- Documenti in directory speciali (
_docs/,docs/) scoperti <10% delle sessioni - 60-70% dei breaking changes passano la code review senza che la documentazione venga aggiornata
Tool di drift detection
| Tool | Tipo | Funzione |
|---|---|---|
| driftcheck | Pre-push hook | Confronta doc con codice prima del push |
| DriftGuard | TypeScript | Compila blocchi di codice nei .md per verifica |
| Spectral | API linting | Verifica coerenza OpenAPI con implementazione |
| Vale | Style linting | Verifica coerenza stilistica della documentazione |
Enforcement hierarchy
La verifica può operare su 3 livelli crescenti di rigidità:
- Advisory — l’agente segnala ma non blocca
- PreToolUse hook — blocca modifiche che rompono la coerenza doc-codice
- CI gate — il build fallisce se doc e codice divergono
Pattern sicuro: “Propose, don’t auto-merge” — mai aggiornare la documentazione direttamente. Genera sempre una PR che un umano revisiona.
ADR: la sezione più preziosa 📋
Gli Architecture Decision Record sono la documentazione più importante che un agente può generare. La sezione chiave è “Alternatives rejected”: documenta non solo cosa hai scelto, ma perché hai scartato le alternative. È la sezione più saltata e la più preziosa.
Y-statement format (compatto e agent-friendly):
“In the context of {situation}, facing {concern}, I decided {decision} to achieve {goal}, accepting {tradeoff}.”
L’ADR può diventare un constraint CI verificabile: anziché documento statico, diventa una regola che l’agente e la pipeline verificano ad ogni build.
Changelog automation 📦
Generare changelog manualmente è noioso e soggetto a errori. L’automazione combina Conventional Commits con AI polish.
Tool landscape
| Tool | Linguaggio | Approach | Note |
|---|---|---|---|
| release-please | Multi | Conventional Commits → PR | Google, maturo |
| git-cliff | Rust | Conventional Commits → markdown | Veloce, configurabile |
| changelogen | UnJS | Conventional Commits → markdown | Ecosistema Nuxt |
| commitizen | Python/Node | Interactive conventional commits | CLI interattivo |
| AutoChangelog | Python | AI polish su commit history | Novità |
| GitSaga | Claude | AI-powered changelog | Basato su Claude |
| Release Drafter | GitHub | Draft release da PR labels | GitHub Action |
Two-stage workflow
- Stage 1: Conventional Commits generano il changelog grezzo (release-please o git-cliff)
- Stage 2: AI polish per leggibilità e coerenza tono
Il changelog non è un dump di commit. È una comunicazione agli utenti. L’AI può trasformare “fix: resolve null pointer in auth handler” in “Fixed authentication crash when user has no profile”.
Criteri di accettazione ✅
- Ogni affermazione verificabile contro il codice sorgente.
- Nessuna API, parametro o comportamento inventato.
- Documentazione versionata con il codice (stesso repo, stesso branch).
- Formato corretto per il tipo scelto (README, ADR, ecc.).
Approfondimenti 📚
- Comprendere una codebase esistente — prima di documentare, capisci cosa c’è.
- Blog: Context engineering — come gestire il contesto per output coerenti.
- Docs: Generative AI per documentazione — tecniche avanzate di generazione documentale.