# Audit Master — Release Branch Quality Gate

Referentiel central d'audit qualite pour les branches `release/X.Y.Z` de Docling Studio.

Ce document est le **chef d'orchestre** : il definit les regles, commandite les audits unitaires, et normalise les rapports.

---

## 1. Perimetre

L'audit s'execute sur une branche `release/X.Y.Z` **apres feature freeze**, avant le merge dans `main`.

**Cibles :**

| Cible | Chemin |
|-------|--------|
| Backend (Python/FastAPI) | `document-parser/` (hors `.venv/`, `__pycache__/`, `tests/`) |
| Frontend (Vue 3/TypeScript) | `frontend/src/` |
| Tests backend | `document-parser/tests/` |
| Tests frontend | `frontend/src/**/*.test.*` |
| Tests e2e | `e2e/` |
| Infrastructure | `Dockerfile`, `docker-compose.yml`, `nginx.conf`, `.github/` |

---

## 2. Niveaux de criticite

Chaque ecart trouve lors d'un audit est classe selon ces 4 niveaux :

| Niveau | Tag | Description | Impact sur le GO/NO-GO |
|--------|-----|-------------|------------------------|
| **CRITICAL** | `[CRIT]` | Violation bloquante — faille de securite, corruption de donnees, violation d'architecture majeure | **Bloquant** — le release ne peut pas partir |
| **MAJOR** | `[MAJ]` | Violation significative — couplage fort, dette technique importante, test manquant sur un chemin critique | Bloquant si > 3 ecarts MAJOR non resolus |
| **MINOR** | `[MIN]` | Ecart de qualite — nommage, taille de fichier, duplication legere | Non bloquant — a corriger dans le prochain cycle |
| **INFO** | `[INFO]` | Observation, suggestion d'amelioration, bonne pratique non respectee mais sans risque | Non bloquant — informatif |

---

## 3. Bareme de compliance

Chaque audit unitaire produit une **note de compliance sur 100**.

### Calcul

Chaque item de checklist a un **poids** defini dans la fiche d'audit :

| Poids | Signification |
|-------|---------------|
| 3 | Critique — violation = ecart CRITICAL |
| 2 | Important — violation = ecart MAJOR |
| 1 | Standard — violation = ecart MINOR |

**Formule :**

```
score = (somme des poids des items conformes / somme totale des poids) * 100
```

### Seuils de decision

| Score | Verdict | Action |
|-------|---------|--------|
| >= 80 | **GO** | Release autorisee |
| 60 - 79 | **GO CONDITIONNEL** | Release autorisee si 0 CRITICAL, plan de remediation pour les MAJOR |
| < 60 | **NO-GO** | Release bloquee — corriger et re-auditer |

**Regle absolue** : tout ecart `[CRIT]` non resolu = **NO-GO** quel que soit le score.

---

## 4. Liste des audits

Les audits sont executes dans l'ordre ci-dessous. Chacun est une fiche autonome dans `audits/`.

| # | Audit | Fichier | Focus |
|---|-------|---------|-------|
| 01 | Clean Architecture | [01-clean-architecture.md](audits/01-clean-architecture.md) | Respect des couches, flux de dependances |
| 02 | DDD | [02-ddd.md](audits/02-ddd.md) | Bounded contexts, entites, value objects, ubiquitous language |
| 03 | Clean Code | [03-clean-code.md](audits/03-clean-code.md) | Nommage, taille, lisibilite |
| 04 | KISS | [04-kiss.md](audits/04-kiss.md) | Simplicite, pas de sur-ingenierie |
| 05 | DRY | [05-dry.md](audits/05-dry.md) | Duplication, factorisation |
| 06 | SOLID | [06-solid.md](audits/06-solid.md) | 5 principes SOLID |
| 07 | Decouplage | [07-decoupling.md](audits/07-decoupling.md) | Front/back, inter-features, contrats |
| 08 | Securite | [08-security.md](audits/08-security.md) | OWASP, secrets, injection, CORS |
| 09 | Tests | [09-tests.md](audits/09-tests.md) | Couverture, qualite, e2e |
| 10 | CI / Build | [10-ci-build.md](audits/10-ci-build.md) | Pipeline, Docker, health check |
| 11 | Documentation | [11-documentation.md](audits/11-documentation.md) | Changelog, version, TODOs |
| 12 | Performance | [12-performance.md](audits/12-performance.md) | N+1, memory, concurrence |

---

## 5. Format de rapport attendu

Chaque audit produit un rapport dans `reports/release-X.Y.Z/XX-nom.md` respectant ce format :

```markdown
# Rapport d'audit : [Nom de l'audit]

**Release** : X.Y.Z
**Date** : YYYY-MM-DD
**Auditeur** : [nom ou "claude-code"]

---

## Score de compliance

| Metrique | Valeur |
|----------|--------|
| Items conformes | XX / YY |
| Score | XX / 100 |
| Ecarts CRITICAL | N |
| Ecarts MAJOR | N |
| Ecarts MINOR | N |
| Ecarts INFO | N |

---

## Ecarts constates

### [CRIT] Titre de l'ecart
- **Localisation** : `chemin/fichier.py:ligne`
- **Constat** : description factuelle
- **Regle violee** : reference a l'item de checklist
- **Remediation** : action corrective proposee

### [MAJ] Titre de l'ecart
...

### [MIN] Titre de l'ecart
...

### [INFO] Titre de l'ecart
...

---

## Points positifs

- ...

---

## Verdict partiel : GO / GO CONDITIONNEL / NO-GO
```

---

## 6. Rapport de synthese

Le fichier `reports/release-X.Y.Z/summary.md` consolide tous les audits :

```markdown
# Synthese d'audit — Release X.Y.Z

**Date** : YYYY-MM-DD
**Branche** : release/X.Y.Z

---

## Tableau de bord

| # | Audit | Score | CRIT | MAJ | MIN | INFO | Verdict |
|---|-------|-------|------|-----|-----|------|---------|
| 01 | Clean Architecture | XX | N | N | N | N | GO |
| 02 | DDD | XX | N | N | N | N | GO |
| ... | ... | ... | ... | ... | ... | ... | ... |

**Score global** : XX / 100 (moyenne ponderee)
**Ecarts CRITICAL totaux** : N
**Ecarts MAJOR totaux** : N

---

## Ecarts CRITICAL (tous audits confondus)

1. [audit] description — fichier:ligne

---

## Verdict final : GO / GO CONDITIONNEL / NO-GO

Conditions (si GO CONDITIONNEL) :
- ...
```

---

## 7. Execution

### Lancer un audit complet

```
Audite la branche release/X.Y.Z en suivant docs/audit/master.md
```

### Lancer un audit unitaire

```
Execute l'audit docs/audit/audits/02-ddd.md sur la branche courante
```

### Re-auditer apres correction

```
Re-audite uniquement les ecarts CRITICAL et MAJOR du rapport docs/audit/reports/release-X.Y.Z/summary.md
```
