labfy-investigation/docs/ROADMAP.md
2026-07-17 10:05:29 +02:00

1569 lines
28 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.

# Roadmap
# 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, depuis la
collecte des preuves jusqu'à la génération d'un rapport.
Le logiciel est conçu pour être utilisé aussi bien par des particuliers
que par des professionnels (journalistes, enquêteurs, forces de l'ordre,
experts judiciaires, analystes OSINT).
---
# Principes d'architecture
Le développement repose sur plusieurs règles fondamentales.
## Une enquête = un dossier autonome
Chaque enquête contient l'ensemble des éléments nécessaires à son
fonctionnement.
```text
MonEnquete/
├── 00_BaseDeDonnees/
│ └── Enquete.sqlite
├── 01_Preuves_Originales/
├── 02_Preuves_Traitees/
├── 03_Chronologie/
├── 04_Entites/
├── 05_Rapports/
└── ...
```
Une enquête peut être :
- copiée ;
- sauvegardée ;
- synchronisée ;
- archivée ;
- transmise.
Sans dépendre d'une installation particulière.
---
## Séparation des responsabilités
Le Core ne dépend jamais de GTK.
La couche graphique ne contient aucune logique métier.
```text
GUI
Application
InvestigationProject
┌──────┴────────────┐
│ │
▼ ▼
FileSystem Database
Investigation
```
---
## Préservation des preuves
Les preuves originales ne sont jamais modifiées.
Toute opération produisant une version annotée,
convertie ou analysée est enregistrée dans un
espace distinct.
---
## Développement incrémental
Chaque ticket doit :
- être autonome ;
- être testé ;
- compiler sans warning ;
- ne pas introduire de régression.
Aucun ticket ne doit casser les fonctionnalités existantes.
---
# Phases du projet
## Phase 1 — Infrastructure ✅
### Architecture
- [x] Structure du projet
- [x] Architecture C17
- [x] Organisation des modules
- [x] Documentation Doxygen
- [x] Makefile
- [x] Tests unitaires
### Core
- [x] Investigation
- [x] InvestigationNode
- [x] InvestigationTreeBuilder
- [x] InvestigationTreeModel
### Interface GTK4
- [x] MainWindow
- [x] Sidebar
- [x] Workspace
- [x] GtkStack
- [x] InvestigationTreeView
- [x] Sélection des nœuds
- [x] Affichage des informations
- [x] Affichage du chemin complet
- [x] Icônes selon le type de fichier
---
# Phase 2 — Gestion des enquêtes
## TICKET-020
- [ ] Création d'une nouvelle enquête
### Objectifs
- création de l'arborescence
- création de `00_BaseDeDonnees`
- création de `Enquete.sqlite`
---
## TICKET-021
- [ ] Validation d'une enquête existante
### Objectifs
- vérifier l'arborescence
- vérifier la présence de la base
- détecter une enquête invalide
- import d'une enquête
---
## TICKET-022
- [ ] Initialisation de SQLite
### Objectifs
- création du schéma
- table metadata
- version du schéma
- UUID de l'enquête
---
## TICKET-023
- [ ] InvestigationProject
### Objectifs
- ouverture d'une enquête
- fermeture
- validation
- création
---
# Phase 3 — Consultation
- [ ] Aperçu des fichiers texte
- [ ] Aperçu des images
- [ ] Aperçu PDF
- [ ] Aperçu vidéo
- [ ] Aperçu audio
---
# Phase 4 — Base de données
- [ ] Gestion des preuves
- [ ] Gestion des entités
- [ ] Gestion des relations
- [ ] Chronologie
- [ ] Tags
- [ ] Notes
---
# Phase 5 — Analyse
- [ ] Calcul des hash
- [ ] EXIF
- [ ] OCR
- [ ] Recherche plein texte
- [ ] Analyse des métadonnées
- [ ] Import massif
---
# Phase 6 — OSINT
- [ ] Whois
- [ ] DNS
- [ ] Sous-domaines
- [ ] HTTP
- [ ] Certificats TLS
- [ ] Réseaux sociaux
- [ ] Emails
- [ ] Téléphones
---
# Phase 7 — Rapports
- [ ] Rapport HTML
- [ ] Rapport PDF
- [ ] Export ZIP
- [ ] Export dossier complet
---
# Phase 8 — Qualité
- [ ] Traductions
- [ ] Thèmes
- [ ] Tests d'intégration
- [ ] Packaging
- [ ] Installateur Linux
- [ ] Documentation utilisateur
# Objectifs à long terme
Le projet doit permettre :
- 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 et de métadonnées ;
- la génération de rapports exploitables ;
- une architecture modulaire facilitant les évolutions futures.
Le logiciel doit rester :
- libre ;
- documenté ;
- portable ;
- testable ;
- maintenable.
# Feuille de route repensée — Labfy Investigation
## Point de départ
Le ticket **#031.1 — Fermeture propre de lapplication** termine le premier socle GTK.
À ce stade, Labfy Investigation sait :
- créer une enquête ;
- ouvrir une enquête existante ;
- remplacer une session active ;
- afficher son arborescence ;
- fermer proprement lapplication ;
- ouvrir et initialiser la base SQLite ;
- charger lidentité persistante de lenquête ;
- gérer les transactions et les erreurs de base.
La suite ne doit plus être pensée comme un simple gestionnaire de fichiers.
## Vision du logiciel
Labfy Investigation doit devenir un **poste de travail OSINT orienté enquête** capable de :
- conserver les preuves originales ;
- extraire et rechercher des métadonnées ;
- créer des entités ;
- relier les données entre elles ;
- afficher les relations sous forme de graphe ;
- construire une chronologie ;
- effectuer des recherches locales ;
- lancer des outils OSINT externes ;
- interroger des services Internet ;
- conserver les résultats bruts ;
- normaliser les résultats ;
- documenter la provenance de chaque information ;
- produire un rapport exploitable.
Architecture générale :
```text
Interface GTK
Contrôleurs de lapplication
Services métier
├── preuves
├── entités
├── relations
├── recherches
├── tâches
└── rapports
Adaptateurs
├── SQLite
├── système de fichiers
├── outils CLI
├── bibliothèques
└── API Internet
```
---
# Principes non négociables
## SQLite reste la source de vérité
Le graphe, les tableaux, la chronologie et les résultats de recherche sont des vues différentes des mêmes données.
## Résultat brut et résultat normalisé sont séparés
Chaque outil doit produire :
```text
Sortie brute conservée et horodatée
+
Données normalisées utilisables dans Labfy
```
## Toute information doit avoir une provenance
Une donnée exploitable doit pouvoir répondre à ces questions :
```text
Qua-t-on trouvé ?
Quand ?
Avec quel outil ?
Avec quelle version ?
À partir de quelle requête ?
Quelle était la réponse brute ?
Quelle preuve ou source justifie linterprétation ?
```
## Les outils externes sont optionnels
Une dépendance absente ne doit pas empêcher Labfy de démarrer.
Chaque capacité peut être :
```text
Disponible
Absente
Trop ancienne
Non configurée
Désactivée
En erreur
```
## Linterface ne doit jamais être bloquée
Les opérations longues doivent fonctionner en arrière-plan :
- calcul dempreinte ;
- copie de fichiers ;
- extraction de métadonnées ;
- requêtes réseau ;
- analyse de résultats ;
- génération de rapports.
## Aucune commande shell construite avec une chaîne
Les outils externes doivent être lancés avec `GSubprocess` et une liste darguments.
## Les données déduites restent distinctes des données observées
Labfy doit distinguer :
```text
Observation directe
Résultat produit par un outil
Donnée importée
Déduction de lenquêteur
Hypothèse
```
---
# Phase 1 — Consolider le noyau dapplication
## Ticket #032 — Factoriser le chargement dune enquête
Créer un service interne unique qui :
1. ouvre une `InvestigationSession` ;
2. récupère le projet ;
3. construit larborescence ;
4. installe la session dans `Application` ;
5. conserve lancienne session en cas déchec.
Ce flux sera réutilisé par :
- création dune enquête ;
- ouverture manuelle ;
- enquêtes récentes ;
- arguments de ligne de commande ;
- restauration de session.
## Ticket #033 — Afficher les erreurs dans GTK
Créer un module commun daffichage :
- erreur ;
- avertissement ;
- confirmation ;
- information.
Les erreurs techniques restent journalisées avec GLib, mais lutilisateur doit recevoir un message graphique compréhensible.
## Ticket #034 — Gestionnaire de tâches asynchrones
Créer un modèle de tâche capable de gérer :
- état ;
- progression ;
- annulation ;
- résultat ;
- erreur ;
- date de début ;
- date de fin.
États recommandés :
```text
En attente
En cours
Terminée
Échouée
Annulée
```
Linterface GTK doit rester fluide pendant lexécution.
## Ticket #035 — File de tâches et panneau dactivité
Ajouter une file de tâches et une vue GTK permettant de suivre :
- imports ;
- calculs dempreintes ;
- recherches OSINT ;
- extractions de métadonnées ;
- exports.
## Ticket #036 — Configuration de lapplication
Créer une configuration persistante pour :
- chemins doutils ;
- délais dexécution ;
- activation des modules ;
- préférences dinterface ;
- paramètres réseau ;
- comportement des imports.
Les secrets et clés API ne doivent pas être stockés en clair dans la base de lenquête.
---
# Phase 2 — Système doutils externes
## Ticket #037 — Registre des capacités et dépendances
Créer un registre central capable de détecter :
- présence dun exécutable ;
- chemin réel ;
- version ;
- compatibilité minimale ;
- statut ;
- message derreur.
Premiers outils candidats :
```text
dig
host
whois
curl
openssl
file
exiftool
ffprobe
strings
```
## Ticket #038 — Interface commune des adaptateurs OSINT
Définir les concepts opaques :
```c
OsintTool
OsintRequest
OsintExecution
OsintResult
```
Un adaptateur devra pouvoir :
- valider une requête ;
- vérifier sa disponibilité ;
- exécuter loutil ;
- appliquer un délai maximal ;
- capturer `stdout` ;
- capturer `stderr` ;
- récupérer le code de retour ;
- analyser la sortie ;
- retourner un résultat normalisé.
## Ticket #039 — Exécuteur sécurisé `GSubprocess`
Créer un module générique qui lance un programme sans passer par un shell.
Il doit gérer :
- tableau darguments ;
- environnement contrôlé ;
- délai maximal ;
- annulation ;
- taille maximale des sorties ;
- code de retour ;
- erreurs de lancement.
## Ticket #040 — Conservation des exécutions brutes
Ajouter les tables et fichiers nécessaires pour conserver :
- outil ;
- version ;
- cible ;
- paramètres ;
- date ;
- durée ;
- sortie standard ;
- sortie derreur ;
- code de retour ;
- SHA-256 de la sortie brute ;
- statut danalyse.
Exemple de stockage :
```text
02_Preuves_Traitees/
└── Resultats_Outils/
└── <date>_<outil>_<identifiant>.json
```
## Ticket #041 — Vue des dépendances et capacités
Créer une page GTK affichant :
```text
ExifTool Disponible
dig Disponible
ffprobe Absent
Recherche sociale Non configurée
```
Une capacité absente doit expliquer comment lactiver sans bloquer lapplication.
---
# Phase 3 — Preuves et fichiers
## Ticket #042 — Modèle opaque `EvidenceRecord`
Champs initiaux :
- identifiant ;
- nom original ;
- nom interne ;
- chemin relatif ;
- type ;
- taille ;
- SHA-256 ;
- date dimportation ;
- date de collecte déclarée ;
- source ;
- description ;
- statut dintégrité.
## Ticket #043 — Schéma SQLite et DAO des preuves
Créer :
- table `evidence` ;
- table `evidence_types` ;
- index ;
- contraintes ;
- DAO dinsertion ;
- DAO de lecture ;
- DAO de mise à jour autorisée.
## Ticket #044 — Calcul SHA-256 par blocs
Créer un module indépendant capable de traiter les gros fichiers sans les charger entièrement en mémoire.
Ce ticket peut être synchronisé avec le cours de C.
## Ticket #045 — Copie sûre et contrôlée dun fichier
Créer un service de copie qui :
- valide le fichier source ;
- refuse les chemins dangereux ;
- évite les collisions ;
- copie vers une destination temporaire ;
- synchronise la copie ;
- recalcule son empreinte ;
- renomme atomiquement le fichier final.
Ce ticket peut être synchronisé avec le cours Unix.
## Ticket #046 — Import transactionnel dune preuve
Pipeline :
```text
Validation
→ SHA-256 source
→ Copie temporaire
→ SHA-256 destination
→ Écriture SQLite
→ Validation de transaction
→ Renommage final
```
En cas déchec, aucune preuve partiellement importée ne doit rester active.
## Ticket #047 — Dialogue GTK dimport
Ajouter :
```text
Importer une preuve
```
Le formulaire doit permettre :
- choix du fichier ;
- type ;
- source ;
- date de collecte ;
- description ;
- confirmation.
## Ticket #048 — Liste et fiche détaillée des preuves
Afficher sous forme de tableau :
- nom ;
- type ;
- taille ;
- date ;
- source ;
- empreinte ;
- état dintégrité.
Une fiche détaillée doit afficher toutes les informations disponibles.
## Ticket #049 — Vérification dintégrité
Recalculer les empreintes et détecter :
- fichier absent ;
- taille modifiée ;
- empreinte modifiée ;
- chemin invalide ;
- doublon.
---
# Phase 4 — Métadonnées et analyse locale
## Ticket #050 — Premier adaptateur externe : ExifTool
Ce sera le premier adaptateur complet validant toute larchitecture :
```text
EvidenceRecord
→ tâche asynchrone
→ ExifTool
→ JSON brut
→ résultat stocké
→ métadonnées normalisées
```
## Ticket #051 — Modèle de métadonnées normalisées
Créer un modèle générique :
- clé ;
- valeur textuelle ;
- type de valeur ;
- namespace ;
- source ;
- outil ;
- confiance ;
- date dextraction.
## Ticket #052 — Extracteurs spécialisés
Ajouter progressivement :
- `file` pour le type réel ;
- `ffprobe` pour audio et vidéo ;
- extraction PDF ;
- extraction de documents bureautiques ;
- analyse EML ;
- analyse darchives.
## Ticket #053 — Recherche dindicateurs dans les fichiers
Détecter dans les métadonnées et contenus extraits :
- emails ;
- domaines ;
- URL ;
- adresses IP ;
- téléphones ;
- pseudonymes ;
- noms dutilisateurs ;
- coordonnées GPS.
Les résultats doivent être proposés à lenquêteur avant création dentités.
## Ticket #054 — Vue des métadonnées
Afficher :
- métadonnées brutes ;
- métadonnées normalisées ;
- filtres ;
- recherche ;
- provenance ;
- création dentité depuis une valeur.
---
# Phase 5 — Entités, observations et relations
## Ticket #055 — Modèle opaque `EntityRecord`
Types initiaux :
```text
Personne
Pseudonyme
Adresse email
Téléphone
Domaine
Adresse IP
URL
Compte social
Organisation
IBAN
Cryptomonnaie
Document
Lieu
```
## Ticket #056 — Schéma et DAO des entités
Créer :
- `entity_types` ;
- `entities` ;
- `entity_attributes` ;
- contraintes ;
- index ;
- DAO.
## Ticket #057 — Modèle `ObservationRecord`
Une observation décrit une information découverte avec :
- valeur ;
- date ;
- source ;
- méthode ;
- outil ;
- confiance ;
- statut de validation ;
- notes.
## Ticket #058 — Interface de création et consultation des entités
Permettre :
- création manuelle ;
- modification ;
- recherche ;
- fusion contrôlée ;
- ajout dattributs ;
- consultation des preuves associées.
## Ticket #059 — Modèle opaque `RelationRecord`
Une relation doit contenir :
- source ;
- cible ;
- type ;
- direction ;
- date ;
- confiance ;
- provenance ;
- preuve associée ;
- note ;
- statut de validation.
## Ticket #060 — Schéma et DAO des relations
Créer :
- `relation_types` ;
- `relations` ;
- contraintes ;
- index ;
- DAO.
## Ticket #061 — Création et validation des relations
Permettre :
- création manuelle ;
- proposition automatique ;
- acceptation ;
- rejet ;
- modification ;
- justification.
Aucune relation déduite automatiquement ne doit devenir définitive sans provenance.
---
# Phase 6 — Recherche locale et requêtes
## Ticket #062 — Index de recherche SQLite FTS5
Indexer :
- preuves ;
- descriptions ;
- notes ;
- entités ;
- attributs ;
- observations ;
- métadonnées ;
- résultats OSINT ;
- événements.
## Ticket #063 — Langage de filtres interne
Créer un service de requêtes combinant :
- texte ;
- type ;
- date ;
- source ;
- confiance ;
- outil ;
- statut ;
- relations.
Exemples :
```text
type:email source:exiftool
domain:example.org
confidence:<50
evidence:"capture écran"
```
## Ticket #064 — Interface de recherche globale
Ajouter :
- barre de recherche ;
- filtres ;
- tri ;
- regroupement ;
- résultats paginés ;
- ouverture de la fiche correspondante.
## Ticket #065 — Requêtes enregistrées
Permettre denregistrer et de rejouer une recherche.
## Ticket #066 — Recherche transversale et pivots
Depuis une valeur, proposer :
```text
Rechercher partout
Afficher les preuves liées
Afficher les entités liées
Afficher les relations
Lancer un enrichissement OSINT
```
---
# Phase 7 — Enrichissement OSINT réseau
## Ticket #067 — Adaptateur DNS
Fonctions initiales :
- A ;
- AAAA ;
- MX ;
- NS ;
- TXT ;
- CNAME ;
- SOA ;
- résolution inverse.
Stocker :
- requête ;
- serveur utilisé ;
- date ;
- réponse brute ;
- réponses normalisées ;
- erreurs.
## Ticket #068 — Adaptateur RDAP et WHOIS
Extraire :
- registraire ;
- dates ;
- serveurs de noms ;
- statuts ;
- contacts publics ;
- réseau IP ;
- ASN lorsque disponible.
## Ticket #069 — Adaptateur TLS
Analyser :
- certificat ;
- sujet ;
- émetteur ;
- SAN ;
- dates ;
- chaîne ;
- empreintes ;
- protocoles observés.
## Ticket #070 — Adaptateur HTTP
Collecter :
- statut ;
- redirections ;
- en-têtes ;
- titre ;
- type de contenu ;
- serveur déclaré ;
- empreinte de réponse ;
- liens principaux.
## Ticket #071 — Recherche de sous-domaines
Agrégation contrôlée de plusieurs sources :
- DNS ;
- certificats ;
- données passives disponibles ;
- outils externes facultatifs.
Les sources doivent rester identifiables séparément.
## Ticket #072 — Archives du Web
Ajouter un fournisseur permettant de rechercher :
- captures anciennes ;
- dates disponibles ;
- URL historiques ;
- changements visibles.
## Ticket #073 — Moteurs de recherche et recherche Web
Créer une interface fournisseur pouvant utiliser :
- API officielle ;
- service configuré ;
- ouverture assistée dans le navigateur ;
- import manuel de résultats.
Labfy ne doit pas contourner les protections des moteurs.
## Ticket #074 — Réseaux sociaux
Créer un cadre générique pour :
- comptes publics ;
- pseudonymes ;
- URL de profils ;
- publications publiques ;
- observations manuelles ;
- fournisseurs autorisés.
Chaque plateforme pourra avoir :
- un adaptateur API ;
- un adaptateur CLI ;
- un import manuel ;
- aucune automatisation si les règles linterdisent.
## Ticket #075 — Cache, quotas et limitation de débit
Ajouter :
- cache ;
- date dexpiration ;
- quotas ;
- pauses ;
- reprises ;
- erreurs temporaires ;
- délais entre requêtes.
## Ticket #076 — Pivots OSINT
Depuis une entité, proposer les recherches compatibles :
```text
Domaine → DNS, RDAP, TLS, HTTP, archives
IP → reverse DNS, RDAP, ASN
Email → domaines, occurrences locales, fournisseurs configurés
Pseudonyme → moteurs, réseaux sociaux, dépôts publics
URL → HTTP, TLS, archives, métadonnées
```
## Ticket #077 — Révision des résultats avant intégration
Une recherche OSINT doit produire une liste de propositions :
- créer une entité ;
- compléter une entité ;
- créer une observation ;
- créer une relation ;
- ignorer.
Lenquêteur garde le contrôle.
---
# Phase 8 — Affichage analytique et graphe
## Ticket #078 — Service de projection graphique
Transformer les données SQLite en représentation graphique sans faire du graphe la source de vérité.
Types de nœuds :
- preuves ;
- entités ;
- événements ;
- résultats OSINT.
Types darêtes :
- relations validées ;
- relations proposées ;
- liens de provenance.
## Ticket #079 — Première vue graphique
Afficher un graphe simple avec :
- nœuds ;
- liens ;
- libellés ;
- sélection ;
- zoom ;
- déplacement.
Le premier moteur pourra sappuyer sur Graphviz ou une bibliothèque compatible GTK.
## Ticket #080 — Fiche contextuelle du graphe
Cliquer sur un nœud ou une relation doit afficher :
- identité ;
- attributs ;
- source ;
- confiance ;
- preuve justificative ;
- actions possibles.
## Ticket #081 — Filtres du graphe
Filtrer par :
- type ;
- date ;
- source ;
- confiance ;
- statut ;
- profondeur ;
- enquêteur ;
- outil.
## Ticket #082 — Organisation et regroupement
Permettre :
- regroupement manuel ;
- regroupement par type ;
- regroupement par domaine ;
- regroupement par période ;
- masquage de branches ;
- expansion dun voisinage.
## Ticket #083 — Vues graphiques enregistrées
Enregistrer :
- position des nœuds ;
- filtres ;
- regroupements ;
- annotations ;
- titre de la vue.
## Ticket #084 — Tableaux et statistiques
Créer des vues tabulaires et graphiques pour :
- types de preuves ;
- entités ;
- domaines ;
- outils utilisés ;
- volume de résultats ;
- dates ;
- intégrité ;
- relations.
---
# Phase 9 — Chronologie et notes
## Ticket #085 — Modèle dévénement
Champs :
- date et heure ;
- précision ;
- fuseau ;
- description ;
- source ;
- entités ;
- preuves ;
- confiance.
## Ticket #086 — Vue chronologique
Afficher :
- événements ;
- filtres ;
- regroupement ;
- preuves associées ;
- périodes sans date exacte.
## Ticket #087 — Notes denquête
Permettre :
- notes globales ;
- notes liées à une preuve ;
- notes liées à une entité ;
- notes liées à une relation ;
- notes liées à un événement.
## Ticket #088 — Hypothèses et pistes
Créer un espace distinct pour :
- hypothèses ;
- questions ouvertes ;
- pistes à vérifier ;
- statut ;
- priorité ;
- éléments favorables ;
- éléments contradictoires.
---
# Phase 10 — Traçabilité et reproductibilité
## Ticket #089 — Journal daudit
Tracer les opérations importantes :
- création ;
- import ;
- modification ;
- suppression autorisée ;
- recherche OSINT ;
- création de relation ;
- validation ;
- export.
## Ticket #090 — Rejouer une recherche
Permettre de relancer une recherche avec :
- même outil ;
- même version si disponible ;
- mêmes paramètres ;
- comparaison des résultats.
## Ticket #091 — Manifeste de lenquête
Générer un manifeste contenant :
- fichiers ;
- tailles ;
- empreintes ;
- versions doutils ;
- base SQLite ;
- résultats bruts ;
- date de génération.
## Ticket #092 — Contrôle de cohérence
Détecter :
- référence orpheline ;
- fichier absent ;
- résultat brut absent ;
- empreinte invalide ;
- relation sans provenance ;
- entité dupliquée.
---
# Phase 11 — Rapports et exports
## Ticket #093 — Rapport Markdown
Générer :
- identité de lenquête ;
- résumé ;
- méthodologie ;
- preuves ;
- entités ;
- relations ;
- chronologie ;
- résultats OSINT ;
- empreintes ;
- limites.
## Ticket #094 — Export PDF
Transformer le rapport en document PDF transmissible.
## Ticket #095 — Export du graphe
Exporter une vue :
- image ;
- SVG ;
- PDF ;
- annexe de rapport.
## Ticket #096 — Archive autonome
Créer une archive contenant :
- rapport ;
- base ;
- manifeste ;
- résultats bruts ;
- preuves sélectionnées ;
- graphe ;
- journal daudit.
## Ticket #097 — Rédaction et anonymisation
Permettre de produire une copie avec :
- données masquées ;
- preuves exclues ;
- identifiants remplacés ;
- rapport adapté à la diffusion.
---
# Phase 12 — Installation et distribution Ubuntu
## Ticket #098 — Classification des dépendances
Classer :
```text
Obligatoires
Optionnelles
Recommandées
Fournies par une API
Indisponibles dans certains dépôts
```
## Ticket #099 — Script de compilation et installation
Créer un dossier autonome avec :
- détection de la distribution ;
- vérification des dépendances ;
- tentative dinstallation ;
- compilation ;
- installation locale ;
- rapport clair des capacités indisponibles.
## Ticket #100 — Paquet Debian
Créer un paquet `.deb` contenant :
- binaire ;
- icône ;
- fichier `.desktop` ;
- licence ;
- schémas ;
- dépendances obligatoires ;
- recommandations optionnelles.
## Ticket #101 — Fonctionnement avec dépôts restreints
Prévoir :
- dépendances minimales ;
- modules facultatifs ;
- désactivation propre ;
- paquetage séparé si nécessaire ;
- documentation dinstallation hors ligne.
## Ticket #102 — Tests Ubuntu
Tester :
- Ubuntu LTS ;
- Wayland ;
- X11 ;
- machine sans outils de développement ;
- environnement hors ligne ;
- dépôts restreints ;
- utilisateur sans droits administrateur.
---
# Jalons du projet
## Jalon A — Socle professionnel
Tickets :
```text
#032 à #041
```
Résultat :
- contrôleur propre ;
- erreurs GTK ;
- tâches asynchrones ;
- registre doutils ;
- exécution externe sécurisée ;
- résultats bruts conservés.
## Jalon B — Gestion fiable des preuves
Tickets :
```text
#042 à #054
```
Résultat :
- import sûr ;
- SHA-256 ;
- intégrité ;
- métadonnées ;
- extraction dindicateurs.
## Jalon C — Enquête structurée
Tickets :
```text
#055 à #066
```
Résultat :
- entités ;
- observations ;
- relations ;
- recherche locale ;
- filtres ;
- pivots.
## Jalon D — Poste de travail OSINT
Tickets :
```text
#067 à #077
```
Résultat :
- DNS ;
- RDAP ;
- TLS ;
- HTTP ;
- archives ;
- moteurs ;
- réseaux sociaux ;
- enrichissements contrôlés.
## Jalon E — Analyse visuelle
Tickets :
```text
#078 à #088
```
Résultat :
- graphe ;
- tableaux ;
- chronologie ;
- notes ;
- hypothèses.
## Jalon F — Transmission
Tickets :
```text
#089 à #102
```
Résultat :
- audit ;
- reproductibilité ;
- rapports ;
- exports ;
- installateurs Ubuntu.
---
# MVP recommandé
Le premier MVP réellement utile est atteint après le ticket **#066**.
Lutilisateur pourra alors :
1. créer ou ouvrir une enquête ;
2. importer des preuves ;
3. vérifier leur intégrité ;
4. extraire leurs métadonnées ;
5. créer des entités ;
6. relier les objets ;
7. rechercher dans toute lenquête ;
8. effectuer des pivots locaux.
Le second MVP, orienté OSINT réseau, est atteint après le ticket **#077**.
---
# Ordre immédiat
Ne pas commencer directement par le graphe ou les réseaux sociaux.
Ordre recommandé :
```text
#032 — Factoriser le chargement dune enquête
#033 — Afficher les erreurs dans GTK
#034 — Gestionnaire de tâches asynchrones
#035 — File de tâches et panneau dactivité
#037 — Registre des dépendances
#038 — Interface commune des adaptateurs
#039 — Exécuteur GSubprocess
#040 — Conservation des résultats bruts
#042 — EvidenceRecord
```
Le ticket #036 sur la configuration peut être placé juste avant la première API nécessitant une clé.
---
# Synchronisation avec les autres projets
## C
Tickets particulièrement adaptés au cours de C :
- #034 gestion des tâches ;
- #039 exécution de processus ;
- #044 SHA-256 ;
- #045 copie robuste ;
- #053 extraction dindicateurs ;
- #062 indexation ;
- #078 projection graphique.
## Unix
Tickets adaptés au cours système Unix :
- #039 processus et signaux ;
- #045 fichiers et renommage atomique ;
- #049 intégrité ;
- #075 quotas et temporisation ;
- #089 journalisation ;
- #099 installation ;
- #100 paquet Debian.
## OSINT
Chaque nouveau fournisseur devra être précédé dun apprentissage manuel :
```text
Comprendre la technique
→ réaliser un exercice
→ documenter les limites
→ seulement ensuite intégrer loutil
```
Labfy doit assister lenquêteur, pas remplacer sa compréhension.