v0.27.0.fr.md
docs/i18n/release-notes/v0.27.0.fr.md
Tesserae v0.27.0 — les agents peuvent écrire dans le graphique et lui demander ce qu'il autorise
<!-- translations:start -->
English · 한국어 · 中文 · 日本語 · Русский · Español · Deutsch
<!-- translations:end -->
Released 2026-07-26 · PyPI · GitHub release · pip install --upgrade tesserae==0.27.0
Jusqu'à présent, un agent ne pouvait que transmettre du texte brut à Tesserae et espérer que l'extracteur devinerait les bons types en retour. Cette version ouvre le chemin d'écriture et le chemin de vérification : les agents enregistrent les résultats sous forme de structure typée et peuvent demander au graphique s'il autorise réellement une affirmation.
Agents write typed findings
graph_write accepte des nœuds typés et des arêtes validées par le schéma avec provenance obligatoire. Il refuse plutôt que de forcer — les arêtes non typées, les types en dehors du vocabulaire contrôlé, les points de terminaison orphelins et la provenance manquante sont tous rejetés ; les écritures en double sont idempotentes.
Les nœuds écrits par les agents survivent à une recompilation complète, à la suppression d'un graph.json, à --limit et à la suppression totale du corpus. Lors de tests adversariaux, 60 écritures simultanées contre une compilation en direct se sont déroulées avec zéro lectures déchirées sur 1 483 lectures.
Agents verify against the graph
verify_claim répond si le graphique autorise un triple. Le verdict est une fonction pure des octets du graphique : pas de LLM, pas d'intégration vectorielle, pas de correspondance approximative nulle part sur le chemin de décision. Un vérificateur qui hallucine est pire que l'absence de vérificateur.
Il accepte (subject, predicate, object) et n'a aucun paramètre en langage naturel — délibérément. Sept verdicts, dont PRESENT_UNEVIDENCED (l'arête existe mais rien de soutenu par un document ne la soutient) et ABSENT (« ce graphique n'affirme pas cela » — jamais une réfutation).
Deux garanties qui valent la peine d'être énoncées clairement. supersedes ne produit jamais de verdict : il dit qu'un nœud a été remplacé, non pas qu'un triple est faux. Et une écriture d'agent ne peut que affaiblir une classe de provenance, jamais en améliorer une — rien de ce qu'un agent affirme ne peut se présenter comme soutenu par un document.
Also
- Résolution d'entités sémantiques. Les candidats regroupés par intégration vectorielle alimentent maintenant la file d'attente d'examen existante plutôt que de fusionner automatiquement. Précision plutôt que rappel : une fusion incorrecte fusionne silencieusement deux entités réelles et chaque traversée en aval hérite de l'erreur.
- Routage basé sur la forme de la question pour
ask. Les graphiques gagnent sur les questions multi-sauts, temporelles et de synthèse et perdent sur la recherche simple de faits et les coûts, donc payer les prix des graphiques pour tout est une perte. La décision de routage est dans l'enveloppe afin qu'une réponse bon marché soit auditable ;--routeremplace. - Intervalles de validité sur les faits temporels, dérivés des horodatages source — jamais horloge murale.
--llm-limittient sous extraction concurrente. Depuis que v0.26.0 a rendu l'extraction parallèle, l'ancien vérifier-puis-incrémenter laissait chaque travailleur lire le compteur avant que l'un d'eux l'écrive, donc--llm-limit 1achetait un appel par travailleur. C'est un plafond de dépenses, donc il échoue maintenant en sécurité.- La couverture de compilation est un invariant, pas une affirmation. Quatre chemins de perte silencieuse de données fermés, puis la machinerie qui les soutient supprimée entièrement —
compile(loader=…)n'a aucun appelant en production, et défendre cette API de bibliothèque seule était la source de chaque défaut grave sur plusieurs tours d'examen. L'un d'eux était une régression que v0.26.0 lui-même a introduite. - Nouvelle documentation pour les surfaces d'écriture, de vérification et de routage.
What did not ship, and why
Un passage de contraste pour extraire les arêtes contradicts_claim / derived_from / criticizes a été construit, mesuré et coupé. Il a généré 0 arêtes sur 80 paires jugées sur deux corpus réels, et 60 sur 60 justifications de juge ont donné la même raison : les paires étaient quasi-identiques sans rien à contredire.
La cause était structurelle. La génération de candidats s'est bloquée sur des jetons rares partagés, ce qui optimise pour la similitude — mais la contradiction et la dérivation existent entre les affirmations qui diffèrent. Une refonte a évalué cinq nouveaux générateurs hors ligne, à coût LLM zéro : celui à haut volume a marqué 0/10 à l'inspection manuelle (ses « nombres conflictuels » étaient des identifiants arXiv et des dates de publication), et le seul précis a produit six paires de candidats sur un corpus et aucun sur l'autre.
Une exécution de contrôle l'a réglé — juger 15 arêtes de raisonnement qui existent déjà a retourné un rappel de 7/15. Le juge fonctionnait toujours ; les candidats se trompaient toujours.
La règle de lint REASONING_EDGE_RATIO reste, et épingle la ligne de base honnête : 7,5 % des arêtes portent un raisonnement, avec contradicts_claim, derived_from, attributes_improvement_to et criticizes à zéro instances.
Upgrading from v0.26.0
Prêt à l'emploi. Si vous définissez TESSERAE_CONTRAST_PASS, il ne fait plus rien — le passage a disparu.