labfy-investigation/docs/DOCUMENTATION_AUDIT_V10.md
grayTerminal-sh 8fcd6b0e0d docs/ update
2026-07-24 14:40:11 +02:00

781 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Audit de la documentation — état V10
> Projet : Labfy Investigation
> Date : 2026-07-24
> Branche examinée : `main`
> Commit de référence : `613d2096bc5eeb2c1c4f60ae701292e19a2abe66`
> Schéma SQLite courant : V10
> Tickets ouverts au moment de l’audit : `#107` et `#42`
## Conclusion générale
La documentation doit être remise à niveau.
Le `README.md` a déjà reçu plusieurs ajouts récents et reste globalement utile.
En revanche, les documents de référence situés dans `docs/` décrivent encore
en grande partie l’architecture du premier socle ou de la V1 SQLite.
Le problème principal n’est pas l’absence de documentation, mais le mélange
entre :
- l’architecture historique ;
- l’architecture cible ;
- les fonctionnalités déjà implémentées ;
- les tickets encore ouverts ;
- le schéma SQLite réellement courant.
Ce mélange a déjà provoqué une mauvaise interprétation par un agent local, qui
a présenté la V1 et le ticket #023 comme l’état actuel du dépôt.
## Ordre de confiance à documenter
Toute analyse du projet doit respecter cet ordre :
1. code présent sur `main` ;
2. tests automatisés ;
3. migrations et scripts SQL ;
4. commits ;
5. tickets Forgejo fermés ;
6. tickets Forgejo ouverts ;
7. documentation générale ;
8. documents historiques et anciennes roadmaps.
Un ticket ouvert décrit un chantier, pas une fonctionnalité terminée.
Un audit versionné décrit la version qu’il nomme, pas automatiquement la
version courante.
---
# Matrice des documents
| Document | État | Priorité | Action |
|---|---|---:|---|
| `README.md` | Partiellement à jour | Haute | Corriger l’état courant et les commandes |
| `CHANGELOG.md` | Incomplet | Haute | Documenter V10 et le pivot EML préparatoire |
| `docs/ARCHITECTURE.md` | Obsolète | Critique | Réécrire l’architecture actuelle |
| `docs/DEVELOPMENT.md` | Partiellement faux | Critique | Aligner sur Makefile et couches réelles |
| `docs/CONVENTIONS.md` | Obsolète par endroits | Haute | Aligner langue, SQL, suppression et Git |
| `docs/ROADMAP.md` | Très obsolète | Critique | Remplacer par une roadmap vivante |
| `docs/BACKLOG.md` | Vide | Haute | Supprimer ou rediriger vers Forgejo |
| `docs/DEPENDENCE.md` | Globalement utile | Moyenne | Vérifier les outils réellement invoqués |
| `docs/database/DATABASE_ARCHITECTURE.md` | Marqué V1 | Critique | Transformer en architecture V10 |
| `docs/database/SCHEMA_AUDIT_V1.md` | Historique non signalé | Critique | Déplacer et ajouter un avertissement |
| `docs/database/SCHEMA_AUDIT_CURRENT.md` | À ajouter | Critique | Référence courante V10 |
| `docs/database/audits/SCHEMA_AUDIT_V10.md` | À ajouter | Haute | Photographie versionnée de V10 |
---
# 1. README.md
## Éléments corrects
Le README décrit correctement :
- le dépôt Forgejo comme source principale ;
- le caractère non opérationnel du logiciel ;
- le cadre légal et éthique ;
- l’autonomie d’une enquête ;
- l’immutabilité des preuves originales ;
- SQLite comme source de vérité ;
- l’exécution asynchrone ;
- l’interdiction de construire des commandes shell dynamiques ;
- une grande partie des fonctionnalités ajoutées jusqu’à V9/V10.
## Mises à jour nécessaires
### Ajouter explicitement le schéma courant
Ajouter dans l’état du projet :
```text
Version du schéma SQLite : V10
```
avec un lien vers :
```text
docs/database/SCHEMA_AUDIT_CURRENT.md
```
### Mettre à jour les fonctionnalités présentes
Ajouter dans la liste du socle actuel :
- pipeline EML asynchrone préparatoire ;
- extraction MIME sécurisée ;
- assainissement des noms de pièces jointes ;
- propositions bancaires IBAN/BIC ;
- vocabulaire contrôlé ;
- table `bank_account_entities` ;
- types canoniques de relations liés au pivot e-mail ;
- tests `test_controlled_vocab`, `test_bank_proposal` et
`test_eml_pipeline_task`.
Préciser que le ticket `#107` reste ouvert et que le flux complet de révision
et d’intégration n’est pas encore terminé.
### Corriger le prochain chantier
Le texte indiquant que le prochain chantier porte sur l’initialisation
asynchrone du registre d’outils est obsolète.
Le chantier actif est désormais :
```text
#107 — Pivot e-mail forensique
```
Le ticket `#42` reste l’inventaire permanent des outils OSINT.
### Corriger les commandes de validation
Utiliser :
```sh
make clean
make -j8
make -j8 test
git diff --check
```
Prévoir un retour séquentiel uniquement si l’exécution parallèle échoue pour
une raison réelle.
---
# 2. CHANGELOG.md
## Problème
Le changelog ne reflète pas encore correctement l’ampleur du commit V10.
## Ajouts à documenter
Dans une section `Unreleased` ou `0.1.0-dev`, ajouter au minimum :
- schéma SQLite V10 ;
- table `bank_account_entities` ;
- statuts de vérification et provenances contrôlés ;
- nouveaux types système de relations ;
- pipeline EML asynchrone ;
- extraction MIME sécurisée ;
- détection et proposition IBAN/BIC ;
- vocabulaire contrôlé ;
- premiers objets d’intégration EML ;
- tests associés ;
- migration V9 vers V10 ;
- mise à jour de `schema_current.sql`.
## Règle recommandée
Le changelog doit décrire les capacités livrées, pas seulement les premiers
modules historiques de la fenêtre GTK.
---
# 3. docs/ARCHITECTURE.md
## Problèmes observés
Le document date du 14 juillet et décrit essentiellement le premier socle.
Il ne représente pas correctement :
- `src/dao` et `include/dao` ;
- les services métier ;
- les tâches asynchrones ;
- le gestionnaire de tâches ;
- le registre et le catalogue d’outils ;
- la provenance OSINT ;
- le graphe d’enquête ;
- les types canoniques de relations ;
- les extractions ;
- les comptes sociaux ;
- les personnes et leurs rôles ;
- le pipeline EML ;
- les propositions bancaires ;
- le vocabulaire contrôlé.
La phrase suivante est désormais incorrecte :
```text
Aucune requête SQL ne doit apparaître ailleurs.
```
Le dépôt possède une couche DAO contenant les requêtes métier.
## Architecture à documenter
```text
Interface GTK4
↓
Application et contrôleurs
↓
Services métier / tâches
↓
DAO et adaptateurs
├── SQLite
├── système de fichiers
├── outils externes
└── futures API
↓
Modèles métier
```
## Règle SQL correcte
- l’infrastructure SQLite, les migrations et les transactions appartiennent à
`src/database` ;
- les requêtes métier appartiennent aux DAO ;
- les widgets et vues n’accèdent jamais directement à SQLite ;
- les modèles ne connaissent pas SQLite.
## Organisation actuelle à ajouter
```text
include/core/
include/dao/
include/database/
include/models/
include/views/
include/widgets/
src/core/
src/dao/
src/database/
src/models/
src/views/
src/widgets/
```
## Statuts à utiliser
Pour éviter les ambiguïtés, chaque grande capacité doit être marquée :
```text
IMPLÉMENTÉ
PARTIEL
PRÉVU
HISTORIQUE
```
---
# 4. docs/DEVELOPMENT.md
## Incohérences avec le Makefile
### Cible `make docs`
Le document mentionne :
```sh
make docs
```
mais le Makefile courant ne définit pas de cible `docs`.
Action :
- supprimer cette commande ;
- ou créer réellement une cible Doxygen avant de la documenter.
### Options de compilation
Le document affirme que tout le projet utilise :
```text
-Wpedantic
```
Le Makefile principal utilise globalement :
```text
-std=c17 -Wall -Wextra -Werror
```
`-Wpedantic` est ajouté à plusieurs tests, mais pas aux `CFLAGS` globaux.
Il faut choisir une seule vérité :
- ajouter `-Wpedantic` globalement au Makefile ;
- ou corriger le document.
### Versions minimales
Le document annonce :
- GTK 4.10+ ;
- SQLite 3.45+ ;
- GCC 15+.
Ces versions ne sont pas imposées par le Makefile via `pkg-config`.
Pour la future cible Ubuntu, annoncer GCC 15+ risque d’exclure inutilement les
postes institutionnels.
Action :
- documenter les versions réellement minimales requises par les API utilisées ;
- distinguer l’environnement de développement Arch de la cible minimale
Ubuntu.
### Architecture MVC
Le terme MVC est désormais trop réducteur.
Utiliser plutôt :
```text
architecture en couches
```
avec services, DAO, tâches et adaptateurs.
### Accès SQLite
Remplacer :
```text
Toutes les opérations sur SQLite passent par la couche DAO.
```
par :
```text
Les migrations, connexions, statements et transactions appartiennent à la
couche Database. Les requêtes métier passent par les DAO. Les vues, widgets et
modèles n’accèdent jamais directement à SQLite.
```
### Commandes
Mettre les commandes recommandées à jour :
```sh
make clean
make -j8
make -j8 test
git diff --check
```
---
# 5. docs/CONVENTIONS.md
## Langue du code
Le document affirme que le domaine métier est écrit en français, avec des
exemples tels que `preuve.c` et `entite.c`.
Le code actuel utilise principalement des noms techniques anglais :
```text
evidence_record
entity_dao
relation_service
bank_proposal
controlled_vocab
eml_pipeline_task
```
## Convention proposée
- code C, noms de fichiers, fonctions, structures et codes persistés : anglais
technique cohérent ;
- libellés de l’interface et documentation utilisateur : français ;
- termes juridiques et métier : français dans les textes ;
- codes persistés : anglais stable, sans dépendre du libellé affiché.
Exemple :
```text
code persistant : proposed
libellé français : Proposé
```
## Suppression
Le document affirme que les objets importants ne sont jamais supprimés
immédiatement.
Cette règle doit être qualifiée table par table :
- suppression logique par défaut pour les objets de traçabilité ;
- suppression physique autorisée uniquement lorsqu’un DAO et les contraintes
métier la prévoient explicitement ;
- aucune affirmation générale non vérifiée.
## Git
Remplacer la règle trop stricte :
```text
Un ticket terminé correspond à un commit.
```
par :
```text
Chaque commit porte un changement cohérent et vérifiable. Un ticket peut
nécessiter plusieurs commits, mais chaque commit doit compiler, être testé et
laisser la branche stable.
```
## Schéma
Ajouter :
- toute migration possède un script versionné ;
- une base existante est migrée transactionnellement ;
- la version courante est documentée dans
`SCHEMA_AUDIT_CURRENT.md` ;
- les audits anciens sont historiques.
---
# 6. docs/ROADMAP.md
## Problème critique
Le document conserve plusieurs générations de roadmap dans le même fichier.
Il présente encore comme non réalisés :
- création d’une enquête ;
- validation ;
- initialisation SQLite ;
- `InvestigationProject` ;
- preuves ;
- entités ;
- relations ;
- tâches asynchrones ;
- plusieurs fonctions déjà présentes.
Il commence également une seconde roadmap au ticket `#031.1`.
Cette structure est la principale source de confusion documentaire du dépôt.
## Action recommandée
Remplacer complètement le fichier par une roadmap courte et vivante.
Structure proposée :
```markdown
# Roadmap
## Source de vérité
Les tickets Forgejo sont la source de vérité du suivi.
## État courant
- Schéma SQLite : V10
- Développement actif
- Logiciel non prêt pour la production
## Chantiers actifs
- #107 — Pivot e-mail forensique
## Inventaires permanents
- #42 — Arsenal OSINT
## Prochains axes
- terminer le flux de révision EML ;
- persister les propositions confirmées ;
- améliorer les tests de migration V9 → V10 ;
- mettre à jour le packaging Ubuntu ;
- poursuivre le graphe et les rapports.
## Historique
Consulter le changelog et les tickets fermés.
```
Déplacer l’ancienne roadmap vers :
```text
docs/archive/ROADMAP_LEGACY.md
```
ou la supprimer si Forgejo conserve déjà tout l’historique utile.
---
# 7. docs/BACKLOG.md
## État
Le fichier est vide.
## Action
Deux choix valables :
### Choix recommandé
Supprimer le fichier et utiliser uniquement Forgejo.
### Alternative
Conserver un simple pointeur :
```markdown
# Backlog
Le backlog actif est suivi dans Forgejo :
https://git.labfytools.com/fy59/labfy-investigation/issues
Ce fichier ne décrit pas l’état courant du projet.
```
Ne pas dupliquer les tickets dans un backlog Markdown.
---
# 8. docs/DEPENDENCE.md
## Éléments corrects
Le document couvre déjà :
- Tesseract ;
- ExifTool ;
- dig ;
- host ;
- whois ;
- curl ;
- OpenSSL ;
- qpdf ;
- John/pdf2john ;
- Sherlock ;
- Maigret ;
- Holehe.
## Vérifications nécessaires
Comparer les exécutables documentés avec :
- `tool_catalog.c` ;
- `tool_registry.c` ;
- `eml_pipeline_task.c` ;
- `rib_ocr.c` ;
- `exiftool_metadata.c` ;
- `pdf_password_recovery.c`.
Documenter pour chaque dépendance :
- obligatoire ou optionnelle ;
- fonctionnalité concernée ;
- commande de détection ;
- commande de version ;
- comportement lorsque l’outil est absent ;
- paquet Arch ;
- paquet Ubuntu ;
- compatibilité avec dépôts institutionnels restreints.
## Ajout recommandé
Ajouter une matrice :
| Outil | Fonction | Obligatoire | Dégradation si absent |
|---|---|---:|---|
| Tesseract | OCR | Non | Analyse partielle |
| ExifTool | Métadonnées | Non | Métadonnées externes absentes |
| dig | DNS | Non | Action DNS indisponible |
| John/pdf2john | PDF protégé | Non | Pas d’audit de mot de passe |
Ne jamais présenter un outil optionnel comme condition de démarrage.
---
# 9. docs/database/DATABASE_ARCHITECTURE.md
## Problème critique
L’en-tête indique encore :
```text
Statut : Stable (V1)
Schéma : V1
```
alors que la branche contient un schéma V10.
Le document a reçu un ajout V10 en fin de fichier, mais son titre, son statut et
la majorité de son inventaire restent centrés sur V1.
## Action recommandée
Transformer le document en architecture courante V10.
Nouvel en-tête :
```markdown
# Architecture de la base de données
> Statut : architecture courante
> Version du schéma : V10
> Source de vérité détaillée : SCHEMA_AUDIT_CURRENT.md
```
## Éléments à ajouter à l’inventaire
- `osint_executions` ;
- liaisons de provenance OSINT ;
- `comptes_sociaux` ;
- `person_roles` ;
- `extractions` ;
- tables de disposition et viewport du graphe ;
- `relation_types` ;
- `bank_account_entities`.
## Accès SQL
Remplacer la centralisation dans un unique module `database` par la séparation
réelle :
```text
Database : connexion, statements, transactions, schémas et migrations
DAO : requêtes métier
Services : orchestration transactionnelle
GTK : aucune requête SQL
```
## Migrations
Ajouter un résumé V1 → V10 et renvoyer vers l’audit courant pour les détails.
---
# 10. docs/database/SCHEMA_AUDIT_V1.md
## Problème
Le document est facilement interprété comme l’état actuel.
## Action
Déplacer vers :
```text
docs/database/audits/SCHEMA_AUDIT_V1.md
```
Ajouter en première ligne :
```markdown
> [!WARNING]
> Document historique. Cet audit décrit exclusivement la V1.
> Il ne représente pas le schéma courant.
> Consulter ../SCHEMA_AUDIT_CURRENT.md.
```
---
# 11. Nouveaux documents de base
Organisation recommandée :
```text
docs/database/
├── DATABASE_ARCHITECTURE.md
├── SCHEMA_AUDIT_CURRENT.md
└── audits/
├── SCHEMA_AUDIT_V1.md
├── SCHEMA_AUDIT_V9.md
└── SCHEMA_AUDIT_V10.md
```
Règle :
- `SCHEMA_AUDIT_CURRENT.md` est mis à jour à chaque migration ;
- l’audit versionné reste immuable après validation ;
- le ticket de migration n’est pas terminé sans mise à jour documentaire.
---
# 12. Hygiène du dépôt hors documentation
Deux éléments présents à la racine doivent être contrôlés :
```text
meline59760.txt
watch_20260723-211101
```
Ils ne ressemblent pas à des fichiers source ou de documentation standards.
Avant de les conserver publiquement :
1. vérifier qu’ils utilisent exclusivement des données synthétiques ;
2. vérifier qu’ils ne contiennent aucune donnée d’enquête réelle ;
3. les déplacer vers une fixture clairement nommée s’ils sont utiles aux tests ;
4. les supprimer du dépôt sinon ;
5. ajouter les motifs nécessaires dans `.gitignore`.
Ne jamais versionner :
- `Enquete.sqlite` réelle ;
- captures ;
- e-mails réels ;
- RIB réels ;
- pièces jointes réelles ;
- exports bruts issus d’une enquête ;
- données personnelles non synthétiques.
---
# Ordre de mise à jour recommandé
## Commit 1 — Références SQLite
- ajouter `SCHEMA_AUDIT_CURRENT.md` ;
- ajouter l’audit V10 ;
- archiver l’audit V1 ;
- mettre à jour `DATABASE_ARCHITECTURE.md`.
## Commit 2 — Roadmap et suivi
- remplacer `ROADMAP.md` ;
- supprimer ou rediriger `BACKLOG.md` ;
- corriger la section suivi du README.
## Commit 3 — Architecture et développement
- mettre à jour `ARCHITECTURE.md` ;
- mettre à jour `DEVELOPMENT.md` ;
- mettre à jour `CONVENTIONS.md`.
## Commit 4 — Dépendances et présentation
- vérifier `DEPENDENCE.md` ;
- compléter `CHANGELOG.md` ;
- finaliser `README.md`.
## Commit 5 — Hygiène du dépôt
- auditer les fichiers isolés à la racine ;
- supprimer ou déplacer les éléments non conformes ;
- ajuster `.gitignore`.
---
# Critères de validation documentaire
La mise à jour est terminée lorsque :
- aucun document courant ne présente V1 comme schéma actuel ;
- V10 est identifiée comme version courante ;
- les audits historiques sont explicitement marqués historiques ;
- la roadmap ne duplique plus les tickets fermés ;
- `#107` est présenté comme chantier actif ;
- `#42` est présenté comme inventaire permanent ;
- les commandes documentées existent réellement dans le Makefile ;
- `make docs` n’est plus documenté sans cible correspondante ;
- l’architecture distingue Database, DAO, services et GTK ;
- le nommage documenté correspond au code actuel ;
- les dépendances optionnelles sont clairement identifiées ;
- les données d’enquête réelles sont explicitement interdites dans le dépôt ;
- tous les liens Markdown sont valides ;
- `git diff --check` passe.