Capability Registry — pré-alimentation de context.capabilities.* avant le rendu #4
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Aujourd'hui, les packages doivent appeler
resolv_servicedanscontext_extra.rhaipour découvrir ce qui est disponible. L'objectif est que vynil alimente automatiquementcontext.capabilitiesavant tout rendu, de façon à ce que les packages n'aient plus à faire de découverte eux-mêmes.Comportement attendu
Avant d'appeler
context_extra.rhaiet avant tout rendu de template, vynil interroge le registre de capabilities pour toutes les capabilities visibles depuis le namespace courant (en appliquant les règles de scope) et les injecte dans le contexte :Règles de structure
#{available: false}— à trancher à l'implémentation)Impact sur context_extra.rhai
Les packages n'ont plus à appeler
resolv_servicepour la découverte.context_extra.rhaise réduit à la logique métier propre au package.Exemple de migration :
Compatibilité avec context_extra.rhai existant
context_extra.rhaipeut toujours appelerresolv_service— ce n'est pas une rupture. La pré-alimentation est additive : elle ajoutecontext.capabilitiessans retirer les fonctions existantes.Critère d'acceptance
context.capabilitiesest disponible dans les templates HBS et danscontext_extra.rhaiget_by_type())type(ancien format) n'apparaissent pas danscontext.capabilitiesmais restent accessibles viaresolv_servicemake template) continuent de fonctionner (capabilities vides si cluster non connecté)Observation tirée de l'analyse de paquets en production, qui confirme l'intérêt de cette issue : environ deux tiers des paquets matures ont un
context_extra.rhai, et son contenu se partage entre découverte (lookupsresolv_service, tests de présence de CRD viacontext.cluster.crds.contains(...)pour activer le monitoring, etc.) et dérivation (réplicas selon le mode HA, sélection de classe de stockage, tailles depuisresources). La pré-alimentation decontext.capabilitieséliminera la moitié « découverte » ; la dérivation restera danscontext_extra, ce qui est sain.Deux points d'implémentation à verrouiller :
context.capabilitiesdevrait être toujours présent (map vide le cas échéant), pour que templates et hooks puissent tester la disponibilité sans try/catch ni divergence entre test local et cluster.context_extraactuels est le test direct decontext.cluster.crds. Si les paquets système publiaient ces capacités dans le registre (ex.type: prometheuspublié par la stack de monitoring), ce pattern migrerait aussi verscontext.capabilities— à garder en tête pour le vocabulaire detypede #1, sans en faire un prérequis.Analyse et rédaction : Claude (assistant IA), publié via le compte de Xavier.
La série "Capability Registry" bien qu'intéressante est franchement mal cablée au final. C'est le résultat d'une conversation, mais l'analyse était profondément incomplète au départ et au final bien trop calqué sur la solution actuelle.
Et cette stratégie ne permet pas, au final et avec un peu de recul, de répondre au besoin de l'évolution prévue. On cherches à construire un système d'auto-configuration complet du type .well-known. La stratégie ici est implémenté comme un breaking change alors qu'au fond ce n'est qu'une amélioration mineur du système actuel. En soit breaking et avec un intérêt limité, c'est un gros non de ma part.
Si on va dans la stratégie breaking, on va jusqu'au bout : on fait un vrai redesign, pas juste un léger patch sur un système bancal en le présentant comme une révolution : ce n'est pas une révolution d'ajouter 3 champs texte, ca ne mérite clairement pas tous ca.