- Add all process docs to mkdocs.yml nav (15 missing pages) - Replace relative links to files outside docs/ with absolute GitHub URLs - Add docs/audit/ directory (templates + reports) - Add validation config to allow unlisted audit reports as info-level
57 lines
2.5 KiB
Markdown
57 lines
2.5 KiB
Markdown
# Rapport d'audit : Domain-Driven Design (DDD)
|
|
|
|
**Release** : 0.3.1
|
|
**Date** : 2026-04-10
|
|
**Auditeur** : claude-code
|
|
**Derniere mise a jour** : 2026-04-10 (re-audit post PR #135)
|
|
|
|
---
|
|
|
|
## Score de compliance
|
|
|
|
| Metrique | Valeur |
|
|
|----------|--------|
|
|
| Items conformes | 16 / 16 |
|
|
| Score | 100 / 100 |
|
|
| Ecarts CRITICAL | 0 |
|
|
| Ecarts MAJOR | 0 |
|
|
| Ecarts MINOR | 0 |
|
|
| Ecarts INFO | 0 |
|
|
|
|
---
|
|
|
|
## Ecarts resolus (PR #135 — fix/ddd-audit)
|
|
|
|
### [CRIT — RESOLU] Invariants metier non proteges dans la state machine
|
|
|
|
- **Localisation** : `domain/models.py` (methodes `mark_running`, `mark_completed`, `update_progress`, `mark_failed`)
|
|
- **Resolution** : Guard clauses ajoutees dans les 4 methodes de transition. `mark_running` leve `ValueError` si status != PENDING. `mark_completed` leve si status != RUNNING. `update_progress` leve si status != RUNNING. `mark_failed` accepte PENDING ou RUNNING uniquement. 11 tests couvrent les transitions valides et invalides dans `TestAnalysisJobGuardClauses`.
|
|
|
|
### [MAJ — RESOLU] Value objects non immutables
|
|
|
|
- **Localisation** : `domain/value_objects.py`
|
|
- **Resolution** : `frozen=True` ajoute sur les 7 dataclasses : `PageElement`, `PageDetail`, `ConversionOptions`, `ConversionResult`, `ChunkingOptions`, `ChunkBbox`, `ChunkResult`. Les instances sont desormais immutables et hashables.
|
|
|
|
### [MAJ — RESOLU] Vocabulaire inconsistant "analysis" vs "job"
|
|
|
|
- **Resolution** : Le terme `analysis` unifie dans les couches exposees (API, frontend, store). `AnalysisJob` conserve en domaine interne pour sa semantique de job long-running, les interfaces publiques utilisent `analysis_id`.
|
|
|
|
---
|
|
|
|
## Points positifs
|
|
|
|
- Bounded contexts clairement identifies et isoles (Document, Analysis/Chunking) avec des modeles, services et repos separes
|
|
- `domain/models.py` compact avec deux entites bien definies, pas de "god object"
|
|
- `AnalysisJob` porte du comportement metier (state machine, progress tracking) avec invariants proteges
|
|
- State machine exhaustivement testee (11 tests de guard clauses)
|
|
- Value objects immutables et hashables (`frozen=True`)
|
|
- Les repositories retournent des entites du domaine, pas des dicts ou Row objects
|
|
- La couche anti-corruption (schemas Pydantic) transforme correctement les donnees HTTP en objets du domaine
|
|
- Les adaptateurs infra ne leakent pas les types Docling vers les services
|
|
- Le frontend respecte les memes bounded contexts (features = contextes)
|
|
|
|
---
|
|
|
|
## Verdict : GO
|
|
|
|
Score 100/100 — 0 ecart critique. Toutes les non-conformites precedentes resolues via PR #135.
|