labfy-investigation/docs/architecture/LOCAL_PIVOTS_CORRELATION.md
fy59 d65f9559e6 chore(checkpoint): preserve local investigation workbench
Preserve the local graph-first investigation stack through macro V1.

Include reviewed source, tests, contracts, documentation and synthetic assets.

Retain the standalone financial V21 test foundation without runtime migration.

Runtime remains V20; operational JobStore remains V3.

Local experimental checkpoint, not a stable release.
2026-09-27 08:34:46 +02:00

3.5 KiB
Raw Blame History

Pivots locaux et rapprochements explicables — lot J7 local

État : CURRENT pour le corpus SPECIMEN J7 et les types e-mail, domaine et IP.\ Runtime métier : V20 inchangé. JobStore : V1 inchangé. V21 reste indépendante.

Reproduction synthétique

workspace=$(mktemp -d /tmp/labfy-j7-specimen-XXXXXX)
chmod 700 "$workspace"
make -j8 tools/local-jobs
make web-workspace-j7 WORKSPACE="$workspace"

Cette commande ne réinitialise jamais un espace existant. Le corpus créé par C contient quatre EML, dont une copie de contenu identique, et une image. Il démarre sans observation. Les boutons Web soumettent les analyses EML/ExifTool existantes ; les observations sont publiées en SQLite V20 avant d’être relues par LocalCorrelationService. Python ne lit aucune base et JavaScript ne décide aucune égalité.

Contrat du cœur

labfy.local_correlation.snapshot.v1 est un cache recalculable, jamais une preuve ni une décision humaine. Il porte l’UUID d’enquête, une révision dérivée des observations persistées, complete, les bornes, les observations, groupes et connexions exploratoires. Sa publication atomique utilise un temporaire unique dans le même répertoire.

Les capacités de chaque observation éligible sont calculées par C : voir les occurrences, voir les preuves, et explorer localement le domaine d’une adresse compatible. Chaque groupe expose règle/version, brut/normalisé, état de revue, extraction, preuve, hash de contenu, membres et quatre compteurs distincts : occurrences, analyses, preuves et contenus. Son identité dépend des membres et de la révision d’entrée.

Les connexions sont non dirigées, exploratoires et limitées aux chemins de profondeur deux groupe → preuve persistée → groupe, avec au plus 1 000 connexions. Elles ne créent aucune relation métier. Une limite atteinte rend le résultat incomplet ; elle ne signifie jamais « aucun lien ».

Normalisation et faux positifs

Règle labfy.local_identifier_normalization.v1 :

  • e-mail : partie locale conservée byte pour byte ; seul le domaine ASCII est mis en minuscules, sans retirer point ni suffixe + ;
  • domaine : forme ASCII supportée, point terminal retiré, minuscules ; aucun domaine enregistrable n’est deviné ;
  • IP : parsing numérique GLib et forme canonique, sans DNS.

Les formes invalides et observations rejected/invalid restent visibles avec leur exclusion. Un e-mail, domaine ou IP commun ne confirme ni personne, ni origine réseau, ni source indépendante. Deux fichiers de même hash restent deux preuves distinctes mais un contenu distinct unique.

Processus, API et cohérence

Le worker conserve son verrou jusqu’à la fin des descendants gérés. SIGTERM demande au runner une annulation coopérative ; le runner termine puis récolte la session isolée de l’outil avant réconciliation. Annuler un job en attente ne tue plus le worker actif. Stop bloque les nouveaux claims ; pause laisse finir le job courant. Les exports concurrents utilisent des temporaires uniques.

Le serveur sert du JSON validé. Les mutations exigent session, Origin exact et CSRF, avec champs textuels exacts et bornés. Aucune route n’accepte SQL, chemin, argv, programme ou recherche réseau.

Limites

Pas de recherche réseau, DNS, fusion, attribution automatique, score de personne, revue persistante d’hypothèse, planner autonome ni performance de gros graphe revendiquée. Les snapshots v1/v2/v3 restent inchangés.

J7_LOCAL_PIVOTS_CORRELATION = COMPLETE_LOCAL