Capability Registry — get_by_type() dans resolv_service avec filtrage de scope #3

Open
opened 2026-06-06 14:36:05 +02:00 by shuss · 0 comments
Owner

Contexte

Le module resolv_service expose actuellement get_tenant() et get_system() pour des lookups par key. Il faut ajouter un lookup par type avec filtrage de scope automatique.

Nouvelles fonctions

import "resolv_service" as svc;

// Retourne toutes les capabilities du type donné, visibles depuis le namespace courant
// Filtre selon scope : "namespace" < "tenant" < "cluster"
svc::get_by_type(context, "mcp")      // → array de capability objects, ou [] si aucun

// Sucre syntaxique : retourne la première capability du type, ou () si aucune
svc::first_of_type(context, "ca")     // → capability object ou ()

Règles de filtrage par scope

Une capability est visible si :

  • scope == "cluster" → toujours visible
  • scope == "tenant" → visible uniquement si le namespace consommateur appartient au même tenant que le namespace producteur
  • scope == "namespace" → visible uniquement si le namespace consommateur == namespace producteur

Comportement existant préservé

get_tenant() et get_system() restent inchangés. Ils continuent de faire un lookup par key.

Critère d'acceptance

// Cas MCP namespace-local
let mcps = svc::get_by_type(context, "mcp");
// → ne retourne que les MCPs dont scope == "namespace" ET namespace == courant,
//   ou scope == "tenant" ET même tenant,
//   ou scope == "cluster"

let ca = svc::first_of_type(context, "ca");
// → () si aucune CA disponible
// → #{key: "internal-ca", type: "ca", resource: #{...}} si disponible
  • Retour cohérent : toujours un array pour get_by_type, toujours un objet ou () pour first_of_type
  • Les capabilities sans type (publiées via l'ancien set_services()) ne remontent pas dans ces lookups — elles restent uniquement accessibles par key
## Contexte Le module `resolv_service` expose actuellement `get_tenant()` et `get_system()` pour des lookups par `key`. Il faut ajouter un lookup par `type` avec filtrage de scope automatique. ## Nouvelles fonctions ```rhai import "resolv_service" as svc; // Retourne toutes les capabilities du type donné, visibles depuis le namespace courant // Filtre selon scope : "namespace" < "tenant" < "cluster" svc::get_by_type(context, "mcp") // → array de capability objects, ou [] si aucun // Sucre syntaxique : retourne la première capability du type, ou () si aucune svc::first_of_type(context, "ca") // → capability object ou () ``` ## Règles de filtrage par scope Une capability est visible si : - `scope == "cluster"` → toujours visible - `scope == "tenant"` → visible uniquement si le namespace consommateur appartient au même tenant que le namespace producteur - `scope == "namespace"` → visible uniquement si le namespace consommateur == namespace producteur ## Comportement existant préservé `get_tenant()` et `get_system()` restent inchangés. Ils continuent de faire un lookup par `key`. ## Critère d'acceptance ```rhai // Cas MCP namespace-local let mcps = svc::get_by_type(context, "mcp"); // → ne retourne que les MCPs dont scope == "namespace" ET namespace == courant, // ou scope == "tenant" ET même tenant, // ou scope == "cluster" let ca = svc::first_of_type(context, "ca"); // → () si aucune CA disponible // → #{key: "internal-ca", type: "ca", resource: #{...}} si disponible ``` - Retour cohérent : toujours un array pour `get_by_type`, toujours un objet ou `()` pour `first_of_type` - Les capabilities sans `type` (publiées via l'ancien `set_services()`) ne remontent pas dans ces lookups — elles restent uniquement accessibles par `key`
shuss added this to the Capability Registry v1 milestone 2026-06-06 14:36:05 +02:00
shuss added the Kind/Feature
Priority
High
2
labels 2026-06-06 14:36:05 +02:00
shuss added
Priority
Low
4
and removed
Priority
High
2
labels 2026-06-12 10:30:51 +02:00
shuss added the
Status
Blocked
1
label 2026-06-12 17:43:43 +02:00
Sign in to join this conversation.