Files
OPENCLAW_ARCHIVE3_17/handoffs/HANDOFF-2026-06-09-GMAIL.md
Tallagrand Thierry 5363f99b76 Gmail Phase E/F + HANDOFF global + cleanup cron/root
- Réécriture HANDOFF.md dashboard multi-domaines

- Mise à jour MEMORY.md / TOOLS.md / AGENTS.md

- Cleanup fichiers cron obsolètes + fichiers root

- Gmail Phase E : audit, 18 filtres natifs, labels Promos/Dev-Tools/Social

- Gmail Phase F : archive Philippot + Ulys terminée
2026-06-26 00:28:07 +02:00

329 lines
11 KiB
Markdown

# Handoff — OpenClaw / Gmail Housekeeping
> _Document de reprise pour une nouvelle session (humain ou agent IA)._
> _Dernière mise à jour : 9 juin 2026._
> _Mainteneur : Thierry Tallagrand._
---
## 🎯 TL;DR (à lire en premier)
Le projet **OpenClaw** est un orchestrateur multi-agents tournant sur Synology NAS
(ARCHIVE3) qui pilote des comptes Google de Thierry via gateway gog.
**État actuel** : **Phase D Gmail housekeeping ✅ TERMINÉE** le 6 juin 2026.
12 401 mails trashés en 6 vagues. Boîte 12 703 → ~4 600.
**Prochaines phases prévues** :
- Phase E : filtres Gmail natifs (auto-trash à l'arrivée)
- Phase F : Vague 2 (archive Philippot + Ulys + labels)
- Phase G : 2ème passe Q8 (longue traîne newsletters tech)
- Phase H : digest VE (parsing Jeep uconnect)
---
## ⏰ Dates critiques
Date Événement Action
6 juillet 2026 Auto-purge Gmail Trash (30j) des mails Phase D Restaurer AVANT cette date si erreur
12 juin 2026 Token OAuth gmail.modify expire (Testing GCP, 7j) gog auth add --gmail-scope=full --manual --force-consent
9 juin 2026 Aujourd'hui — reprise après pause Vérifier gmail-doubts.md si existant
Export as CSV
---
## 🏗️ Architecture
### Hôte
- Synology ARCHIVE3 (DSM, hostname `ARCHIVE3`)
- Filesystem : `/volume1/docker/openclaw-data/workspace/`
- User : 1000:1000 (Thierry)
- TZ : Europe/Paris
### Containers Docker
- openclaw-gateway (daemon principal, expose gog CLI)
- openclaw-cli, openclaw-plugins, openclaw-dockerproxy
- gitea (versioning local), openvpn2 (VPN)
### Compte Google authentifié
- Email : tallagrand.thierry@gmail.com
- Project GCP : 666305633659 (test users mode = refresh tokens 7j)
- Scopes : gmail.modify + gmail.settings.basic + gmail.settings.sharing + userinfo.email + openid
- Token expire : **12 juin 2026**
### Infrastructure mail historique (3 NAS Synology)
- ARCHIVE → `[10.10.10.50]` (originel, IP locale)
- ARCHIVE2 → `[www.airtria.net]`
- ARCHIVE3 → `[www.airtria.pro]` (NAS actuel)
---
## 📂 Fichiers clés
Fichier Rôle
workspace/AGENTS.md Rules globales (NEVER/ALWAYS Gmail+WhatsApp, Heartbeats)
workspace/MEMORY.md Mémoire persistante session par session
workspace/gmail-audit.md Audit initial 3000 threads (Phase B)
workspace/gmail-rules.md Règles trash/archive/whitelist (Phase C, source de vérité)
workspace/gmail-housekeeping.md Log append-only actions Gmail (Phase D)
workspace/handoff.md Ce fichier
workspace/scripts/gmail_trash_v1.sh Vague 1 (>1y)
workspace/scripts/gmail_trash_v1_6m.sh Vague 1bis (6m→1y)
workspace/scripts/gmail_trash_v1ter.sh Vague 1ter (30j→6m)
workspace/scripts/gmail_trash_v1quinquies.sh Vague 1quinquies (7j→30j) + 4 nouvelles règles
workspace/scripts/gmail_trash_synology.sh Synology .net
workspace/scripts/gmail_trash_synology_all.sh Synology .pro + IP10 + .net
Export as CSV
---
## 📊 Bilan Phase D (5-6 juin 2026)
Vague Filtre temporel Trashed
Vague 1 older_than:1y 5 335
Vague 1bis 6m → 1y 1 647
Vague 1ter 30j → 6m 1 871
Synology .net toutes périodes 1 160
Synology .pro+IP10 toutes périodes 2 099
Vague 1quinquies 7j → 30j 289
TOTAL 12 401
Export as CSV
Boîte 12 703 → ~4 600 (-64%). Hits rate-limit : 0.
### Top performers
- LinkedIn (3 règles) : 3 502+
- Synology auto-notifs (3 variants) : 4 419
- Quora : 1 436+
- AliExpress : 469
- TAAFT : 418
- Rustica : 351
- Facebook : 365
- Cdiscount : 276
- Carrefour : 257
---
## 🔴 Whitelist absolue (NE JAMAIS toucher)
Source de vérité : gmail-rules.md.
### Banques
@cic.fr, @e-cic.fr, @bpgo.fr, @cmb.fr
### Admin & légal
@impots.gouv.fr, @dgfip.finances.gouv.fr, @digiposte.fr, @ameli.fr
### Telco perso
@orange.com, @orange.fr, @neuf.fr
### Véhicules
@vwfs.com, @volkswagen.fr, @jeep.com (cf. règle V01 digest VE),
@ze-watt.fr/.com, @zeromotorcycles.com, r.clientele@vwfs.com
### Plongée
@gissacg.fr, @lists.gissacg.fr, president@gissacg.fr, @arimair.fr
### AIRTRIA
@airtria.net, @airtria.fr, @laboutique-solaire-pro.com
### Identités personnelles
tallagrand.thierry@gmail.com, thierry.tallagrand@me.com,
Frederic Tallagrand (famille)
### Synology infrastructure (CRITIQUE — alertes opérationnelles)
- sns@synologynotification.com (Active Insight - alertes disque/storage)
- noreply@c2.synology.com (C2 backup subscription)
### Finance
- noreply@amundi-esr.com (épargne salariale PEE/PERCO)
### Labels système Gmail protégés
IMPORTANT, STARRED, SENT, DRAFT, Personal, Travail, Achats, Receipts, Notes
---
## 🛡️ Hard constraints opérationnels
### NEVER
1. messages.delete permanent (toujours messages.trash)
2. Toucher la whitelist (abort silencieux si match)
3. >200 actions par batch Gmail (en pratique 300 OK)
4. >2000 actions par jour sans confirmation humaine
5. Modifier labels système (INBOX retirable mais pas SENT/DRAFT/IMPORTANT)
6. Lancer une vague sans dry-run préalable validé
### ALWAYS
1. Dry-run obligatoire avant toute action en masse
2. Logger chaque batch dans gmail-housekeeping.md
3. Respecter gmail-rules.md comme source de vérité unique
4. Vérifier la whitelist au runtime (pas seulement au design)
5. Pause 5s entre 2 batchs gog gmail trash/archive
6. En cas de doute : laisser dans inbox + log dans gmail-doubts.md
### Limites runtime utilisées (Phase D)
- maxBatchSize: 300
- pauseBetweenBatchesMs: 5000
- Détection auto rate-limit 403 + retry 60s
- Hits rate-limit observés : 0 sur 12 401 actions
---
## 🔧 Patterns gog éprouvés
Recherche read-only :
sudo docker exec openclaw-gateway gog gmail search "QUERY" -a tallagrand.thierry@gmail.com --max 500 -j
Trash avec query + cap :
sudo docker exec openclaw-gateway gog gmail trash -a tallagrand.thierry@gmail.com --query "QUERY" --max 300 --force
Re-auth OAuth :
sudo docker exec openclaw-gateway gog auth remove tallagrand.thierry@gmail.com
sudo docker exec -it openclaw-gateway gog auth add tallagrand.thierry@gmail.com --services=gmail --gmail-scope=full --manual --force-consent
Vérification auth :
sudo docker exec openclaw-gateway gog auth list
sudo docker exec openclaw-gateway gog gmail labels list -a tallagrand.thierry@gmail.com
---
## 🟣 Cas spécial — Jeep uconnect (digest VE)
from:uconnectservices@jeep.com (~400 mails) :
- Phase D : aucune action (laissés en inbox)
- Phase H : agent quotidien parse les mails, génère charge-vehicule.md + notif WhatsApp synthèse, archive auto avec label Charge-VE
---
## 🟡 Phase F (Vague 2 — à faire)
Archive + label, pas de destruction :
ID Source Action Volume estimé
V2.01 florian.philippot@les-patriotes.fr Archive + label Newsletters ~30
V2.02 info@clients.ulys.com Archive + label Receipts ~50
Export as CSV
---
## 🔵 Phase E (filtres Gmail natifs — à faire)
Objectif : plus jamais d'accumulation. Filtres Gmail qui trashent automatiquement les mails matchant nos 23 règles V1 dès l'arrivée.
Approches possibles :
1. gog filters create (à explorer via gog gmail filters --help)
2. Gmail API directe : users.settings.filters.create (Python)
3. Gmail UI web : 23 clics manuels (lent mais sûr)
Pré-requis : Phase D doit avoir tourné 30 jours sans regret.
---
## 🟠 Phase G (2ème passe Q8 — longue traîne)
Identifier expéditeurs hors top 30 actuels (Medium, Substack, Frandroid, dev.to, mailchimp génériques).
Audit longue traîne :
sudo docker exec openclaw-gateway gog gmail search "category:promotions OR category:updates older_than:6m" -a tallagrand.thierry@gmail.com --max 5000 -j > /tmp/longue-traine.json
---
## 🐛 Quirks / pièges connus
### Horloge système
Le serveur expose un current_time parfois bloqué ou avec coquille UTCUTC.
Source de vérité = horloge système host (date sur ARCHIVE3) ou contexte conversationnel.
### Bug KeyError 'subject' dans gog gmail search
Certains threads n'ont pas de subject. Toujours utiliser t.get('subject', '').
### from:me ne fonctionne pas dans gog
Utiliser l'email complet à la place.
### Compteurs Gmail web vs API
- Compteur "Boîte de réception" gauche = fiable
- Compteur "1-50 sur N" en haut = inclut SENT en vue Principale
- Compteurs catégories (Promotions/Notifications/etc.) = INCLUENT TRASH, jamais représentatifs.
### Dry-run gog gmail trash
Le --dry-run ne pré-fetch PAS les message_ids. Pour validation, faire un gog gmail search séparé avec la même query.
---
## 📋 Checklist de reprise (pour nouvelle session)
[ ] Vérifier date système : date sur ARCHIVE3
[ ] Vérifier état token : gog auth list (si expire <24h, relancer flow OAuth)
[ ] Lire gmail-housekeeping.md (dernières actions)
[ ] Lire MEMORY.md (état général)
[ ] Vérifier gmail-doubts.md (mails à relire)
[ ] Vérifier inbox count : gog gmail search "in:inbox" --max=1 -j
[ ] Décider phase suivante : E, F, G ou H
[ ] Si action destructive → dry-run d'abord, valider, puis exécuter
---
## 🔗 Liens / refs
- gog CLI : gog gmail {search|trash|archive|labels} --help
- Gmail search syntax : https://support.google.com/mail/answer/7190
- Gmail API quotas : https://developers.google.com/gmail/api/reference/quota
- GCP project : 666305633659 (mode Testing, refresh 7j)
---
## 10 juin 2026 ~01:00-01:35 UTC+2 — Auth Gmail re-faite + persistance
### Contexte
Token OAuth expirant 12/6/2026. Découverte que le keyring vivait dans
/home/node/.local/share/gogcli/ (couche writable container) = perdu à chaque
compose down/up.
### Actions
- Re-auth gog complète via `gog auth add tallagrand.thierry@gmail.com
--services=gmail --manual --gmail-scope=full --force-consent`
- Ajout de GOG_HOME=/home/node/.openclaw/gogcli dans compose.yaml (env)
- Migration credentials.json + keyring/ vers gogcli/data/
- Permissions 1000:1000, files 600, dirs 700
- Test ULTIME compose down+up : auth survit ✅
### Garanties acquises
- Refresh token persisté dans /volume1/docker/openclaw-data/gogcli/data/keyring/
- Survit aux compose restart, stop+start, down+up, --force-recreate
- GOG_KEYRING_PASSWORD doit rester identique (sinon keyring illisible)
### TODO
- Investiguer config.path warning (non critique, gog créera /gogcli/config/
à la prochaine écriture config)
- Mettre à jour scripts/generate_gmail_token.sh (référence à `gog auth
generate-token` qui n'existe pas — la vraie commande est `gog auth add ... --manual`)
- Référencer la nouvelle syntaxe gog dans MEMORY.md (procédure compacte
~1100 chars proposée plus haut, à appliquer une fois reposé)
## ✅ Validation finale 10 juin 2026 ~02:13-02:18 UTC+2
Test fonctionnel complet via WhatsApp DM (session fraîche post-/new) :
### Questions/réponses
| Question | Comportement | Latence |
|---|---|---|
| "Combien de mails aujourd'hui ?" | 1 appel gog gmail search → "2 messages" | ~1min |
| "et hier ?" | Réutilise contexte + 1 appel | ~5s |
| "donne la liste" | Format structuré avec dates + étiquettes | ~30s |
| "et liste des mails de lundi" | Recherche multi-jours, format détaillé | ~1min |
### Test dashboard
"fait un classement par catégorie des mails depuis le 1juin 2026 et le 10 juin 2026"
→ Réponse multi-section (Newsletters/Actualités/Réseaux/Personnel/Systèmes/Autres)
→ Classification sémantique propre, ~30 mails listés
→ Aucune boucle, aucune saturation
### Conclusion
- Phase D bilan classement Gmail : **PHASE LECTURE COMPLÈTEMENT OPÉRATIONNELLE**
- Phase E (mutations en masse) : prête à être lancée, syntaxe validée par l'agent
- Aucune intervention manuelle nécessaire pour les questions Gmail standard