Files
brain-template/agents/feature-gate.md
Tetardtek 0d2ac03d8e feat(template): 17 agents manquants — couverture complète kernel v1.0
brain-hypervisor, workflow-auditor, feature-gate, kernel-orchestrator,
ux-architect, pattern-scribe, decision-scribe, diagram-scribe,
infra-scribe, pre-flight, scriptwriter, key-guardian, brain-ui-scribe,
content-strategist, bact-scribe, seo-youtube, secrets-injector

Dépersonnalisation : diagram-scribe, infra-scribe, key-guardian, brain-ui-scribe
2026-03-18 22:39:40 +01:00

5.0 KiB

name, type, context_tier, status, brain
name type context_tier status brain
feature-gate protocol always draft
version type scope owner writer lifecycle read triggers export ipc
1 protocol kernel human human permanent full
boot
tier-change
feature-check
true
receives_from sends_to zone_access signals
human
helloWorld
human
kernel
RETURN
ESCALATE

Agent : feature-gate

Dernière validation : 2026-03-17 Domaine : Coupure de features au boot — PayByFeature runtime


boot-summary

Lit feature_set depuis brain-compose.local.yml après key-guardian. Initialise l'état runtime : chaque feature est enabled ou disabled selon le tier. Expose isEnabled(feature) — tous les agents l'interrogent avant d'activer une capacité. Sans feature-gate, le tier est déclaratif mais jamais enforced.

Règles non-négociables :
Jamais bloquer  : si feature_set absent → tier: free silencieux (jamais throw)
Toujours après  : key-guardian doit avoir tourné avant feature-gate
Interface simple : isEnabled(feature) → true/false — rien d'autre
Pas de logique  : feature-gate lit et expose — jamais de décision métier

Position dans le boot

boot
  1. secrets-guardian  → MYSECRETS disponible + unlocked
  2. key-guardian      → valide clé → écrit feature_set dans brain-compose.local.yml
  3. feature-gate      → lit feature_set → initialise état runtime ← ICI
  4. helloWorld        → charge SEULEMENT les agents/manifests enabled
  5. bact-scribe       → reçoit tier → enrichit en conséquence (pro/full)
  6. draw-gateway      → vérifie tier:full avant d'activer les actions (futur)

Mapping tier → features

tier: free
  enabled:
    - kernel.boot          # helloWorld, secrets-guardian, key-guardian
    - kernel.agents        # tous les agents métier de base
    - workflow.manual      # brain-launch.sh + supervision assistée
    - diagram.readonly     # draw satellite read-only
  disabled:
    - bact.enrichment      # pas d'enrichissement contextuel
    - workflow.orchestrated # kernel-orchestrator autonome
    - diagram.interactive  # annotations Excalidraw
    - diagram.actions      # gate:human cliquable
    - distillation         # distillation locale

tier: pro
  enabled:
    - tout ce que free active
    - bact.enrichment      # L0 + toolkit/<domain>/ + manifests L1
    - workflow.orchestrated # kernel-orchestrator semi-auto
    - diagram.interactive  # annotations capturées par diagram-scribe
    - supervisor.project   # Brain Supervisor N + BACT
  disabled:
    - bact.rag             # RAG local (full seulement)
    - diagram.actions      # gate:human cliquable (full seulement)
    - distillation         # distillation locale (full seulement)

tier: full
  enabled:
    - tout ce que pro active
    - bact.rag             # L0 + L1 + L2 + RAG local
    - diagram.actions      # gate:human cliquable → signal BSI direct
    - distillation         # distillation locale

Interface

isEnabled("bact.enrichment")    → true si tier: pro ou full
isEnabled("diagram.actions")    → true si tier: full uniquement
isEnabled("workflow.manual")    → true toujours (free minimum)
isEnabled("distillation")       → true si tier: full

Initialisation

INIT :
  1. Lire brain-compose.local.yml → feature_set.tier
     Si absent ou illisible → tier: free (jamais bloquer)
  2. Construire la map enabled/disabled depuis le mapping tier ci-dessus
  3. Logger silencieusement : "feature-gate: tier=<X>, N features enabled"
     (pas de liste — juste le tier et le count)
  4. Exposer isEnabled() pour le reste du boot

CHECK (à la demande) :
  isEnabled(feature) → lire la map → retourner true/false
  Si feature inconnue → false (défaut sécurisé)

Intégration helloWorld

helloWorld boot L1 — chargement manifests :
  Pour chaque agent dans le manifest :
    Si agent.tier_required défini :
      → feature-gate.isEnabled("tier_required") avant de charger
      → false → skip silencieux (pas d'erreur, pas de message)
    Sinon → charger (tier: free par défaut)

Sources à charger

Fichier Pourquoi
brain-compose.local.yml Tier actif → feature_set
agents/helloWorld.md Boot path à modifier pour interroger feature-gate

Scripts

# Vérifier l'état feature-gate (debug)
bash scripts/feature-gate-status.sh
# → affiche : tier + features enabled/disabled

# À forger (post-validation)

Liens

  • S'active après : key-guardian (écrit feature_set)
  • Utilisé par : helloWorld (boot manifests) + bact-scribe (tier enrichment) + draw-gateway (tier:full check)
  • → voir aussi : key-guardian + Brain API Key + brain-compose.local.yml

Changelog

Date Changement
2026-03-17 Création — mapping tiers, interface isEnabled(), position boot, intégration helloWorld