labfy-investigation/docs/ROADMAP.md

297 lines
13 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 canonique — Labfy Investigation v0.1.0
> **Dernière mise à jour :** 2026-09-25
> **État :** v0.1.0 Foundation en préparation, non publiée
> **Règle :** seul J0 appartient à la tranche documentaire courante
> Les fondations locales Qwen, sandbox et documentation outils, l'egress Tor
> rootless et la recherche Internet passive ont été qualifiés ensemble sur
> `SPECIMEN` par le smoke Qwen réel `PASS_LOCAL_SPECIMEN` : `CURRENT local`.
> L'exécution intrusive reste `LAB-ONLY TARGET`; Tool Auto-Provisioning,
> Resource Governor et Persistent Agent Memory restent `TARGET`.
> Déploiement personnel `invest.labfy` : `CURRENT local` sur cette machine
> après validation `SPECIMEN` du proxy nginx, de la résolution hostname,
> du service systemd utilisateur, du démarrage différé de la bibliothèque et
> du prompt Agent avec Qwen réel (`investigation.search`, final `COMPLETED`).
> Aucune enquête réelle n'a été ouverte pendant cette validation locale.
## 1. Ordre et portes
Labfy évolue sans réécriture générale. Les contrats du cœur précèdent les
fonctions Web de production et l'autonomie :
```text
J0 FOUNDATION
→ J1 BASELINE
→ J2 WEB/GRAPH ARCHITECTURE
→ J3 SERVICES ET PROVENANCE
→ J4 TOOLKIT ET RUNNER
→ J5 JOBS ET POLICIES
→ J6 WEB GRAPH VERTICAL
→ J7 PIVOTS ET CORRÉLATION
→ J8 PLANNER ET ASSISTANCE
→ J9 PROJECTIONS ET RAPPORTS
```
Un prototype Web en lecture seule peut commencer en J2 avec des données
synthétiques. Les fonctions Web de production dépendent toutefois des contrats
backend effectivement validés. Aucun jalon n'a de date promise.
## J0 — FOUNDATION 0.1.0
**Objectif.** Figer identité, vision, décisions architecturales et ordre de
construction sans démarrer la refonte fonctionnelle.
**Dépendances.** État réel du dépôt et préservation des travaux locaux, dont la
tranche financière V21 indépendante.
> **Interface CURRENT local :** la tranche Web finale a remplacé GTK par une
> surface locale Agent | Graphe | Activité + drawer. Un gateway d’outils V1
> `CURRENT de laboratoire` relit les snapshots backend et prépare une demande
> d’autorisation recherche sans l’accorder. Un runtime OpenAI-compatible local
> `CURRENT local` a d'abord été validé sur faux loopback ; Qwen réel est
> `CURRENT local` après le smoke opérationnel unifié sur `SPECIMEN` ;
> resource governor AMD/RAM/swap reste `TARGET`.
**Livrables.** README, bannière et source éditable, index documentaire,
architecture canonique, contrat du graphe, ADR Web/graph-first/polyglotte,
Toolkit, sécurité, design system, roadmap et backlog préparé.
**Critères de sortie.** `CURRENT`, `TARGET` et `UNDECIDED` sont séparés ; liens
et assets sont valides ; v0.1.0 est annoncée non publiée ; la bannière est
inspectée ; aucun fichier fonctionnel, schéma ou dépendance n'est ajouté.
**Validation.** Contrôle Markdown/UTF-8/liens/ancres, rendu local de la bannière,
revue du diff, empreintes des fichiers V21 protégés, build et tests synthétiques
du worktree lorsque pertinents, `git diff --check`.
**Non-objectifs.** Frontend, serveur, migration, adapter, job persistant,
capability générique, pivot nouveau, autonomie, ticket distant ou release.
## J1 — BASELINE
> **Avancement local J1/J2 :** baseline V20 et fondation V21 autonome validées ;
> la migration runtime financière reste volontairement différée.
**Objectif.** Stabiliser le travail financier en cours et inventorier les
contrats, migrations et tests réellement présents.
**Dépendances.** J0 relu ; travail V21 traité dans sa propre tranche.
**Livrables.** Baseline reproductible, matrice des contrats existants, état des
migrations et dette qualifiée.
**Critères de sortie.** Création neuve, migrations autorisées, rollback,
intégrité et conservation des données synthétiques validés ; numéro suivant de
schéma choisi à partir de l'état réel.
**Tests.** Tests ciblés des migrations et DAO, `integrity_check`,
`foreign_key_check`, suite complète et contrôles de reprise.
**Non-objectifs.** Mélanger V21 au commit documentaire, choisir la stack Web ou
réécrire les modèles.
## J2 — WEB/GRAPH ARCHITECTURE
> **Avancement local J1/J2 :** pile expérimentale choisie et prototype Web
> Graph synthétique en lecture seule livré ; les choix de production restent
> soumis aux portes et benchmarks décrits ci-dessous.
**Objectif.** Choisir la frontière core/API, la stack Web et le moteur de
graphe après comparaison, puis construire un prototype synthétique en lecture
seule.
**Dépendances.** J1 et contrats métier inventoriés.
**Livrables.** Comparaison courte de candidats, modèle de menace, contrats
versionnés pour graphe/actions/jobs/erreurs/provenance, stratégie événements,
packaging et prototype local.
**Critères de sortie.** Décisions fondées sur mesures et sources primaires ;
reconnexion/rattrapage spécifiés ; surface locale et contrôle d'accès définis ;
prototype sans donnée réelle.
**Tests.** Contrats API, Host/Origin/CSRF, DNS rebinding, erreurs, accessibilité
clavier, rendu synthétique et mesures de base.
**Non-objectifs.** Choisir sur popularité, exposer le LAN par défaut, déplacer
la logique métier vers le frontend ou livrer des mutations de production.
## J3 — SERVICES ET PROVENANCE
> **Avancement local partiel :** le lot read-only relie une fixture SQLite V20
> créée par les DAO à une projection C et au Web via le snapshot v2. Le lot EML
> exécute ensuite l'analyseur natif, publie en V20 un dérivé, une extraction et
> des observations proposées, puis les projette via le snapshot v3. La
> généralisation de la provenance aux autres capacités reste à construire ; J3
> entier n'est pas déclaré terminé.
**Objectif.** Extraire progressivement les responsabilités utiles et unifier la
provenance sans migration destructive.
**Dépendances.** Baseline J1 et frontières J2.
**Livrables.** Contrats artefact/opération/tentative/transformation/observation,
revue humaine, publication et navigation « Why do we know this? », en réutilisant
notamment exécutions OSINT et observations existantes.
**Critères de sortie.** Un résultat synthétique remonte au brut, à l'outil, à la
version, aux paramètres expurgés et aux décisions ; contradictions préservées.
**Tests.** Provenance complète, valeurs partielles, supersession, rollback,
ownership, anciennes bases et absence de double publication.
**Non-objectifs.** Nouveau stockage parallèle, suppression des historiques ou
conversion de tout objet en `entites`.
## J4 — TOOLKIT ET RUNNER
> **Avancement local :** registre réellement consommé, runner borné, adapters
> EML/ExifTool, publication V20 et démonstration Web SPECIMEN livrés. Les autres
> outils locaux restent à migrer ; ce statut ne livre ni J5 ni J3 global.
**Objectif.** Livrer registre/capabilities, fake adapters et runner commun borné,
puis adapter d'abord les capacités locales existantes.
**Dépendances.** Contrats J3.
**Livrables.** Adapters `NATIVE`, `SUBPROCESS`, `HTTP_API`, `MANUAL`, contrat
machine versionné, disponibilité/health, limites, artefacts et normalisation.
**Critères de sortie.** Processus suspendu, bavard, malformé et créant des
descendants contenu et nettoyé ; absence d'outil diagnostiquée sans crash.
**Tests.** Timeout, annulation, groupe de processus, stdout/stderr bornés,
fichiers/FD/mémoire, sorties invalides, idempotence de publication et fakes.
**Non-objectifs.** Installation ou mise à jour silencieuse, accès direct SQLite
depuis l'adapter, exécution d'outils OSINT réels dans les tests.
## J5 — JOBS ET POLICIES
**Objectif.** Persistance, reprise, budgets et scope avant toute chaîne autonome
réseau.
**Dépendances.** Provenance J3 et runner J4.
**Livrables.** États de job, tentatives, dépendances, priorité, backoff,
lease/heartbeat, annulation, Resource Governor, classes d'action et snapshots de
policy.
**Critères de sortie.** Crash entre artefact et publication sans doublon ni
succès fictif ; retry limité aux contrats idempotents ; arrêt global visible.
**Tests.** Crash/restart, leases expirés, cancellation, budgets partagés,
concurrence par service, `UNKNOWN`/`OUT_OF_SCOPE`, redirections et refus.
**Non-objectifs.** Exactly-once réseau, autorisation héritée par pivot ou
`AUTONOMOUS_AUTHORIZED`.
## J6 — WEB GRAPH VERTICAL
**Objectif.** Première tranche Web utilisable, d'abord sur données synthétiques,
avec réseau unifié, provenance et actions contextuelles reliées au backend.
**Dépendances.** Architecture J2, services J3, Toolkit J4 et policies J5.
**Livrables.** Graphe, Focus Workspace, recherche, vue liste, actions, jobs et
navigation de provenance sur un parcours vertical.
**Critères de sortie.** Identités stables, contexte conservé, disponibilité
expliquée, contrôles backend, clavier et états d'erreur accessibles.
**Tests.** Parcours synthétiques, reconnexion, révisions concurrentes, CSP,
contenus hostiles, petites largeurs, contraste et performance mesurée.
**Non-objectifs.** Retirer GTK avant couverture validée ou revendiquer des
volumes non mesurés.
## J7 — PIVOTS ET CORRÉLATION
> **Avancement local partiel :** un premier lot relit en C les observations V20
> réellement publiées, indexe e-mails/domaines/IP, distingue occurrences,
> analyses, preuves et contenus, puis présente rapprochements et connexions
> exploratoires bornées dans le poste J6. Recherches réseau, revue persistante
> des hypothèses et planner autonome restent futurs. Voir
> [le contrat J7 local](architecture/LOCAL_PIVOTS_CORRELATION.md).
**Objectif.** Classification, déduplication, cycles, rapprochements exacts,
hypothèses et premières capacités réseau sélectionnées.
**Dépendances.** Vertical J6 et politiques J5.
**Livrables.** Catalogue extensible, moteur de pivots borné, règles versionnées,
explications, contradictions et revue humaine.
**Critères de sortie.** Similarité distincte de l'identité ; faux positifs et
dépendance des sources visibles ; hypothèses rejetées conservées.
**Tests.** Cycles, limites, cache, homonymes, infrastructure partagée, résultats
contradictoires et rejouabilité des règles.
**Non-objectifs.** Fusion automatique d'identités, action intrusive ou preuve
d'absence déduite d'un résultat vide.
## J8 — PLANNER ET ASSISTANCE
> **CURRENT local, périmètre borné :** après un import ou une revue, le graphe,
> les corrélations et le planner peuvent être republiés depuis les données
> persistées, sans réanalyse ni consommation de budget. Cela ne livre pas une
> assistance autonome ; les analyses et budgets restent soumis à l'approbation
> explicite de l'utilisateur.
**Objectif.** Recommander les prochaines recherches et permettre une assistance
passive bornée et explicable.
**Dépendances.** Pivots/corrélation J7 et jobs/policies J5.
**Livrables.** Classement `HIGH`/`MEDIUM`/`LOW`, raisons, gain d'information,
mode `ASSISTED`, puis `AUTONOMOUS_PASSIVE` sous portes explicites.
**Critères de sortie.** Recommandations déterministes, budgets respectés,
résultats partiels honnêtes, pause/reprise/arrêt visibles.
**Tests.** Ordre reproductible, coût/risque, déduplication, limites, reprise et
absence d'action lorsque policy ou capability change.
**Non-objectifs.** Agent opaque, autonomie sans limite ou mode autorisé intrusif.
## J9 — PROJECTIONS ET RAPPORTS
> **CURRENT local (premier lot).** Les projections Preuves, Chronologie et
> Infrastructure locale, ainsi que la sélection et le dossier de rapport
> HTML/JSON/PDF vérifiable, sont réalisés. Finance reste la tranche V21
> indépendante ; Geo et l'élargissement complet de J9 demeurent futurs. Voir
> [le contrat du lot](architecture/EVIDENCE_TIMELINE_REPORT.md).
**Objectif.** Étendre Finance, Timeline, Infrastructure, Geo et Evidence puis
produire des rapports sélectionnés, vérifiables et expurgés.
**Dépendances.** Modèle commun J3 et graphe J6.
**Livrables.** Projections du même réseau, précision temporelle, montants et
incertitudes inspectables, exports avec manifestes et hashes.
**Critères de sortie.** Aucun silo, provenance complète, expurgation dérivée et
traçable, accessibilité et performance mesurées.
**Tests.** Fuseaux/précision partielle, flux financiers synthétiques, données
géographiques fictives, exports déterministes, minimisation et grands jeux.
**Non-objectifs.** Altérer les originaux, promettre recevabilité automatique ou
dépendre d'un cloud Labfy.
## 2. Piste séparée de validation de sécurité
Nmap, Nuclei et Greenbone/OpenVAS ne font pas partie de la première livraison
Web ni de v0.1.0. Toute étude ultérieure requiert un contrat séparé, des cibles
de laboratoire explicitement autorisées, une démonstration minimale et aucun
accès inutile aux données de tiers.
## 3. Données synthétiques obligatoires
Les validations utilisent domaines `.test`, IP de documentation, faux services
locaux, comptes homonymes, documents `SPECIMEN`, résultats partiels ou
contradictoires et transactions fictives. Aucune enquête réelle n'est une
fixture.