Moteur de résolution
Comment le resolver compose le contexte servi par grace_resolve_context.
Le moteur vit dans le contexte hexagonal platform/backend/src/resolution/. L'orchestration
est dans application/resolve-context.use-case.ts, qui compose trois briques de domaine :
domain/dependency-graph-resolver.ts (graphe), domain/relevance-selector.ts (filtrage
sémantique optionnel) et domain/context-compiler.ts (mise en forme + altitude). Il lit les
métadonnées des talents en base (catalog_talents) via le port CatalogReader
(adaptateur Drizzle infrastructure/drizzle-catalog-reader.ts) et leur contenu depuis le volume
/catalog via le port TalentContentSource
(adaptateur infrastructure/filesystem-talent-content.source.ts).
Étapes de grace_resolve_context
- Talents actifs du projet (
ProjectTalent.enabled). - Graphe résolu (
requires/includes/conflicts), prérequis manquants détectés. - Filtrage par rôle (
manifest.agents) : un talent sans entrée pour l'agent est écarté. - Tri par pertinence à la tâche (
activation.triggersprésents dans la tâche) → rôle (required > recommended > optional) → priorité (priority.default) → nom. - Corps selon l'altitude (
depth, guidé partoken_budget). - Table « Quand approfondir » (pointeurs
grace_get, filtrés par rôle / langage). - Section « talents recommandés non activés » (
recommends).
Les talents status: draft sont ignorés.
Avec le flag GRACE_RELEVANCE=embeddings, une étape de filtrage sémantique s'ajoute
entre la résolution du graphe et la compilation : elle restreint les talents à ceux
pertinents pour la tâche. Voir Architecture → Pertinence sémantique.
Clôture sur les requires — après le filtrage sémantique, la sélection est refermée sur
les requires / includes des talents retenus (requiresClosure) : un composite n'est jamais
servi sans ses briques obligatoires, même si la pertinence les avait écartées. Détail :
Pertinence → la coupe est fermée sur les requires.
Champs du manifest consommés
| Champ | Usage |
|---|---|
id, name, version, type, summary, tags | identité, recherche, cards, graphes |
requires, includes, conflicts | résolution du graphe, prérequis manquants |
recommends | suggérés (resolve + fiche) |
agents | filtrage / pondération par rôle |
priority.default | tri |
activation.triggers | pertinence à la tâche |
token_budget | altitudes (compact / standard / full) |
status | draft ignoré |
structure.{enforceable,diagram,constraints} | validation + pointeur modèle |
Les fichiers graph.yml (doublon de requires/includes/conflicts) et prompts/ ont été
retirés du catalogue : aucun code ne les lisait. Reste le champ manifest outputs,
encore non consommé. Pour conventions.naming / folders, le choix retenu est de les
injecter comme conventions dans le contexte plutôt qu'un linter fragile.
→ Le schéma complet du manifest est dans Manifest.