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
This commit is contained in:
174
agents/feature-gate.md
Normal file
174
agents/feature-gate.md
Normal file
@@ -0,0 +1,174 @@
|
||||
---
|
||||
name: feature-gate
|
||||
type: protocol
|
||||
context_tier: always
|
||||
status: draft
|
||||
brain:
|
||||
version: 1
|
||||
type: protocol
|
||||
scope: kernel
|
||||
owner: human
|
||||
writer: human
|
||||
lifecycle: permanent
|
||||
read: full
|
||||
triggers: [boot, tier-change, feature-check]
|
||||
export: true
|
||||
ipc:
|
||||
receives_from: [human, helloWorld]
|
||||
sends_to: [human]
|
||||
zone_access: [kernel]
|
||||
signals: [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
|
||||
|
||||
```yaml
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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 |
|
||||
Reference in New Issue
Block a user