18.1 KB · updated 2026-07-06 · md

v0.5.0.fr.md

docs/i18n/release-notes/v0.5.0.fr.md

Tesserae v0.5.0 — La colonne vertébrale du moteur et le Compilateur de Contexte à la Demande

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Русский · Español · Deutsch

<!-- translations:end -->

Publié le 2026-06-06 · PyPI · GitHub release · pip install --upgrade tesserae==0.5.0

Tesserae 0.5.0 est la version où le projet devient le moteur de contexte que décrit sa mission. Elle livre la colonne vertébrale du moteur — un orchestrateur de pipeline, un démon superviseur et un moniteur de sessions en direct — et la fonctionnalité phare du Pilier 3 : le Compilateur de Contexte à la Demande, qui transforme « donne-moi du contexte sur X » en un paquet sur mesure, cité, prêt pour l'agent. En dessous, les passes d'auto-amélioration sont désormais activées et persistées via le sidecar node_memory (confiance de récurrence numérique en sortie, supersede activé par défaut), les vrais embeddings par défaut remplacent le stub à seaux de hachage (Piste B), et l'infrastructure de compilation incrémentale atterrit mais reste avec le flag OFF/expérimental. Deux vrais bugs de compilation trouvés en chemin sont corrigés (idempotence changed-only, contrat de store injecté), et la suite de tests atteint 1544 réussis / 0 échoué. C'est la version qui livre les phases 0–6 de la feuille de route du moteur de contexte.

Table des matières :

  1. Compilateur de Contexte à la Demande — MD0 (Pilier 3, phare)
  2. La colonne vertébrale du moteur — orchestrateur, démon, moniteur de sessions en direct
  3. Auto-amélioration, activée et persistée (sidecar MD0)
  4. Vrais embeddings par défaut (Piste B)
  5. Infrastructure de compilation incrémentale (flag OFF) + deux corrections de compilation
  6. Migration depuis la v0.4.0
  7. Contexte stratégique

1. Compilateur de Contexte à la Demande — compile_context (Pilier 3, phare)

Ce que c'est

La fonctionnalité vers laquelle pointait toute la feuille de route : une requête (ou un ensemble de nœuds graines) en entrée, un paquet de contexte sur mesure, cité, prêt pour l'agent en sortie. compile_context est une fonction pure — elle lit le graphe et renvoie un ContextBundle en mémoire, sans rien écrire sur disque. Le pipeline est : requête/graines → PPR + recherche hybride pour les graines → parcours de voisinage k-sauts borné en profondeur → assemblage des corps wiki pertinents → synthèse LLM optionnelle (avec un repli déterministe gracieux) → contrôle du budget avec un marqueur de troncature en limite de mot. Chaque nœud qui contribue est enregistré comme un ContextCitation, de sorte que toutes les citations du paquet se résolvent vers de vrais nœuds du graphe.

TypeRôle
`compile_context(query \seeds, depth, budget, …)`Point d'entrée pur ; renvoie un ContextBundle.
ContextBundleLe contexte assemblé plus sa liste de citations.
ContextCitationUne citation résoluble (id de nœud → corps contribué).

Le compilateur est exposé de trois façons :

  • Outil MCP compile_context — pour qu'un agent l'appelle en pleine conversation. budget=0 signifie sans plafond.
  • CLI tesserae project context — exit-0 / stdout / --output / déterministe, pour le scripting et les pipelines.
  • Exports à portée thématiqueslice_export_context_for_topic produit une tranche llms.txt à portée thématique, et le brief du harness d'agent est désormais rendu par thème via compile_context (Motif 4 + Motif 6) au lieu d'un top-12 codé en dur.

Deux améliorations de récupération connexes l'accompagnent : node_context gagne un chemin classé use_ppr (avec remplissage de voisins conscient de la suppression et contrôles d'arêtes/limite), et la tranche thématique utilise le slug wiki canonique, de sorte que citations et exports s'alignent.

Comment l'utiliser

# CLI : compiler un document de contexte cité pour un thème, imprimer vers stdout ou un fichier
tesserae project context "classement de récupération et fusion RRF"
tesserae project context "classement de récupération" --output ./context-retrieval.md

