labfy-investigation/CHANGELOG.md

240 lines
14 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.

## [0.1.0-dev] — en préparation, non publiée
### Interface Web finale locale
- Web devient l’interface utilisateur `CURRENT` unique : coque Catppuccin
Mocha/Lavender Agent | Graphe | Activité, drawer transversal et cartes
SPECIMEN pour conversation, plan, hypothèse, autorisation et résultat.
- Retrait du client, des vues, widgets, tests, headers et dépendance de build
GTK4 ; les services C, SQLite V20, fondation financière V21, capabilities et
JobStore V4 sont conservés.
- Ajout de `tools/labfy` : instance loopback vérifiée, navigateur ouvert et
session HttpOnly/SameSite automatique sans code ni jeton dans l’URL ; les
mutations restent protégées par Host, Origin exact et CSRF.
### Connexion Web
- La session de `3600` secondes (une heure) commence à l'authentification, et non au démarrage
du serveur ; une reconnexion après expiration renouvelle cookie et CSRF.
- Régressions HTTP synthétiques : première connexion tardive, expiration
absolue, ancien cookie refusé et échec de connexion sans prolongation.
- Le parcours Firefox synthétique couvre désormais l'expiration pendant les
pollings, l'arrêt unique des requêtes, la reconnexion sur le même serveur et
le refus du couple cookie/CSRF précédent. L'interface ne rejoue aucune
mutation refusée ou d'admission inconnue.
### Validation Web
- Le runner navigateur comptabilise `MISSING`, `LAUNCH_ERROR`, `EXIT_CODE`,
`SIGNALED`, `TIMEOUT`, `INTERRUPTED` et `SUCCESS`. Sur Linux, il ne termine
que le groupe et la session de processus qu'il a créés : `SIGTERM`, grâce
bornée, puis `SIGKILL` si nécessaire. Ses régressions synthétiques vérifient
qu'un témoin indépendant survit.
### Pivots locaux J7
- Index C typé des observations persistées, rapprochements explicables
e-mail/domaine/IP, connexions locales bornées et corpus Web SPECIMEN
multi-preuves.
- Annulation active propagée jusqu’au groupe d’outil, annulation d’attente sans
interruption du worker actif et temporaires d’export concurrents uniques.
### Jobs locaux J5
- Ajout du JobStore V1 séparé, du worker mono-propriétaire, des contrôles CLI,
de la reprise après publication et de l’export Web en lecture seule.
- Durcissement du runner et du replay ExifTool typé, y compris la vérification
d’un résultat historique lorsque l’outil courant est indisponible.
### Poste Web local J6
- Ajout d’une session loopback protégée, d’un bridge JSON vers le service C,
des actions EML/ExifTool depuis le graphe et des contrôles de file.
- Actualisation automatique des jobs et résultats persistés, avec conservation
du contexte graphique et tests Firefox de bout en bout.
### Foundation
- Repositionnement canonique de Labfy comme environnement local-first
d'investigation numérique centré sur le graphe interactif.
- Adoption de « THE GRAPH IS THE INVESTIGATION » comme principe UX et métier :
Identity, Infrastructure, Finance, Timeline, Geo et Evidence deviennent des
projections d'un même réseau logique.
- Choix du Web comme future interface principale, sans sélection prématurée du
framework, du protocole d'événements ou du serveur HTTP local ; GTK reste
l'interface fonctionnelle existante pendant la transition.
- Architecture cible du Toolkit Registry, des adapters, du Job Engine, du
Pivot Engine, du Correlation Engine, du planner et des contrôles de scope.
- Séparation canonique des entités, artefacts, preuves, observations, claims,
événements, transactions et hypothèses dans une projection graphique
unifiée.
- Définition d'une autonomie progressive, de budgets multidimensionnels et
d'une confiance qualitative explicable.
- Adoption de Catppuccin Mocha avec Lavender comme direction visuelle de la
future interface Web et création d'une bannière dédiée au README.
- Refonte du README et remplacement de la roadmap par une séquence V2 ordonnée,
sans annoncer les fonctionnalités cibles comme déjà disponibles.
- Ajout de l'index documentaire, du contrat conceptuel du graphe, des décisions
Web/graph-first/polyglotte, du registre Toolkit, du modèle de sécurité, du
design system et du backlog local préparé.
- Ajout d'une source SVG éditable pour la bannière et structuration de la
roadmap en jalons J0 à J9 avec portes de validation et non-objectifs.
### Added
- Premier lot J3 expérimental en lecture seule : ouverture SQLite V20 sans
création/migration, projection C unifiée des entités, relations, preuves,
observations et exécutions OSINT, snapshot JSON v2 borné/atomique et mode de
démonstration Web alimenté par une fixture créée avec les DAO de production.
- Extension J3 EML synthétique : analyse native réellement exécutée, dérivé
versionné, extraction et observations proposées publiés atomiquement en V20,
replay idempotent vérifié après réouverture et projection Web snapshot v3.
- Lot J4 local : registre de capabilities consommé, runner POSIX borné,
adapters EML/ExifTool, publication idempotente V20 et démonstration Web sur
fixtures SPECIMEN avec ExifTool réel.
- Assistant de création de personne en sept étapes séparant la révision OCR,
la projection facultative et les relations factuelles avant confirmation.
- Projection contrôlée des champs OCR confirmés vers les attributs structurés
d’une personne, avec provenance append-only, conflits explicites et rollback.
- Saisie et consultation, depuis la fiche preuve, d’un historique immuable
d’appréciations humaines d’authenticité documentaire avec justification et
`OcrRun` facultatif appartenant à la preuve, sans verdict automatique.
- OCR d’identité contrôlé et révisable dans la création d’une personne,
l’import normal et la fiche de preuve, avec texte brut immuable,
transcription corrigée persistante, `manual_override`, `manual_entry` et
notes documentaires factuelles.
- Consultation complète des données OCR persistées, sélection explicite d’un
`OcrRun`, révision sans relance de Tesseract et création d’un nouveau run
lors d’une nouvelle analyse.
- Aperçu partagé avec zoom, ajustement, défilement bidirectionnel, navigation
PDF multipage, compteur de pages et provenance OCR synchronisée.
- Politique commune des dialogues GTK métiers complexes : parent transitoire,
géométrie responsive, répartition initiale 2/3–1/3, formulaire défilable et
barre d’actions fixe.
- Préparation du pivot e-mail : pipeline EML asynchrone, extraction MIME
sécurisée, propositions bancaires IBAN/BIC et vocabulaire contrôlé.
- Référentiel persistant et normalisé des types de relations, avec codes
système stables, types personnalisés, renommage et fusion transactionnelle.
- Sélecteur canonique dans les formulaires de création et de modification des
relations.
- Glisser-déposer confirmé des extractions texte vers le graphe, avec
persistance de leur association à une entité.
- Ouverture de l’aperçu des pièces jointes et preuves depuis les fiches
d’entités.
- Initialisation du cycle de vie de l'application.
- Création du module `Application`.
- Intégration de GTK4.
- Affichage de la première fenêtre.
- Module `MainWindow`.
- Séparation de la fenêtre principale du module `Application`.
- Première architecture de la fenêtre principale.
### Fixed
- Schéma de création directe aligné sur la V19, avec champs structurés,
provenance des projections et garde SQLite identique à la migration V19.
- Migration V20 pour l’évaluation humaine append-only de l’usage d’identité,
distincte de l’authenticité et sans automatisme OCR.
- Consultation V20 sur la fiche preuve et test GTK des relations et champs
structurés affichés sur la fiche Person.
- Rafraîchissement immédiat de Workspace après import ou révision OCR et
persistance des données sur l’UUID définitif de la preuve, y compris après
fermeture et réouverture de SQLite.
- Fermeture sûre du dialogue après enregistrement d’une révision OCR, avec
protection contre le double clic, maintien ouvert en cas d’échec et absence
de relance de Tesseract.
- Conservation du cadrage du graphe pendant les rechargements.
- Persistance SQLite du zoom et de la position du graphe entre deux sessions.
- Réduction de la fenêtre d’intégration des extractions pour maintenir les
actions accessibles sur les petits écrans.
# Changements locaux non publiés — J8
- Ajout du planner C explicable, des plans/budgets persistants JobStore V3 et de
l'admission Web atomique pour le corpus synthétique local.
- Fiabilisation J7 des révisions, plafonds, références, transactions de lecture
et normalisation prudente.
- Finalisation JobStore V3 : budgets opposables au claim, temps monotone,
réserve conservée après crash, états de plan exportés et scénario Firefox J8.
# Changements locaux non publiés — recherche OSINT assistée V1
- JobStore V4 additif à V3 : persistance atomique et idempotente des plans,
actions, grants, campagnes, résultats et reçus de recherche, sans évolution
de V20 ni de la tranche financière V21.
- Policy explicite de sélection, exclusions, révocation, expiration, identité
d'enquête/plan/action et budgets ; aucune propagation implicite par seed,
CNAME, redirection ou nouvelle URL.
- Transport commun indisponible sans backend lié et libcurl couvert seulement
par fixtures/loopback ; aucun fournisseur public n'est configuré ou qualifié.
- Adapters normalisateurs DNS, RDAP, CDX, Brave, SearXNG et page, avec résultats
bornés, provenance C et absence de suivi implicite de liens, scripts ou pièces jointes.
- Parcours Web synthétique de préparation, approbation/refus, deux vagues et
révocation durable, avec isolation vérifiée entre espaces de travail A/B.
# Changements locaux non publiés — J9
## Espace local et import navigateur (non publié)
- création Web explicite d’une enquête V20 et d’un JobStore V3 réellement vides ;
- réception privée EML/PNG/JPEG, limites serveur, contrôle de signature et
confirmation idempotente par UUID réservé ;
- raccord aux projections, planner, analyses et rapports existants ;
- matrice Python/C et scénario Firefox canonique depuis zéro.
- fermeture d’intégrité de l’import local : création non destructive, intention
et reçus structurés, rejeu revalidé sur l’original V20, états terminaux
immuables, réservations concurrentes atomiques et timeout de corps opposable ;
- durcissement P01–P06 du cycle de vie, des réservations, du rejeu et du
framing HTTP ; refus des corps tronqués ou ambigus sans réouverture d’un état
terminal ;
- aperçu Web EML/PNG/JPEG produit par le bridge C après intégrité et bornes,
sans servir l’original ni son chemin ; l’identité de cache ne crée aucun cache
disque persistant ;
- revue transactionnelle d’observations avec journal V20 non signé, corrections
distinctes et rejeu strict ; la confirmation décrit la revue d’une
observation, jamais une identité ;
- promotion volontaire par création ou rattachement d’un indicateur e-mail,
domaine ou IP, et retrait non destructif préservant observation, entités et
rattachements indépendants ;
- republication réessayable du graphe, des corrélations et du planner après
import ou revue, sans relancer d’analyse, nouveau claim ni consommation de
budget.
- Ajout des projections Web Preuves, Chronologie et Infrastructure locale sur
le graphe cœur, avec dates persistées et prudence temporelle.
- Ajout de la sélection explicite, de la prévisualisation révisionnée et du
dossier hors ligne HTML/JSON/PDF avec manifeste, hashes et vérificateur.
- Ajout des limites, de la minimisation, de l'idempotence et des reprises après
interruption, ainsi que des tests C, API, Python et Firefox correspondants.
- Renforcement de l’intégrité du rapport : PDF Cairo/Pango Unicode fidèle,
sections effectives, fermeture de provenance orientée, refus de troncature,
vérificateur hostile strict et réconciliation durable après interruption.
# Changements locaux non publiés — poste Web UX V1
## Poste Web local et bibliothèque (non publié)
- Lanceur local à instance unique, bibliothèque explicitement choisie,
création C idempotente et ouverture d'une seule enquête active par instance.
- État d'instance, configuration et code d'amorçage séparés dans les répertoires
XDG privés ; écoute loopback et contrôles de santé avant `status`, `stop` ou
consultation du code.
- Validation Web intégrée : bridges C, unités Node, découverte Python et
parcours navigateur exécutés séquentiellement par
`make web-workspace-web-check`.
- Réorganisation graph-first en barre compacte, projections, inspecteur à
onglets et tiroir Tâches/Actions/Plans/Rapports responsive.
- Ajout d’actions ancrées près des nœuds, avec clic droit, `Maj+F10`, fermeture
`Échap`, alternative visible et motifs issus du registre de capabilities.
- Conservation du brouillon de rapport pendant une actualisation, validation
Firefox des cinq téléchargements réels et ouverture du HTML reçu hors ligne.
- Prise en charge de dates ISO 8601 à la minute avec `Z` ou offset explicite,
sans promotion artificielle de leur précision à la seconde.
- Clôture sur graphe alimenté : classification par `object_kind`, disposition
bornée par étages, navigation cohérente et provenance interactive.
- Application des snapshots modifiés à UUID constants, aperçu de rapport
invalidé dès l’édition et tiroir libérant réellement le graphe.
- Scénario Firefox lançant six analyses depuis l’UI puis validant le snapshot C
observé à 62 nœuds/100 arêtes, sans relation ajoutée côté JavaScript.