## [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.