fix(memory): schémas de sortie complets, et --features http compile enfin#1617
Merged
cyberlife-coder merged 2 commits intoJul 27, 2026
Merged
Conversation
Dix outils sur dix-neuf n'en declaraient aucun : context_savings, feedback, forget, load_working_context, relate, remember, remember_extracted, retrieve_context_source, save_working_context, suggest_budget. rmcp en derivait alors un automatiquement, qui echappait a tout post-traitement — inliner compris — et conservait des $ref qu'un client aveugle aux $defs ne resout pas. Or les SDK MCP valident structuredContent contre ce schema : un $ref irresolvable est un resultat correct que le client peut rejeter. Cout mesure, pas suppose : 107 803 -> 107 837 octets pour les 19 outils, soit +34 octets. L'inlining recursif suivi de l'elagage des $defs absorbe l'ajout, et le total reste sous les 108 162 octets d'avant tous ces correctifs. Nouveau contrat : tout outil doit ANNONCER un schema de sortie. Le precedent verifiait la forme des schemas presents, pas leur presence — d'ou dix outils passes au travers.
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.
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.
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.
Deux boucles d'un même audit, la seconde ayant révélé une régression que j'avais introduite.
Les dix derniers schémas de sortie
Dix outils sur dix-neuf n'en déclaraient aucun :
context_savings,feedback,forget,load_working_context,relate,remember,remember_extracted,retrieve_context_source,save_working_context,suggest_budget.rmcp en dérivait un automatiquement, qui échappait à tout post-traitement — inliner compris — et gardait des
$refqu'un client aveugle aux$defsne résout pas. Les SDK MCP validantstructuredContentcontre le schéma annoncé, un$refirrésolvable est un résultat correct que le client peut rejeter.Coût mesuré : 107 803 → 107 837 octets, soit +34 octets pour dix schémas. L'élagage des
$defsabsorbe l'ajout, et le total reste sous les 108 162 d'avant tous ces correctifs.Le contrat précédent vérifiait la forme des schémas présents, pas leur présence — d'où dix outils passés au travers. Le nouveau exige que tout outil en annonce un.
--features httpne compilait plusÉtendre la matrice CI à
mcpethttpa immédiatement trouvé deux défauts.Une régression que j'ai introduite (PR #1611, sur
develop, jamais surmain— donc rien de publié) :mcp.rsréférençaitcontext_tools::wire_safe_output_schemaen neuf endroits, ormod context_toolsest gaté surcontext. Avec--features http, qui activemcpsanscontext, la résolution échouait.Correctif structurel plutôt que rustine : le helper remonte dans
schema.rs, gaté surmcp, avec ses clés d'id — puisque les outils demcp.rsen ont besoin sanscontext.Un défaut préexistant :
DEFAULT_COMPILE_STDIN_BUDGETest morte dès quecontextest absente. Gatée sur son consommateur réel, pas masquée par unallow(dead_code).httpn'était pas un choix arbitraire : il agrège treize dépendances et c'est le transport du démon en production. Ne pas le tester isolément laissait la combinaison la plus utilisée hors couverture.Vérification
Six features vertes isolément sous
RUSTFLAGS=-Dwarnings, comme la CI :mcp,http,context,persistence,ollama,extract. 20 suites de tests, clippy pedantic propre.