Codespaces — Découverte d'Architecture par Carte de Croyance

Compétence d'agent qui construit une carte de croyance interrogeable d'une base de code (modules, frontières, dépendances, entités) via tree-sitter, permettant aux agents IA de coder de manière précise : découverte d'architecture, analyse d'impact et de rayon de souffle, vérifications de frontières et de violations de couches, et traçage des flux d'appels et de données entre Python et TypeScript.

Qu'est-ce que Codespaces — Découverte d'Architecture par Carte de Croyance ?

Cette compétence permet aux agents IA de coder de manière intelligente en construisant une « carte de croyance » — un graphe de dépendances de la base de code extrait à l'aide de tree-sitter pour Python et TypeScript. Au lieu de lire le code source aveuglément, l'agent interroge d'abord ce graphe avec des commandes comme `search`, `analyze`, `boundary`, `deps` et `rdeps` pour comprendre les modules, leurs frontières, dépendances et impacts. Cela évite les lectures inutiles de fichiers et les modifications accidentelles. La compétence inclut des scripts Python (`build_belief_map.py`, `belief_search.py`) et une référence complète de requêtes en Scheme pour des analyses complexes. Elle est utilisée avant toute lecture de code non triviale pour la découverte d'architecture, l'analyse de rayon de souffle, les vérifications de violations de couches et le traçage de flux d'appels. Des commandes rapides comme `quick` permettent une première passe efficace avec un mot-clé. L'infrastructure IaC (Kustomize, Helm, Terraform) peut également être extraite et intégrée au graphe via `build_infra_topology.py`.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add diskd-ai/codespaces

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Codespaces — Découverte d'Architecture par Carte de Croyance ?

Interrogez .belief_map.sexp pour découvrir modules, frontières et dépendances avant de lire les fichiers source. Ne lisez jamais le code à l'aveugle — interrogez d'abord le graphe.

Scripts

