# Journal — Routine Veille du matin

| Date | Posts traités | Candidats 42 | Items 50 | Notifs équipe | Statut |
|---|---|---|---|---|---|
| 2026-07-02 (7h01, launchd) | 0 | 0 | 0 | 0 | ⚠️ ÉCHEC — bug n8n sur `Respond to Webhook` (voir détail) |
| 2026-07-02 (relance manuelle, ~9h) | 73 | 5 | 0 (voir note) | 1 (20) | ✅ OK |
| 2026-07-02 (refonte digest unifié + test, ~9h50) | — | — | — | — | ✅ OK — voir détail |
| 2026-07-02 (test PM end-to-end forcé, ~11h) | 20 | 5 | 1 [POST] + 2 [NEWSLETTER] | 2 (20) | ✅ OK — voir détail |
| 2026-07-03 (run automatique, invocation Claude) | 36 | 5 | 1 [POST] + 1 [NEWSLETTER] | 1 (20) | ✅ OK |
| 2026-07-07 (run automatique, scheduled task) | 69 | 5 | 2 [POST] + 1 [NEWSLETTER] | 3 (20) | ✅ OK |
| 2026-07-08 (run automatique, scheduled task) | 52 | 5 | 1 [POST] + 3 [NEWSLETTER] | 1 (20) | ✅ OK |
| 2026-07-09 (run automatique, scheduled task) | 43 | 5 | 1 [POST] + 1 [NEWSLETTER] | 1 (20) | ✅ OK |
| 2026-07-10 (run automatique, scheduled task) | 42 | 4 | 1 [POST] + 1 [NEWSLETTER] | 2 (20) | ✅ OK |
| 2026-07-13 (run automatique, scheduled task) | 89 | 8 | 0 [POST] + 0 [NEWSLETTER] | 2 (20) | ✅ OK |
| 2026-07-14 (run automatique, scheduled task) | 1 | 0 | 0 [POST] + 0 [NEWSLETTER] | 0 | ✅ OK — lot d'1 post, hors périmètre (sport) |
| 2026-07-15 (run automatique, scheduled task) | 1 | 0 | 0 [POST] + 0 [NEWSLETTER] | 0 | ✅ OK — lot d'1 post, hors périmètre (sport) ⚠️ voir anomalie |
| 2026-07-16 (run automatique, scheduled task) | 1 | 0 | 0 [POST] + 0 [NEWSLETTER] | 0 | ✅ OK — lot d'1 post, hors périmètre (sport) 🔴 anomalie 4e jour, non résolue |
| 2026-07-16 (rattrapage manuel, après-midi, à la demande) | 118 | 6 | 0 [POST] + 3 [NEWSLETTER] | 1 (20) | ✅ OK — voir détail rattrapage |
| 2026-07-17 (run automatique, scheduled task) | 0 | — | — | — | ✅ OK — file vide (`[]`), étapes 2/3/4 sautées ⚠️ voir anomalie digest |
| 2026-07-17 (rattrapage manuel, ~12h30, à la demande Fabien) | 337 | 7 | 2 [POST] + 4 [NEWSLETTER] + 1 [CLIENT] | 3 (20) | ✅ OK — lot rattrapage 14→17/07 — voir détail |
| 2026-07-20 (run automatique, scheduled task) | 45 | 4 (+1 marginal) | 0 [POST] + 0 [NEWSLETTER] | 1 (20) | ✅ OK — voir détail |
| 2026-07-21 (run automatique, scheduled task) | 28 | 6 (+2 marginaux) | 0 [POST] + 0 [NEWSLETTER] | 1 (20) | ✅ OK — voir détail |
| 2026-07-22 (run automatique, scheduled task) | 177 | 2 | 2 [POST] + 3 [NEWSLETTER] | 2 (20) | ✅ OK — voir détail |
| 2026-07-23 (run automatique, scheduled task) | 86 | 1 | 1 [POST] + 3 [NEWSLETTER] | 1 (20) | ✅ OK — voir détail |
| 2026-07-24 (run automatique, scheduled task) | 143 | 0 | 1 [POST] + 3 [NEWSLETTER] | 3 (20) | ✅ OK — voir détail |
| 2026-07-27 (run automatique, scheduled task) | 0 | 0 | 0 | 0 | 🔴 ÉCHEC — Mac endormi aux 3 horaires déclencheurs, aucune session lancée pour `prospection-fidulia-batch` et `veille-matin-fidulia` ; seule `verification-acceptations-linkedin` a abouti par chance. Diagnostiqué et corrigé le jour même (voir détail 🔧). |
| 2026-07-27 (relance `veille-matin-fidulia`, session complète) | 64 | 3 | 0 [POST] + 1 [NEWSLETTER] | 1 (20) | ✅ OK — lot faible en signaux forts (8 `REACH-FR` sur 64, 0 `NICHE-FR`/`NICHE-CGP-FR`) ; section Prospection du digest marquée absente (`JOURNAL-BATCH.md` sans entrée du jour, cf. échec 🔴 ci-dessus) ; `JOURNAL-ENGAGEMENT.md` introuvable, cooldown 42 non vérifiable avec certitude — voir détail |
| 2026-07-28 (run automatique, scheduled task) | 79 | 3 | 0 [POST] + 3 [NEWSLETTER] | 1 (20) | ✅ OK — vivier REACH-FR toujours sous tension (rappel du 23/07 arrivé à échéance, cf. mémoire) ; sections Prospection + Acceptations du digest déjà présentes — voir détail |
| 2026-07-29 (run automatique, scheduled task) | 134 | 3 | 0 [POST] + 3 [NEWSLETTER] | 1 (20) | ✅ OK — vivier REACH-FR toujours sous tension (4ᵉ jour consécutif de volume bas) ; sections Prospection + Acceptations du digest déjà présentes — voir détail |
| 2026-07-30 (run automatique, scheduled task) | 79 | 2 | 1 [POST] + 2 [NEWSLETTER] | 1 (20) | ✅ OK — vivier REACH-FR toujours sous tension (5ᵉ jour ouvré consécutif de volume bas, seulement 2 candidats) ; sections Prospection + Acceptations du digest déjà présentes — voir détail |

## Détail 2026-07-30 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 81 posts reçus, 79 uniques après dédup (2 doublons). Rôles : REACH-FR (17), NICHE-CGP-FR (6), CRÉATEURS-INTL (1), AUTORITÉS-INTL (1), CURATION (33), `<vide>` (21 — 27 %, anomalie de champ `role` toujours partiellement présente).
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR + NICHE-CGP-FR = 23 posts éligibles). Cooldown appliqué par cross-référence `CANDIDATS-*.md` du 16→29/07 (`JOURNAL-ENGAGEMENT.md` créé le 29/07 mais toujours vide, aucune confirmation de pose reçue) avec la fenêtre stricte de 5 jours retenue depuis le 27/07 : la quasi-totalité des comptes topicalement pertinents (Pierre Cartier, Caroline Mignaux, Benoît Dubos, Nina Ramen, Alexis Makounga, Romain Bour, Gaspard Fruchon) réapparus entre le 27/07 et le 29/07. **2 candidats retenus** (Florian Freyssenet — J-8, hors fenêtre ; Thomas Mertz — J-6, hors fenêtre, sujet du jour différent du motif de rejet habituel). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-30.md`.
- **Agent 50** : 1 `[POST]` (Stanford HAI — désaccord entre experts rend peu fiable la validation de sécurité des chatbots IA conseillers) + 2 `[NEWSLETTER]` (OpenAI — 100k chercheurs académiques d'ici 2027 ; LinkedIn News — citation Brockman "économie du calcul") → `Newsletter/VEILLE-NEWSLETTER-2026-W31.md`. 1 entrée ajoutée à l'INBOX Agent 20 : convergence "démocratisation de l'IA" (OpenAI + Brockman + Zuckerberg/Meta, 3 signaux la même semaine) en tension avec le signal Stanford HAI (fiabilité). Réglementaire CGP : ACPR (chiffres institutionnels) et Profession CGP (nomination Novaxia) capturés pour la niche, hors contenu public. Capture : `Agents/50-Agent-Veille/Captures/2026-07-30.md`.
- **Étape 4** : 79 postId marqués `DONE` (`traitePar: 42,50`).
- **Étape 5** : digest assemblé (sections Prospection 10/10 + Acceptations 7 déjà présentes des routines précédentes, vérification anti-troncature §5.3bis OK) + À commenter (2 candidats) + Veille du jour (3 signaux) ajoutées, envoyé via `render_digest.py` → réponse n8n `{"message":"Workflow was started"}`.

## Détail 2026-07-29 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 136 posts reçus, 134 uniques après dédup (2 doublons). Rôles : REACH-FR (18), NICHE-CGP-FR (1), CRÉATEURS-INTL (43), CURATION (41), CONCURRENTS (5), AUTORITÉS-INTL (3), `<vide>` (23 — 17 %, anomalie de champ `role` toujours partiellement présente).
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR + NICHE-CGP-FR = 19 posts éligibles). Le seul `NICHE-CGP-FR` (Pauline Gonzales) écarté (patrimoine/finance, interdit BRIEF §4/§8, motif répété depuis le 16/07). Cooldown appliqué par cross-référence `CANDIDATS-*.md` du 15→28/07 (`JOURNAL-ENGAGEMENT.md` toujours absent) avec la fenêtre stricte de 5 jours retenue le 28/07 : la majorité des comptes topicalement pertinents (Pierre Cartier, Caroline Mignaux, Alexis Makounga, Nassim Amisse, Alexis Vidal, Marie DAULON) réapparus à J-1/J-2. **3 candidats retenus** (Benoît Dubos — J-6, hors fenêtre ; Gaspard Fruchon — J-5, sujet du jour différent des précédents motifs de rejet ; Kelly ZIZINE — J-9). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-29.md`.
- **Agent 50** : 0 `[POST]` (aucun signal ne réunit source primaire + donnée chiffrée + angle direct) + 3 `[NEWSLETTER]` (cryptanalyse Anthropic, géographie entrepreneuriale LinkedIn Economic Graph, débat Stanford HAI paternité créative) → `Newsletter/VEILLE-NEWSLETTER-2026-W31.md`. 1 entrée ajoutée à l'INBOX Agent 20 (convergence Answer Engine/AI Overviews Google — 2 sources indépendantes non primaires — + signal shadow IA Impact AI/AÉSIO). Réglementaire CGP : AMF (doctrine crypto CIF/MiCA) et La Compagnie des CGP (jurisprudence taux débiteur) capturés pour la niche, hors contenu public. Capture : `Agents/50-Agent-Veille/Captures/2026-07-29.md`.
- **Étape 4** : 134 postId marqués `DONE` (`traitePar: 42,50`).
- **Étape 5** : digest assemblé (sections Prospection + Acceptations déjà présentes des routines précédentes + À commenter + Veille du jour ajoutées), envoyé via `render_digest.py` → réponse n8n `{"message":"Workflow was started"}`.

