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:
2026-03-18 22:39:40 +01:00
parent 8c95b70314
commit 0d2ac03d8e
17 changed files with 3139 additions and 0 deletions

174
agents/feature-gate.md Normal file
View 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 |