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.5 KiB
Preuves, chronologie et rapports locaux — J9
Statut : CURRENT — COMPLETE_LOCAL. Ce lot complète le poste Web local sans
modifier le schéma publié : Enquete.sqlite reste V20, le JobStore reste V3 et
la tranche financière V21 demeure indépendante.
Projections
Le graphe cœur reste la vérité commune. Les vues Preuves, Chronologie et Infrastructure locale filtrent cette projection ; elles ne créent ni base ni identité parallèle. La chronologie transporte les valeurs persistées de collecte, d’import, d’observation, d’intégration et d’exécution. Une valeur sans précision ou fuseau suffisant est montrée comme telle et n’est jamais complétée par inférence. Les rapprochements d’infrastructure restent exploratoires.
Sélection et prévisualisation
Depuis le détail d’un objet, « Ajouter au rapport » constitue une sélection
explicite. Le service C local_report_service_build() vérifie l’appartenance à
l’enquête, ferme la provenance dans une transaction SQLite en lecture et applique
des limites d’objets, de dépendances, d’événements et d’octets. Le profil V1 est
MINIMAL : aucun original, chemin absolu, secret, base SQLite, EML complet ou
sortie complète d’outil n’est inclus. Le commentaire est explicitement humain.
La révision SHA-256 couvre règles, enquête, sélection et rôles, profil, sections, limites et valeurs rendues. La génération recalcule cette même coupe ; elle refuse donc un aperçu devenu périmé au lieu de mélanger deux états.
Dossier hors ligne
Une génération publie atomiquement sous exports/reports/<report_id>/ :
report.html, autonome, sans script ni ressource distante ;report.json, document canonique ;report.pdf, rendu local borné ;manifest.json, tailles, SHA-256, sélection, profil et exclusions ;NOTICE.txt, mode de vérification et portée des empreintes.
Le staging privé se trouve sous .labfy/reports/staging. Une interruption avant
publication ne rend aucun dossier partiel ; une réponse perdue après publication
est récupérée par l’intention idempotente. Une intention réutilisée avec un autre
document est refusée. Le vérificateur rejette absence, fichier supplémentaire,
lien symbolique, chemin dangereux, dépassement, contrat inconnu, taille ou hash
discordant :
python3 prototypes/web-graph/report_bundle.py verify /chemin/du/dossier
Le serveur ne sert que les cinq noms autorisés, après vérification complète du
dossier. Authentification locale, Host/Origin et CSRF restent obligatoires pour
les mutations. Un GET ne déclenche jamais une analyse ou une génération.
Exécution SPECIMEN
make web-workspace-j9 WORKSPACE=/tmp/labfy-j9-specimen
Cette commande crée une fixture synthétique uniquement si le workspace ne
contient pas déjà Enquete.sqlite. Elle ne doit jamais viser une enquête réelle.
Le PDF utilise Cairo/Pango et la police locale DejaVu Sans, déjà fournis avec le
runtime graphique. Le répertoire Unicode validé couvre notamment le français,
œ, €, les ponctuations typographiques et Ł. Pango mesure et replie les
lignes ; un contenu qui ne peut pas être paginé dans la limite de 40 pages est
refusé sans substitution. pdftotext et pdftoppm servent à valider le texte
et toutes les pages rendues.
Renforcement d’intégrité
La fermeture justificative suit les arêtes de provenance de la cible vers sa source : elle n’exporte plus les observations sœurs. Désactiver Preuves réduit les objets aux références minimales annoncées ; désactiver Chronologie ou Infrastructure produit respectivement une collection temporelle ou réseau vide. Le profil MINIMAL refuse tout dépassement d’événements plutôt que de tronquer.
Le vérificateur considère le dossier comme non fiable : racine ou composant symbolique, fichier non régulier, entrée supplémentaire, structure JSON mal typée, clé JSON ou chemin de manifeste dupliqué, hash mal formé et incohérence entre manifeste et document sont des échecs contrôlés. Il garantit l’intégrité interne, pas l’authenticité face à une réécriture cohérente non signée.
L’intention versionnée est écrite atomiquement avant le rendu. Un verrou par
intention fait converger les demandes identiques ; un document différent est
refusé, y compris quand une tâche mémoire est déjà GENERATING ou READY.
Après publication complète mais avant reçu, un nouveau processus vérifie le
dossier et réconcilie le même identifiant sans second rendu.