## Détail 2026-07-28 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 81 posts reçus, 79 uniques après dédup (2 doublons). Rôles : REACH-FR (18), NICHE-CGP-FR (6), CURATION (33), AUTORITÉS-INTL (2), `<vide>` (20 — 25 %, anomalie de champ `role` toujours partiellement présente).
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR + NICHE-CGP-FR = 24 posts éligibles). Les 6 `NICHE-CGP-FR` intégralement écartés (patrimoine/finance, interdit BRIEF §4/§8). Cooldown 14j appliqué par cross-référence `CANDIDATS-*.md` du 13→27/07 (`JOURNAL-ENGAGEMENT.md` toujours absent) : la quasi-totalité des comptes topicalement pertinents (Pierre Cartier, Nina Ramen, Caroline Mignaux, Marie DAULON, Romain Bour, Thomas Mertz, Jeremy Guillo, Gaspard Fruchon) étaient déjà candidats dans les 14 derniers jours, certains à J-1 (Caroline Mignaux et Pierre Cartier réapparus le 27/07 sur un autre post). **Rappel du 23/07 arrivé à échéance aujourd'hui** (cf. mémoire `project_vivier_reachfr_epuise_2026-07-23.md`) — le constat d'épuisement se confirme, alerte détaillée écrite en tête de `CANDIDATS-2026-07-28.md` avec 2 options à trancher par Fabien (assouplir le cooldown ou élargir le vivier). **3 candidats retenus** en priorisant les comptes neufs/anciens plutôt que les plus récents (Alexis Makounga — compte neuf, outlier 132 likes/117 comm. ; Nina Ramen — réapparue à J-7 ; Nassim Amisse — jamais retenu jusqu'ici). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-28.md`.
- **Agent 50** : 0 `[POST]` (signal le plus dense — alliance IA sécurité/ouverture Anthropic/NVIDIA/Mistral — manque encore d'une source primaire) + 3 `[NEWSLETTER]` (alliance IA à vérifier, données embauche LinkedIn Economic Graph, rapport Sprout Social influenceurs) → `Newsletter/VEILLE-NEWSLETTER-2026-W31.md`. 1 entrée ajoutée à l'INBOX Agent 20 regroupant les 3 pistes de la journée (alliance IA prioritaire, rumeur system prompt Claude Code -80 %, consultation ACPR équité algorithmique). Capture : `Agents/50-Agent-Veille/Captures/2026-07-28.md`.
- **Étape 4** : 79 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** : sections Prospection (10/10 invitations) + Acceptations (aucune) déjà présentes (routines précédentes du matin), vérification anti-troncature §5.3bis OK. Sections "💬 À commenter aujourd'hui" (3 candidats, avec note d'alerte vivier) et "📰 Veille du jour" (3 signaux sourcés) ajoutées. `render_digest.py` → `{"message":"Workflow was started"}`.

## 🔧 Diagnostic + correctif Agent 70 — 27/07/2026 — Mac endormi aux horaires de déclenchement

**Symptôme** : `prospection-fidulia-batch` (cron 4h30) et `veille-matin-fidulia` (cron 7h00) enregistrés comme déclenchés côté scheduler (`lastRunAt`) mais **aucune session Claude Code créée**, aucune écriture dans `JOURNAL-BATCH.md` / `JOURNAL-ROUTINE.md` / `JOURNAL-BATCH-ERRORS.md`, cache de la file de veille non rafraîchi. Seule `verification-acceptations-linkedin` (cron 6h00) a produit une session complète.

**Cause racine** (`pmset -g log`) : le Mac passe l'essentiel de la nuit en cycles de veille légère ("Maintenance Sleep"), avec de brefs réveils fond ("DarkWake", ~1,5 s, écran éteint) toutes les 20-50 min — insuffisants pour qu'une session Claude Code se lance. Le **seul réveil complet confirmé** de la nuit est à **6h58** ("DarkWake to FullWake... due to HID Activity", correspond au réveil système quotidien `pmset -g sched` → "wake at 6:58AM every day"). Les 3 tâches, calées à 4h30/6h00/7h00 (cron local + jitter scheduler de quelques minutes), tombaient donc :
- `prospection-fidulia-batch` (déclenchement effectif ~5h11) : Mac en Maintenance Sleep, aucun réveil réel à proximité → échec silencieux.
- `verification-acceptations-linkedin` (déclenchement effectif ~6h26) : tombé dans une fenêtre exploitable → seule routine à aboutir.
- `veille-matin-fidulia` (déclenchement effectif ~7h35, cron 7h00 + jitter) : le Mac s'était rendormi à 7h06 (Maintenance Sleep ~29 min) **avant** le déclenchement prévu → échec silencieux.

Le wakelock `com.fidulia.veille-wakelock` (`caffeinate -i -t 900`, déclenché à 6h50) était censé combler ce trou pour la routine veille, mais sa fenêtre de 15 min (déférée au réveil réel de 6h58, donc active 6h58→7h05) se refermait **avant** le déclenchement de 7h09.

**Correctif appliqué :**
1. **Wakelock étendu** : `~/Library/LaunchAgents/com.fidulia.veille-wakelock.plist` — durée `caffeinate` portée de 900 s (15 min) à **5400 s (90 min)**, couvrant ~6h58→8h28. Rechargé via `launchctl unload`/`load`.
2. **Les 3 tâches replanifiées juste après le réveil machine confirmé de 6h58**, au lieu de leurs horaires historiques qui tombaient en pleine nuit de sommeil :
   - `prospection-fidulia-batch` : 4h30 → **7h00** (cron `0 7 * * 1-5`)
   - `verification-acceptations-linkedin` : 6h00 → **7h20** (cron `20 7 * * 1-5`)
   - `veille-matin-fidulia` : 7h00 → **7h40** (cron `40 7 * * 1-5`)
   Ordre relatif conservé (prospection → vérification → veille), espacement de 20 min pour éviter toute collision Claude in Chrome entre prospection et vérification (les deux utilisent le navigateur).
3. **Documentation mise à jour** : `SKILL.md` de `prospection-fidulia-batch` et `verification-acceptations-linkedin` (références d'horaires internes), `ROUTINE-VEILLE-MATIN.md` (3 références), `n8n/README.md` (cron + mention du wakelock).

**Non traité (hors périmètre Agent 70, nécessite une action système)** : le réveil quotidien de 6h58 lui-même (`pmset repeat wake`) n'a pas été créé ni modifié par cette session — c'est un réglage système existant, pré-configuré avant ce diagnostic. Si Fabien change un jour l'heure de ce réveil système, les 3 cron ci-dessus devront être recalés en conséquence.

**À vérifier** : le run automatique de demain (28/07/2026, lun-ven) confirmera si le nouveau calage tient. Si `prospection-fidulia-batch` ou `veille-matin-fidulia` échouent de nouveau silencieusement malgré le réveil à 6h58, le wakelock ou le réveil système lui-même seront à ré-examiner.

## Détail 2026-07-24 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 145 posts reçus, 143 uniques après dédup (2 doublons). Rôles : REACH-FR (20), NICHE-CGP-FR (5), CRÉATEURS-INTL (42), CURATION (43), CONCURRENTS (3), AUTORITÉS-INTL (2), `<vide>` (28 — 20 %, anomalie toujours présente malgré le fix du 21/07).
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR + NICHE-CGP-FR = 25 posts éligibles). Cooldown 14j appliqué par cross-référence `CANDIDATS-*.md` du 10→23/07 (`JOURNAL-ENGAGEMENT.md` toujours absent). **0 candidat retenu** — 2e jour consécutif à volume quasi nul (1 le 23/07, 0 aujourd'hui) : la quasi-totalité des comptes topicalement pertinents (Pierre Cartier, Bruno Fridlansky, Romain Bour, Marie DAULON, Othmane Halim, Thomas Mertz, Jeremy Guillo, Florian Freyssenet, Benoît Dubos) étaient déjà candidats dans les 14 derniers jours ; le reste était hors sujet ou patrimonial/financier interdit. Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-24.md`. Signal déjà suivi en mémoire (rappel prévu le 28/07) — Fabien a validé de continuer ainsi, rien de plus à faire ici qu'à noter la persistance de la tendance.
- **Agent 50** : 1 `[POST]` (spécialisation + gouvernance du déploiement IA — Google DeepMind Gemini 3.5 Flash Cyber / OpenAI ChatGPT Work, sources institutionnelles citables, distinct de l'angle "infra" briefé le 23/07) + 3 `[NEWSLETTER]` (mêmes 2 items + Stanford HAI RegLab) → `Newsletter/VEILLE-NEWSLETTER-2026-W30.md`. 3 signaux ajoutés à l'INBOX Agent 20 : le post ci-dessus, un angle éditorial monitoring non citable en l'état ("less is more" en architecture agent IA, Steve Nouri), et un signal à vérifier avant tout usage (incident sécurité OpenAI rapporté par une source secondaire non confirmée). Items réglementaires CGP (AMF sanction Financière Fonds Privés, ACPR climat/sinistralité, CNCGP Value for Money) tagués SKIP et journalisés en interne. Capture : `Agents/50-Agent-Veille/Captures/2026-07-24.md`.
- **Étape 4** : 143 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** : sections Prospection (10/10 invitations) + Acceptations (aucune) déjà présentes (routines précédentes du matin), vérification anti-troncature §5.3bis OK. Sections "💬 À commenter aujourd'hui" (0 candidat, avec note explicative) et "📰 Veille du jour" (3 signaux) ajoutées. `render_digest.py` → `{"message":"Workflow was started"}`.
- **⚠️ Anomalie de nommage constatée** : deux fichiers newsletter coexistent pour la même semaine (`VEILLE-NEWSLETTER-2026-S30.md`, alimenté le 23/07, et `VEILLE-NEWSLETTER-2026-W30.md`, alimenté les 22/07 et 24/07). Items du jour déposés dans W30 (fichier le plus alimenté) — à consolider par l'Agent 70 avant que l'Agent Rédacteur ne pioche vendredi, sans quoi l'entrée du 23/07 (course infra IA OpenAI/DeepMind) risque d'être invisible depuis W30.

## Détail 2026-07-23 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 89 posts reçus, 86 uniques après dédup (3 doublons). Rôles : REACH-FR (17), NICHE-CGP-FR (4), CURATION (33), AUTORITÉS-INTL (3), `<vide>` (29 — 34 %, anomalie toujours présente malgré les fix du 21/07, à remonter côté Agent 70).
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR + NICHE-CGP-FR = 21 posts éligibles). Cooldown 14j appliqué par cross-référence `CANDIDATS-*.md` du 09→22/07 (`JOURNAL-ENGAGEMENT.md` toujours absent) — méthode identique au 22/07. Le vivier REACH-FR (17 comptes) s'est révélé fortement recyclé : la quasi-totalité des comptes actifs étaient déjà candidats dans les 10 derniers jours. Filtre langue (2 posts anglais malgré rôle REACH-FR, double filet appliqué), filtre patrimoine/politique (NICHE-CGP-FR entièrement écarté : 2 posts politiques, 2 posts patrimoniaux hors périmètre Fabien). **1 seul candidat retenu** (Benoît Dubos, signal IA). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-23.md`. ⚠️ Signal remonté : le vivier REACH-FR mérite un élargissement, la précaution cooldown stricte (sans journal fiable) épuise le vivier actuel en quelques jours.
- **Agent 50** : 1 `[POST]` (course infrastructure IA — annonces OpenAI/Google DeepMind le même jour, sources institutionnelles citables) + 3 `[NEWSLETTER]` (mêmes 2 items + Stanford HAI stabilité stratégique US-Chine) → `Newsletter/VEILLE-NEWSLETTER-2026-S30.md` (nouveau fichier semaine). 1 signal ajouté à l'INBOX Agent 20 (course infra IA + volet gouvernance/caractère des modèles via Amanda Askell, non citable en direct). Items réglementaires CGP (AMF sanction Uzès Gestion, ACPR vacances) tagués SKIP et journalisés en interne — hors périmètre contenu public Fabien. Capture : `Agents/50-Agent-Veille/Captures/2026-07-23.md`.
- **Étape 4** : 86 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** : sections Prospection + Acceptations déjà présentes (routines précédentes du matin), vérification anti-troncature §5.3bis OK. Sections "💬 À commenter aujourd'hui" (1 candidat) et "📰 Veille du jour" (2 signaux) ajoutées. `render_digest.py` → `{"message":"Workflow was started"}`.
- **Note** : le post briefé pour ce matin (Pilier 2, signal Clio Legal Trends 2025, arbitré le 21/07 — cf. INBOX Agent 20) suit son cours via l'Agent Rédacteur, indépendamment du traitement de cette routine.

## Détail 2026-07-22 — run automatique (scheduled task), premier lot plein avec `role` stable

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 179 posts reçus, 177 uniques après dédup (2 doublons). Rôles présents : REACH-FR (27), NICHE-CGP-FR (2), CURATION (67), AUTORITÉS-INTL (8), CRÉATEURS-INTL (40), CONCURRENTS (3), `<vide>` (30 — 17 %, anomalie persistante malgré le fix du 21/07, voir note ci-dessous). Premier run à bénéficier pleinement du changement de cadence "Option A" (CURATION + AUTORITÉS-INTL en quotidien) — volume CURATION nettement plus riche que les jours précédents.
- **Agent 42** : pré-filtrage rôle FR-commentaire (REACH-FR/NICHE-CGP-FR/NICHE-FR) → 29 posts éligibles. Cooldown 14j appliqué par cross-référence `CANDIDATS-*.md` du 08→21/07 (`JOURNAL-ENGAGEMENT.md` toujours absent) → 20 auteurs exclus, 9 posts/7 comptes restants. Filtre sujet/légitimité (non-négociable patrimoine/financier BRIEF §8, hors-sujet cold call / crowdfunding / récit perso) → **2 candidats retenus** (Stephanie Leroux, Gaspard Fruchon). Journée pauvre en volume : cooldown très large + fort taux de posts patrimoniaux/hors-sujet dans le sous-lot REACH-FR du jour. Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-22.md`.
- **Agent 50** : premier lot où le rôle `CURATION` (pages institutionnelles officielles) est exploitable à pleine échelle (67 posts) → **2 [POST]** (Stanford HAI — 1 700 dossiers judiciaires avec IA hallucinée ; Financial Times — agent OpenAI échappé/piratage Hugging Face) + **3 [NEWSLETTER]** (ANACOFI hackathon régulateur agentique, OpenAI gouvernance finance, Hub France IA plan cybersécurité UE). 2 signaux concurrentiels ajoutés à l'INBOX Agent 20 (Elsa Fauroux — angle IA/fiabilité finance quasi identique au signal Stanford HAI publié le même jour, fenêtre de différenciation ; Alexis Bauer — insight positionnement content CGP, intelligence concurrentielle pure). Capture : `Agents/50-Agent-Veille/Captures/2026-07-22.md`. Newsletter : `Newsletter/VEILLE-NEWSLETTER-2026-W30.md` (nouveau fichier semaine).
- **Étape 4** : 177 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** : sections Prospection + Acceptations déjà présentes (routines précédentes du matin), vérification anti-troncature §5.3bis OK. Sections "💬 À commenter aujourd'hui" (2 candidats) et "📰 Veille du jour" (4 signaux + 1 alerte concurrentielle) ajoutées. `render_digest.py` → `{"message":"Workflow was started"}`.
- **⚠️ Anomalie non résolue — champ `role` toujours incomplet sur 17 % du lot** : malgré le fix du 21/07 (re-jointure URL + repli nom), 30/177 posts restent sans rôle. Point notable : certains auteurs (ex. Michael Kitces) ont un rôle assigné sur un postId et `<vide>` sur un autre le même jour — suggère un problème de correspondance instable par post plutôt qu'un manque de source, à creuser côté normalizer n8n / `veille_queue_client.py`. Signalé en détail dans `Captures/2026-07-22.md`.

## 🚀 2026-07-21 (après-midi, Agent 70) — Option A : CURATION + AUTORITÉS-INTL en quotidien

**Problème traité** : sections « Veille du jour » vides plusieurs jours d'affilée. Diagnostic : `CURATION` et `AUTORITÉS-INTL` sont les seuls rôles produisant des items citables (la doctrine interdit de citer un influenceur), or ils ne tournaient que lun/mer/ven et lundi → le lot du **mardi et du jeudi était 100 % influenceurs**, donc structurellement rien de citable.

**Changement publié** (nœud « Préparer input Apify ») :
| Segment | Rôles | Profils | Cadence |
|---|---|---|---|
| CHAUD | REACH-FR, NICHE-FR, NICHE-CGP-FR | 61 | quotidien |
| CURATION | CURATION, **AUTORITÉS-INTL** | 175 | **quotidien** (était lun/mer/ven) |
| FROID | **CRÉATEURS-INTL**, CONCURRENTS | 82 | lun/mer/ven |

Choix chirurgical plutôt que « tout en quotidien » (318) : `CRÉATEURS-INTL` (72, flux partage gelé) et `CONCURRENTS` (10, monitoring Agent 12) n'apportent aucune source citable — les passer en quotidien aurait été du volume pur. `CRÉATEURS-INTL` conserve sa cadence d'origine. Batch quotidien **61 → 236 profils**.

**Vérifié par run manuel** : 70 posts récupérés (vs 23 en CHAUD seul), 55 nouveaux après dédup (vs 15), aucune erreur. File relue :
`{'CURATION': 39, 'REACH-FR': 20, 'AUTORITÉS-INTL': 2, 'NICHE-CGP-FR': 2, '<vide>': 22}`
Sources citables désormais en file : Bpifrance, Stanford HAI, Financial Times, France Digitale, Numeum, Hub France IA, Socialinsider, et surtout **ACPR** et **ANACOFI** (réglementaire CGP, périmètre 3).

**Alternative écartée (chiffrée le 21/07)** : confirmation Perplexity au digest du matin. Coût dérisoire (Sonar 1 $/M tokens ≈ 0,07 $/mois ; latence 6 s/appel mesurée) mais rendement faible — un appel ne produit pas un item citable mais un candidat exigeant une vérification WebFetch. Test réel : les 3 items renvoyés attribuaient France Num / Bpifrance / INSEE à des URLs de blogs tiers (`luwai.fr`, `lyv-ia.com`, `groupe-emap.fr`), aucune source primaire. Estimation 1 item confirmé tous les 2-3 jours. À reconsidérer après une semaine d'option A.

## 🔧 RÉSOLU le 2026-07-21 (après-midi, Agent 70) — champ `role` absent

**Cause racine** (contredit l'hypothèse « limitation amont » notée les 20 et 21/07 au matin) : le rôle **n'a jamais transité**, ce n'était pas une régression. Apify ne renvoie pas le rôle (c'est une colonne du Sheet Profils), il était donc perdu dès la normalisation, jamais écrit dans File-à-traiter, et absent de la projection de la Queue API. Trois points de perte, tous corrigés :

1. **Scrape / « Préparer la File-à-traiter »** : reconstruit la carte rôle depuis `$('Lire la liste de profils')` — match sur l'URL normalisée, **repli sur le nom d'auteur** (certains slugs du Sheet sont périmés). Publié.
2. **Sheet / onglet File-à-traiter** : colonne `role` ajoutée en N1 (sans elle l'auto-mapping de l'append supprimait le champ).
3. **Queue API / « Filtrer PENDING »** : `role` ajouté à la projection. Publié.

**Vérifié en production** (run manuel 21/07) : 15 posts écrits, `{'REACH-FR': 14, 'NICHE-CGP-FR': 1}` là où la file renvoyait `{'<absent>': 28}` le matin. Marie DAULON résolue par le repli nom (slug Sheet périmé) — la logique de secours fonctionne en réel.

**Impact veille** : l'Agent 50 peut de nouveau distinguer une source CURATION/AUTORITÉS-INTL (citable) d'un influenceur (monitoring seul) — c'est la cause directe des sections « Veille du jour » vides des derniers jours.

⚠️ **Dette connexe identifiée, non traitée** : File-à-traiter contient des lignes dupliquées par `postId` (11/39 le 21/07) ; « Marquer DONE » n'update que la première ligne, donc les doublons restent PENDING et sont resservis. Détail dans `WORKFLOWS-FIDULIA.md`.

## Détail 2026-07-21 — champ `role` Sheet absent (3e jour consécutif)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 39 posts reçus, 11 doublons, 28 uniques après dédup (`veille_lot_tools.py stats/dump`). Champ `role` de nouveau absent sur l'intégralité du lot — anomalie identique au 20/07, non résolue (3e jour consécutif) → à traiter en priorité par l'Agent 70.
- **Agent 42** : filtre langue + sujet (piliers Stratégie LinkedIn/IA + interdit patrimoine/finance BRIEF §4/§8) appliqué en filet de sécurité renforcé. 5 posts écartés langue (EN/PT), 6 patrimoine/finance, 3 sport/actualité, 5 hors périmètre thématique, 1 sujet personnel sensible → 8 candidats retenus (6 prioritaires + 2 marginaux engagement faible). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-21.md`. ⚠️ `JOURNAL-ENGAGEMENT.md` toujours inexistant pour Fidulia — cooldown 14j non vérifiable avec certitude, noté dans le fichier.
- **Agent 50** : aucune source d'autorité primaire dans le lot (posts d'influenceurs/individus uniquement) → 0 [POST]/[NEWSLETTER], conformément à la règle anti-dérive. 3 pistes de recherche flaggées (chiffre PME/IA Sage à confirmer, chute reach LinkedIn, outil IA controversé Cluely) dans `Captures/2026-07-21.md` et l'INBOX Agent 20.
- **Étape 4** : 28 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** : sections Prospection + Acceptations déjà présentes (routines précédentes du matin) → vérification anti-troncature §5.3bis OK. Sections "💬 À commenter aujourd'hui" (6 candidats condensés) et "📰 Veille du jour" ajoutées. `render_digest.py` → `{"message":"Workflow was started"}`.

## Détail 2026-07-20 — champ `role` Sheet absent de la file n8n

- **Anomalie constatée** : le JSON renvoyé par `veille_queue_client.py fetch` ne contenait pas le champ `role` (REACH-FR/NICHE-CGP-FR/NICHE-FR/CRÉATEURS-INTL/CURATION/CONCURRENTS/AUTORITÉS-INTL) habituellement présent — limitation amont côté file n8n, à signaler à l'Agent 70. Le pré-filtrage par rôle (§Étape 2 de la routine) n'a donc pas pu être appliqué avant l'Agent 42.
- **Filet de sécurité appliqué** : le filtre langue française (§A.2, non-négociable) a servi de seul filet — 37 posts non-français (anglais, portugais) écartés d'office avant tout autre critère, conformément à la règle "double filet de sécurité" de la routine.
- **Agent 42** : 45 posts uniques traités (47 reçus, 2 doublons dédupliqués) → 8 posts français retenus après filtre langue → 3 exclus pour sujet patrimonial/financier interdit (BRIEF-CLIENT §4) → 4 candidats solides + 1 marginal (engagement faible) retenus dans `CANDIDATS-2026-07-20.md`.
- **Agent 50** : aucune source d'autorité primaire dans le lot (quasi exclusivement des posts d'influenceurs = monitoring, jamais citable) → 0 [POST]/[NEWSLETTER], conformément à la règle anti-dérive. 3 pistes de recherche flaggées (BCG de-skilling, Oracle agentic, van der Blom nouvelle analyse) dans `Captures/2026-07-20.md`, à vérifier via Perplexity avant le prochain cycle éditorial.
- **Notification équipe** : 1 entrée ajoutée à l'INBOX Agent 20 (Stratège) — synthèse des 3 pistes de recherche ci-dessus.
- **Digest** : sections Prospection + Invitations acceptées déjà présentes (routines précédentes), sections "À commenter aujourd'hui" + "Veille du jour" ajoutées, envoi confirmé (`{"message":"Workflow was started"}`).

## Détail 2026-07-17 — file vide + sections Prospection/Acceptations manquantes

- **Étape 1** : `veille_queue_client.py fetch` → `{"posts":[],"count":0}`. File vide, conforme à la règle "ne pas réveiller 42/50 pour rien" → passage direct à l'étape 5.
- **Anomalie constatée** : aucun fichier `DIGEST-DUJOUR-2026-07-17.md` n'existait au moment du run (7h09), et `Clients/Fidulia/Prospection/JOURNAL-BATCH.md` ne contient aucune entrée `## 2026-07-17` ni `## Acceptations 2026-07-17`. Pourtant `prospection-fidulia-batch` (5h36) et `verification-acceptations-linkedin` (6h07) sont toutes deux marquées exécutées côté scheduler (`lastRunAt` 2026-07-17T06:04:37Z, à 4 secondes d'écart l'une de l'autre). Aucune erreur non plus dans `JOURNAL-BATCH-ERRORS.md`. Hypothèse : échec précoce des deux routines avant leur étape d'écriture (pas de trace exploitable depuis cette routine) — à investiguer par Fabien ou l'Agent 70.
- **Décision appliquée (§5.3 bis)** : digest envoyé quand même, avec deux lignes d'alerte visibles sous le H1 signalant les deux sections manquantes, plutôt que d'envoyer un digest silencieusement tronqué ou de bloquer l'envoi.
- **Note sur l'anomalie "1 post zombie" des 4 jours précédents (07/13→07/16)** : aujourd'hui la file est revenue à 0 post proprement (pas de zombie), ce qui pourrait indiquer que le fix évoqué le 16/07 (suppression du post zombie côté Sheet) tient. À confirmer sur les prochains runs.
- **RÉSOLU le 17/07 ~11h (Agent 70)** : la cause racine de la file vide était l'échec du scrape 6h depuis le 14/07 — l'endpoint Apify `run-sync-get-dataset-items` plafonne à 300 s côté Apify et le batch 318 profils dépassait 5 min (les runs Apify réussissaient, mais n8n n'en recevait jamais le résultat). Workflow refondu en **asynchrone** (POST /runs → polling 60 s → GET dataset) + **segmentation 3 cadences par rôle** (CHAUD quotidien / CURATION lun-mer-ven / FROID lundi) — publié v3. Run de rattrapage exécuté (tous segments, fenêtre 1 semaine, maxPosts 3) : **446 posts scrapés, 336 nouveaux en File-à-traiter (PENDING)**. Ces 336 posts attendent la prochaine routine — lancement manuel recommandé le jour même plutôt que d'attendre lundi (le lot couvre la semaine 14→17/07). Détail complet : `Clients/Fidulia/Automatisation/WORKFLOWS-FIDULIA.md` § Veille — Scrape & File d'attente.

## Détail 2026-07-17 — Rattrapage manuel ~12h30 (337 posts)

- **Lot traité** : 337 posts (rattrapage 14→17/07/2026), dont 121 FR et 216 INTL.
- **Agent 42** : 7 candidats retenus sur 121 posts FR (sujets LinkedIn/IA, langue française, cooldown OK — pas de journal engagement préexistant). Livrable : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-17.md`. ⚠️ Fraîcheur : posts du 13-14/07 au-delà de 72h — vérifier activité du fil avant de poster.
- **Agent 50** : Capture `Captures/2026-07-17.md` enrichie (périmètres 1-2-3). Items : 2 [POST] (Hassabis governance, Claude Fable physics) · 4 [NEWSLETTER] (Anthropic Science, Xiaomi, Microsoft, Hassabis) · 1 [CLIENT] (ACPR escroqueries). 3 notifications INBOX Agent 20 (governance IA, Claude Fable, Microsoft commercial). Newsletter W29 enrichie.
- **File clôturée** : 337 postIds marqués DONE (traité-par 42,50).
- **Digest** : sections `💬 À commenter` et `📰 Veille du jour` mises à jour dans DIGEST-DUJOUR-2026-07-17.md + email renvoyé via `render_digest.py` (webhook n8n OK "Workflow was started").
- **Vérifications à faire** : 3 signaux [NEWSLETTER] requièrent confirmation Perplexity avant exploitation éditoriale (Xiaomi tokens, Microsoft ingénieurs, Claude Fable physique). Lire INBOX Agent 20 au prochain /20.

## Détail 2026-07-16 (après-midi) — rattrapage manuel sans nouveau scraping

Fabien a demandé d'exploiter le lot déjà scrapé lors du test Apify (118 posts, cf. diagnostic Cause 1) plutôt que d'attendre le run automatique du lendemain, pour recevoir la veille du jour par email.

- **Étape 1** : réutilisation de `.cache/veille-queue-latest.json` (118 posts) via `veille_queue_client.py fetch` — confirmé sans déclenchement de scraping (lecture de la file déjà peuplée côté Sheet).
- **Étape 2** (Agent 42 batch) : 6 candidats retenus (Laurence Devillers, Victor Pelletier, Marie DAULON, LAF | Les Années Folles, Nassim Amisse, Alexis Vidal). Écartés notables : Guillaume Simonin et Romain Bour (cooldown < 14j), Benjamin - CGP Services et Thomas Mertz (signalés comme concurrents potentiels plutôt que commentés), tout le volet patrimonial/financier (interdit absolu), ~75 posts anglophones (hors flux commentaire FR strict). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-16.md`.
- **Étape 3** (Agent 50 batch) : 3 `[NEWSLETTER]` (Google DeepMind, Stanford HAI, Numeum) — sources institutionnelles citées comme primaires (comptes officiels), aucune vérification Perplexity live effectuée (mode rattrapage explicite). 1 signal concurrentiel ajouté à `Agents/20-Agent-Stratege/INBOX.md`. Capture : `Agents/50-Agent-Veille/Captures/2026-07-16.md` (réécrite, la version du matin était stale sur le lot d'1 post).
- **Étape 4** : 118 postId marqués `DONE` (`traitePar: "42,50"`) via `veille_queue_client.py done`.
- **Étape 5** : sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" du digest du jour remplacées (le contenu du matin, vide, reflétait l'ancien bug). `render_digest.py` → `{"message":"Workflow was started"}`, email envoyé.
- **Fichiers stale corrigés** : `CANDIDATS-2026-07-16.md` et `Captures/2026-07-16.md` (générés ce matin sur le lot d'1 post zombie, avant correction du bug) ont été réécrits avec le vrai traitement.

## Détail 2026-07-16 (matin) — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 1 post PENDING récupéré — encore une fois `7482014219937280000` (Stephanie Leroux, sondage Coupe du monde 2026).
- **Étape 2** (Agent 42 batch) : 0 candidat — post hors des 3 thèmes Fidulia (sport). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-16.md`.
- **Étape 3** (Agent 50 batch) : 0 `[POST]`/`[NEWSLETTER]` — même post écarté, tag `[SKIP]`. Capture : `Agents/50-Agent-Veille/Captures/2026-07-16.md`.
- **Étape 4** (`veille_queue_client.py done`) : OK, postId `7482014219937280000` marqué DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-16.md` déjà initialisé par les 2 routines précédentes du matin (sections "📊 Prospection" en échec — panne Claude in Chrome globale — et "✅ Invitations acceptées" non vérifiée, même cause). Sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" ajoutées, toutes deux vides. `render_digest.py` → `{"message":"Workflow was started"}`.
- **🔴 Anomalie non résolue — 4e jour consécutif** : le postId `7482014219937280000` réapparaît en file `PENDING` pour la 4e fois (13, 14, 15, 16/07) malgré une clôture `DONE` confirmée chaque jour. Le signalement du 15/07 (voir détail ci-dessous) n'a pas été traité depuis. Aucune investigation Agent 70 constatée dans le repo entre le 15 et le 16/07. À traiter avant qu'un post à fort volume ne soit affecté par le même bug — et parce que ce blocage semble aussi indiquer que le scraper source (n8n) n'ajoute plus de posts neufs à la file depuis au moins 4 jours (volume de 89 → 1 → 1 → 1 → 1, chute suspecte au-delà du simple bug de dédup).

## 🔧 Diagnostic Agent 70 — 16/07/2026 (après-midi, session interactive)

**3 causes racines identifiées et corrigées :**

### Cause 1 — Timeout Apify (cause principale du digest vide)
L'expansion du vivier le 10/07 (+170 sources, total 250+) a poussé le temps de scrape au-delà du timeout de 5 minutes fixé sur le nœud HTTP « Apify — Scraper posts batch ». Depuis le 14/07, l'appel Apify échouait systématiquement → 0 nouveaux posts dans la file → digest vide.
- **Fix appliqué sur n8n** : timeout `300000` → `600000` (10 min). ✅ Sauvegardé et testé — run réussi en 3m21s, 118 posts scrapés.

### Cause 2 — Rate limit Google Sheets
Le nœud « Lire historique (déjà vus) » s'exécutait une fois par item d'entrée (118 fois) au lieu d'une seule fois, déclenchant le quota « Read requests per minute per user ».
- **Fix appliqué sur n8n** : `Execute Once` activé + `Retry on Fail` (3 tentatives, 2000ms). ✅ Sauvegardé et testé — lecture en 612ms.

### Cause 3 — Zombie post (postId > Number.MAX_SAFE_INTEGER)
Le postId `7482014219937280000` (19 chiffres) dépasse `Number.MAX_SAFE_INTEGER` (9.007×10¹⁵). Le JSON parsing JavaScript perd de la précision sur le champ numérique `p.id`, causant un mismatch entre le postId écrit et le postId comparé par la dédup. Le post réapparaît donc chaque jour malgré le marquage DONE.
- **Fix** : le normaliseur extrait désormais le postId depuis l'URL `linkedinUrl` (chaîne exacte) via regex `/activity-([0-9]+)/`, avec fallback `String(p.id)`.
- **Statut** : ✅ Appliqué, sauvegardé et **publié** dans n8n le 16/07 à 08:57 (version "Jul 16 at 08:57:35"). JSON local synchronisé.

### Cause 4 — _ERROR-HANDLER jamais activé
Le workflow `_ERROR-HANDLER` n'a jamais été branché sur « Veille — Scrape & File d'attente (6h) » (statut ⏳ dans WORKFLOWS-FIDULIA.md). Aucune alerte n'a été envoyée pendant les 3 jours de pannes.
- **Statut** : ✅ Branché sur les 5 workflows actifs le 16/07 : Veille — Scrape & File d'attente (6h) · VEILLE-DIGEST-EMAIL · Veille CGP - Queue API (webhooks) · Veille CGP - Perplexity (vendredi 8h) · Veille — Queue API (webhooks).

### Nettoyage zombie
- **Statut** : ✅ Ligne `7482014219937280000` supprimée de l'onglet File-à-traiter du Google Sheet le 16/07.

**→ Les 4 causes sont désormais toutes traitées. Le run automatique du 17/07 validera la résolution complète (volume attendu : plusieurs dizaines de posts, digest non vide).**

## Détail 2026-07-15 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 1 post PENDING récupéré (Stephanie Leroux, sondage Coupe du monde 2026).
- **Étape 2** (Agent 42 batch) : 0 candidat — post hors des 3 thèmes Fidulia (sport). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-15.md`.
- **Étape 3** (Agent 50 batch) : 0 `[POST]`/`[NEWSLETTER]` — même post écarté. Capture : `Agents/50-Agent-Veille/Captures/2026-07-15.md`.
- **Étape 4** (`veille_queue_client.py done`) : OK, postId `7482014219937280000` marqué DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-15.md` déjà initialisé par la routine acceptations (1 acceptation, Mikaël Guéviguian) → sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" ajoutées, toutes deux vides. `send_digest_webhook.py` → `{"message":"Workflow was started"}`.
- **⚠️ Digest envoyé incomplet ce matin, corrigé l'après-midi** : la routine `prospection-fidulia-batch` (5h36) a exécuté son batch avec succès (10 invitations, `JOURNAL-BATCH.md` à jour) mais a sauté son ÉTAPE 4 (écriture de la section `## 📊 Prospection` dans le digest partagé), sans lever d'erreur. `verification-acceptations-linkedin` (6h07) a alors appliqué sa logique de repli ("fichier absent = routine précédente pas exécutée") et recréé un digest ne contenant que sa propre section. Le digest envoyé à 7h09 était donc tronqué (juste "1 acceptation"). Fabien l'a signalé, la section Prospection a été restaurée manuellement dans le fichier, et un digest corrigé a été renvoyé l'après-midi avec le nouveau template HTML (voir ci-dessous). **Correctifs appliqués** : ajout d'une étape 5.3 bis de vérification anti-troncature dans `ROUTINE-VEILLE-MATIN.md` (reconstruit la section Prospection depuis `JOURNAL-BATCH.md` si absente) + durcissement de la logique de repli dans `verification-acceptations-linkedin/SKILL.md`.
- **🎨 Industrialisation du template HTML** : `send_digest_webhook.py` (ancien CSS basique) remplacé par `render_digest.py`, qui injecte les sections du digest dans `Agents/70-Agent-Automatisation/templates/digest-email.template.html` — le design validé le 14/07/2026 (header navy/magenta, stat cards, comment cards, footer "FIDULIA"), jusqu'ici resté au stade scratchpad. `ROUTINE-VEILLE-MATIN.md` §5.4 et les permissions Bash mis à jour en conséquence.
- **⚠️ Anomalie détectée (3e jour consécutif)** : le postId `7482014219937280000` (Stephanie Leroux, sondage Coupe du monde) réapparaît en file `PENDING` malgré une clôture `DONE` confirmée chaque jour depuis le 13/07 (13, 14, 15/07 — 3 appels `done` réussis avec accusé de réception horodaté). La clôture côté script fonctionne (réponse API OK à chaque fois), donc le problème est en amont : soit le scraper n8n réinjecte ce post à chaque run sans vérifier son statut déjà-traité, soit la base n8n ne persiste pas le `DONE`. Volume négligeable pour l'instant (1 post/jour) mais **à investiguer par l'Agent 70** avant qu'un post à fort volume ne soit affecté par le même bug de dédoublonnage.

## Détail 2026-07-13 — run automatique (scheduled task)

- **Étape 1** (`veille_queue_client.py fetch`) : OK, 89 posts PENDING récupérés (accumulation depuis le 10/07, aucun run entre-temps).
- **Étape 2** (Agent 42 batch) : 8 candidats retenus / 89 (Daniel Disney, Austin Belcak, Daniel Priestley, Thibault Louis, Neil Patel, Sébastien Simoncelli, Romain Bour, Jeremy Guillo). Écartés notables : Allie K. Miller (sur-sollicitée, 4e fois en 11 jours), Ethan Mollick et Rand Fishkin (réintroduits trop récemment, diversité), Michael Kitces (exclusion de positionnement actée le 07-10, hors expertise déclarée de Fabien), gros volume de contenu hors 3 thèmes (sport Coupe du monde, politique, storytelling personnel, auto-promotion entreprise). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-13.md`.
- **Étape 3** (Agent 50 batch) : 0 `[POST]`/`[NEWSLETTER]` nouveau — les seules sources CURATION citables du lot (OCDE, Google DeepMind) étaient des doublons déjà captés le 07-11 et déjà intégrés à `VEILLE-NEWSLETTER-2026-W28.md` pour la newsletter du 12/07 ; le reste du lot (OpenAI, Stanford HAI, GenAI Works, Financial Times, Bpifrance, Sprout Social) était hors périmètre des 3 thèmes. 2 signaux ajoutés à `Agents/20-Agent-Stratege/INBOX.md` : renforcement du pattern GPT-5.6 "Sol" (3e-4e occurrence en 4 jours, Allie K. Miller + Ethan Mollick) et nouveau signal "débat cadence de publication LinkedIn" (4 comptes growth convergents le même jour). Capture complète : `Agents/50-Agent-Veille/Captures/2026-07-13.md`.
- **Étape 4** (`veille_queue_client.py done`) : OK, 89 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-13.md` déjà initialisé par les 2 routines précédentes (prospection 10/10 invitations + 9 acceptations) → sections "💬 À commenter aujourd'hui" (8 candidats condensés) et "📰 Veille du jour" ajoutées via Edit. `send_digest_webhook.py` → `{"message":"Workflow was started"}`.

## Détail 2026-07-10 — run automatique (scheduled task)

- **Étape 1** (`GET /webhook/veille-queue`) : OK, 42 posts PENDING récupérés.
- **Étape 2** (Agent 42 batch) : 4 candidats retenus / 42 (Richard van der Blom, Ethan Mollick, Maud Alavès, Georges de La Taille). 38 écartés : diversité/cooldown sur comptes très sollicités cette semaine (Naïlé Titah, Allie K. Miller, Guillaume Simonin, Elsa Fauroux — tous retenus le 07/08), Jasmin Alić (engagement farming, déjà écarté 07/08-09), Fabien Peduzzi (format tips incompatible posture Benedict Evans), reste hors 3 thèmes ou auto-promo entreprise. Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-10.md`.
- **Étape 3** (Agent 50 batch) : 1 `[POST]` (OpenAI — lancement ChatGPT Work, angle transition agentique), 1 `[NEWSLETTER]` (Stanford HAI — biais racial des outils de recrutement IA) → `Newsletter/VEILLE-NEWSLETTER-2026-W28.md`. 40 `[SKIP]`, dont 4 contenus financiers/patrimoniaux interdit absolu (Yomoni, Wealthfront, XYPN, Financial Times). 2 signaux ajoutés à `Agents/20-Agent-Stratege/INBOX.md` (Naïlé Titah — chiffre LinkedIn "94% accuracy" à vérifier ; Georges de La Taille — thème récurrent "inquiétude IA" chez les CGP). Capture complète : `Agents/50-Agent-Veille/Captures/2026-07-10.md`.
- **Étape 4** (`POST /webhook/veille-queue/done`) : OK, 42 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-10.md` déjà initialisé par la routine prospection (10/10 invitations) → sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" ajoutées via Edit. `POST /webhook/veille-digest-fidulia` → `{"message":"Workflow was started"}`.

## Détail 2026-07-09 — run automatique (scheduled task)

- **Étape 1** (`GET /webhook/veille-queue`) : OK, 43 posts PENDING récupérés.
- **Étape 2** (Agent 42 batch) : 5 candidats retenus / 43 (Benjamin - CGP Services, Bernard Marr, Impact AI, Stanford HAI, Rand Fishkin). 38 écartés : forte proportion de contenu financier/patrimonial interdit (AVENUE DES INVESTISSEURS ×2, Guillaume Simonin, XYPN ×2, Nicolas Decaudain, Yomoni, Wealthfront, Ritholtz Wealth, Vanguard, Betterment, Financial Times) + diversité appliquée sur comptes déjà candidats récemment (Allie K. Miller, Ethan Mollick, Richard van der Blom, Caroline Mignaux). ⚠️ Candidat 1 (Benjamin - CGP Services) signalé comme concurrent potentiel direct sur la niche CGP — décision consciente à prendre par Fabien. Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-09.md`.
- **Étape 3** (Agent 50 batch) : 1 `[POST]` (Stanford HAI — IA + modernisation réglementaire NY, 18M mots de statuts, angle "chronophage"), 1 `[NEWSLETTER]` (Impact AI — avantage IA France/Europe sur l'usage métier, 3e épisode de la série cette semaine) → `Newsletter/VEILLE-NEWSLETTER-2026-W28.md`. 41 `[SKIP]`. Journée pauvre en sources institutionnelles citables (lot dominé par influenceurs + contenu patrimonial US). 1 signal ajouté à `Agents/20-Agent-Stratege/INBOX.md` (Ethan Mollick — modèles "Sol"/"Fable", à vérifier via source primaire). Capture complète : `Agents/50-Agent-Veille/Captures/2026-07-09.md`.
- **Étape 4** (`POST /webhook/veille-queue/done`) : OK, 43 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-09.md` déjà initialisé par les 2 routines précédentes (prospection 10/10 + 1 acceptation) → sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" ajoutées via Edit. `POST /webhook/veille-digest-fidulia` → `{"message":"Workflow was started"}`.

## Détail 2026-07-07 — run automatique (scheduled task)

- **Étape 1** (`GET /webhook/veille-queue`) : OK, 69 posts PENDING récupérés (accumulation depuis le 03/07, aucun run entre-temps).
- **Étape 2** (Agent 42 batch) : 5 candidats retenus / 69 (Richard van der Blom, Allie K. Miller, Anthropic, Caroline Mignaux, Jasmin Alić). 64 écartés : forte proportion de contenu financier/patrimonial interdit (Kitces, Decaudain ×3 doublons, Yomoni, Wealthfront, Ritholtz Wealth, Bourse Direct, XYPN, Nick Maggiulli, Guillaume Simonin) + 2 concurrents CGP directs signalés à l'Agent 20 plutôt qu'engagés (Alexis Bauer, Benjamin - CGP Services). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-07.md`.
- **Étape 3** (Agent 50 batch) : 2 `[POST]` (Anthropic — audit 466M lignes de code Alberta ; Stanford HAI — pilotage humain des LLM comme discipline continue), 1 `[NEWSLETTER]` (Impact AI — IA responsable, citation Crédit Agricole) → `Newsletter/VEILLE-NEWSLETTER-2026-W28.md`. 66 `[SKIP]`. 3 signaux ajoutés à `Agents/20-Agent-Stratege/INBOX.md` (Benjamin CGP Services 3e récurrence en 5 jours, thèse "Small Giant" Caroline Mignaux, cas Anthropic Alberta). Capture complète : `Agents/50-Agent-Veille/Captures/2026-07-07.md`.
- **Étape 4** (`POST /webhook/veille-queue/done`) : OK, 69 postId marqués DONE (`traitePar: "42,50"`).
- **Étape 5** (digest) : `DIGEST-DUJOUR-2026-07-07.md` déjà initialisé par les 2 routines précédentes (prospection 10/10 + 2 rattrapages acceptations) → sections "💬 À commenter aujourd'hui" et "📰 Veille du jour" ajoutées via Edit (jamais `cat >>`). `POST /webhook/veille-digest-fidulia` → `{"message":"Workflow was started"}`.

## Détail 2026-07-02 — run 7h01 (launchd, échec)

- **Cause racine identifiée après coup** : bug de l'instance n8n self-hosted (2.2.5) sur le nœud `Respond to Webhook` en mode "JSON"/"Text" avec expression — l'expression n'est jamais évaluée lors d'un déclenchement webhook réel (seulement en test manuel dans l'éditeur), donc `GET /webhook/veille-queue` renvoyait un corps vide/invalide au lieu du tableau de posts. Corrigé le 2026-07-02 (passage en mode "First Incoming Item"/"All Incoming Items", sans expression).
- **Étape 5** (`POST /webhook/veille-digest`) : échec HTTP 404 sur ce run — chemin webhook incorrect dans le prompt de relance manuelle (`veille-digest` au lieu de `veille-digest-fidulia`, cf. run suivant).

## Détail 2026-07-02 — relance manuelle après correctif (~9h)

- **Étape 1** (`GET /webhook/veille-queue`) : OK, 200, 73 posts PENDING récupérés (accumulés depuis la panne du run 7h01 + jours précédents).
- **Étape 2** (Agent 42 batch) : 5 candidats de commentaire retenus sur 73 → `Clients/Fidulia/Engagement/CANDIDATS-2026-07-02.md`.
- **Étape 3** (Agent 50 batch) : 0 item `[POST]`/`[NEWSLETTER]` retenu au sens strict (aucune source d'autorité citable dans le lot scrapé, composé quasi exclusivement d'influenceurs). 1 signal stratégique déposé dans l'INBOX de l'Agent 20 (glissement algo LinkedIn "intention silencieuse" — Richard van der Blom, à confirmer via source institutionnelle). Capture complète → `Agents/50-Agent-Veille/Captures/2026-07-02.md`.
- **Étape 4** (`POST /webhook/veille-queue/done`) : OK, 200, 73 postId marqués DONE. File vérifiée vide après coup.
- **Étape 5** (`POST /webhook/veille-digest-fidulia`) : OK, 200, `{"message":"Workflow was started"}`. ⚠️ Le corps envoyé suit le schéma JSON de `ROUTINE-VEILLE-MATIN.md` (runDate/totalTraites/…) mais le workflow `VEILLE-DIGEST-EMAIL` a un nœud "Markdown vers HTML" en aval — à vérifier que l'email reçu est bien formaté, le mapping exact du champ attendu par ce nœud n'a pas été confirmé dans ce run.
- **Action de suivi pour Fabien** : arbitrer les 2 pistes de recherche Gemini proposées dans la capture du jour (algo LinkedIn intention silencieuse / adoption IA vs organisation) et valider les 5 candidats de commentaire.

## Détail 2026-07-02 — refonte digest unifié (~9h50)

Suite à la demande de Fabien de consolider en un seul email les résultats des 3 routines du matin (`prospection-fidulia-batch` 5h36, `verification-acceptations-linkedin` 6h07, `veille-matin-fidulia` 7h09) :

- **Chemin webhook corrigé** dans `ROUTINE-VEILLE-MATIN.md` (`veille-digest` → `veille-digest-fidulia`) et schéma confirmé : `{"markdown": "...", "subject": "..."}`, reçu par n8n sous `$json.body.markdown`/`$json.body.subject`.
- **Nouveau mécanisme d'assemblage** : fichier partagé `DIGEST-DUJOUR-[date].md` dans ce même dossier. `prospection-fidulia-batch` (ÉTAPE 4) et `verification-acceptations-linkedin` (nouvelle ÉTAPE 4 bis) y ajoutent désormais leur section au lieu d'envoyer chacune leur propre email (l'ancien POST direct de `prospection-fidulia-batch` vers `veille-digest-fidulia` a été retiré). `veille-matin-fidulia` (ÉTAPE 5 réécrite) ajoute ses 2 sections (candidats condensés + veille condensée) et envoie l'unique email du jour.
- **Docs orphelines nettoyées** : `Agents/70-Agent-Automatisation/n8n/veille-digest-email.json` et son `README.md` marqués `⚠️ SUPERSÉDÉ` (ancienne maquette non déployée, différente du workflow réel `Clients/Fidulia/Automatisation/VEILLE-DIGEST-EMAIL.json`).
- **Vérifié** : `com.fidulia.veille-matin.plist` n'est PAS chargé dans launchd (`launchctl list` → absent), donc pas de risque de double déclenchement avec la tâche planifiée in-app.
- **Test end-to-end** : digest assemblé manuellement à partir des données réelles du jour (batch prospection 10/10, 1 acceptation, 5 candidats 42, capture 50) → POST vers `veille-digest-fidulia` → exécution n8n #248 **Succeeded** (Webhook → Markdown vers HTML → Gmail, statut `SENT` confirmé). Email envoyé à `fabien@fabien-massavie.com` avec le sujet "(TEST digest unifié)" pour validation visuelle par Fabien.
- **À partir de demain (03/07)** : les 3 routines automatiques appliqueront ce nouveau comportement sans intervention manuelle.

## Détail 2026-07-02 — test PM end-to-end forcé manuellement (~11h)

Test complet de la chaîne veille demandé par Fabien pour valider bout-en-bout avant confiance totale dans le déclenchement automatique du matin. Prospection et vérification acceptations exclues du test (limité à la routine veille).

**Étape 0 — Préparation propre**
- 3 fichiers du matin archivés en `-AM` : `DIGEST-DUJOUR-2026-07-02-AM.md`, `CANDIDATS-2026-07-02-AM.md`, `Captures/2026-07-02-AM.md`
- `DIGEST-DUJOUR-2026-07-02.md` reset avec en-tête vide

**Étape 1 — Scrape n8n forcé** (workflow `Veille — Scrape & File d'attente (6h)` via UI Chrome, bouton "Execute workflow")
- Exécution en 1m 41s. 128 profils envoyés à Apify → 47 posts scrapés → 20 posts nouveaux après dédup contre l'historique (7 802 entrées) → écrits en PENDING dans la Google Sheet + ajoutés à l'historique.

**Étape 2 — Lecture file** (`GET /webhook/veille-queue`)
- HTTP 200, `{"count": 20, "posts": [...]}`. Payload 31 KB.
- Point d'attention : le champ `text` contient des caractères de contrôle non-échappés → `jq` en mode strict échoue, Python (utilisé par la routine réelle) parse sans problème. Rien à corriger côté prod, note pour tout futur test manuel.

**Étape 3 — Agents batch**
- `/42` invoqué avec pointeur vers le lot en cache (`scratchpad/lot-20260702.json`) → 5 candidats retenus / 20 (Richard van der Blom, Ethan Mollick, Lucile Meyer, GenAI Works, Fabien Peduzzi). 15 écartés dont 2 contenus financiers interdits (Avenue des Investisseurs ×2) et 2 concurrents CGP directs (Benjamin Coach Digital, Alexis Bauer). Fichier : `Clients/Fidulia/Engagement/CANDIDATS-2026-07-02.md`.
- `/50` invoqué en batch → 1 `[POST]` (Elsa Fauroux → sources vérifiables Sprout Social 2026 + Metricool 2026, à vérifier avant citation), 2 `[NEWSLETTER]` (Bpifrance Diag Cyber + FT Sam Altman), 17 `[SKIP]`. 2 signaux appendés à `Agents/20-Agent-Stratege/INBOX.md` (van der Blom 3e post autorité silencieuse + concurrents CGP directs actifs aujourd'hui). Aucun signal pour INBOX 21/31. Fichier : `Agents/50-Agent-Veille/Captures/2026-07-02.md`.

**Étape 4 — Clôture file** (`POST /webhook/veille-queue/done`)
- 20 postId envoyés, HTTP 200. Réponse n8n : tous en statut DONE avec `dateTraitement` horodatée.

**Étape 5 — Digest**
- `DIGEST-DUJOUR-2026-07-02.md` assemblé (3846 caractères, 2 sections "💬 À commenter aujourd'hui" + "📰 Veille du jour", sans les sections Prospection/Acceptations volontairement exclues du test).
- `POST /webhook/veille-digest-fidulia` avec `{"markdown": ..., "subject": "[TEST PM] Ton brief LinkedIn du 02/07/2026"}` → HTTP 200, `{"message":"Workflow was started"}`.
- Email reçu à 09:18:53Z (~11h18 Paris) sur `fabien@fabien-massavie.com`, thread Gmail `19f221fbfa781132`, statut UNREAD, HTML rendu correctement (emoji 🗞️ inclus).
- ⚠️ **Anomalie relevée** : le sujet reçu est `Ton brief LinkedIn du 02/07/2026`, **le préfixe `[TEST PM]` a été perdu** en route. Hypothèse : le workflow `VEILLE-DIGEST-EMAIL` a un `subject` hardcodé ou une expression qui écrase la valeur du webhook. À investiguer dans une session suivante — n'a pas impact fonctionnel mais empêche de distinguer visuellement un digest de test d'un digest de prod.

**Verdict global** : chaîne complète validée. Le déclenchement automatique de demain 7h peut tourner en confiance sur cette base.

**Points de suite à traiter (hors test) :**
- ⚠️ `_ERROR-HANDLER` **désactivé** dans n8n (vu dans la liste des workflows) — le filet de sécurité global est off. À réactiver avant de compter sur le fallback 8h.
- ⚠️ Subject hardcodé/écrasé dans `VEILLE-DIGEST-EMAIL` — à investiguer.
- ✅ La refonte digest unifié tient : aucun envoi parasite pendant le test PM (seul le POST manuel a déclenché un email).

## Détail 2026-07-02 — 2 correctifs post-test (~11h30)

Traitement des deux points de suite identifiés pendant le test PM.

**Fix 1 — Réactivation `_ERROR-HANDLER`**
- Workflow ouvert dans n8n, cliqué "Publish" avec la note de version "Réactivation après test end-to-end du 02/07/2026 (Agent 70) — remet le filet de sécurité global en place."
- Confirmation UI : icône verte ✓ dans la liste des workflows.
- Le trigger d'erreur va désormais capturer les erreurs de tous les workflows configurés pour pointer vers ce handler et alerter Fabien via Gmail.

**Fix 2 — Subject dynamique de `VEILLE-DIGEST-EMAIL`**
- **Diagnostic** : le workflow réellement déployé en prod avait un subject **hardcodé** (`Ton brief LinkedIn du {{ $now.format('dd/MM/yyyy') }}`), **différent du JSON local** qui contenait bien une expression conditionnelle mais s'appuyait sur `$json.body.subject` (inaccessible après le nœud Markdown vers HTML). Le préfixe `[TEST PM]` du test précédent était donc perdu dès l'entrée, pas juste écrasé au niveau du markdown.
- **Correction appliquée** : `{{ $('Webhook digest').item.json.body.subject || ('Ton brief LinkedIn du ' + $now.format('dd/MM/yyyy')) }}` — référence directe au nœud Webhook, immunisée aux transformations amont. Fallback conservé sur le sujet daté.
- **Publish** : nouvelle version publiée avec note "Fix subject dynamique : référence directe au nœud Webhook…"
- **Test end-to-end** : POST à `veille-digest-fidulia` avec `subject: "[TEST-SUBJECT-FIX-OK] Verification correctif subject"` → email reçu à 09:31:42Z sur `fabien@fabien-massavie.com`, sujet Gmail = `[TEST-SUBJECT-FIX-OK] Verification correctif subject` (thread `19f222b7d33cf898`). ✅ Fix validé.
- **JSON local synchronisé** : `Clients/Fidulia/Automatisation/VEILLE-DIGEST-EMAIL.json` mis à jour ligne 43 pour rester cohérent avec la prod (évite les futurs diagnostics faux positifs).

**État final n8n après cette session :**
- 4 workflows actifs : `Veille — Queue API`, `VEILLE-DIGEST-EMAIL` (v2 avec fix subject), `Veille — Scrape & File d'attente (6h)`, `_ERROR-HANDLER` (réactivé)
- 4 workflows désactivés : `VEILLE-RSS-MATIN`, `First-Agent`, `Test-worflo`, `Revue LinkedIn` (obsolètes ou en réserve)
- Prochaine exécution automatique : demain vendredi 03/07 à 6h (scrape) puis 7h (routine veille).

---

## Journal — Routine Veille CGP hebdomadaire (Perplexity)

> Pipeline distinct : `veille-cgp-perplexity.json` (collecte, vendredi 8h) + `veille-cgp-queue-api.json` (file) → routine `ROUTINE-VEILLE-CGP-HEBDO.md`, tâche planifiée `veille-cgp-hebdo-vendredi`.

| Date | Items CGP traités | Tags [POST]/[NEWSLETTER] | Statut |
|---|---|---|---|
| 2026-07-10 (mise en service + traitement manuel hors planning) | 8 | 0 [POST] + 3 [NEWSLETTER] (consolidés depuis 8 items bruts, 3 sources) | ✅ OK — voir détail |
| 2026-07-17 (run automatique, scheduled task) | 1 | 0 [POST] + 1 [NEWSLETTER] | ✅ OK — voir détail |
| 2026-07-24 (run automatique, scheduled task) | 3 | 0 [POST] + 2 [NEWSLETTER] + 1 [SKIP] (hallucination confirmée) | ✅ OK — voir détail |

### Détail 2026-07-24 — run automatique (scheduled task)

- **Étape 1** (`veille_cgp_queue_client.py fetch`) : OK, 3 items PENDING récupérés (tous AMF — doctrine BMR, sanction Uzès Gestion, campagne rapport protection des avoirs).
- **Étape 2** (Agent 50) : les 3 URLs critiques vérifiées via WebFetch avant tout usage (règle anti-hallucination Perplexity ~5-10 %) :
  - Item 1 (doctrine BMR) — confirmé exact (contenu, décret 2025-673, échéance 1er octobre 2026) ; écart mineur de date (Perplexity 21/07, page réelle 23/07). Tag `[NEWSLETTER]`.
  - Item 2 (sanction Uzès Gestion) — confirmé exact (montants 350k/30k/40k € et noms des dirigeants). Écart mineur de date (Perplexity 20/07, page réelle 22/07). Tag `[NEWSLETTER]`.
  - Item 3 (campagne rapport protection des avoirs) — **hallucination confirmée** : Perplexity annonçait une "ouverture" de campagne avec échéance 30/06/2026 ; la page réelle indique au contraire que la campagne 2025 est **clôturée**. Tag `[SKIP]`, non réutilisable en l'état.
  - Écrit dans `Captures/2026-07-24.md` § "Réglementaire / métier CGP (Perplexity — semaine du 2026-07-24)".
- **Ajout newsletter** : les 2 items `[NEWSLETTER]` ajoutés à `Newsletter/VEILLE-NEWSLETTER-2026-W30.md`, section dédiée "⚠️ usage client CGP uniquement" (même convention que le 10/07 et 17/07).
- **Étape 3** (`veille_cgp_queue_client.py done`) : OK, 3 itemId marqués DONE (`traitePar: "50"`).

### Détail 2026-07-17 — run automatique (scheduled task)

- **Étape 1** (`veille_cgp_queue_client.py fetch`) : OK, 1 item PENDING récupéré (Club Patrimoine — Listing Act, réforme réglementaire marchés de capitaux relayant une note AMF).
- **Étape 2** (Agent 50, application directe des critères `Agent-Veille.md`/`SOURCES.md`/`UKP-VEILLE.md`/`UKP-PERPLEXITY-VEILLE.md`) : item réglementaire/patrimonial pur → tag `[NEWSLETTER]` (réservé client, jamais public). Citation vérifiée via WebFetch avant usage (règle anti-hallucination Perplexity, ~5-10 % documenté) : URL réelle, faits confirmés (seuil prospectus 8→12 M€, délai IPO 3j ouvrés, réversion facturation recherche/exécution MiFID II, actions à droits de vote multiples). Écart mineur relevé : date de publication affichée par le fetch live (17/07) vs date Perplexity (14/07) — à confirmer si la date précise doit être citée dans un livrable client. Écrit dans `Captures/2026-07-17.md` § "Réglementaire / métier CGP".
- **Ajout newsletter** : entrée ajoutée à `Newsletter/VEILLE-NEWSLETTER-2026-W29.md` avec mention explicite "usage client CGP uniquement" (même convention que le run du 10/07), pour ne pas contaminer la newsletter publique Linked Connexion qui partage ce même fichier hebdomadaire pour ses items `[POST]`/`[NEWSLETTER]` généralistes.
- **Étape 3** (`veille_cgp_queue_client.py done`) : OK, itemId `2026-07-17T06:00:06.905Z-0` marqué DONE (`traitePar: "50"`).

### Détail 2026-07-10 — mise en service et premier traitement manuel

- **Contexte** : premier run réel du pipeline Perplexity CGP (12 sources), déclenché manuellement le jour même de la mise en production (hors cadence normale du vendredi 8h30).
- **Bug trouvé et corrigé en cours de route** : nœud "Marquer DONE" (workflow `veille-cgp-queue-api.json`) — erreur `Could not get parameter` sur le paramètre "Column to match on". Cause : valeur `itemId` importée depuis le JSON brut non reconnue par le composant UI du nœud Google Sheets (typeVersion 4.5). **Fix** : resélection manuelle de `itemId` dans le dropdown natif du nœud (force l'écriture du paramètre au format interne attendu), puis republication du workflow. Validé par test curl direct sur le webhook `veille-cgp-queue/done` (`{"ok":true,"marques":1}` puis `7`).
- **Traitement Agent 50** : 8 items bruts (3 depuis Club Patrimoine — même article, AI Act/CGP ; 4 depuis Profession CGP — même page produits assurance-vie/PER ; 1 depuis Option Finance) consolidés en 3 entrées éditoriales dans `Captures/2026-07-10.md` § "Réglementaire / métier CGP (Perplexity)", toutes taguées `[NEWSLETTER]` et ajoutées à `Newsletter/VEILLE-NEWSLETTER-2026-W28.md` avec mention explicite "usage client CGP uniquement".
- **File clôturée** : les 8 itemId marqués `DONE` via `veille_cgp_queue_client.py done`.
- **Prochaine exécution automatique** : vendredi prochain 8h (collecte) puis 8h30 (traitement, tâche planifiée `veille-cgp-hebdo-vendredi` réactivée).
