docs/ update

This commit is contained in:
grayTerminal-sh 2026-07-24 14:40:11 +02:00
parent 613d2096bc
commit 8fcd6b0e0d
12 changed files with 7658 additions and 5029 deletions

View file

@ -1,440 +1,619 @@
# Architecture
Version : 2.0
Dernière mise à jour : 2026-07-14
Auteur : fy59
> **Version :** 3.0
> **Dernière mise à jour :** 2026-07-24
> **Schéma SQLite courant :** V10
> **Statut :** architecture courante
---
# Objectif
## 1. Objectif
Ce document décrit l'architecture logicielle de **Labfy Investigation**.
Ce document décrit l'architecture logicielle actuelle de Labfy Investigation.
Il constitue le document de référence du projet.
Il définit :
Son objectif est de :
- les responsabilités des couches ;
- la direction autorisée des dépendances ;
- le cycle de vie d'une enquête ;
- la place de SQLite et du système de fichiers ;
- le fonctionnement des tâches asynchrones ;
- l'intégration des outils externes ;
- la projection graphique des données ;
- les règles de sécurité et de traçabilité.
- définir les responsabilités de chaque module ;
- garantir une architecture cohérente ;
- limiter le couplage entre les composants ;
- faciliter les évolutions futures ;
- permettre la réalisation de tests unitaires indépendants de l'interface graphique.
---
# Vision
Labfy Investigation est un logiciel libre d'investigation numérique,
développé en **C17** avec **GTK4**.
Le projet a pour objectif de fournir un environnement professionnel
permettant de gérer une enquête numérique de bout en bout :
- création d'une enquête ;
- collecte des preuves ;
- organisation des informations ;
- analyse ;
- génération de rapports.
L'application est conçue pour être utilisée aussi bien par :
- des particuliers ;
- des journalistes ;
- des analystes OSINT ;
- des experts judiciaires ;
- des forces de l'ordre.
---
# Principes fondamentaux
## Une enquête = un dossier autonome
Chaque enquête contient tout ce qui est nécessaire à son fonctionnement.
La documentation détaillée du schéma SQLite se trouve dans :
```text
docs/database/DATABASE_ARCHITECTURE.md
docs/database/SCHEMA_AUDIT_CURRENT.md
```
MonEnquete/
---
## 2. Vision
Labfy Investigation est un poste de travail local d'investigation numérique et
d'OSINT développé en C17 avec GTK4.
Une enquête doit pouvoir être :
- créée ;
- ouverte ;
- copiée ;
- sauvegardée ;
- archivée ;
- transmise ;
avec son dossier et sa base SQLite.
Le logiciel n'est pas encore prêt pour un usage opérationnel en production.
Les formats et interfaces peuvent évoluer tant que le projet reste en
développement actif.
---
## 3. Sources de vérité
Pour déterminer l'état réel d'une fonction :
1. code de `main` ;
2. tests ;
3. migrations SQL ;
4. commits ;
5. tickets Forgejo ;
6. documentation.
Les documents historiques ne décrivent pas l'état courant.
SQLite est la source de vérité des données structurées d'une enquête.
Le système de fichiers est la source de vérité des fichiers originaux et
dérivés référencés par la base.
Le graphe, la barre latérale et les autres vues ne possèdent pas leur propre
copie métier indépendante.
---
## 4. Principes fondamentaux
### 4.1 Une enquête est autonome
```text
MonEnquete/
├── 00_BaseDeDonnees/
│ └── Enquete.sqlite
├── 01_Preuves_Originales/
├── 02_Preuves_Traitees/
├── 03_Chronologie/
├── 04_Entites/
├── 05_Rapports/
└── ...
└── 05_Rapports/
```
Une enquête peut être :
Aucune donnée métier d'une enquête ne doit être stockée dans une base globale.
- copiée ;
- déplacée ;
- synchronisée ;
- sauvegardée ;
- archivée ;
- transmise.
Les préférences générales de l'application, lorsqu'elles seront ajoutées,
resteront séparées des données d'enquête.
Aucune dépendance externe ne doit être nécessaire.
### 4.2 Les preuves originales sont immuables
L'application ne modifie jamais un fichier original importé.
Toute annotation, conversion, extraction, analyse ou expurgation produit un
objet dérivé.
### 4.3 Le cœur ne dépend pas de GTK
Les modèles, DAO et services métier doivent pouvoir être testés sans lancer
l'interface graphique.
### 4.4 Les widgets ne contiennent pas la logique métier
Un widget :
- affiche un état ;
- collecte une intention utilisateur ;
- déclenche une action de l'application ;
- présente le résultat.
Il ne :
- construit pas de requête SQL ;
- ne déplace pas directement une preuve ;
- ne lance pas une commande shell ;
- ne décide pas seul de la validation métier d'une donnée.
### 4.5 Les traitements longs sont asynchrones
Le thread GTK principal ne réalise pas les opérations longues.
### 4.6 Les résultats automatiques restent révisables
Une donnée OCR, OSINT ou dérivée ne devient pas un fait confirmé sans action
explicite lorsque le domaine l'exige.
---
## Les preuves originales sont immuables
## 5. Architecture en couches
Les preuves originales ne doivent jamais être modifiées.
Toute opération produisant :
- une annotation ;
- une conversion ;
- une extraction ;
- une analyse ;
doit produire un nouveau fichier dans un espace dédié.
---
## Le Core est indépendant de GTK
La logique métier ne dépend jamais de l'interface graphique.
Le Core doit pouvoir être testé sans lancer GTK.
---
## Les Widgets ne connaissent pas le métier
Les widgets affichent uniquement les informations fournies.
Ils ne manipulent jamais :
- SQLite ;
- le système de fichiers ;
- les preuves.
---
## Développement incrémental
Chaque ticket doit :
- compiler sans warning ;
- être documenté ;
- être testé ;
- ne pas casser les fonctionnalités existantes.
---
# Architecture générale
```
Utilisateur
+-----------------+
| GTK4 |
| Views / Widgets |
+-----------------+
+-----------------+
| Application |
+-----------------+
+---------------------------+
| InvestigationProject |
+---------------------------+
```text
┌──────────────────────────────────────────────┐
│ Interface GTK4 │
│ views / widgets │
└──────────────────────┬───────────────────────┘
│ intentions et affichage
┌──────────────────────▼───────────────────────┐
│ Application et contrôleurs │
│ cycle de vie, session, navigation, messages │
└──────────────────────┬───────────────────────┘
│ orchestration
┌──────────────────────▼───────────────────────┐
│ Services métier et tâches │
│ import, relations, OSINT, EML, graphe │
└───────────────┬───────────────────┬──────────┘
│ │
▼ ▼
FileSystem Database
┌───────────────▼────────────┐ ┌────▼─────────────────┐
│ DAO │ │ Adaptateurs │
│ requêtes métier SQLite │ │ fichiers / CLI / API│
└───────────────┬────────────┘ └────┬─────────────────┘
│ │
└────────┬────────┘
Investigation
Models
┌───────────────▼───────────────────▼──────────┐
│ Infrastructure │
│ SQLite / transactions / système de fichiers │
└──────────────────────────────────────────────┘
```
Cette architecture permet une séparation claire entre :
- l'interface graphique ;
- la logique métier ;
- le stockage.
Les modèles métier circulent entre ces couches sans dépendre de GTK ni de
SQLite.
---
# Organisation du projet
## 6. Organisation du dépôt
```
labfy-investigation/
include/
src/
database/
docs/
resources/
tests/
tools/
README.md
LICENSE
CHANGELOG.md
CONTRIBUTING.md
Makefile
```text
database/ scripts SQL versionnés et schéma courant
docs/ architecture, conventions et procédures
include/core/ interfaces des services et du cœur
include/dao/ interfaces d'accès métier aux données
include/database/ interfaces de l'infrastructure SQLite
include/models/ modèles métier
include/views/ fenêtres et dialogues GTK
include/widgets/ widgets réutilisables
resources/ ressources de l'application
src/core/ services, tâches et orchestration métier
src/dao/ requêtes métier SQLite
src/database/ connexion, schéma, statements, transactions, erreurs
src/models/ implémentation des modèles
src/views/ fenêtres et dialogues GTK
src/widgets/ composants GTK réutilisables
tests/ tests unitaires et d'intégration ciblée
```
---
# Organisation du code
## 7. Responsabilités des modules
```
src/
### 7.1 Point d'entrée et application
core/
database/
models/
views/
widgets/
utils/
`src/main.c` démarre l'application.
La couche application :
- gère le cycle de vie GTK ;
- crée la fenêtre principale ;
- ouvre ou crée une enquête ;
- remplace la session active uniquement après succès ;
- coordonne les messages utilisateur ;
- relie les services métier aux vues ;
- ferme proprement les ressources.
Une erreur d'ouverture ne doit pas détruire une session valide déjà active.
### 7.2 Core et services métier
`src/core` contient notamment :
- représentation et validation d'une enquête ;
- session et projet d'enquête ;
- construction de l'arborescence ;
- tâches d'arrière-plan ;
- gestionnaire de tâches ;
- registre et catalogue d'outils ;
- exécution de processus ;
- hachage et copie de fichiers ;
- import et intégrité des preuves ;
- services d'entités et de relations ;
- chargement du graphe ;
- actions OSINT ;
- analyse EML, IBAN, OCR, métadonnées et PDF ;
- vocabulaire contrôlé ;
- pipeline EML.
Un service métier peut coordonner plusieurs DAO, une transaction et une
opération de fichier.
### 7.3 Modèles
`src/models` représente les données manipulées par l'application.
Les modèles :
- ne lancent pas de requête SQL ;
- ne dépendent pas de GTK ;
- valident leurs invariants lorsque cela leur appartient ;
- exposent une API claire de création, lecture et destruction.
### 7.4 Infrastructure Database
`src/database` gère :
- ouverture et fermeture de SQLite ;
- activation des clés étrangères ;
- lecture de la version ;
- installation du schéma ;
- migrations ;
- statements préparés ;
- transactions ;
- traduction structurée des erreurs.
Cette couche ne contient pas l'orchestration complète d'une fonctionnalité
utilisateur.
### 7.5 DAO
`src/dao` contient les requêtes métier.
Un DAO :
- transforme des lignes SQLite en modèles ;
- utilise des statements préparés ;
- ne dépend pas de GTK ;
- ne lance pas d'outil externe ;
- ne décide pas seul d'un workflow multi-étapes ;
- expose des erreurs exploitables par le service appelant.
### 7.6 Vues et widgets
`src/views` contient les fenêtres et dialogues complets.
`src/widgets` contient les composants réutilisables, notamment :
- barre latérale ;
- arborescence ;
- panneau de tâches ;
- listes ;
- espace de travail ;
- graphe.
Les vues et widgets ne deviennent pas propriétaires des données persistées.
---
## 8. Cycle de vie d'une enquête
### 8.1 Création
```text
sélection du dossier
validation du chemin
création de l'arborescence
initialisation transactionnelle de SQLite V10
création de l'identité de l'enquête
ouverture d'une session
construction des vues
```
---
Un échec laisse l'application dans un état cohérent et nettoie les artefacts
partiels prévus par le service.
# Description des modules
### 8.2 Ouverture
## Core
```text
sélection du dossier
validation de l'arborescence
ouverture de SQLite
lecture de schema_version
migration éventuelle
chargement de l'enquête
construction de l'arborescence et du graphe
remplacement atomique de la session active
```
Le Core pilote l'application.
Une base plus récente que l'application doit être refusée.
Il ne dépend jamais de GTK.
### 8.3 Fermeture
Il gère :
- le cycle de vie de l'application ;
- l'ouverture d'une enquête ;
- la fermeture d'une enquête ;
- les interactions entre les modules.
---
## InvestigationProject
InvestigationProject est le point d'entrée métier.
Il est responsable de :
- créer une enquête ;
- ouvrir une enquête ;
- fermer une enquête ;
- valider une enquête ;
- initialiser SQLite ;
- gérer le système de fichiers.
Toute manipulation d'une enquête passe obligatoirement par ce module.
---
## Database
Le module Database est responsable du stockage.
Il gère :
La fermeture libère :
- les tâches ;
- les références de modèles ;
- la connexion SQLite ;
- le schéma ;
- les migrations ;
- les transactions.
Aucune requête SQL ne doit apparaître ailleurs.
- la session ;
- les widgets dépendants ;
- les ressources externes.
---
## Models
## 9. Gestion des preuves
Les modèles représentent les objets métier.
### 9.1 Import
Par exemple :
Le flux d'import vise à garantir l'intégrité :
- InvestigationNode
- Preuve
- Entité
- Relation
- Chronologie
Ils ne connaissent ni GTK ni SQLite.
---
## Views
Les vues représentent les fenêtres de l'application.
Elles ne contiennent aucune logique métier.
---
## Widgets
Les widgets sont des composants GTK réutilisables.
Par exemple :
- Sidebar
- Workspace
- InvestigationTreeView
- Toolbar
- Statusbar
---
## Utils
Fonctions génériques.
Exemples :
- SHA-256
- Dates
- Gestion des fichiers
- Journalisation
Les utilitaires ne doivent dépendre d'aucun module métier.
---
# Flux de données
Lorsqu'un utilisateur ouvre une enquête :
```
Utilisateur
GTK
Application
InvestigationProject
FileSystem
Database
Investigation
GUI
```text
validation de la source
SHA-256 source
copie vers une destination contrôlée
SHA-256 destination
écriture SQLite
validation ou nettoyage
```
Le flux est toujours unidirectionnel.
L'import groupé traite les fichiers de manière contrôlée et produit un bilan
détaillé.
### 9.2 Reclassement
Un changement de type peut impliquer :
- vérification préalable de l'intégrité ;
- déplacement cohérent du fichier interne ;
- mise à jour SQLite ;
- rollback et restauration en cas d'échec.
L'UUID, l'empreinte et l'historique ne doivent pas être recréés silencieusement.
### 9.3 Dérivés
Les extractions, OCR, pièces jointes EML et versions traitées restent reliés à
leur preuve source.
---
# Dépendances
## 10. Tâches asynchrones
Les dépendances suivent toujours cette règle :
Les tâches longues utilisent l'infrastructure de tâche d'arrière-plan et le
gestionnaire de tâches.
```
Widgets
Views
Application
InvestigationProject
┌──┴───────┐
▼ ▼
Database FileSystem
Models
Une tâche expose selon ses besoins :
```text
pending
running
completed
failed
cancelled
```
Les dépendances inverses sont interdites.
Elle doit :
- éviter l'accès direct à GTK depuis un thread de travail ;
- transférer le résultat vers le thread principal ;
- conserver une erreur structurée ;
- libérer ses ressources même après annulation ;
- ne pas laisser une transaction ouverte ;
- ne pas écrire simultanément dans SQLite sans coordination.
---
# Gestion de la mémoire
## 11. Outils externes et OSINT
Chaque allocation possède une fonction de libération correspondante.
### 11.1 Registre et catalogue
Les responsabilités de libération sont clairement définies.
Le registre détecte la présence et la version des outils.
Aucun module ne libère une ressource qu'il n'a pas créée.
Le catalogue décrit les capacités et les actions compatibles avec une
sélection.
Une dépendance absente désactive l'action concernée sans empêcher le démarrage.
### 11.2 Exécution
Les outils sont lancés avec `GSubprocess`.
Les arguments sont transmis séparément.
Aucune commande shell dynamique n'est construite.
Les exécutions persistées peuvent conserver :
- outil et version ;
- cible et paramètres ;
- dates ;
- code de retour ;
- sorties brutes ;
- empreintes ;
- statut d'analyse ;
- objets intégrés.
### 11.3 Intégration
Une action OSINT suit le modèle :
```text
sélection
validation de l'action
tâche asynchrone
sortie brute
propositions normalisées
révision
intégration transactionnelle
rafraîchissement des vues
```
---
# Gestion des erreurs
## 12. Graphe d'enquête
Les erreurs remontent toujours jusqu'à Application.
Le graphe est une projection de SQLite.
L'interface graphique est uniquement responsable de leur affichage.
Il représente notamment :
- entités ;
- relations ;
- preuves ou extractions lorsque le modèle le prévoit ;
- positions et viewport persistés séparément des données métier.
Les coordonnées et le zoom sont un état de présentation.
Une modification du graphe qui change le métier doit passer par un service et
être persistée dans SQLite avant d'être considérée comme acquise.
Le graphe ne doit jamais inventer une relation seulement parce que deux nœuds
sont proches visuellement.
---
# Tests
## 13. Pivot EML
Chaque nouveau module doit pouvoir être testé indépendamment.
Statut :
Les tests unitaires ne doivent jamais dépendre de GTK.
```text
PARTIEL
```
La branche contient des briques d'analyse EML, d'extraction MIME, d'IBAN, OCR,
ExifTool, vocabulaire contrôlé, propositions bancaires et pipeline de tâche.
Le flux cible est :
```text
EML original
en-têtes et MIME
pièces jointes dérivées
empreintes et métadonnées
OCR et indicateurs
valeurs brutes + normalisées + dérivées
révision humaine
intégration transactionnelle
```
Les valeurs brutes restent immuables.
Une IP de relais SMTP ne doit pas être présentée comme l'adresse personnelle
d'un suspect.
Une donnée bancaire observée ne prouve pas l'identité de l'auteur d'une fraude.
Le ticket Forgejo #107 reste la référence fonctionnelle du chantier.
---
# Évolutivité
## 14. Erreurs et journalisation
L'architecture doit permettre l'ajout de nouveaux modules sans modifier les composants existants.
Les couches basses produisent des erreurs structurées.
Les nouvelles fonctionnalités doivent privilégier l'extension plutôt que la modification.
Les services ajoutent le contexte métier.
L'application décide :
- du journal technique ;
- du message utilisateur ;
- du maintien ou du remplacement de la session ;
- de la possibilité de réessayer.
Les messages ne doivent pas divulguer inutilement :
- chemins absolus sensibles ;
- données personnelles ;
- contenu complet d'une preuve ;
- secrets ou jetons.
---
# Objectifs à long terme
## 15. Sécurité
Le projet doit permettre :
Règles obligatoires :
- la gestion complète d'une enquête numérique ;
- la conservation de la chaîne de preuve ;
- l'intégration de modules OSINT ;
- l'analyse de fichiers ;
- la génération de rapports professionnels ;
- le packaging multiplateforme.
Le logiciel doit rester :
- libre ;
- documenté ;
- modulaire ;
- testable ;
- maintenable.
- requêtes préparées pour les données variables ;
- clés étrangères activées ;
- chemins contrôlés ;
- neutralisation des traversées `../` ;
- aucune ouverture automatique de pièce jointe ;
- aucun chargement automatique de ressource distante d'un e-mail ;
- limites de taille et de profondeur pour les formats complexes ;
- aucune commande shell dynamique ;
- aucune installation automatique d'outil ;
- aucune donnée réelle d'enquête dans les tests ou le dépôt ;
- aucune action intrusive non autorisée.
---
# Conclusion
## 16. Tests
Toute nouvelle fonctionnalité doit respecter cette architecture.
Le cœur, les modèles, DAO, migrations et tâches possèdent des tests ciblés.
En cas de dérogation, celle-ci devra être documentée et justifiée.
Les tests GTK restent limités aux composants qui nécessitent réellement GTK.
L'objectif est de garantir la stabilité du projet tout en facilitant son évolution sur le long terme.
Les scénarios critiques incluent :
- base neuve ;
- migration ;
- rollback ;
- import interrompu ;
- annulation ;
- erreur d'outil ;
- donnée malformée ;
- doublon ;
- intégrité ;
- clés étrangères ;
- conservation de la valeur brute ;
- absence d'une dépendance optionnelle.
Validation :
```sh
make clean
make -j8
make -j8 test
git diff --check
```
---
## 17. Règles d'évolution
Une nouvelle fonctionnalité doit :
1. respecter la direction des dépendances ;
2. réutiliser les services existants avant d'en créer un concurrent ;
3. définir clairement la propriété mémoire ;
4. ajouter les tests nécessaires ;
5. documenter les formats persistés ;
6. utiliser des fixtures synthétiques ;
7. préserver les données brutes ;
8. maintenir la branche compilable ;
9. mettre à jour l'architecture lorsque ses responsabilités changent.

View file

@ -1,302 +1,616 @@
# Conventions de développement
Version : 1.0
> **Version :** 2.0
> **Dernière mise à jour :** 2026-07-24
> **Projet :** Labfy Investigation
---
# Philosophie
## 1. Objectif
Labfy Investigation est développé comme un logiciel d'enquête numérique.
Ces conventions définissent les règles communes du dépôt.
Les choix d'architecture privilégient :
Elles visent à garantir :
- la lisibilité ;
- la maintenabilité ;
- la robustesse ;
- la traçabilité ;
- la simplicité.
- un code lisible et maintenable ;
- une séparation claire des responsabilités ;
- la traçabilité des données d'enquête ;
- la stabilité des formats persistés ;
- des tests reproductibles ;
- une documentation qui distingue l'état réel du projet de son historique.
Une solution simple et cohérente est toujours préférée à une solution
complexe.
Lorsqu'une convention contredit le code courant, le problème doit être résolu :
soit le code est corrigé, soit la convention est mise à jour. La divergence ne
doit pas devenir permanente.
---
# Langue
## 2. Hiérarchie des sources
Le domaine métier est écrit en français.
Pour déterminer l'état réel du projet, utiliser cet ordre de confiance :
1. code présent sur la branche `main` ;
2. tests automatisés ;
3. scripts SQL et migrations ;
4. commits ;
5. tickets Forgejo fermés ;
6. tickets Forgejo ouverts ;
7. documentation courante ;
8. documents historiques et anciennes roadmaps.
Un ticket ouvert décrit un chantier, pas une fonctionnalité terminée.
Un audit nommé `SCHEMA_AUDIT_V1.md` ou `SCHEMA_AUDIT_V9.md` décrit uniquement
la version indiquée. La référence courante est :
```text
docs/database/SCHEMA_AUDIT_CURRENT.md
```
---
## 3. Langue et terminologie
### 3.1 Code et identifiants techniques
Le code C, les noms de fichiers, les fonctions, les structures, les constantes
et les codes persistés utilisent un anglais technique cohérent.
Exemples :
- preuve
- entite
- personne
- source
- chronologie
- journal
- hypothese
- recherche
```text
evidence_record
entity_dao
relation_service
bank_proposal
controlled_vocab
eml_pipeline_task
created_at
verification_status
```
Les standards techniques conservent leur nom d'origine.
Les identifiants persistés doivent être stables et indépendants des libellés
affichés.
Exemple :
```text
code persistant : proposed
libellé français : Proposé
```
Un libellé peut être traduit ou reformulé sans modifier le code persistant.
### 3.2 Interface et documentation
L'interface utilisateur et la documentation destinée aux utilisateurs sont
rédigées en français.
Les termes juridiques ou métier restent en français dans les textes lorsque
cela améliore la précision.
### 3.3 Abréviations
Les abréviations sont limitées aux formes techniques reconnues :
```text
UUID
SHA-256
MIME
UTC
SQL
DAO
OCR
EML
IBAN
BIC
```
Les noms de variables raccourcis sans nécessité sont interdits.
Préférer :
```c
relative_path
verification_status
evidence_record
created_at
```
Éviter :
```c
path
stat
rec
crt
```
---
## 4. Organisation et dépendances entre couches
Le projet suit une architecture en couches :
```text
Interface GTK4
Application et contrôleurs
Services métier et tâches
DAO et adaptateurs
├── SQLite
├── système de fichiers
├── outils externes
└── futures API
Modèles métier
```
Règles obligatoires :
- le cœur métier ne dépend pas de GTK ;
- les modèles ne connaissent ni GTK ni SQLite ;
- les vues et widgets n'exécutent aucune requête SQL ;
- les vues et widgets ne manipulent pas directement les preuves sur disque ;
- les migrations, connexions, statements et transactions appartiennent à la
couche Database ;
- les requêtes métier appartiennent aux DAO ;
- les services orchestrent les opérations impliquant plusieurs DAO ou
adaptateurs ;
- les opérations longues sont exécutées dans des tâches asynchrones ;
- le graphe est une projection de SQLite, jamais une seconde source de vérité.
Chaque module possède une responsabilité clairement identifiable.
---
## 5. Code C
### 5.1 Standard
Le projet utilise exclusivement :
```text
C17
```
Le Makefile principal compile avec :
```text
-std=c17 -Wall -Wextra -Werror
```
Plusieurs cibles de tests ajoutent également `-Wpedantic`.
Aucun avertissement ne doit être ignoré sans justification documentée.
### 5.2 Nommage
- fichiers : `snake_case.c` et `snake_case.h` ;
- fonctions : `snake_case` ;
- variables : noms explicites ;
- constantes : `UPPER_SNAKE_CASE` ;
- types publics : `PascalCase` lorsque cela correspond aux conventions GLib ;
- fonctions publiques préfixées par leur module.
Exemples :
- uuid
- sha256
- mime_type
- sqlite
- created_at
- updated_at
- relative_path
```c
database_open()
evidence_dao_insert()
relation_service_create()
eml_pipeline_task_new()
```
---
### 5.3 Structures
# Architecture
Le projet est organisé par domaine métier.
Les structures publiques sont opaques lorsque cela protège les invariants du
module.
Exemple :
```
preuve
preuve.h
preuve.c
entite
entite.h
entite.c
```c
typedef struct EvidenceRecord EvidenceRecord;
```
Chaque module possède une responsabilité unique.
Un champ ne doit être public que lorsque l'accès direct est réellement prévu
par l'API.
### 5.4 Mémoire
Toute allocation possède un propriétaire clair.
Chaque API doit permettre de déterminer :
- qui alloue ;
- qui libère ;
- si une chaîne est empruntée ou copiée ;
- si une structure peut survivre au module qui l'a créée ;
- si un callback transfère la propriété.
Les conventions GLib sont utilisées de manière cohérente :
```text
_new() retourne généralement une nouvelle référence
_ref() ajoute une référence
_unref() retire une référence
_free() libère un objet non référencé
_dup_*() retourne une copie possédée
_peek_*() retourne une valeur empruntée
```
### 5.5 Erreurs
Les erreurs attendues sont remontées avec `GError` ou l'abstraction d'erreur du
module concerné.
Une fonction ne doit pas :
- masquer une erreur importante ;
- transformer silencieusement un échec en succès partiel ;
- afficher directement une boîte de dialogue depuis le cœur métier ;
- journaliser des données sensibles sans nécessité.
Les erreurs techniques sont journalisées. L'application décide de leur
présentation graphique.
---
# SQL
## 6. SQLite
Une table représente un objet métier.
### 6.1 Version courante
Une table importante possède :
La version courante du schéma est :
- une structure C ;
- un module C ;
- des tests.
Les objets métier utilisent :
```
TEXT PRIMARY KEY
```text
V10
```
contenant un UUID.
Les scripts versionnés sont conservés dans :
Les tables de référence utilisent :
```
INTEGER PRIMARY KEY
```text
database/schema_v1.sql
...
database/schema_v10.sql
```
---
Le complément idempotent du schéma courant est :
# UUID
Tous les objets métier utilisent un UUID.
Exemple :
```
preuve
entite
personne
source
chronologie
journal
```text
database/schema_current.sql
```
Il n'existe pas simultanément :
### 6.2 Identifiants
```
id
uuid
Les objets métier utilisent généralement :
```sql
id TEXT PRIMARY KEY
```
La colonne :
avec un UUID généré par l'application.
```
id
```
Les tables de référence peuvent utiliser un identifiant entier lorsque cela
correspond à leur rôle.
contient directement l'UUID.
La convention doit être vérifiée table par table : aucune généralisation ne
doit remplacer la lecture du schéma réel.
---
### 6.3 Dates
# Dates
Les dates persistées utilisent l'UTC.
Toutes les dates sont enregistrées en UTC.
Format attendu lorsque la table impose une date complète :
Format :
```
```text
YYYY-MM-DDTHH:MM:SSZ
```
La conversion vers l'heure locale est réservée à l'affichage.
### 6.4 Requêtes
Toute valeur variable utilise une requête préparée :
```c
sqlite3_prepare_v2()
sqlite3_bind_*()
sqlite3_step()
```
La concaténation de données utilisateur dans une requête SQL est interdite.
Les requêtes SQL statiques peuvent être exécutées avec `sqlite3_exec()` lorsque
cela reste adapté.
### 6.5 Transactions
Toute opération portant sur plusieurs écritures liées doit être atomique.
Exemples :
- création d'une enquête ;
- import d'une preuve ;
- reclassement d'une preuve ;
- création d'une relation avec ses preuves ;
- intégration de propositions OSINT ;
- migration de schéma ;
- validation finale d'un pivot EML.
En cas d'échec, les écritures partielles sont annulées et les modifications du
système de fichiers sont restaurées ou nettoyées.
### 6.6 Migrations
Toute évolution persistante doit :
1. définir une nouvelle version ;
2. ajouter un script `schema_vN.sql` ;
3. ajouter ou adapter la fonction d'installation ;
4. raccorder la migration depuis la version précédente ;
5. mettre à jour la version courante ;
6. tester une base neuve ;
7. tester une ancienne base migrée ;
8. exécuter `PRAGMA integrity_check` ;
9. exécuter `PRAGMA foreign_key_check` ;
10. mettre à jour l'audit courant et la documentation.
Une ancienne migration publiée ne doit pas être réécrite pour modifier son
sens historique.
### 6.7 Accès par couche
- `src/database` : infrastructure SQLite, schéma, statements, transactions,
erreurs et migrations ;
- `src/dao` : requêtes métier ;
- `src/core` : orchestration métier ;
- `src/views` et `src/widgets` : aucun SQL direct.
---
# Chemins
## 7. Fichiers et preuves
Les chemins sont toujours relatifs à la racine de l'enquête.
### 7.1 Chemins
Les chemins persistés dans une enquête sont relatifs à sa racine.
Autorisé :
```
```text
01_Preuves_Originales/Documents/facture.pdf
```
Interdit :
```text
/home/utilisateur/Documents/facture.pdf
```
/home/user/Documents/...
Une entrée externe peut être absolue pendant l'import, mais le chemin enregistré
dans l'enquête doit respecter le modèle prévu par le schéma.
### 7.2 Immutabilité des preuves originales
Une preuve originale n'est jamais modifiée.
Toute opération produisant :
- une annotation ;
- une conversion ;
- une extraction ;
- un OCR ;
- une analyse ;
- une version expurgée ;
crée un nouvel objet ou un nouveau fichier dérivé.
### 7.3 Valeurs brutes et valeurs interprétées
Les données suivantes restent distinctes :
```text
valeur brute
valeur normalisée
valeur dérivée
correction utilisateur
statut de vérification
confiance
provenance
```
Une valeur brute ne doit jamais être réécrite pour correspondre à une
interprétation ultérieure.
Un résultat OCR ou OSINT est une proposition à vérifier, pas un fait confirmé.
### 7.4 Suppression
La suppression logique est privilégiée pour les objets de traçabilité, mais la
règle exacte dépend de chaque table et de chaque DAO.
Une suppression physique n'est autorisée que lorsque :
- le schéma la permet explicitement ;
- le service métier l'encadre ;
- les conséquences sur les clés étrangères et les fichiers sont testées ;
- la traçabilité requise est préservée.
---
# Suppression
## 8. Outils externes et réseau
Les objets métier importants ne sont jamais supprimés immédiatement.
Les outils externes sont optionnels sauf décision explicite contraire.
Une suppression est une modification d'état.
Exemple :
```
active
archived
deleted
```
Une purge physique éventuelle devra être explicite.
---
# Nommage
Le SQL utilise :
- snake_case
- minuscules
- aucun accent
- aucun espace
---
# Code C
Norme :
```
C17
```
Variables :
Toujours explicites.
Autorisé :
```c
relative_path
description
commentaire
created_at
```
Ils sont lancés avec `GSubprocess` et une liste d'arguments séparés.
Interdit :
```c
path
desc
comm
crt
system(dynamic_command);
```
Les fonctions utilisent le nom du module.
Interdit également :
- construire une commande shell par concaténation ;
- ouvrir automatiquement une pièce jointe ;
- charger automatiquement une ressource distante d'un e-mail HTML ;
- installer automatiquement un outil ;
- utiliser un secret découvert ;
- contourner une authentification ;
- effectuer une action intrusive non autorisée.
Chaque exécution doit pouvoir conserver :
- l'outil ;
- sa version ;
- les arguments ;
- la date UTC ;
- la cible ;
- le code de retour ;
- `stdout` et `stderr` lorsque nécessaire ;
- les empreintes des sorties persistées ;
- les objets créés ou réutilisés.
---
## 9. Asynchronisme
Toute opération susceptible de bloquer l'interface doit être exécutée hors du
thread GTK principal.
Exemples :
- copie ou hachage de fichiers ;
- import massif ;
- chargement du graphe ;
- interrogation réseau ;
- lancement d'un outil ;
- OCR ;
- extraction de métadonnées ;
- analyse EML ;
- génération de rapport.
Une tâche longue doit prévoir, lorsque cela est possible :
- un état ;
- une progression ;
- une annulation ;
- un résultat ;
- une erreur ;
- une date de début ;
- une date de fin.
Les écritures SQLite concurrentes doivent être évitées ou sérialisées par
l'architecture prévue.
---
## 10. Tests
Toute fonctionnalité importante possède des tests adaptés.
Les tests couvrent selon le cas :
- arguments invalides ;
- cas nominal ;
- échecs ;
- annulation ;
- rollback ;
- responsabilités mémoire ;
- limites de taille ;
- entrées malformées ;
- anciennes versions de base ;
- intégrité et clés étrangères ;
- régressions.
Les tests utilisent uniquement des données synthétiques.
Il est interdit de placer dans le dépôt ou de fournir à un agent de
développement :
- une base `Enquete.sqlite` réelle ;
- des captures réelles ;
- des e-mails réels ;
- des RIB réels ;
- des pièces jointes réelles ;
- toute donnée personnelle issue d'une enquête.
Validation recommandée :
```sh
make clean
make -j8
make -j8 test
git diff --check
```
Une exécution séquentielle est utilisée seulement si la parallélisation
provoque un échec réel et identifié :
```sh
make
make test
```
---
## 11. Git et tickets
Forgejo est la source de vérité du suivi.
À partir des tickets postérieurs à l'historique numéroté manuellement, le titre
ne contient pas de numéro ajouté à la main : Forgejo attribue le numéro.
Un ticket peut nécessiter plusieurs commits.
Chaque commit doit :
- porter un changement cohérent ;
- compiler ;
- conserver la branche stable ;
- inclure ou adapter les tests nécessaires ;
- ne contenir aucune donnée réelle d'enquête.
Les messages de commit sont rédigés en anglais.
Exemple :
```c
preuve_create()
preuve_load()
preuve_update()
preuve_delete()
```text
feat(database): add bank account entities
```
Aucun commit n'est effectué tant que la fonction concernée ne marche pas et que
la validation prévue n'a pas été réalisée.
---
# Structures
## 12. Documentation
Une structure représente un objet métier.
Toute décision importante est documentée.
Exemple :
Une modification doit mettre à jour les documents concernés dans le même
chantier, notamment pour :
```c
typedef struct Preuve Preuve;
- l'architecture ;
- les conventions ;
- les dépendances ;
- le schéma SQLite ;
- les migrations ;
- les formats persistés ;
- les procédures de compilation et de test ;
- les limitations légales ou techniques.
La documentation doit indiquer clairement l'un des statuts suivants lorsque
cela évite une ambiguïté :
```text
IMPLÉMENTÉ
PARTIEL
PRÉVU
HISTORIQUE
```
Les structures publiques sont opaques lorsque cela est possible.
---
# Tests
Toute nouvelle fonctionnalité importante possède un test.
Le développement suit toujours l'ordre :
```
Conception
Implémentation
Tests
Commit
```
---
# Git
Un ticket terminé correspond à un commit.
Le message de commit est rédigé en anglais.
Exemple :
```
feat(database): initialize investigation database
```
---
# Documentation
Les décisions importantes sont documentées.
Les changements de schéma SQLite sont précédés d'un audit.
Aucune décision importante ne doit exister uniquement dans le code.
---
# Objectif
Le projet doit rester compréhensible plusieurs années après sa création.
La priorité est donnée à la qualité du code plutôt qu'à la rapidité de
développement.
La priorité reste la qualité, la traçabilité et la compréhension durable du
projet.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,781 @@
# 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.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,4 +0,0 @@
https://forum.velomania.ru/member.php?username=meline59760
https://www.youtube.com/@meline59760
https://www.baby.ru/u/meline59760
Total Websites Username Detected On : 3

View file

@ -1,5 +0,0 @@
NAME ID SIZE PROCESSOR CONTEXT UNTIL
total utilisé libre partagé tamp/cache disponible
Mem: 14Gi 5,1Gi 7,9Gi 70Mi 2,2Gi 9,8Gi
Échange: 4,0Gi 3,8Gi 224Mi