Cette compétence regroupe des scripts Python. Lancez-les depuis le répertoire de base de la compétence :

  • scripts/belief_search.py — interroger le graphe de la carte de croyance
  • scripts/build_belief_map.py — générer la carte de croyance à partir du code source
  • scripts/build_infra_topology.py — extraire les faits de topologie Kustomize, Helm et Terraform
  • scripts/git_descendants.py — trouver tous les commits descendants de HEAD (ou d'une référence donnée)

N'utilisez jamais les copies locales de ces scripts dans le projet — elles peuvent être obsolètes et produire du JSON au lieu de sexp.

Prérequis

Localisez la carte de croyance. Si absente, construisez-la :

ls .belief_map.sexp belief_map.sexp 2>/dev/null
# Construction : pip3 install tree-sitter tree-sitter-typescript tree-sitter-python
python3 scripts/build_belief_map.py          # incrémental ~5s
python3 scripts/build_belief_map.py --full   # reconstruction complète ~30s

Flux de travail obligatoire : interroger avant le code

Pour un travail de code non trivial, lancez une requête sur la carte de croyance avant rg, find, sed, cat, nl, l'ouverture de répertoires ou la lecture de fichiers source. La compétence n'est utile que si elle est utilisée comme première étape de cadrage, pas comme confirmation après inspection du code source.

Première passe rapide quand la tâche a un mot-clé clair :

python3 scripts/belief_search.py quick "mot-clé"

quick recherche le premier module correspondant et exécute immédiatement analyze. Utilisez-la pour obtenir fichiers frontières, dépendances, dépendances inverses, couches et violations en une seule étape. Si quick renvoie le mauvais module ou aucune correspondance, utilisez le flux explicite search -> analyze ci-dessous.

Étape 1 — Trouver l'ID du module :

python3 scripts/belief_search.py search "mot-clé"
python3 scripts/belief_search.py entity NomEntité

Utilisez search ou entity pour localiser l'ID du module. Les ID de modules sont des chemins relatifs complets comme pki-service/src/modules/ca/ca.service, pas des codes courts comme ps34. La carte de croyance peut contenir en interne des IDs de chemins courts, mais ils sont résolus automatiquement — passez toujours des chaînes lisibles de type chemin. Ne DEVINEZ ni n'inventez les IDs de modules — confirmez toujours avec search d'abord.

Étape 2 — Analyser le module (faites-le IMMÉDIATEMENT, pas en option) :

python3 scripts/belief_search.py analyze <id-module>

analyze est la commande PRINCIPALE. Elle renvoie le contexte complet : fichiers frontières, dépendances, dépendances inverses, couche d'architecture et violations. Exécutez-la toujours avant de lire une source.

Étape 3 — Lire uniquement les fichiers frontières listés dans la sortie de analyze.

Étape 4 — Ne lisez PAS des répertoires entiers. Si la frontière montre 2-3 fichiers pertinents, lisez uniquement ces fichiers. Ignorez tout le reste du répertoire.

Référence des commandes

CommandeObjectifExemple
search "<pattern>"Recherche regex dans le graphe (trouver ID de module)search "operative.*service"
analyze <id>Analyse complète du module (commande PRINCIPALE)analyze drive/modules/drive/drive_schema
quick <mot-clé>Recherche + analyse de la première correspondance (raccourci)quick operatives
boundary <id>Fichiers à lire pour un changementboundary operatives.service
boundary <id> --files-onlyChemins de fichiers uniquement (compact)boundary operatives.service --files-only
entity <Nom>Trouver définitions + référencesentity DrivePath
deps <id> [profondeur]Arbre des dépendances sortantesdeps operatives.service 3
rdeps <id> [profondeur]Rayon de souffle (qui dépend de ceci)rdeps drive_schema 2
flow <id> <fn>Tracer flux d'appel/donnéesflow drive_api fetchFiles
module <id>Module unique avec ses arêtesmodule operatives.controller
`boundaries [idall]`Vérifier les violations d'architecture
`invariants [idall]`Vérifier les violations de conventions de nommage
layersAfficher tous les modules par couchelayers
find_function <nom>Trouver les définitions de fonctions/méthodesfind_function createOrder
find_type <nom>Trouver les définitions de types/classes/ifc/enumfind_type DriveDbCommitResponse
find_callchain <src> <tgt> [profondeur]Tracer le chemin d'appel entre fonctionsfind_callchain createOrder processPayment
find_callers <fn> [profondeur]Qui appelle cette fonctionfind_callers handleRequest 3
find_calls <fn> [profondeur]Ce que cette fonction appellefind_calls createOrder 2
grep_functions <pattern>Rechercher dans les corps de fonctions dans le code sourcegrep_functions "validate.*input"
diff_functions [ref]Fonctions modifiées dans le diff gitdiff_functions HEAD~3
query '<sexp>'Requête Scheme composablequery '(count (boundary "X"))'
replREPL Scheme interactifrepl

Référence rapide : requêtes rg

Quand vous avez besoin de recherches rapides et ciblées sans invoquer le script Python, interrogez la carte de croyance directement avec rg. Le constructeur fourni écrit .belief_map.sexp ; si un dépôt utilise encore l'ancien belief_map.sexp, remplacez ce nom de fichier dans les commandes ci-dessous :

# Tous les faits sur un module
rg 'drive/modules/drive_db/api ' .belief_map.sexp

# Qui importe un module
rg 'imports .* drive/modules/commons/result' .belief_map.sexp

# Ce qu'un module importe
rg 'imports drive/modules/drive_db/api' .belief_map.sexp

# Toutes les références à une entité
rg 'DriveDbCommitResponse' .belief_map.sexp

# Toutes les classes d'un dépôt
rg '^\(cls drive/' .belief_map.sexp

# Arêtes de flux de données
rg 'data-flow' .belief_map.sexp

Ces one-liners sont utiles pour des vérifications rapides. Pour une sortie structurée et une analyse complète, utilisez les commandes du script Python.

Notation de sortie

Toute sortie est constituée de faits S-expression, un par ligne. Voir references/sexp-notation.md pour le format complet.

Schémas clés :

(boundary <mod> :lang py :file <chemin> :purpose "<desc>")
(boundary-dep <mod> <dep> :lang ts :file <chemin> :relation imports)
(boundary-rdep <mod> <rdep> :lang tsx :file <chemin> :relation imports)
(boundary-summary <mod> :total 10 :deps 7 :rdeps 2)
(entity-def cls <mod> <Nom> <ligne> :lang py :file <chemin>)
(violation <src> <tgt> :src-layer domain :tgt-layer api :via imports :lang ts "<raison>")
(result <module-ou-chemin>)
(result-count 42)

Valeurs de :lang : py = Python (snake_case), ts = TypeScript (camelCase), tsx = TSX (PascalCase).

Langage de requête Scheme

Composez des requêtes pour des analyses complexes. Voir references/scheme-queries.md pour la référence complète.

Essentiels :

(boundary "id")                ; cible + deps + rdeps (frontière de changement)
(entity "Nom")               ; modules définissant l'entité
(deps "id" profondeur)       ; dépendances sortantes
(rdeps "id" profondeur)      ; dépendances inverses
(find-function "nom")        ; modules avec des définitions de fonction correspondantes
(find-type "nom")            ; modules avec des définitions de type correspondantes
(find-callers "fn" profondeur)   ; modules appelant une fonction
(find-calls "fn" profondeur)     ; modules qu'une fonction appelle
(intersect A B)               ; intersection d'ensembles
(filter SET "pattern")       ; filtre regex
(files SET)                   ; résoudre en chemins de fichiers
(count SET)                   ; compter les membres
(violations)                  ; modules avec des violations de frontière
(layer "id")                 ; couche d'architecture d'un module

Schéma de plan d'analyse

Avant de modifier du code, composez un plan à partir de requêtes :

; 1. Cadrage
(boundary "operatives.service")
(count (boundary "operatives.service"))

; 2. Contraintes d'architecture
(violations "operatives.service")
(layer "operatives.service")

; 3. Frontières inter-langages
(filter (refs-to "DrivePath") "app-service")

; 4. Réduire aux fichiers actionnables
(filter (boundary "operatives.service") "dto")
(intersect (deps "controller" 2) (deps "service" 2))

; 5. Après les modifications : vérifier
(violations "operatives.service")

Exemples de déclenchement

Utilisez cette compétence avant de lire le code source pour :

  • Des investigations de cause racine mentionnant des services, APIs, jobs, événements, flux UI ou comportements défaillants.
  • Des questions inter-services ou inter-modules, par exemple "comment X appelle-t-il Y ?" et "où cela est-il stocké ?"
  • Une clarification Redmine quand la réponse dépend du comportement du code.
  • Des revues d'architecture, analyses d'impact, modifications de contrats publics ou vérifications de rayon de souffle.
  • Des revues de changements non triviaux en staging quand la direction des dépendances ou la propriété des modules importe.

Ne forcez pas son utilisation pour des tâches de simple commit, des résumés git-log, des démos/serveurs manuels, des tests purement sur navigateur ou des analyses de logs de session.

Gestion des erreurs

Si une commande renvoie (error no-match ...) :

  1. Ne réessayez PAS avec le même ID et ne devinez PAS un autre ID
  2. Lancez search avec un mot-clé plus large pour trouver le bon ID de module
  3. Utilisez le champ :suggestions s'il est présent — il liste des IDs de modules similaires
# Mauvais : deviner des IDs
python3 scripts/belief_search.py analyze ps34        # échoue : ps34 est un ID de chemin court
python3 scripts/belief_search.py analyze ca.service  # échoue : chemin incomplet

# Correct : d'abord search, puis utiliser le chemin complet depuis les résultats
python3 scripts/belief_search.py search "ca.*service"
# La sortie montre : pki-service/src/modules/ca/ca.service
python3 scripts/belief_search.py analyze pki-service/src/modules/ca/ca.service

Anti-patrons

  • Deviner les IDs de modules. Les IDs de modules sont des chemins relatifs complets (ex. pki-service/src/modules/ca/ca.service). Les codes courts comme ps34 sont des IDs de chemins internes et ne doivent pas être utilisés directement. Faites toujours search d'abord.
  • Construire mais ne jamais interroger. Construire la carte de croyance puis ne jamais lancer search, analyze ou boundary n'apporte aucune valeur.
  • Interroger après avoir lu le code source. La première lecture de code source devrait provenir des lignes boundary-file dans la sortie de analyze.
  • Lire .belief_map.sexp comme un fichier entier. Utilisez search, analyze ou rg pour interroger des faits spécifiques.
  • Sauter la carte de croyance pour des tâches inter-modules. Interrogez toujours le graphe pour comprendre les frontières avant de lire les fichiers source.
  • Lire tous les fichiers d'un répertoire. Quand la frontière montre 2-3 fichiers, lisez uniquement ceux-là.
  • Utiliser des scripts locaux au projet. Utilisez toujours les scripts fournis par cette compétence. Les copies du projet peuvent produire du JSON au lieu de sexp.

Reconstruction du graphe

python3 scripts/build_belief_map.py          # incrémental (~5s)
python3 scripts/build_belief_map.py --full   # reconstruction complète (~30s)
python3 scripts/build_belief_map.py ./drive  # un seul sous-dépôt
python3 scripts/build_belief_map.py --lsp    # avec hiérarchie d'appels LSP (~1-5min)

Reconstruisez après des changements structurels (ajout/suppression de fichiers, modification d'imports, ajout de classes).

Topologie d'infrastructure

Extrayez la topologie des services depuis les fichiers Kustomize, Helm et Terraform. Ce script nécessite PyYAML (pip3 install pyyaml).

python3 scripts/build_infra_topology.py                    # auto-détection de tous les IaC
python3 scripts/build_infra_topology.py --kustomize .      # kustomize uniquement
python3 scripts/build_infra_topology.py --helm ./charts    # helm charts uniquement
python3 scripts/build_infra_topology.py --terraform ./infra # terraform uniquement
python3 scripts/build_infra_topology.py --append .belief_map.sexp  # fusionner dans le graphe

Émet les arêtes infra-node, k8s-depends, k8s-service, helm-depends, tf-depends et infra-maps. Interrogez avec :

rg 'infra-node' .belief_map.sexp                  # tous les services
rg 'k8s-depends' .belief_map.sexp                 # dépendances de services
rg 'infra-node.*:component database' .belief_map.sexp  # toutes les bases de données
rg 'infra-maps.*app-service' .belief_map.sexp     # mapping infrastructure -> code source

Skills associés