Depuis un client MCP :

{
  "tool": "compile_context",
  "arguments": {
    "query": "Comment notre pile de récupération classe-t-elle les candidats ?",
    "depth": 2,
    "budget": 4000
  }
}
// → renvoie un ContextBundle : corps assemblé + une liste de citations résolubles.
//   budget : 0 signifie sans plafond.

Vous pouvez aussi amorcer directement à partir d'id de nœuds (en sautant l'étape de recherche) quand vous connaissez déjà les ancres :

{
  "tool": "compile_context",
  "arguments": {
    "seeds": ["decision-2026-05-22-switch-to-rrf-fusion"],
    "depth": 2,
    "budget": 0
  }
}

Quand l'utiliser

  • Un agent a besoin d'un brief ciblé sur un thème, pas du dump llms.txt de tout le corpus ni d'un seul corps de wiki_page.
  • Vous voulez des citations qui se résolvent — chaque affirmation du paquet remonte à un nœud du graphe — pour que l'agent puisse poursuivre.
  • Vous scriptez un passage de relais et voulez un artefact de contexte déterministe (--output, mode d'assemblage sans LLM) qui se régénère par thème.

Où elle se trouve

Implémentation centrale : MD0 (compile_context, ContextBundle, ContextCitation). Enregistrement et dispatch MCP : tesserae/mcp_server.py. Câblage CLI : le sous-parseur context et _handle_context dans tesserae/cli.py. Le rendu de harness/export à portée thématique est routé via compile_context.

Mises en garde

  • La qualité de la synthèse dépend du backend LLM ; sans backend, le compilateur se replie sur l'assemblage déterministe (toujours cité, juste non synthétisé). Le repli est gracieux — un échec de synthèse n'avorte jamais le paquet.
  • Le parcours k-sauts est borné en profondeur et le PPR s'exécute sur le sous-graphe borné en profondeur ; les très grands graphes bénéficient d'un depth serré plus un budget réel plutôt que budget=0.
  • La troncature par budget coupe en limite de mot et ajoute un marqueur de troncature, de sorte qu'un paquet rogné reste lisible au lieu de se terminer au milieu d'un token.

2. La colonne vertébrale du moteur — orchestrateur, démon, moniteur de sessions en direct

Ce que c'est

Les trois pièces fondatrices que l'audit a qualifiées de plus grande lacune, désormais livrées sous tesserae/engine/ :

  • Orchestrateur de pipeline (pipeline.py) — la chaîne ingest → compile → project → publish, sortie du skill markdown de commande slash vers un objet in-process de première classe que le démon, la CLI et le MCP appellent tous. C'est le chemin de code partagé auquel tout ce qui est continu s'accroche.
  • Démon superviseur (daemon.py) — un processus de longue durée supervisé qui possède une seule boucle d'événements, fusionne les rafales de déclencheurs en une seule exécution de pipeline, gère l'arrêt gracieux par SIGTERM / SIGINT et survit à une exception de pipeline sans mourir.
  • Moniteur de sessions en direct (session_tail.py) — suit (tail) les transcripts de harness en direct et ingère les tours au fur et à mesure que les sessions s'exécutent, remplaçant le scan a posteriori de sessions discover --import (Pilier 1).

Ensemble, ils transforment Tesserae d'une CLI par lots à usage unique en un processus qui peut surveiller et ingérer en continu.

Quand l'utiliser

  • Vous voulez la propriété « reste à jour » — les sessions et les éditions affluent dans le graphe sans commande manuelle.
  • Vous construisez sur Tesserae et voulez un point d'entrée de pipeline partagé pour le démon, la CLI et le MCP au lieu de réimplémenter la chaîne de rafraîchissement.

Où elle se trouve

tesserae/engine/pipeline.py, tesserae/engine/daemon.py, tesserae/engine/session_tail.py (fusionnés comme la colonne vertébrale du moteur, phases 0–2 de la feuille de route).


3. Auto-amélioration, activée et persistée (sidecar node_memory)

Ce que c'est

Le pilier de la « base qui s'améliore d'elle-même » passe de passes rapportées à un sidecar node_memory persisté (tesserae/memory/). Les deux changements visibles par l'utilisateur :

  • Supersede activé par défaut avec verdict déterministe. La passe supersede s'exécute désormais par défaut (plus besoin de TESSERAE_SUPERSEDE_PASS=true), avec un verdict de session-id déterministe et décisif dans les deux directions et un garde-seuil, plus une suppression en aval, de sorte qu'un fait remplacé cesse d'apparaître dans la sortie de contexte au lieu de seulement gagner une arête.
  • Confiance de récurrence numérique en sortie. Le renforcement des insights récurrents produit désormais une confiance numérique à partir de la fréquence inter-sessions, injectée dans le TemporalFactProjector via memory_by_id, remplaçant l'ancienne heuristique de chaîne grossière. Réaffirmer un fait à travers les sessions élève de façon mesurable sa confiance en sortie.

Quand l'utiliser

  • Vous gérez des projets multi-sessions où le même insight récurre — le renforcement transforme cette récurrence en un signal de confiance sur lequel les agents peuvent classer.
  • Vous voulez que les faits obsolètes disparaissent du contexte compilé, pas seulement qu'ils soient signalés.

Où elle se trouve

tesserae/memory/store.py, reinforce.py (confiance de récurrence numérique), supersede.py (par défaut, verdict déterministe + suppression), plus decay.py, contradiction.py et insight_symbol_link.py. La suite de tests d'auto-amélioration (auparavant zéro test) couvre désormais le déterminisme, l'idempotence et le chemin de surcharge par LLM.

Mises en garde

  • L'échafaudage de décroissance et de contradiction est livré dans le même sidecar ; le comportement par défaut face à l'utilisateur en v0.5.0 est supersede + confiance de récurrence numérique.

4. Vrais embeddings par défaut (Piste B)

Ce que c'est

Le couloir « sémantique » par défaut n'est plus un pseudo-embedding déterministe à seaux de hachage. v0.5.0 livre un vrai Model2VecBackend et fait en sorte que active_embedding_backend échoue bruyamment au lieu de rétrograder silencieusement vers blake2b. Le backend sémantique en usage est affiché dans embedding_status, et un plancher cosinus laisse le couloir d'embeddings admettre des candidats (pas seulement reclasser), de sorte que les requêtes de paraphrase et de synonymes font remonter des nœuds que BM25 rate.

Comment l'utiliser

{ "tool": "embedding_status" }
// → indique quel backend sémantique est actif (réel vs repli), de sorte que
//   vous voyez d'un coup d'œil si la récupération prête à l'emploi est vraiment sémantique.

Où elle se trouve

tesserae/retrieval/hybrid.py (sélection de backend, active_embedding_backend qui échoue bruyamment, plancher cosinus pour l'admission par embeddings seuls) et le Model2VecBackend. Affiché via l'outil MCP embedding_status.

Mises en garde

  • Si le vrai backend ne peut pas se charger, la récupération le dit désormais haut et fort au lieu de prétendre que le stub de hachage est sémantique — c'est le changement de comportement voulu.

5. Infrastructure de compilation incrémentale (flag OFF) + deux corrections de compilation

Ce que c'est

La couche incrémentale conçue à travers le port GraphStore atterrit comme infrastructure : un sidecar de provenance, une surface de suppression GraphStore, une réconciliation lors de la compilation complète, une disponibilité consciente des arêtes, une plomberie de provenance de producteur et un runtime async persistant url_resolver (plus de asyncio.run par appel). La parité octet face à la compilation complète est prouvée pour les chemins couverts (renommage, identité d'alias, portes de parité de déplacement des deux extrémités).

Le flag incremental_compile reste OFF/expérimental. La revue Codex a révélé des lacunes multi-propriétaire / cycle de vie du producteur / cap-fallback, de sorte que le flag est optionnel et à parité octet prouvée seulement pour les chemins couverts jusqu'à ce que ces lacunes se ferment.

Deux vrais bugs de compilation révélés dans ce travail sont corrigés dans le chemin par défaut :

  • Idempotence changed-onlycompile honore désormais l'idempotence changed-only, de sorte qu'une recompilation no-op ne remue pas le graphe.
  • Contrat de store injecté — le contrat de store injecté dans la compilation de projet est honoré, corrigeant une classe d'échecs sur les chemins d'ingestion directe.

Où elle se trouve

L'infrastructure incrémentale s'étend sur le port GraphStore et le sidecar de provenance ; les deux corrections atterrissent dans le chemin de compilation de projet (fix(project): honor changed-only idempotence + injected-store contract in compile).

Mises en garde

  • N'activez pas encore incremental_compile pour les graphes de production — il est expérimental par conception jusqu'à ce que les lacunes multi-propriétaire / cycle de vie / cap-fallback se ferment. La compilation complète reste le chemin de confiance.

Migration depuis la v0.4.0

pip install --upgrade tesserae==0.5.0

Pour les workflows existants, v0.5.0 est additiftesserae project compile fonctionne exactement comme avant, désormais avec deux corrections de justesse (idempotence changed-only, contrat de store injecté). Les nouvelles surfaces sont optionnelles à appeler :

Nouveau compilateur de contexte à la demande :

tesserae project context "<thème>"            # paquet de contexte cité vers stdout
tesserae project context "<thème>" --output out.md
{ "tool": "compile_context", "arguments": { "query": "<thème>", "depth": 2, "budget": 4000 } }

Comportement désormais activé par défaut (auparavant optionnel ou absent) :

  • Passe supersede par défaut (avec suppression en sortie des faits remplacés).
  • Confiance de récurrence numérique affichée dans la sortie projetée.
  • Vrais embeddings par défaut avec un backend qui échoue bruyamment (pas de rétrogradation silencieuse vers le stub de hachage).

Toujours expérimental — laissez désactivé pour les graphes de production :

  • incremental_compile (infrastructure livrée, flag OFF).

Tout le reste — graph_ppr, search_nodes hybride, sync-code, research, les hooks en direct, embedding_status, fresh_insights, schema-drift, les commandes slash, la projection wiki / Obsidian — est repris de la v0.4.0.


Contexte stratégique

L'audit du moteur de contexte (2026-06-02) a nommé la lacune en une ligne : Tesserae était un compilateur CLI par lots mécaniquement sain et bien testé, à déclenchement manuel et a posteriori sur les trois piliers, et la plus grande pièce manquante était un superviseur de longue durée qui possède une seule boucle d'événements. v0.5.0 ferme cette ligne. La colonne vertébrale du moteur est le superviseur ; le moniteur de sessions en direct rend le Pilier 1 en direct au lieu d'a posteriori ; le sidecar node_memory rend le Pilier 2 auto-améliorant sur place ; et le Compilateur de Contexte à la Demande est le Pilier 3 — la fonctionnalité phare qui transforme le graphe typé, le coffre et le site de projections statiques en une sortie à la demande, à portée de requête, citée, prête pour l'agent.

Aucun outil dans le paysage PKM-AI 2026 que nous étudions ne fait cette composition. Cursor Memories, Claude CLAUDE.md, Cline memory-bank et Aider CONVENTIONS.md sont des sacs de texte statiques sans boucle de moteur, sans auto-amélioration typée et sans compilateur de contexte cité à la demande. Microsoft GraphRAG a des entités typées et des résumés de communauté, mais c'est un système corpus-RAG, pas un moteur de mémoire de projet en exécution continue. v0.5.0 livre la boucle qui garde la base fraîche et le compilateur qui remet aux agents exactement le contexte qu'ils demandent — la mission énoncée clairement dans AGENTS.md, désormais en exécution dans le code.

Ce qui reste : Phase 7 — unifier serve + watch + deploy sous le superviseur pour une publication continue, plus activer le flag de compilation incrémentale une fois ses lacunes restantes fermées. La colonne et la vedette sont en place ; la version de convergence est la suivante.

Voir aussi :