ff
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# {{TITOLO}}
|
||||
|
||||
Stato: **da approvare** · Versione 0.1 · {{DATA}} · Prefisso task: **T-{{PREFISSO}}**
|
||||
|
||||
**Decisioni di riferimento:** <!-- `D-…` o «nessuna» -->
|
||||
|
||||
---
|
||||
|
||||
## 1. Contesto e requisito
|
||||
|
||||
<!-- DA COMPILARE: perché serve, chi lo ha chiesto e quando, cosa deve ottenere l'utente. -->
|
||||
|
||||
## 2. Requisiti
|
||||
|
||||
| ID | Requisito | Origine |
|
||||
|---|---|---|
|
||||
| <!-- REQ-AREA-01 --> | <!-- «Il sistema …», limiti numerici espliciti --> | <!-- committente, data --> |
|
||||
|
||||
## 3. Opzioni valutate e raccomandazione
|
||||
|
||||
<!-- Solo se c'è una scelta da fare. Ogni opzione con pro, contro, costo. La scelta finale
|
||||
diventa una D-xxx in DECISIONS.md. -->
|
||||
|
||||
## 4. Regole
|
||||
|
||||
<!-- DA COMPILARE in forma normativa. -->
|
||||
|
||||
## 5. Architettura del modulo
|
||||
|
||||
<!-- DA COMPILARE: servizi, code, modelli dati, storage toccati. -->
|
||||
|
||||
## 6. Contratto API
|
||||
|
||||
| Metodo | Percorso | Ruolo minimo | Esiti |
|
||||
|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | 200 · 404 · 422 |
|
||||
|
||||
## 7. Errori e casi limite
|
||||
|
||||
| Caso | Comportamento |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
## 8. Criteri di accettazione
|
||||
|
||||
| # | Criterio |
|
||||
|:-:|---|
|
||||
| {{PREFISSO}}1 | <!-- «Dato …, quando …, allora …» --> |
|
||||
|
||||
## 9. Task
|
||||
|
||||
| ID | Attività | Prio | Dipende da |
|
||||
|----|----------|------|------------|
|
||||
| T-{{PREFISSO}}01 | <!-- DA COMPILARE --> | P1 | — |
|
||||
|
||||
## 10. Domande ancora aperte
|
||||
|
||||
<!-- Finché questa sezione non è vuota il documento non può essere approvato. -->
|
||||
|
||||
- <!-- DA COMPILARE o «nessuna» -->
|
||||
@@ -0,0 +1,30 @@
|
||||
# API — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Il contratto si scrive **prima** del codice. Se esiste un `openapi.yaml`, quello è la fonte di verità.
|
||||
|
||||
## Convenzioni
|
||||
|
||||
| Aspetto | Regola |
|
||||
|---|---|
|
||||
| Prefisso | `/api/v1` |
|
||||
| Formato | JSON, UTF-8, date ISO 8601 UTC |
|
||||
| Autenticazione | <!-- DA COMPILARE --> |
|
||||
| Errori | `{ "error": { "code", "message", "details" } }` |
|
||||
|
||||
## Endpoint — Stato di servizio
|
||||
|
||||
### `GET /health` *(pubblico)*
|
||||
|
||||
Risponde `200 {"status": "ok"}`.
|
||||
|
||||
## Endpoint previsti
|
||||
|
||||
<!-- Un gruppo per modulo. Stato nel titolo: *(previsto)* · ✅ *implementato (T-xxx)*. -->
|
||||
|
||||
### <!-- Gruppo --> — *(previsto)*
|
||||
|
||||
| Metodo | Percorso | Ruolo minimo | Descrizione | Task |
|
||||
|---|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | | |
|
||||
@@ -0,0 +1,45 @@
|
||||
# ARCHITECTURE — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
## Struttura del repository
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE -->
|
||||
```
|
||||
|
||||
## 1. Vista d'insieme
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: schema ASCII dei servizi -->
|
||||
```
|
||||
|
||||
## 2. Servizi/componenti
|
||||
|
||||
| Componente | Tecnologia | Responsabilità |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 3. Flusso principale
|
||||
|
||||
<!-- DA COMPILARE: passo per passo, con code e dati scambiati. -->
|
||||
|
||||
## 4. Macchina a stati
|
||||
|
||||
<!-- DA COMPILARE: stati, transizioni ammesse (ogni altra è rifiutata), invarianti — o «non applicabile». -->
|
||||
|
||||
## 5. Code e lavori asincroni
|
||||
|
||||
<!-- DA COMPILARE o «non applicabile». -->
|
||||
|
||||
## 6. Storage
|
||||
|
||||
<!-- DA COMPILARE: database, file/oggetti, convenzioni di nome. -->
|
||||
|
||||
## 7. Sicurezza e multi-tenancy
|
||||
|
||||
<!-- DA COMPILARE: autenticazione, ruoli, isolamento, segreti (mai nel repository). -->
|
||||
|
||||
## 8. Aperto / da decidere
|
||||
|
||||
- <!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,10 @@
|
||||
# CHANGELOG — {{PROGETTO}}
|
||||
|
||||
Formato: ogni voce riporta **data · componente · modifica · motivo**. Le voci più recenti in alto.
|
||||
|
||||
---
|
||||
|
||||
## {{DATA}} — Avvio della documentazione
|
||||
|
||||
Creata la documentazione di progetto con metodo spec-driven: PROJECT_MEMORY, ARCHITECTURE, API,
|
||||
DATABASE, DECISIONS (D-001…D-003), TODO.
|
||||
@@ -0,0 +1,18 @@
|
||||
# DATABASE — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Motore: <!-- DA COMPILARE --> · Migrazioni: <!-- DA COMPILARE: strumento e numerazione -->
|
||||
|
||||
Regole: date sempre UTC · una migrazione per modifica, mai riscrivere una migrazione applicata ·
|
||||
nessun file binario nel database.
|
||||
|
||||
## A. <!-- Gruppo di tabelle -->
|
||||
|
||||
### `<!-- tabella -->` *(migrazione `0001`)*
|
||||
|
||||
| Colonna | Tipo | Null | Note |
|
||||
|---|---|:-:|---|
|
||||
| `id` | | no | PK |
|
||||
|
||||
Indici: <!-- DA COMPILARE --> · Vincoli: <!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,28 @@
|
||||
# DECISIONS — {{PROGETTO}} (Architecture Decision Records)
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Formato: ogni decisione ha contesto, opzioni valutate, scelta e motivazione.
|
||||
Stato: `accepted` · `proposed` · `superseded by D-xxx` · `rejected`.
|
||||
Le decisioni non si cancellano: si superano.
|
||||
|
||||
---
|
||||
|
||||
## D-001 — Stack tecnologico
|
||||
- **Stato:** proposed
|
||||
- **Contesto:** <!-- DA COMPILARE -->
|
||||
- **Opzioni:** <!-- (a) …; (b) … -->
|
||||
- **Scelta:** <!-- DA COMPILARE -->
|
||||
- **Motivazione:** <!-- DA COMPILARE -->
|
||||
|
||||
## D-002 — Sviluppo spec-driven
|
||||
- **Stato:** accepted
|
||||
- **Contesto:** le regole di business scritte solo nel codice emergono dal debugging invece che dalla specifica.
|
||||
- **Opzioni:** (a) documentazione a valle del codice; (b) documento di modulo approvato prima del codice.
|
||||
- **Scelta:** (b). Nessun codice senza un documento di modulo in stato *Approvato*, con regole, contratto, criteri di accettazione e task.
|
||||
- **Motivazione:** le regole diventano esplicite e verificabili prima di costare un difetto.
|
||||
|
||||
## D-003 — La documentazione vive nel repository
|
||||
- **Stato:** accepted
|
||||
- **Scelta:** `docs/` nel repository del codice, aggiornata nella stessa modifica del codice che la riguarda.
|
||||
- **Motivazione:** documenti e codice non divergono; la revisione del codice è anche revisione dei documenti.
|
||||
@@ -0,0 +1,12 @@
|
||||
# DEVELOPMENT_LOG — {{PROGETTO}}
|
||||
|
||||
Diario operativo per sessione: cosa fatto, problemi, perché si è deciso così, prossime azioni.
|
||||
Le voci più recenti in alto. Le voci non si cancellano.
|
||||
|
||||
---
|
||||
|
||||
## {{DATA}} — Avvio della documentazione
|
||||
|
||||
Creato lo scheletro della documentazione spec-driven.
|
||||
|
||||
**Prossime azioni:** completare D-001 (stack), scrivere il primo documento di modulo.
|
||||
@@ -0,0 +1,68 @@
|
||||
# PROJECT_MEMORY — {{PROGETTO}}
|
||||
|
||||
> Memoria permanente del progetto. Leggere **sempre** questo file (e l'intera cartella `docs/`)
|
||||
> prima di scrivere codice. Aggiornarlo dopo ogni modifica significativa.
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Sessione: **avvio della documentazione**
|
||||
|
||||
---
|
||||
|
||||
## 1. Cos'è {{PROGETTO}}
|
||||
|
||||
<!-- DA COMPILARE: cosa fa, per chi, flusso ad alto livello in 4-6 passi, valore. -->
|
||||
|
||||
---
|
||||
|
||||
## 2. Architettura attuale (sintesi)
|
||||
|
||||
> Dettaglio completo in [`ARCHITECTURE.md`](./ARCHITECTURE.md).
|
||||
|
||||
- <!-- DA COMPILARE: un punto per servizio/componente, con la tecnologia -->
|
||||
|
||||
---
|
||||
|
||||
## 3. Decisioni tecniche prese
|
||||
|
||||
> Registro completo con alternative e motivazioni in [`DECISIONS.md`](./DECISIONS.md).
|
||||
|
||||
- D-001 Stack tecnologico *(proposed)*
|
||||
- D-002 Sviluppo spec-driven: nessun codice senza un documento di modulo approvato
|
||||
- D-003 La documentazione vive nel repository e si aggiorna con il codice
|
||||
|
||||
---
|
||||
|
||||
## 4. Moduli e documenti di specifica
|
||||
|
||||
| Modulo | Documento | Stato |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | <!-- [`NOME_MODULE.md`](./NOME_MODULE.md) --> | da approvare |
|
||||
|
||||
---
|
||||
|
||||
## 5. Componenti GIÀ creati
|
||||
|
||||
- [ ] <!-- DA COMPILARE -->
|
||||
|
||||
## 6. Componenti ANCORA da creare
|
||||
|
||||
- [ ] <!-- DA COMPILARE -->
|
||||
|
||||
---
|
||||
|
||||
## 7. Vincoli importanti
|
||||
|
||||
<!-- Ciò che, se dimenticato, fa ripetere un errore. Ogni vincolo con il suo perché. -->
|
||||
|
||||
- <!-- DA COMPILARE -->
|
||||
|
||||
---
|
||||
|
||||
## 8. Come continuare (per la prossima sessione)
|
||||
|
||||
1. Leggere questo file, poi [`TODO.md`](./TODO.md) (P0 aperti per primi).
|
||||
2. Per il task scelto, leggere il documento di modulo e le decisioni citate.
|
||||
3. A fine lavoro: TODO, CHANGELOG, DEVELOPMENT_LOG e questo file.
|
||||
|
||||
---
|
||||
|
||||
<sub>Documentazione redatta con il metodo spec-driven di STS Lab Srl.</sub>
|
||||
@@ -0,0 +1,25 @@
|
||||
# TODO — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Legenda stato: `pending` · `in_progress` · `done` · `blocked`
|
||||
Priorità: **P0** (fondante/bloccante) · **P1** (core) · **P2** (importante) · **P3** (successivo)
|
||||
|
||||
**Regola:** un task entra in lavorazione solo se il suo documento di modulo è approvato (D-002).
|
||||
`done` solo con i test del criterio passanti.
|
||||
|
||||
**Numerazione:** `T-<lettera del modulo><nn>` (es. `T-S<nn>` per la sicurezza, `T-W<nn>` per WhatsApp);
|
||||
la lettera si fissa quando nasce il modulo e si annota qui sotto.
|
||||
|
||||
| Lettera | Modulo |
|
||||
|:-:|---|
|
||||
| <!-- S --> | <!-- Sicurezza & API --> |
|
||||
|
||||
---
|
||||
|
||||
## Documentazione ({{DATA}})
|
||||
|
||||
| ID | Attività | Prio | Stato |
|
||||
|----|----------|------|-------|
|
||||
| T-D01 | Completare PROJECT_MEMORY, ARCHITECTURE, DECISIONS (D-001) | P0 | in_progress |
|
||||
| T-D02 | Primo documento di modulo approvato | P0 | pending |
|
||||
@@ -0,0 +1,83 @@
|
||||
# {{SPEC_ID}} — {{TITOLO}}
|
||||
|
||||
Stato: **da approvare** · Versione 0.1 · {{DATA}}
|
||||
|
||||
**Requisiti coperti:** <!-- DA COMPILARE: `REQ-…` -->
|
||||
**Decisioni di riferimento:** <!-- `D-…` o «nessuna» -->
|
||||
|
||||
---
|
||||
|
||||
## 1. Contesto e obiettivo
|
||||
|
||||
<!-- DA COMPILARE: perché questa capability esiste, cosa decide per l'utente. Un dato misurato
|
||||
vale più di un aggettivo. Se la spec è a sé per una ragione (regola delicata, rischio), dirlo. -->
|
||||
|
||||
---
|
||||
|
||||
## 2. Cosa cambia rispetto a ciò che è già scritto
|
||||
|
||||
<!-- Solo se la spec modifica requisiti, decisioni o altre spec. Altrimenti rimuovere la sezione. -->
|
||||
|
||||
| Dove | Prima | Dopo |
|
||||
|---|---|---|
|
||||
| | | |
|
||||
|
||||
---
|
||||
|
||||
## 3. Regole
|
||||
|
||||
<!-- DA COMPILARE in forma NORMATIVA: «il sistema …», «non …», limiti numerici espliciti.
|
||||
Pseudocodice per gli algoritmi. Una tabella per le combinazioni di casi. Quando un comportamento
|
||||
sembra un errore ma è voluto, dirlo: «è una decisione, non una dimenticanza». -->
|
||||
|
||||
---
|
||||
|
||||
## 4. Contratto API
|
||||
|
||||
### `METODO /api/v1/percorso`
|
||||
|
||||
**Ingresso:** <!-- campi e tipi -->
|
||||
|
||||
**Uscita:** <!-- campi e tipi -->
|
||||
|
||||
| Esito | Codice |
|
||||
|---|:-:|
|
||||
| <!-- Riuscito --> | 200 |
|
||||
| <!-- Non trovato o di altro tenant --> | 404 |
|
||||
| <!-- Validazione fallita --> | 422 |
|
||||
|
||||
Il dettaglio formale va in `04-api/openapi.yaml` **prima** del codice.
|
||||
|
||||
---
|
||||
|
||||
## 5. Dati
|
||||
|
||||
<!-- DA COMPILARE: entità, colonne, vincoli toccati — rimando a DATA_MODEL e DATABASE. -->
|
||||
|
||||
---
|
||||
|
||||
## 6. Errori e casi limite
|
||||
|
||||
| Caso | Comportamento |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
---
|
||||
|
||||
## 7. Criteri di accettazione
|
||||
|
||||
Ogni criterio è verificabile da un test e ha un esito binario.
|
||||
|
||||
| # | Criterio |
|
||||
|:-:|---|
|
||||
| {{LETTERA}}1 | <!-- DA COMPILARE: «Dato …, quando …, allora …» --> |
|
||||
| {{LETTERA}}2 | |
|
||||
|
||||
---
|
||||
|
||||
## 8. Task
|
||||
|
||||
| ID | Task | Dipende da |
|
||||
|---|---|---|
|
||||
| **{{T0}}** | <!-- DA COMPILARE --> | — |
|
||||
| **{{T1}}** | Test di accettazione {{LETTERA}}1–{{LETTERA}}n | {{T0}} |
|
||||
@@ -0,0 +1,153 @@
|
||||
# {{PROGETTO}} — Indice della documentazione
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
| Step | Contenuto | Stato |
|
||||
|:-:|---|:-:|
|
||||
| 0 | Scheletro della documentazione · indice · decisioni iniziali | 🟡 |
|
||||
| 1 | `01-product/` + `02-architecture/` — visione, requisiti, architettura | ⬜ |
|
||||
| 2 | `03-specs/` — specifiche e criteri di accettazione | ⬜ |
|
||||
| 3 | `04-api/` + `05-data/` — contratto OpenAPI e schema dati | ⬜ |
|
||||
| 4 | `06-devops/` — ambienti, pipeline, infrastruttura | ⬜ |
|
||||
| 5 | `07-quality/` + `08-project/` — tracciabilità e backlog | ⬜ |
|
||||
| 6 | Implementazione — vedi [`08-project/ROADMAP.md`](08-project/ROADMAP.md) | ⬜ |
|
||||
|
||||
<!-- Novità: un riquadro per ogni consegna rilevante, il più recente in alto. Esempio:
|
||||
> **Titolo breve (AAAA-MM-GG):** cosa è cambiato e perché — `REQ-…`, `D-…`, `T-…`.
|
||||
> Verificato come (test, sistema reale) — backend N (+k).
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
## Cos'è questo progetto
|
||||
|
||||
<!-- DA COMPILARE: due o tre frasi. Che cosa fa il prodotto, per chi, su quale stack. -->
|
||||
|
||||
Obiettivi vincolanti del progetto:
|
||||
|
||||
1. <!-- DA COMPILARE: obiettivo misurabile -->
|
||||
2. <!-- DA COMPILARE -->
|
||||
3. **Spec-driven** — nessuna riga di codice senza una spec approvata e tracciata (D-002).
|
||||
|
||||
---
|
||||
|
||||
## Metodo: spec-driven development
|
||||
|
||||
Il flusso di lavoro è vincolato e va in un'unica direzione:
|
||||
|
||||
```
|
||||
REQ-xxx (01-product/REQUIREMENTS.md)
|
||||
│ cosa deve fare il prodotto
|
||||
▼
|
||||
SPEC-xxx (03-specs/)
|
||||
│ come lo fa: contratto API, dati, regole, errori, criteri di accettazione
|
||||
▼
|
||||
T-xxx (08-project/TODO.md)
|
||||
│ unità di lavoro implementabile
|
||||
▼
|
||||
codice + test
|
||||
│
|
||||
▼
|
||||
07-quality/TRACEABILITY.md ← chiude il cerchio: ogni REQ ha spec, task e test
|
||||
```
|
||||
|
||||
**Regola:** si implementa solo ciò che ha una `SPEC-xxx` in stato *Approvata*. Una spec non
|
||||
approvata non genera task; un task senza spec non entra in lavorazione. Ogni scelta strutturale
|
||||
diventa una decisione numerata `D-xxx` in [`08-project/DECISIONS.md`](08-project/DECISIONS.md).
|
||||
|
||||
---
|
||||
|
||||
## Mappa dei documenti
|
||||
|
||||
Legenda stato: ⬜ da scrivere · 🟡 in stesura · ✅ completo · 🔒 congelato (modifica solo via nuova D-xxx)
|
||||
|
||||
### 01 · Prodotto — *cosa* e *per chi*
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`01-product/VISION.md`](01-product/VISION.md) | Perché esiste il prodotto, valore, perimetro, non-obiettivi | ⬜ |
|
||||
| [`01-product/GLOSSARY.md`](01-product/GLOSSARY.md) | Lessico condiviso | ⬜ |
|
||||
| [`01-product/PERSONAS_CASI_USO.md`](01-product/PERSONAS_CASI_USO.md) | Attori, persone, casi d'uso end-to-end | ⬜ |
|
||||
| [`01-product/REQUIREMENTS.md`](01-product/REQUIREMENTS.md) | Requisiti `REQ-*` e difetti noti `DIF-*` | ⬜ |
|
||||
|
||||
### 02 · Architettura — *come è fatto*
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`02-architecture/ARCHITECTURE.md`](02-architecture/ARCHITECTURE.md) | Vista d'insieme, servizi, flusso principale | ⬜ |
|
||||
| [`02-architecture/C4_MODEL.md`](02-architecture/C4_MODEL.md) | Contesto / Contenitori / Componenti | ⬜ |
|
||||
| [`02-architecture/DOMAIN_WORKFLOW.md`](02-architecture/DOMAIN_WORKFLOW.md) | Stati, transizioni ammesse, invarianti | ⬜ |
|
||||
| [`02-architecture/DATA_MODEL.md`](02-architecture/DATA_MODEL.md) | Entità, relazioni, chiavi, cancellazioni, invarianti | ⬜ |
|
||||
| [`02-architecture/SECURITY.md`](02-architecture/SECURITY.md) | Autenticazione, autorizzazione, segreti, audit | ⬜ |
|
||||
|
||||
### 03 · Specifiche — *contratto per l'implementazione*
|
||||
|
||||
| Spec | Capability | Stato |
|
||||
|---|---|---|
|
||||
<!-- Una riga per spec, aggiunta quando la spec nasce:
|
||||
| [`SPEC-001-slug.md`](03-specs/SPEC-001-slug.md) | Capability · N criteri · T-010…019 | 🟡 da approvare |
|
||||
-->
|
||||
|
||||
### 04 · API — *contratto esterno*
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`04-api/API.md`](04-api/API.md) | Catalogo endpoint, convenzioni, errori, paginazione | ⬜ |
|
||||
| [`04-api/openapi.yaml`](04-api/openapi.yaml) | Contratto OpenAPI 3.1 — **fonte di verità** | ⬜ |
|
||||
|
||||
### 05 · Dati
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`05-data/DATABASE.md`](05-data/DATABASE.md) | Schema fisico: tabelle, enumerazioni, indici, vincoli, migrazioni | ⬜ |
|
||||
| [`05-data/SEED_BOOTSTRAP.md`](05-data/SEED_BOOTSTRAP.md) | Stato iniziale, bootstrap idempotente, credenziali | ⬜ |
|
||||
|
||||
### 06 · DevOps
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`06-devops/INFRASTRUCTURE.md`](06-devops/INFRASTRUCTURE.md) | Topologia, servizi, risorse, rete, persistenza | ⬜ |
|
||||
| [`06-devops/ENVIRONMENTS.md`](06-devops/ENVIRONMENTS.md) | dev/qa/prod, variabili, promozione | ⬜ |
|
||||
| [`06-devops/CI_CD.md`](06-devops/CI_CD.md) | Pipeline, verifiche, rilascio, rientro | ⬜ |
|
||||
| [`06-devops/OBSERVABILITY.md`](06-devops/OBSERVABILITY.md) | Log, metriche, allarmi | ⬜ |
|
||||
| [`06-devops/RUNBOOK.md`](06-devops/RUNBOOK.md) | Procedure: sintomo → verifica → azione → conferma | ⬜ |
|
||||
| [`06-devops/BACKUP_DR.md`](06-devops/BACKUP_DR.md) | Backup, ripristino, prova periodica | ⬜ |
|
||||
|
||||
### 07 · Qualità
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`07-quality/TEST_STRATEGY.md`](07-quality/TEST_STRATEGY.md) | Livelli di test, simulatori, criteri di uscita | ⬜ |
|
||||
| [`07-quality/ACCEPTANCE_CRITERIA.md`](07-quality/ACCEPTANCE_CRITERIA.md) | Criteri bloccanti di rilascio | ⬜ |
|
||||
| [`07-quality/TRACEABILITY.md`](07-quality/TRACEABILITY.md) | Matrice REQ → SPEC → T → test, senza righe scoperte | ⬜ |
|
||||
|
||||
### 08 · Progetto
|
||||
|
||||
| Documento | Contenuto | Stato |
|
||||
|---|---|---|
|
||||
| [`08-project/DECISIONS.md`](08-project/DECISIONS.md) | Decisioni architetturali `D-xxx` | 🟡 |
|
||||
| [`08-project/ROADMAP.md`](08-project/ROADMAP.md) | Fasi con criteri di uscita, dipendenze, rischi | ⬜ |
|
||||
| [`08-project/TODO.md`](08-project/TODO.md) | Task `T-xxx` per fase, tracciati sulle spec | ⬜ |
|
||||
| [`08-project/CHANGELOG.md`](08-project/CHANGELOG.md) | Cosa cambia per chi usa il prodotto | ⬜ |
|
||||
| [`08-project/DEVELOPMENT_LOG.md`](08-project/DEVELOPMENT_LOG.md) | Diario tecnico: cosa si è scoperto e perché | ⬜ |
|
||||
| [`08-project/PROJECT_MEMORY.md`](08-project/PROJECT_MEMORY.md) | **Da leggere a inizio di ogni sessione** | 🟡 |
|
||||
|
||||
---
|
||||
|
||||
## Struttura del repository
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: albero delle cartelle principali, una riga di descrizione ciascuna -->
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Riferimenti esterni
|
||||
|
||||
| Risorsa | Percorso / URL |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE: repository, documenti del committente, sistemi collegati --> | |
|
||||
|
||||
---
|
||||
|
||||
<sub>Documentazione redatta con il metodo spec-driven di STS Lab Srl.</sub>
|
||||
@@ -0,0 +1,37 @@
|
||||
# GLOSSARY — Lessico di {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Un termine, un significato. Gli stessi nomi si usano nei documenti, nel codice (classi,
|
||||
tabelle, rotte) e nell'interfaccia. Se un termine cambia, cambia qui per primo.
|
||||
|
||||
---
|
||||
|
||||
## 1. Termini di dominio
|
||||
|
||||
| Termine | Significato | Nel codice |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | `nome_tecnico` |
|
||||
|
||||
## 2. Termini di piattaforma
|
||||
|
||||
| Termine | Significato | Nel codice |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE: es. Tenant, Utente, Ruolo --> | | |
|
||||
|
||||
## 3. Convenzioni di identificazione nei documenti
|
||||
|
||||
| ID | Significato | Dove nasce |
|
||||
|---|---|---|
|
||||
| `REQ-<AREA>-<nn>` | Requisito | `01-product/REQUIREMENTS.md` |
|
||||
| `DIF-<nn>` | Difetto noto | `01-product/REQUIREMENTS.md` |
|
||||
| `SPEC-<nnn>` | Specifica | `03-specs/` |
|
||||
| `T-<nnn>` | Task | sezione *Task* della spec e `08-project/TODO.md` |
|
||||
| `D-<nnn>` | Decisione | `08-project/DECISIONS.md` |
|
||||
| `A1`, `B3`, … | Criterio di accettazione (lettera della spec + numero) | sezione *Criteri* della spec |
|
||||
|
||||
Gli ID sono **immutabili**: non si rinumerano e non si riusano. Un ID chiuso senza lavoro si barra (`~~T-xxx~~`).
|
||||
|
||||
## 4. Falsi amici
|
||||
|
||||
<!-- DA COMPILARE: parole che il committente usa con un significato diverso da quello tecnico. -->
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
# PERSONAS E CASI D'USO — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Attori
|
||||
|
||||
### 1.1 Attori umani
|
||||
|
||||
| Attore | Ruolo nel sistema | Permessi |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
### 1.2 Attori non umani
|
||||
|
||||
| Attore | Come interagisce |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE: sistemi esterni, job pianificati, integrazioni --> | |
|
||||
|
||||
## 2. Persone
|
||||
|
||||
### 2.1 <!-- Nome — Ruolo -->
|
||||
|
||||
<!-- DA COMPILARE: chi è, cosa fa ogni giorno, cosa lo frustra oggi, cosa considera un successo. -->
|
||||
|
||||
## 3. Casi d'uso
|
||||
|
||||
### UC-01 — <!-- titolo come risultato: «Una richiesta completa diventa una proposta» -->
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Attore** | |
|
||||
| **Precondizioni** | |
|
||||
| **Flusso principale** | 1. … 2. … 3. … |
|
||||
| **Flussi alternativi** | |
|
||||
| **Esito** | |
|
||||
| **Requisiti** | `REQ-…` |
|
||||
|
||||
## 4. Matrice attore × caso d'uso
|
||||
|
||||
| Caso d'uso | <!-- attore 1 --> | <!-- attore 2 --> |
|
||||
|---|:-:|:-:|
|
||||
| UC-01 | ● | |
|
||||
@@ -0,0 +1,62 @@
|
||||
# REQUIREMENTS — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Stato: **in stesura**
|
||||
|
||||
---
|
||||
|
||||
## Come leggere questo documento
|
||||
|
||||
Ogni requisito ha un identificativo `REQ-<AREA>-<nn>` immutabile, citato dalle specifiche
|
||||
(`03-specs/`), dai task (`08-project/TODO.md`) e dalla matrice di tracciabilità
|
||||
(`07-quality/TRACEABILITY.md`).
|
||||
|
||||
**Tipo:**
|
||||
|
||||
| Sigla | Significato |
|
||||
|:-:|---|
|
||||
| **P** | **Parità** — comportamento già presente nel sistema esistente, da riprodurre **identico**. Una differenza è una regressione. *(Solo per riscritture o evoluzioni.)* |
|
||||
| **C** | **Correzione** — comportamento esistente difettoso, da correggere. Rimanda a un `DIF-nn`. |
|
||||
| **N** | **Nuovo** — introdotto da questo progetto. |
|
||||
|
||||
**Origine:** dove il requisito è stato osservato o deciso: committente e data, `D-nnn`, oppure
|
||||
`file:funzione` del codice esistente per i requisiti di parità.
|
||||
|
||||
> **Regola.** Un requisito descrive un comportamento osservabile e verificabile, non una
|
||||
> soluzione tecnica. Modificare un requisito approvato è una decisione di prodotto e richiede
|
||||
> una `D-nnn`.
|
||||
|
||||
---
|
||||
|
||||
## Riepilogo
|
||||
|
||||
| Area | Codice | Requisiti | P | C | N |
|
||||
|---|:-:|:-:|:-:|:-:|:-:|
|
||||
| <!-- DA COMPILARE: es. Autenticazione e utenti --> | <!-- AUT --> | | | | |
|
||||
| Non funzionali | NFR | | | | |
|
||||
| **Totale** | | | | | |
|
||||
|
||||
---
|
||||
|
||||
## <!-- AREA --> · <!-- Nome dell'area -->
|
||||
|
||||
| ID | Requisito | Tipo | Origine |
|
||||
|---|---|:-:|---|
|
||||
| <!-- **REQ-AREA-01** --> | <!-- DA COMPILARE: «Il sistema …», condizioni in grassetto, limiti numerici espliciti --> | N | <!-- committente, AAAA-MM-GG --> |
|
||||
|
||||
---
|
||||
|
||||
## NFR · Non funzionali
|
||||
|
||||
| ID | Requisito | Tipo | Origine |
|
||||
|---|---|:-:|---|
|
||||
| <!-- **REQ-NFR-01** --> | <!-- DA COMPILARE: prestazioni, disponibilità, sicurezza, conservazione dei dati — sempre con un numero --> | N | |
|
||||
|
||||
---
|
||||
|
||||
## Difetti noti
|
||||
|
||||
Difetti del sistema esistente, o emersi durante il progetto, che un requisito di tipo **C** corregge.
|
||||
|
||||
| ID | Difetto | Effetto osservato | Requisito |
|
||||
|---|---|---|---|
|
||||
| <!-- **DIF-01** --> | | | `REQ-…` |
|
||||
@@ -0,0 +1,52 @@
|
||||
# VISION — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Stato: **in stesura**
|
||||
|
||||
---
|
||||
|
||||
## 1. La frase che guida il prodotto
|
||||
|
||||
> <!-- DA COMPILARE: una frase sola, quella con cui si decide cosa entra e cosa no. -->
|
||||
|
||||
## 2. Il problema
|
||||
|
||||
<!-- DA COMPILARE: chi ha il problema, come lo risolve oggi, quanto costa (tempo, errori, denaro).
|
||||
Preferire un dato misurato a un aggettivo. -->
|
||||
|
||||
## 3. Cosa fa il prodotto
|
||||
|
||||
<!-- DA COMPILARE: il flusso principale in 5-7 passi, dal punto di vista di chi lo usa. -->
|
||||
|
||||
## 4. Perché adesso
|
||||
|
||||
<!-- DA COMPILARE: cosa rende necessario il progetto ora (scadenza, cliente, limite del sistema attuale). -->
|
||||
|
||||
## 5. Cosa NON cambia
|
||||
|
||||
<!-- DA COMPILARE: vincoli fissi (sistemi esistenti, interfacce, abitudini degli utenti), oppure «non applicabile». -->
|
||||
|
||||
## 6. Perimetro
|
||||
|
||||
### Dentro il perimetro (primo rilascio)
|
||||
|
||||
- <!-- DA COMPILARE -->
|
||||
|
||||
### Fuori dal perimetro (esplicitamente)
|
||||
|
||||
- <!-- DA COMPILARE: ciò che qualcuno potrebbe aspettarsi e che NON si fa. Scriverlo evita discussioni dopo. -->
|
||||
|
||||
## 7. Come si misura il successo
|
||||
|
||||
| Indicatore | Valore attuale | Obiettivo |
|
||||
|---|:-:|:-:|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 8. Rischi principali
|
||||
|
||||
| Rischio | Probabilità | Impatto | Contromisura |
|
||||
|---|:-:|:-:|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## 9. Documenti collegati
|
||||
|
||||
[`REQUIREMENTS.md`](REQUIREMENTS.md) · [`PERSONAS_CASI_USO.md`](PERSONAS_CASI_USO.md) · [`../08-project/DECISIONS.md`](../08-project/DECISIONS.md)
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
# ARCHITECTURE — {{PROGETTO}}
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Stato: **in stesura**
|
||||
|
||||
---
|
||||
|
||||
## 1. Vista d'insieme
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: schema ASCII dei servizi e delle frecce principali -->
|
||||
```
|
||||
|
||||
## 2. Servizi
|
||||
|
||||
| Servizio | Tecnologia | Responsabilità | Non fa |
|
||||
|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
<!-- Per ogni scelta non ovvia («perché due servizi e non uno») una sottosezione breve che
|
||||
rimanda alla D-xxx. -->
|
||||
|
||||
## 3. Flusso principale
|
||||
|
||||
<!-- DA COMPILARE: il caso d'uso UC-01 attraverso i servizi, passo per passo, con le code e i dati scambiati. -->
|
||||
|
||||
## 4. Code e lavori asincroni
|
||||
|
||||
| Coda / lavoro | Produttore | Consumatore | Tentativi | Cosa succede se fallisce |
|
||||
|---|---|---|:-:|---|
|
||||
| <!-- DA COMPILARE o «non applicabile» --> | | | | |
|
||||
|
||||
## 5. Configurazione
|
||||
|
||||
<!-- DA COMPILARE: cosa è variabile d'ambiente, cosa è configurazione a caldo, cosa è segreto. -->
|
||||
|
||||
## 6. Multi-tenancy e isolamento
|
||||
|
||||
<!-- DA COMPILARE o «non applicabile». -->
|
||||
|
||||
## 7. Integrazioni esterne
|
||||
|
||||
| Sistema | Direzione | Protocollo | Contratto |
|
||||
|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## 8. Ambienti
|
||||
|
||||
Vedi [`../06-devops/ENVIRONMENTS.md`](../06-devops/ENVIRONMENTS.md).
|
||||
|
||||
## 9. Documenti collegati
|
||||
|
||||
[`C4_MODEL.md`](C4_MODEL.md) · [`DATA_MODEL.md`](DATA_MODEL.md) · [`DOMAIN_WORKFLOW.md`](DOMAIN_WORKFLOW.md) · [`SECURITY.md`](SECURITY.md)
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# C4 MODEL — Contesto, Contenitori, Componenti
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## Livello 1 · Contesto
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: il sistema al centro, attori e sistemi esterni intorno -->
|
||||
```
|
||||
|
||||
| Attore / sistema esterno | Relazione con {{PROGETTO}} |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
## Livello 2 · Contenitori
|
||||
|
||||
| Contenitore | Tecnologia | Parla con | Porta / protocollo |
|
||||
|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## Livello 3 · Componenti
|
||||
|
||||
### 3.1 <!-- Contenitore -->
|
||||
|
||||
| Componente | Responsabilità | Spec |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | `SPEC-…` |
|
||||
|
||||
## 4. Corrispondenza fra i livelli e i requisiti
|
||||
|
||||
| Componente | Requisiti |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | `REQ-…` |
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# DATA MODEL — Entità, relazioni, invarianti
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Modello **logico**. Lo schema fisico (tipi, indici, migrazioni) è in
|
||||
[`../05-data/DATABASE.md`](../05-data/DATABASE.md).
|
||||
|
||||
---
|
||||
|
||||
## 1. Mappa delle entità
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: entità e cardinalità, es. Tenant 1──* Utente -->
|
||||
```
|
||||
|
||||
## 2. Entità
|
||||
|
||||
### 2.1 <!-- Entità -->
|
||||
|
||||
| Attributo | Significato | Obbligatorio | Note |
|
||||
|---|---|:-:|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
**Ciclo di vita:** <!-- chi la crea, chi la modifica, quando si cancella -->
|
||||
|
||||
## 3. Chiavi naturali e univocità
|
||||
|
||||
| Entità | Univoca per |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
## 4. Cancellazioni
|
||||
|
||||
| Entità | Cancellazione | Effetto sui figli |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE: fisica, logica (soft delete), vietata --> | | |
|
||||
|
||||
## 5. Invarianti del modello
|
||||
|
||||
| # | Invariante |
|
||||
|:-:|---|
|
||||
| M1 | <!-- DA COMPILARE --> |
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# DOMAIN WORKFLOW — Stati, transizioni, invarianti
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
<!-- Se il dominio non ha un ciclo di vita con stati, scrivere «non applicabile» e il perché. -->
|
||||
|
||||
---
|
||||
|
||||
## 1. Stati
|
||||
|
||||
| Stato | Significato | Terminale |
|
||||
|---|---|:-:|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 2. Macchina a stati
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: diagramma ASCII degli stati -->
|
||||
```
|
||||
|
||||
## 3. Transizioni ammesse
|
||||
|
||||
Qualsiasi transizione non elencata qui è **rifiutata**.
|
||||
|
||||
| # | Da | A | Attore | Condizione | Effetti collaterali |
|
||||
|:-:|---|---|---|---|---|
|
||||
| T1 | | | | | |
|
||||
|
||||
## 4. Invarianti
|
||||
|
||||
Condizioni che devono essere vere **sempre**, verificate da test.
|
||||
|
||||
| # | Invariante |
|
||||
|:-:|---|
|
||||
| I1 | <!-- DA COMPILARE --> |
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
# SECURITY — Modello di sicurezza
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Perimetro
|
||||
|
||||
<!-- DA COMPILARE: cosa è esposto a Internet, cosa resta interno. -->
|
||||
|
||||
## 2. Autenticazione
|
||||
|
||||
<!-- DA COMPILARE: meccanismo, durata dei token, rotte pubbliche (elenco chiuso: aggiungerne una richiede una D-xxx). -->
|
||||
|
||||
## 3. Autorizzazione
|
||||
|
||||
| Ruolo | Può | Non può |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
Regola: nessuno crea un utente più potente di sé.
|
||||
|
||||
## 4. Segreti
|
||||
|
||||
- I segreti non entrano mai nel repository, nei log o nella documentazione.
|
||||
- <!-- DA COMPILARE: dove vivono (variabili d'ambiente, secret manager, cifrati a riposo). -->
|
||||
|
||||
## 5. Dati in ingresso e in uscita
|
||||
|
||||
<!-- DA COMPILARE: validazione, dimensioni massime, dati personali, cosa esce verso terzi. -->
|
||||
|
||||
## 6. Audit
|
||||
|
||||
<!-- DA COMPILARE: quali eventi si registrano, dove, per quanto tempo. -->
|
||||
|
||||
## 7. Minacce e contromisure
|
||||
|
||||
| Minaccia | Contromisura | Verificata da |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | test / `REQ-…` |
|
||||
|
||||
## 8. Cosa resta aperto
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,59 @@
|
||||
# API — Catalogo e convenzioni
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Il contratto è [`openapi.yaml`](openapi.yaml), **fonte di verità**: in caso di differenza fra
|
||||
questo documento, il codice e il contratto, vale il contratto. Si scrive il contratto **prima**
|
||||
del codice (contract-first).
|
||||
|
||||
---
|
||||
|
||||
## 1. Convenzioni
|
||||
|
||||
| Aspetto | Regola |
|
||||
|---|---|
|
||||
| Prefisso | `/api/v1` |
|
||||
| Formato | JSON, UTF-8, date ISO 8601 in UTC |
|
||||
| Nomi | <!-- DA COMPILARE: snake_case o camelCase, una sola scelta --> |
|
||||
| Autenticazione | <!-- DA COMPILARE --> |
|
||||
|
||||
## 2. Errori
|
||||
|
||||
Forma unica per tutti gli errori:
|
||||
|
||||
```json
|
||||
{ "error": { "code": "stringa_stabile", "message": "testo leggibile", "details": {} } }
|
||||
```
|
||||
|
||||
| Codice HTTP | Quando |
|
||||
|:-:|---|
|
||||
| 400 | Richiesta malformata |
|
||||
| 401 | Non autenticato |
|
||||
| 403 | Autenticato ma non autorizzato |
|
||||
| 404 | Risorsa inesistente **o di un altro tenant** (non si rivela l'esistenza) |
|
||||
| 409 | Conflitto (duplicato, stato non compatibile) |
|
||||
| 422 | Validazione fallita |
|
||||
|
||||
## 3. Paginazione
|
||||
|
||||
<!-- DA COMPILARE: parametri (page/size o cursore), limiti massimi, forma della risposta. -->
|
||||
|
||||
## 4. Catalogo
|
||||
|
||||
### <!-- Gruppo --> — `SPEC-…`
|
||||
|
||||
| Metodo | Percorso | Ruolo minimo | Descrizione |
|
||||
|---|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## 5. API interne — non esposte
|
||||
|
||||
<!-- DA COMPILARE o «nessuna». -->
|
||||
|
||||
## 6. Idempotenza e concorrenza
|
||||
|
||||
<!-- DA COMPILARE: chiavi di idempotenza, controllo delle versioni, comportamento in caso di doppio invio. -->
|
||||
|
||||
## 7. Limiti
|
||||
|
||||
<!-- DA COMPILARE: rate limit, dimensioni massime dei corpi e dei file. -->
|
||||
@@ -0,0 +1,54 @@
|
||||
# Contratto pubblico di {{PROGETTO}} — FONTE DI VERITÀ (D-002).
|
||||
# Si modifica PRIMA del codice. Ogni operazione cita la spec che la definisce.
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: "{{PROGETTO}} API"
|
||||
version: 0.1.0
|
||||
description: |
|
||||
Contratto dell'API di {{PROGETTO}}.
|
||||
Documentazione redatta con il metodo spec-driven di STS Lab Srl.
|
||||
servers:
|
||||
- url: /api/v1
|
||||
tags:
|
||||
- name: health
|
||||
description: Stato del servizio
|
||||
paths:
|
||||
/health:
|
||||
get:
|
||||
tags: [health]
|
||||
summary: Stato del servizio
|
||||
security: []
|
||||
responses:
|
||||
"200":
|
||||
description: Servizio attivo
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: ok
|
||||
components:
|
||||
securitySchemes:
|
||||
BearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
schemas:
|
||||
Error:
|
||||
type: object
|
||||
required: [error]
|
||||
properties:
|
||||
error:
|
||||
type: object
|
||||
required: [code, message]
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
details:
|
||||
type: object
|
||||
security:
|
||||
- BearerAuth: []
|
||||
@@ -0,0 +1,47 @@
|
||||
# DATABASE — Schema fisico
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Traduzione fisica di [`../02-architecture/DATA_MODEL.md`](../02-architecture/DATA_MODEL.md).
|
||||
|
||||
---
|
||||
|
||||
## 1. Convenzioni
|
||||
|
||||
| Aspetto | Regola |
|
||||
|---|---|
|
||||
| Motore | <!-- DA COMPILARE: es. PostgreSQL 16 --> |
|
||||
| Nomi | tabelle al singolare, `snake_case` |
|
||||
| Chiavi primarie | <!-- DA COMPILARE: UUID / bigint --> |
|
||||
| Date | `timestamptz`, sempre UTC |
|
||||
| Multi-tenancy | <!-- DA COMPILARE: colonna `tenant_id` su ogni tabella di dominio, o «non applicabile» --> |
|
||||
|
||||
## 2. Tipi enumerati
|
||||
|
||||
| Tipo | Valori |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
## 3. Tabelle
|
||||
|
||||
### `<!-- tabella -->`
|
||||
|
||||
| Colonna | Tipo | Null | Default | Note |
|
||||
|---|---|:-:|---|---|
|
||||
| `id` | | no | | PK |
|
||||
|
||||
Indici: <!-- DA COMPILARE --> · Vincoli: <!-- DA COMPILARE -->
|
||||
|
||||
## 4. Vincoli che riflettono requisiti
|
||||
|
||||
| Vincolo | Requisito |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | `REQ-…` |
|
||||
|
||||
## 5. Migrazioni
|
||||
|
||||
<!-- DA COMPILARE: strumento (es. Alembic), regola «una migrazione per modifica, mai riscrivere una migrazione già applicata». -->
|
||||
|
||||
## 6. Dimensionamento
|
||||
|
||||
<!-- DA COMPILARE: volumi attesi per tabella a 1 e 3 anni. -->
|
||||
@@ -0,0 +1,30 @@
|
||||
# SEED E BOOTSTRAP — Stato iniziale del sistema
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Principio
|
||||
|
||||
Il bootstrap è **idempotente**: eseguirlo due volte produce lo stesso stato di eseguirlo una.
|
||||
|
||||
## 2. Cosa viene creato
|
||||
|
||||
| Elemento | Quando | Origine dei valori |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE: utente amministratore iniziale, configurazione di base --> | primo avvio | variabili d'ambiente |
|
||||
|
||||
## 3. Credenziali iniziali
|
||||
|
||||
In collaudo e produzione l'avvio **fallisce** se le credenziali di bootstrap sono lasciate ai
|
||||
valori predefiniti.
|
||||
|
||||
## 4. Variabili di bootstrap
|
||||
|
||||
| Variabile | Obbligatoria | Significato |
|
||||
|---|:-:|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 5. Dati di prova per lo sviluppo
|
||||
|
||||
<!-- DA COMPILARE: come si generano, e la regola che non arrivano mai in produzione. -->
|
||||
@@ -0,0 +1,34 @@
|
||||
# BACKUP E RIPRISTINO
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Cosa va salvato
|
||||
|
||||
| Dato | Dove vive | Ricostruibile | Backup |
|
||||
|---|---|:-:|---|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## 2. Obiettivi
|
||||
|
||||
| Obiettivo | Valore |
|
||||
|---|---|
|
||||
| RPO (dati che si accetta di perdere) | <!-- DA COMPILARE --> |
|
||||
| RTO (tempo per tornare operativi) | <!-- DA COMPILARE --> |
|
||||
|
||||
## 3. Procedura di ripristino
|
||||
|
||||
1. <!-- DA COMPILARE -->
|
||||
|
||||
## 4. Verifiche dopo un ripristino
|
||||
|
||||
- [ ] <!-- DA COMPILARE -->
|
||||
|
||||
## 5. Prova di ripristino
|
||||
|
||||
Un backup mai ripristinato non è un backup. Prova <!-- DA COMPILARE: frequenza -->, esito registrato in `DEVELOPMENT_LOG`.
|
||||
|
||||
## 6. Cosa non è coperto
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,31 @@
|
||||
# CI/CD — Integrazione e rilascio
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Flussi
|
||||
|
||||
| Flusso | Innesco | Ambiente di destinazione |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 2. Sequenza
|
||||
|
||||
1. <!-- DA COMPILARE: build, test, analisi, immagini, deploy -->
|
||||
|
||||
## 3. Verifiche in pipeline
|
||||
|
||||
| Verifica | Perché | Blocca il rilascio |
|
||||
|---|---|:-:|
|
||||
| Test automatici | criteri di accettazione delle spec | sì |
|
||||
| Ricerca di segreti | nessun segreto nel repository | sì |
|
||||
| Contratto contro implementazione | il codice rispetta `openapi.yaml` | sì |
|
||||
|
||||
## 4. Segreti della pipeline
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
|
||||
## 5. Rilascio in produzione e rientro
|
||||
|
||||
<!-- DA COMPILARE: chi approva, come si torna alla versione precedente, in quanto tempo. -->
|
||||
@@ -0,0 +1,31 @@
|
||||
# ENVIRONMENTS — Sviluppo, collaudo, produzione
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Gli ambienti
|
||||
|
||||
| Ambiente | Scopo | Dati | Chi vi accede |
|
||||
|---|---|---|---|
|
||||
| dev | sviluppo | di prova | sviluppatori |
|
||||
| qa | collaudo | di prova, realistici | sviluppatori, committente |
|
||||
| prod | esercizio | reali | utenti |
|
||||
|
||||
## 2. Variabili di configurazione
|
||||
|
||||
| Variabile | Significato | dev | qa | prod | Segreta |
|
||||
|---|---|---|---|---|:-:|
|
||||
| <!-- DA COMPILARE --> | | | | | |
|
||||
|
||||
## 3. Ambiente locale di sviluppo
|
||||
|
||||
<!-- DA COMPILARE: comandi per avviare tutto in locale (es. docker compose up). -->
|
||||
|
||||
## 4. Promozione fra ambienti
|
||||
|
||||
<!-- DA COMPILARE: dev → qa → prod, chi approva, cosa si verifica a ogni passo. -->
|
||||
|
||||
## 5. Prima di dichiarare un ambiente pronto
|
||||
|
||||
- [ ] <!-- DA COMPILARE -->
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# INFRASTRUCTURE — Topologia e risorse
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Topologia
|
||||
|
||||
```
|
||||
<!-- DA COMPILARE: nodi, servizi, rete -->
|
||||
```
|
||||
|
||||
## 2. Servizi e risorse
|
||||
|
||||
| Servizio | Immagine / runtime | Repliche | CPU | Memoria |
|
||||
|---|---|:-:|---|---|
|
||||
| <!-- DA COMPILARE --> | | | | |
|
||||
|
||||
## 3. Persistenza
|
||||
|
||||
| Volume / storage | Contenuto | Dimensione | Backup |
|
||||
|---|---|---|:-:|
|
||||
| <!-- DA COMPILARE --> | | | |
|
||||
|
||||
## 4. Rete, nomi e certificati
|
||||
|
||||
<!-- DA COMPILARE: domini, ingress, TLS, porte esposte. -->
|
||||
|
||||
## 5. Capacità e crescita
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,37 @@
|
||||
# OBSERVABILITY — Log, metriche, allarmi
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Il problema che risolve
|
||||
|
||||
<!-- DA COMPILARE: quali domande operative si devono poter rispondere senza aprire il database. -->
|
||||
|
||||
## 2. Log
|
||||
|
||||
| Aspetto | Regola |
|
||||
|---|---|
|
||||
| Formato | JSON strutturato |
|
||||
| Correlazione | un identificativo di richiesta propagato fra i servizi |
|
||||
| Mai nei log | password, token, segreti, dati personali non necessari |
|
||||
|
||||
## 3. Metriche
|
||||
|
||||
| Metrica | Tipo | Significato |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 4. Allarmi
|
||||
|
||||
| Allarme | Condizione | Gravità | Procedura |
|
||||
|---|---|:-:|---|
|
||||
| <!-- DA COMPILARE --> | | | [`RUNBOOK`](RUNBOOK.md) §… |
|
||||
|
||||
## 5. Salute
|
||||
|
||||
`GET /health` — <!-- DA COMPILARE: cosa verifica. -->
|
||||
|
||||
## 6. Conservazione
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
@@ -0,0 +1,25 @@
|
||||
# RUNBOOK — Procedure operative
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Ogni procedura segue lo stesso schema: **sintomo → verifica → azione → conferma**.
|
||||
|
||||
---
|
||||
|
||||
## 1. <!-- Sintomo, come lo descriverebbe chi lo nota -->
|
||||
|
||||
| Passo | Cosa fare |
|
||||
|---|---|
|
||||
| **Verifica** | <!-- comando o schermata --> |
|
||||
| **Azione** | |
|
||||
| **Conferma** | |
|
||||
|
||||
## 2. Ripristino da backup
|
||||
|
||||
Vedi [`BACKUP_DR.md`](BACKUP_DR.md) §… .
|
||||
|
||||
## 3. Contatti e riferimenti
|
||||
|
||||
| Ruolo | Contatto |
|
||||
|---|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# ACCEPTANCE CRITERIA — Criteri di rilascio
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Riepilogo per specifica
|
||||
|
||||
| Spec | Criteri | Verificati | Stato |
|
||||
|---|:-:|:-:|:-:|
|
||||
| <!-- SPEC-001 --> | | | ⬜ |
|
||||
|
||||
## 2. Criteri di rilascio — versione <!-- x.y.z -->
|
||||
|
||||
### 2.1 Bloccanti
|
||||
|
||||
| # | Criterio | Verificato da |
|
||||
|:-:|---|---|
|
||||
| R1 | Tutti i test passano in pipeline | CI |
|
||||
| R2 | Nessuna riga scoperta in `TRACEABILITY.md` | revisione |
|
||||
| R3 | <!-- DA COMPILARE --> | |
|
||||
|
||||
### 2.2 Attesi (non bloccanti)
|
||||
|
||||
| # | Criterio |
|
||||
|:-:|---|
|
||||
| <!-- DA COMPILARE --> | |
|
||||
|
||||
## 3. Verifica funzionale prima del rilascio
|
||||
|
||||
- [ ] <!-- DA COMPILARE: percorsi da provare a mano con il committente -->
|
||||
|
||||
## 4. Cosa non è criterio di rilascio
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# TEST STRATEGY
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 1. Il criterio
|
||||
|
||||
Ogni criterio di accettazione di ogni spec ha **almeno un test eseguito**. Lo stato di un
|
||||
requisito in [`TRACEABILITY.md`](TRACEABILITY.md) diventa ✅ quando il test passa, non quando
|
||||
il codice è scritto. Ogni difetto `DIF-nn` ha un test che lo riproduce.
|
||||
|
||||
## 2. Livelli
|
||||
|
||||
| Livello | Cosa verifica | Strumento | Dove |
|
||||
|---|---|---|---|
|
||||
| Unitario | funzioni pure, regole di business | <!-- DA COMPILARE --> | |
|
||||
| Integrazione | servizi + database + code, con simulatori dei sistemi esterni | | |
|
||||
| Contratto | implementazione contro `openapi.yaml` | | |
|
||||
| End-to-end | casi d'uso dall'interfaccia | | |
|
||||
|
||||
## 3. Simulatori dei sistemi esterni
|
||||
|
||||
| Sistema | Simulatore | Comportamenti simulati (anche i guasti) |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
|
||||
## 4. Nominare i test
|
||||
|
||||
Il nome del test cita il criterio: `test_D3_sufficiente_urgente_ricorrente_lotto_grande_priorita_1`.
|
||||
|
||||
## 5. Esecuzione
|
||||
|
||||
<!-- DA COMPILARE: comandi, durata attesa, numero di test (aggiornato in DEVELOPMENT_LOG). -->
|
||||
|
||||
## 6. Cosa non verifichiamo
|
||||
|
||||
<!-- DA COMPILARE, con il perché. -->
|
||||
@@ -0,0 +1,48 @@
|
||||
# TRACEABILITY — Matrice REQ → SPEC → T → test
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Stato: **in stesura**
|
||||
|
||||
---
|
||||
|
||||
## 1. Regola
|
||||
|
||||
> **Nessuna riga vuota.** Ogni requisito ha una specifica, ogni specifica ha task, ogni task ha
|
||||
> test. Un requisito senza spec non è implementabile; un task senza spec non entra in lavorazione.
|
||||
|
||||
La colonna *Stato* si compila durante l'implementazione: ⬜ da fare · 🟡 in corso · ✅ verificato.
|
||||
Lo stato si aggiorna **quando il test passa, non quando il codice è scritto**.
|
||||
|
||||
---
|
||||
|
||||
## 2. Copertura
|
||||
|
||||
| Area | REQ | Spec | Task | Criteri | Copertura |
|
||||
|---|:-:|---|---|:-:|:-:|
|
||||
| <!-- DA COMPILARE --> | | | | | ⬜ |
|
||||
| **Totale** | | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 3. Matrice per requisito
|
||||
|
||||
### <!-- AREA --> · <!-- Nome -->
|
||||
|
||||
| REQ | Spec | Task | Criteri | Stato |
|
||||
|---|---|---|---|:-:|
|
||||
| <!-- AREA-01 --> | <!-- SPEC-001 §2 --> | <!-- T-010 --> | <!-- A1 --> | ⬜ |
|
||||
|
||||
---
|
||||
|
||||
## 4. Decisioni → specifiche
|
||||
|
||||
| Decisione | Dove si applica | Task |
|
||||
|---|---|---|
|
||||
| D-002 | metodo | — |
|
||||
|
||||
---
|
||||
|
||||
## 5. Difetti → test
|
||||
|
||||
| Difetto | Requisito | Test |
|
||||
|---|---|---|
|
||||
| <!-- DIF-01 --> | | |
|
||||
@@ -0,0 +1,14 @@
|
||||
# CHANGELOG
|
||||
|
||||
Formato: [Keep a Changelog](https://keepachangelog.com/it/1.1.0/) · Versionamento semantico.
|
||||
|
||||
Le voci descrivono ciò che cambia **per chi usa il prodotto**. Le decisioni tecniche stanno in
|
||||
[`DECISIONS.md`](DECISIONS.md), il diario di lavoro in [`DEVELOPMENT_LOG.md`](DEVELOPMENT_LOG.md).
|
||||
|
||||
---
|
||||
|
||||
## [Non rilasciato] — 0.1.0
|
||||
|
||||
### Aggiunto
|
||||
|
||||
- Documentazione di progetto con metodo spec-driven ({{DATA}}).
|
||||
@@ -0,0 +1,83 @@
|
||||
# DECISIONS — Registro delle decisioni architetturali (ADR)
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}** · Progetto: **{{PROGETTO}}**
|
||||
|
||||
Ogni decisione strutturale del progetto è registrata qui con un identificativo `D-xxx` immutabile.
|
||||
Le decisioni si **superano**, non si cancellano: una decisione sbagliata resta a registro con stato
|
||||
*Superata da D-yyy*, così la storia del progetto resta leggibile.
|
||||
|
||||
**Stati:** `Proposta` · `Accettata` · `Superata da D-xxx` · `Respinta`
|
||||
|
||||
**Formato:** Contesto → Decisione → Alternative valutate → Conseguenze.
|
||||
|
||||
---
|
||||
|
||||
## Indice
|
||||
|
||||
| ID | Titolo | Stato | Data |
|
||||
|---|---|---|---|
|
||||
| [D-001](#d-001--stack-tecnologico) | Stack tecnologico | Proposta | {{DATA}} |
|
||||
| [D-002](#d-002--sviluppo-spec-driven-vincolante) | Sviluppo spec-driven vincolante | Accettata | {{DATA}} |
|
||||
| [D-003](#d-003--la-documentazione-vive-nel-repository) | La documentazione vive nel repository | Accettata | {{DATA}} |
|
||||
|
||||
---
|
||||
|
||||
## D-001 — Stack tecnologico
|
||||
|
||||
**Stato:** Proposta · {{DATA}}
|
||||
|
||||
### Contesto
|
||||
<!-- DA COMPILARE: vincoli del committente, competenze, sistemi esistenti con cui integrarsi. -->
|
||||
|
||||
### Decisione
|
||||
<!-- DA COMPILARE: linguaggi, framework, database, code, storage, deploy. -->
|
||||
|
||||
### Alternative valutate
|
||||
- <!-- DA COMPILARE: alternativa — perché scartata. -->
|
||||
|
||||
### Conseguenze
|
||||
- <!-- DA COMPILARE -->
|
||||
|
||||
---
|
||||
|
||||
## D-002 — Sviluppo spec-driven vincolante
|
||||
|
||||
**Stato:** Accettata · {{DATA}}
|
||||
|
||||
### Contesto
|
||||
Le regole di business scritte solo nel codice emergono dal debugging invece che dalla
|
||||
specifica, e si scoprono quando un difetto le rivela.
|
||||
|
||||
### Decisione
|
||||
Nessuna implementazione senza una `SPEC-xxx` in stato *Approvata*. Ogni spec contiene: contesto,
|
||||
requisiti coperti (`REQ-xxx`), contratto API, modello dati, regole, casi di errore, criteri di
|
||||
accettazione, task derivati (`T-xxx`). `07-quality/TRACEABILITY.md` mantiene la matrice
|
||||
REQ → SPEC → T → test e non deve avere righe vuote. Il contratto API (`04-api/openapi.yaml`) è
|
||||
la fonte di verità e si scrive prima del codice.
|
||||
|
||||
### Alternative valutate
|
||||
- **Documentazione a valle del codice.** Produce documenti veri ma tardivi; le regole restano
|
||||
scoperte finché un bug non le rivela.
|
||||
|
||||
### Conseguenze
|
||||
- La fase di documentazione precede quella di codice; il codice inizia più tardi e procede più dritto.
|
||||
- Una spec approvata si modifica solo con una nuova `D-xxx` o una revisione tracciata.
|
||||
|
||||
---
|
||||
|
||||
## D-003 — La documentazione vive nel repository
|
||||
|
||||
**Stato:** Accettata · {{DATA}}
|
||||
|
||||
### Contesto
|
||||
Documentazione e codice divergono quando vivono in luoghi diversi.
|
||||
|
||||
### Decisione
|
||||
`docs/` sta nel repository del codice e si aggiorna **nella stessa modifica** del codice che la
|
||||
riguarda.
|
||||
|
||||
### Alternative valutate
|
||||
- **Wiki esterno.** Più comodo da modificare, ma non versionato con il codice.
|
||||
|
||||
### Conseguenze
|
||||
- Una revisione del codice è anche revisione della documentazione.
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# DEVELOPMENT LOG — Diario tecnico
|
||||
|
||||
Diario in ordine cronologico inverso. Registra **cosa si è scoperto e perché si è deciso così**,
|
||||
non l'elenco delle modifiche (quello è in [`CHANGELOG.md`](CHANGELOG.md)). Le voci non si
|
||||
cancellano: si annotano.
|
||||
|
||||
Formato del titolo: `## AAAA-MM-GG (n) · titolo che dice cosa si è capito`
|
||||
|
||||
---
|
||||
|
||||
## {{DATA}} · Nasce la documentazione
|
||||
|
||||
Creato lo scheletro della documentazione spec-driven. Decisioni iniziali: `D-001` (stack,
|
||||
proposta), `D-002` (metodo spec-driven), `D-003` (documentazione nel repository).
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
# PROJECT MEMORY — Memoria permanente
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Da leggere **all'inizio di ogni sessione di lavoro** sul progetto. Contiene ciò che non è
|
||||
deducibile dal codice e che, se dimenticato, fa ripetere errori già commessi. Non è un
|
||||
riassunto della documentazione: ogni voce qui deve avere un perché.
|
||||
|
||||
---
|
||||
|
||||
## 1. In una frase
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
|
||||
---
|
||||
|
||||
## 2. Le cose da non dimenticare mai
|
||||
|
||||
<!-- Una sottosezione per vincolo. Ogni vincolo dice: la regola, perché esiste (meglio se con
|
||||
un fatto osservato e la data), la decisione D-xxx che la fissa. -->
|
||||
|
||||
### 2.1 <!-- vincolo -->
|
||||
|
||||
---
|
||||
|
||||
## 3. Azioni pendenti fuori sequenza
|
||||
|
||||
<!-- DA COMPILARE o «nessuna». Es. credenziali da ruotare. -->
|
||||
|
||||
---
|
||||
|
||||
## 4. Metodo
|
||||
|
||||
Spec-driven **vincolante** (D-002): `REQ → SPEC → T → codice + test → TRACEABILITY`.
|
||||
Si implementa solo da una spec *Approvata*.
|
||||
|
||||
---
|
||||
|
||||
## 5. Come riprendere il lavoro
|
||||
|
||||
1. Leggere questo file e [`../00-INDEX.md`](../00-INDEX.md) (riquadri delle novità in testa).
|
||||
2. Aprire [`TODO.md`](TODO.md): fuori sequenza, poi la fase corrente.
|
||||
3. Per il task scelto: la sua spec, i `REQ` e le `D-xxx` citate.
|
||||
@@ -0,0 +1,45 @@
|
||||
# ROADMAP
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
---
|
||||
|
||||
## 0. Fuori sequenza — da fare subito
|
||||
|
||||
| # | Azione | Perché ora |
|
||||
|:-:|---|---|
|
||||
| <!-- DA COMPILARE o «nessuna» --> | | |
|
||||
|
||||
## 1. Fasi
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ FASE 0 · Documentazione │
|
||||
│ visione · requisiti · architettura · spec · contratto · dati │
|
||||
│ ▸ criterio di uscita: spec della fase 1 approvate │
|
||||
└────────────────────────────────────────────────────────────────────┘
|
||||
▼
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ FASE 1 · Fondamenta │
|
||||
│ <!-- DA COMPILARE --> │
|
||||
│ ▸ criterio di uscita: <!-- DA COMPILARE --> │
|
||||
└────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 2. Dettaglio
|
||||
|
||||
### Fase 1 · Fondamenta
|
||||
|
||||
| Spec | Task | Criterio di uscita |
|
||||
|---|---|---|
|
||||
| <!-- SPEC-001 --> | <!-- T-010…019 --> | |
|
||||
|
||||
## 3. Dipendenze critiche
|
||||
|
||||
<!-- DA COMPILARE -->
|
||||
|
||||
## 4. Rischi
|
||||
|
||||
| Rischio | Fase | Contromisura |
|
||||
|---|---|---|
|
||||
| <!-- DA COMPILARE --> | | |
|
||||
@@ -0,0 +1,39 @@
|
||||
# TODO — Backlog
|
||||
|
||||
Ultimo aggiornamento: **{{DATA}}**
|
||||
|
||||
Stato: ⬜ da fare · 🟡 in corso · ✅ fatto · ⏸ sospeso
|
||||
|
||||
**Regola:** un task entra in lavorazione solo se la sua specifica è approvata (D-002). Al termine
|
||||
si aggiorna [`TRACEABILITY.md`](../07-quality/TRACEABILITY.md) — quando il test passa, non quando
|
||||
il codice è scritto.
|
||||
|
||||
**Numerazione:** i task di `SPEC-nnn` usano il blocco `T-nnn0…T-nnn9` (la spec 4 usa i task da
|
||||
40 a 49); oltre il nono si aggiunge un suffisso (`b`, `c`). I task fuori sequenza usano i numeri
|
||||
da 1 a 9.
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Fuori sequenza — prima di tutto
|
||||
|
||||
| ID | Task | Stato |
|
||||
|---|---|:-:|
|
||||
| <!-- T-001 --> | | ⬜ |
|
||||
|
||||
---
|
||||
|
||||
## Fase 0 · Documentazione
|
||||
|
||||
| ID | Task | Spec | Stato |
|
||||
|---|---|---|:-:|
|
||||
| — | Visione, glossario, casi d'uso, requisiti | — | 🟡 |
|
||||
| — | Architettura, modello dati, sicurezza | — | ⬜ |
|
||||
| — | Specifiche della fase 1 approvate | — | ⬜ |
|
||||
|
||||
---
|
||||
|
||||
## Fase 1 · Fondamenta
|
||||
|
||||
| ID | Task | Spec | Stato |
|
||||
|---|---|---|:-:|
|
||||
| <!-- T-010 --> | | <!-- SPEC-001 --> | ⬜ |
|
||||
Reference in New Issue
Block a user