Test bench · 2026-05-20

code-review-graph

Serveur MCP Python qui construit un graphe de dépendances code (Tree-sitter AST + blast-radius SQLite) pour servir des extraits ciblés aux agents Claude — au lieu de leur faire ingérer tout le repo. Annonce 8.2× moins de tokens vs ingestion brute. Testé en sandbox venv sur maritime-atlas (Angular + NestJS + Python).

Pourquoi le tester

Le repo tirth8205/code-review-graph (16.9k★, MIT, push très récent) propose de remplacer le pattern "lis 3000 lignes pour comprendre l'impact d'un changement" par un graphe précalculé : Tree-sitter parse le repo, écrit nodes + edges + flows dans SQLite, et le serveur MCP sert à l'agent juste les bouts pertinents pour la question posée. La promesse "8.2× moins de tokens" méritait vérification, surtout pour maritime-atlas (monorepo Angular 19 + NestJS 11 + sidecars Python) où l'ingestion brute coûte cher.

Ce qu'on a testé

  • Sandbox venv isolée dans ~/projects/developpeur/code-review-graph-sandbox/.venv, install via pip install code-review-graph. Snapshot md5 avant/après sur ~/.claude/CLAUDE.md + settings.json pour vérifier l'empreinte globale.
  • Évitement explicite de code-review-graph install --platform claude-code — le README annonce "injects graph-aware instructions into your platform rules" sans --dry-run documenté. Test du wrapping CLI standalone uniquement.
  • Build sur maritime-atlas : crg build --repo maritime-atlas --data-dir ./graphs/maritime, measuring time + node count.
  • detect-changes sur commit cascade WMS : crg detect-changes --base HEAD~1 --brief sur un commit récent qui touchait 3 fichiers de la couche cascade. Verification du risk score + test gaps reported vs ce qu'on savait déjà manuellement.

Verdict

Ce qui fonctionne

  • • Build 4.7s sur maritime-atlas (127 fichiers → 929 nodes, 7939 edges, 94 flows)
  • Zéro pollution ~/.claude/ tant qu'on saute install --platform
  • detect-changes donne 11 test gaps + risk 0.65 sur commit cascade WMS, signal actionnable immédiat
  • • 24 langages supportés (TS, Python, Vue, Go, Rust, Solidity…) + Jupyter .ipynb
  • • Flag --data-dir permet SQLite externe (pas de pollution dans le repo target)
  • • License MIT, 16.9k★, push fréquent — projet sain

Caveats

  • install --platform claude-code non testé — modifie probablement settings.json + injecte du CLAUDE.md, pas de --dry-run
  • • Pas de uninstall standalone — rollback = rm -rf sandbox/ (335 MB)
  • • Claim 8.2× tokens benché sur 6 repos publics, pas mesuré chez nous (à confirmer par usage prolongé)
  • • Stockage SQLite des signatures + embeddings → ne pas builder sur des repos privés sensibles tant qu'on n'a pas inspecté le contenu

Décision

Adopt-conditional (venv-only). On garde le sandbox, on expose un wrapper crg qui refuse install --platform sauf flag explicite, et on l'utilise comme outil standalone — pas comme MCP auto-installé. L'intégration MCP propre nécessite d'abord d'inspecter ce que install --platform claude-code écrirait dans un sandbox jetable, puis de l'appliquer manuellement.

Leçons à reprendre (4)

Au-delà de l'adoption, les patterns piqués au passage et réutilisables sur d'autres outils :

  1. 01

    detect-changes en pre-commit, sur tout gros monorepo

    4.7s pour parser 127 fichiers et sortir test gaps + risk score sur le delta HEAD~1. Plus rapide qu'un eslint sur les mêmes fichiers, et infiniment plus utile pour prioriser ce qu'on va vraiment relire. À skillifier en hook pre-commit sur maritime-atlas.

  2. 02

    Garde-fou wrapper script pour outils mutants

    Pattern : wrapper `crg` qui exec le binary du venv MAIS refuse `install --platform <X>` (exit 2) sauf flag explicite `--i-know-what-i-am-doing`. Évite la mutation silencieuse de `~/.claude/settings.json` + CLAUDE.md quand un sub-command innocent enchaîne sur install. Réutilisable pour tout outil avec auto-config invasive.

  3. 03

    Venv-only adoption pattern

    Install Python dans `~/projects/developpeur/<tool>-sandbox/.venv`, wrapper exposé via `bin/`. Zéro pollution `~/.claude/`, zéro impact système, rollback = `rm -rf` dossier. Méthode standard à industrialiser pour tout outil Python qui propose une intégration plugin invasive en option.

  4. 04

    Tree-sitter AST > LSP pour analyse cross-files rapide

    127 fichiers TS + Python + SQL + Bash en 4.7s, c'est 27 fichiers/s. Tree-sitter est suffisamment rapide pour tourner avant chaque commit sans douleur — là où des linters LSP-based prendraient 10× plus. Bon à savoir pour nos propres outils d'analyse internes.

Adoption en cours

  • ✓ Sandbox venv installée + verrouillée (335 MB, isolée du système)
  • ✓ Wrapper crg avec garde-fou anti install --platform
  • ✓ README sandbox documentant layout + PATH + anti-patterns
  • export PATH dans ~/.bashrc (Sylvain — Self-Modification hook bloque Claude)
  • ◯ Git hook pre-commit crg detect-changes --base HEAD~1 --brief sur maritime-atlas — backlog Sprint E
  • ◯ Inspection sandbox de install --platform claude-code pour récupérer le template MCP propre

Test mené 2026-05-20 · version 2.3.3 · cible maritime-atlas (929 nodes / 7939 edges).