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.
4.3 KiB
Espace local et import navigateur — CURRENT
Contrat
make web-workspace-local WORKSPACE=/chemin/explicite fixe l’unique destination
de l’instance. Le navigateur ne transmet jamais de chemin serveur. Après la
session locale, un espace absent présente Créer l’enquête ; seul ce POST
appelle tools/local-jobs create-workspace. Il crée une base V20 à la racine,
un JobStore V3 vide et .labfy/runtime/workspace.json. Aucun corpus, preuve,
observation, plan ou job n’est préinséré. Les espaces SPECIMEN J5–J9 conservent
leur manifeste et leurs commandes historiques.
Une disposition est non ambiguë lorsqu’elle contient soit Enquete.sqlite et
le manifeste générique à la racine, soit le manifeste SPECIMEN historique.
L’absence de base dans un espace manifesté, une version non supportée ou un
manifeste incohérent est une erreur d’ouverture ; il n’y a pas de recréation ni
de conversion d’une ancienne enquête GTK.
Réception, préparation et publication
Le contrôle input type=file envoie les octets par PUT application/octet-stream
vers un upload_id opaque. Session, Host, Origin et CSRF sont contrôlés. Les
JSON restent plafonnés à 4 Kio. Les limites d’import sont 4 Mio par fichier,
8 fichiers et 16 Mio par sélection, 64 Mio de staging, deux réceptions et
30 secondes. Chaque sélection possède une identité opaque : le serveur réserve
atomiquement son nombre de fichiers, ses octets de lot, les octets de staging
et une place de réception avant de lire le corps. Le client sérialise une
sélection multiple ; le serveur relit la longueur effective par blocs avec une
échéance interruptible et refuse transfert tronqué, signature/type
incohérents, nom avec séparateur/contrôle et formats autres que EML/PNG/JPEG.
Le staging privé .labfy/uploads n’est pas servi. Les octets sont inchangés et
leur SHA-256 est calculé puis revérifié par le cœur. EvidenceImporter accepte
facultativement l’UUID réservé et le nom original de l’intention ; son contrat
historique reste inchangé quand ces champs valent NULL. La date de collecte
absente reste NULL. Un contenu identique dans deux intentions produit deux
preuves ; le rejeu d’une même clé retrouve le même UUID. Une clé liée à une
autre intention est refusée.
Les états persistés sont RECEIVING, TRANSFERRING, PREPARED, CONFIRMING,
IMPORTED, CANCELLED et FAILED. Réception, confirmation et annulation d’un
même upload sont sérialisées ; un état terminal ne peut pas être rouvert par un
nouveau PUT. Les reçus JSON privés .labfy/imports décrivent l’opération et
référencent la preuve V20 sans devenir une seconde vérité métier. L’intention
canonique structurée et le reçu CONFIRMING sont durables avant le premier
effet. Un verrou de publication sérialise ensuite les confirmations. L’ordre
est : réception temporaire, contrôle/format, renommage en payload, UUID
réservé, intention, copie immuable, transaction SQLite, reçu IMPORTED, puis
nouveaux snapshots. Un arrêt avant confirmation laisse une
préparation annulable ; après commit, la preuve est retrouvée par UUID et le
reçu peut être réconcilié. Chaque rejeu compare l’intention, le record V20 et
l’original effectivement publié (identités, métadonnées, taille et SHA-256).
Un reçu tronqué, un record incohérent ou un original manquant/altéré donne une
erreur de récupération, jamais une nouvelle preuve ni une réparation silencieuse.
Raccordement et limites
Après chaque publication, le cœur relit les DAO et tente de republier graphe,
corrélations et planner. Cette projection est réessayable : son indisponibilité
ne transforme pas une preuve déjà commitée et vérifiée en import en attente.
Aucune analyse ne démarre à l’import : l’utilisateur approuve les
recommandations et budgets J8. Les rapports J9 utilisent ensuite les objets
persistés et leurs dérivés. Le mode affiché provient du manifeste : SPECIMEN
ou local expérimental, sans prétendre classifier les données.
Ce lot expérimental ne prend pas en charge ZIP, répertoire récursif, SQLite téléversée, anciennes dispositions GTK, accès distant, TLS ni multi-utilisateur. Il ne constitue pas une certification de production ni une autorisation de traiter des enquêtes réelles.