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 Permalink 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 laudit : `#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 larchitecture du premier socle ou de la V1 SQLite.
Le problème principal nest pas labsence de documentation, mais le mélange
entre :
- larchitecture historique ;
- larchitecture 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 quil 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 larchitecture 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 ;
- lautonomie dune enquête ;
- limmutabilité des preuves originales ;
- SQLite comme source de vérité ;
- lexécution asynchrone ;
- linterdiction 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 dintégration nest pas encore terminé.
### Corriger le prochain chantier
Le texte indiquant que le prochain chantier porte sur linitialisation
asynchrone du registre doutils est obsolète.
Le chantier actif est désormais :
```text
#107 — Pivot e-mail forensique
```
Le ticket `#42` reste linventaire 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 lexécution parallèle échoue pour
une raison réelle.
---
# 2. CHANGELOG.md
## Problème
Le changelog ne reflète pas encore correctement lampleur 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 dinté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 doutils ;
- la provenance OSINT ;
- le graphe denquê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
- linfrastructure SQLite, les migrations et les transactions appartiennent à
`src/database` ;
- les requêtes métier appartiennent aux DAO ;
- les widgets et vues naccè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 dexclure inutilement les
postes institutionnels.
Action :
- documenter les versions réellement minimales requises par les API utilisées ;
- distinguer lenvironnement 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 naccè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 linterface 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 lorsquun 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 dune 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 lancienne roadmap vers :
```text
docs/archive/ROADMAP_LEGACY.md
```
ou la supprimer si Forgejo conserve déjà tout lhistorique 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 loutil 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 daudit 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
Len-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 à linventaire
- `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 laudit 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 ;
- laudit versionné reste immuable après validation ;
- le ticket de migration nest 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 quils utilisent exclusivement des données synthétiques ;
2. vérifier quils ne contiennent aucune donnée denquête réelle ;
3. les déplacer vers une fixture clairement nommée sils 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 dune 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 laudit V10 ;
- archiver laudit 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` nest plus documenté sans cible correspondante ;
- larchitecture distingue Database, DAO, services et GTK ;
- le nommage documenté correspond au code actuel ;
- les dépendances optionnelles sont clairement identifiées ;
- les données denquête réelles sont explicitement interdites dans le dépôt ;
- tous les liens Markdown sont valides ;
- `git diff --check` passe.