Anatomie de pulse.yaml
Vous allez construire : une lecture guidée du fichier unique qui définit une application — vous modifierez chaque bloc et verrez ce qui change.
Prérequis
- L'application
hellode Votre premier pipeline (ou n'importe quel squelette).
1 · Ouvrez pulse.yaml et repérez les trois blocs
cat pulse.yaml
source: OBSERVER — d'où viennent les événements
stages: DÉCIDER — une chaîne ordonnée, un moteur par stage
sink: AGIR — optionnel ; où vont les résultats
Chaque application Pulse, c'est ces trois blocs. Il n'y a aucune configuration cachée ailleurs.
2 · Le bloc source
source:
kind: webhook # ou : file-tail · http-poll · jdbc-source · …
Un type de connecteur + ses réglages. Ses événements atterrissent toujours sur <app>.in. Changez kind et rien en aval ne bouge — les stages ne savent pas d'où viennent les événements.
3 · Le bloc stages
stages:
- name: triage
engine: rule-based
rules:
- { condition: "severity == 'error'", action: flag }
Chaque règle est une condition plus une action (flag, block, hold, review, ou emit:<topic> pour router). Chaque stage nomme l'un des quatre moteurs : streaming, rule-based, llm, mcp. Le stage n lit le topic du stage n−1 et publie sur <app>.<stage>.out — c'est pourquoi vous pouviez suivre hello.triage.out directement.
4 · Changez la règle et redéployez
pulse deploy .
Les déploiements sont idempotents — modifier, redéployer, recommencer. Renvoyez sample.json et observez comment la nouvelle règle le traite.
5 · Ajoutez un sink (bloc optionnel)
sink:
kind: webhook
url: ${secret:MY_WEBHOOK}
Les sinks poussent les résultats vers l'extérieur — webhooks, Slack, JDBC, fichiers… Notez la référence ${secret:…} : les secrets ne vivent jamais en clair. C'est le sujet de Les secrets, proprement.
Ce qui vient de se passer
Toute la surface développeur tient dans un fichier déclaratif unique. Le deploy le lit et met en place le runtime ; rien de ce que vous avez cliqué ou exporté ne vit hors de ce fichier — c'est pourquoi les applications se relisent dans une PR et se reproduisent sur n'importe quelle machine.
Dépannage
Le deploy échoue après ma modification
L'erreur nomme le champ exact. La plus courante : une référence ${secret:…} non résolue — le deploy refuse d'expédier une configuration trouée. Définissez le secret ou retirez la référence.