fix(memory): typer aussi les schémas de SORTIE des outils MCP#1611
Merged
Conversation
Le correctif precedent n'avait traite que l'entree. wire_safe_output_schema n'appliquait que widen_id_properties, et cinq outils ne declaraient aucun output_schema du tout : rmcp en derivait un, qui conservait des $ref qu'un client aveugle aux $defs ne peut pas resoudre. Ce n'est pas cosmetique. Les SDK MCP officiels valident structuredContent contre le schema annonce : un $ref irresolvable est un resultat que le client peut rejeter, ce qui est plus dur que le cas de l'entree ou le serveur avait au moins pu repondre. L'inliner recursif est applique cote sortie, et recall, recall_fused, recall_where, why et list_working_contexts declarent desormais leur schema explicitement. Rouge prouve : 11 items non types sur 18 schemas de sortie avant, 0 apres. Le test generique couvre TOUS les outils, donc le prochain a rendre un tableau d'objets est couvert par construction.
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
Il affirmait « Scope is deliberately the INPUT schemas [...] Output schemas keep their $ref-only items — a separate concern ». Le commit precedent de cette meme branche traite les schemas de sortie : le commentaire etait devenu faux, et un commentaire faux egare plus surement qu'une absence de commentaire.
cyberlife-coder
added a commit
that referenced
this pull request
Jul 27, 2026
Etendre la matrice a `mcp` et `http` a immediatement revele deux defauts. 1. REGRESSION QUE J'AI INTRODUITE (PR #1611, deja sur develop, jamais sur main) : mcp.rs referencait context_tools::wire_safe_output_schema en neuf endroits, or `mod context_tools` est gate sur `context`. Avec --features http — qui active `mcp` SANS `context` — la resolution echouait. Correctif structurel : le helper remonte dans schema.rs, gate sur `mcp`, avec ses cles d'id, puisque les outils de mcp.rs en ont besoin sans `context`. context_tools.rs le re-exporte. 2. DEFAUT PRE-EXISTANT : DEFAULT_COMPILE_STDIN_BUDGET est morte des que `context` est absente, tous ses consommateurs etant gates dessus. Gatee sur son consommateur reel, pas masquee par un allow(dead_code). http n'etait pas un choix arbitraire : il agrege treize dependances et c'est le transport du demon en production. Ne pas le tester isolement laissait precisement la combinaison la plus utilisee hors couverture. Matrice verifiee sous RUSTFLAGS=-Dwarnings, comme la CI : mcp, http, context, persistence, ollama, extract — les six vertes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Le correctif précédent n'avait traité que l'entrée. Dette identifiée à ce moment-là, refermée ici.
Le rouge
Pourquoi ce n'est pas cosmétique
Les SDK MCP officiels valident
structuredContentcontre l'outputSchemaannoncé. Un$refque le client ne sait pas résoudre est un résultat qu'il peut rejeter — plus dur que le cas de l'entrée, où le serveur avait au moins pu répondre.Deux causes, pas une
wire_safe_output_scheman'appliquait quewiden_id_properties, jamais l'inliner récursif. Corriger ça a fait tomber 11 → 6.Les 6 restants venaient d'ailleurs : cinq outils ne déclaraient aucun
output_schema. rmcp en dérivait un automatiquement, qui échappait donc à tout post-traitement.recall,recall_fused,recall_where,whyetlist_working_contextsle déclarent maintenant explicitement.Vérification
11 → 0. Le test générique parcourt tous les outils, donc le prochain qui rend un tableau d'objets est couvert par construction, pas parce que quelqu'un aura pensé à ajouter un cas.20 suites vertes, clippy pedantic propre,
fmt,version-syncet les contrats passés en local avant le push.