- 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
2.5 KiB
2.5 KiB
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(methodesmark_running,mark_completed,update_progress,mark_failed) - Resolution : Guard clauses ajoutees dans les 4 methodes de transition.
mark_runningleveValueErrorsi status != PENDING.mark_completedleve si status != RUNNING.update_progressleve si status != RUNNING.mark_failedaccepte PENDING ou RUNNING uniquement. 11 tests couvrent les transitions valides et invalides dansTestAnalysisJobGuardClauses.
[MAJ — RESOLU] Value objects non immutables
- Localisation :
domain/value_objects.py - Resolution :
frozen=Trueajoute 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
analysisunifie dans les couches exposees (API, frontend, store).AnalysisJobconserve en domaine interne pour sa semantique de job long-running, les interfaces publiques utilisentanalysis_id.
Points positifs
- Bounded contexts clairement identifies et isoles (Document, Analysis/Chunking) avec des modeles, services et repos separes
domain/models.pycompact avec deux entites bien definies, pas de "god object"AnalysisJobporte 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.