From 805dbf8b3eeccba39fb478b2aa19276c60f1ecfa Mon Sep 17 00:00:00 2001 From: bolbol Date: Tue, 14 Jul 2026 19:07:25 +0000 Subject: [PATCH] =?UTF-8?q?runbook:=20veille=20Nexum=20=E2=80=94=20VK=20Bi?= =?UTF-8?q?frost=20morte=20+=20fuseau=20n8n=20(14/07)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/veille-nexum-vk-morte-fuseau-n8n.md | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 common/veille-nexum-vk-morte-fuseau-n8n.md diff --git a/common/veille-nexum-vk-morte-fuseau-n8n.md b/common/veille-nexum-vk-morte-fuseau-n8n.md new file mode 100644 index 0000000..dc02bae --- /dev/null +++ b/common/veille-nexum-vk-morte-fuseau-n8n.md @@ -0,0 +1,28 @@ +# Veille Dr. Nexum — VK Bifrost morte + fuseau n8n (14/07/2026) + +## Symptôme +Veille « 3x/jour » (workflow n8n `Eh2nomLhSuL3iUMp`) : tous les résumés = « Résumé indisponible » sur Telegram **et** mail ; mail Pro TT non reçu ; en parallèle des mails « par tranche » (liens titre+date sans analyse). + +## Root causes +1. **VK Bifrost morte.** Purge du 07/07 → rotation de la VK « Nabil-Key ». Le nœud Code `🌐 Traduire + Telegram + Build Email` avait `bfk-e5832bfe…` codée en dur → Bifrost `401 virtual_key_not_found` → chaque résumé = fallback « Résumé indisponible ». +2. **Fuseau n8n.** `GENERIC_TIMEZONE` VIDE → cron interprétés en `America/New_York`. Le cron `6/11/19` tournait à **11h/16h/00h Tunis**, jamais 7/12/20. +3. **Système parallèle.** `veille_ia_matin.py` (hermes-nyora) lancé par tâche **DSM Task Scheduler (root)** à 07h → digest brut « par tranche » + Telegram 07h. Redondant depuis fusion des sources dans n8n. + +## Bonne VK +Dans `/volume1/docker/bifrost/data/config.db` (sqlite, table `governance_virtual_keys`) : 2 VK actives = Nabil-Key + Yesmine-Key. Testée sur `http://bifrost:8080/v1/chat/completions` (header `x-bf-vk`) → 200. Le restart Bifrost NE recrée PAS une VK absente (≠ bug cache). + +## n8n 2.23 — piège de versionnage (CENTRAL) +Le runtime exécute la version **ACTIVE** stockée dans `workflow_history` (pointée par `workflow_entity."activeVersionId"`), pas le brouillon `workflow_entity`. `workflow_published_version` vide pour ce wf. Éditer `workflow_entity` seul ne change rien à ce qui tourne ; `publish_workflow` (MCP) renvoyait le même `activeVersionId` sans propager l'édition directe DB. → corriger AUSSI la ligne `workflow_history` de l'`activeVersionId`. + +## Correctif (byte-exact, Postgres n8n) +Colonnes `nodes`/`settings`/`connections` = **json** (pas jsonb). Caster `::json` ; settings via `(settings::jsonb || '{"timezone":"Africa/Tunis"}'::jsonb)::json`. Remplacements : VK morte→active, `30 sources`→`44 sources`, cron `6/11/19`→`7/12/20`, ajout `settings.timezone=Africa/Tunis`. Appliquer sur `workflow_entity` ET sur `workflow_history WHERE "versionId"=`. Puis `docker restart n8n`. Le ScheduleTrigger prend le fuseau du workflow (`settings.timezone`) → corrige CE wf sans toucher au global ni aux autres. + +## Validation (exécution production 32346) +Bifrost : que des HTTP 200 (7–17 s/item, reasoning). Données : 0 « Résumé indisponible », 0 « virtual key not found », footer « 44 sources ». SMTP ik.me : 2 nœuds → `250 Ok: queued` (Gmail + tunisietelecom.tn), ~37 Ko. + +## Reste (accès root/DSM de Nabil) +- Désactiver la tâche DSM 07h qui lance `veille_ia_matin.py` (source des mails « par tranche » + Telegram 07h). Le pipeline n8n couvre désormais 07h → pas de perte. +- Mail Pro : ik.me accepte (250) ; si non-reçu = côté TT (spam/filtrage expéditeur `@ik.me`) → whitelister / vérifier spam. + +## Sécurité +Clés provider Bifrost exposées en clair pendant le diag (`config.json`) → roter : openrouter, opencode, google (×2). Nouvelle VK aussi passée en clair dans la session → rotation ultérieure recommandée (elle est fonctionnelle, donc session dédiée).