Écrit un asset auto-créé (workflow/outil) + sa doc générée depuis le
gabarit, chemins sanitizés (anti-traversée), semver validé. 5 tests
(dépôt temp). Le dépôt fait foi avant tout passage en need-review.
Palier de risque : reversible (écriture fichier locale, sans commit ni exécution).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Conversation avec l'agent via POST /api/chat : bulles user/assistant,
état "réfléchit", auto-scroll, gestion d'erreur, déconnexion auto sur 401.
Build OK.
Palier de risque : reversible (front).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
registerApi : login rate-limité → JWT, puis Bearer obligatoire sur
/api/chat, /api/review (+approve/refuse), /api/state. CORS restreint +
rate-limit. Réutilise ChatService + ReviewService. API activée seulement
si auth configurée (apiAuth). 65 tests (5 via inject), 0 vuln.
Palier de risque : privilégié (surface exposée) — montée seulement si
auth présente ; non exposée tant que .env non renseigné.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Auth login fort : mot de passe scrypt + TOTP 2FA (otplib) + JWT HS256
(jose), login tout-ou-rien sans indice. ChatService factorise le tour
d'agent pour toutes les surfaces (Telegram refactoré). 60 tests, 0 vuln.
Palier de risque : reversible (logique d'auth ; surface API câblée en v0.20).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Export JSON workflows-n8n/chlova-alerts.v1.0.0.json (webhook → mail,
formate par type d'alerte) + doc d'asset (palier privileged, rollback).
ALERT_WEBHOOK_URL dans .env.example + compose (vide = log-only).
need-review.md : alertes implémentées. Compose revalidé, 53 tests, 0 vuln.
Palier de risque : privilégié (workflow envoie des mails) — désactivable
via ALERT_WEBHOOK_URL vide ; non exécuté depuis le dépôt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Confirme MCP_N8N_URL = .../mcp-server/http (hôte interne préféré, URL
publique TLS possible + egress du domaine). Note egress dans networks.md.
Palier de risque : n/a (doc).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
n8n ≥ 2.18.4 sert son propre MCP : suppression du service mcp-n8n,
MCP_N8N_URL pointe vers l'endpoint natif de l'instance (auth MCP Access
Token Bearer). Portainer reste un sidecar officiel. Aucun changement de
code (registry HTTP+Bearer inchangé). Docs + .env alignés, compose
revalidé.
Palier de risque : n/a (infra + config).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Barrière n°1 de la lecture seule : seuls les outils readOnlyHint=true sont
exposés (fail-safe, palier de risque déduit côté code). Registry connecte
n8n + Portainer en HTTP authentifié et produit des ToolHandle read-only.
Retrait d'exactOptionalPropertyTypes pour interop SDK MCP (reste strict).
Palier de risque : reversible.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Client /api/chat (modèles cloud via proxy, auth Bearer, timeout, erreurs
sans fuite). Boucle comprendre→outil→observer→répondre avec garde-fou
anti-boucle, audit par appel et Guard injecté (abstraction prête pour le
gatekeeper Phase 2). ToolHandle découplé de MCP.
Palier de risque : reversible.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Modèle de menace centré prompt-injection + défenses par couche
(surface réduite, socket-proxy obligatoire, scoping tokens, egress
ollama.com only, secrets par référence, lecture seule renforcée, audit).
Documente réseaux interne/egress et filtrage Docker en lecture seule P1.
Normalise les fins de ligne (.gitattributes).
Palier de risque : n/a (doc + conventions).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pose les règles non négociables : SemVer + un-artefact-un-commit, pinning
des images, export JSON des workflows n8n ; gabarit de doc d'asset ;
paliers réversible/privilégié avec invariant anti-escalade ; schéma
d'architecture et invariants d'exposition. Ignore settings.local.json.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>