Plan d’intégration — infra agenda (calendar)
Audit cohérence SPECs × cible × Serveur Outils Grainerie (2026-05-27)
- `Spec : SPEC INFRA COHERENCE PROJET GRAINERIE (critères R1–R4, matrice déploiements, commandes ☀️).
- Lot déployé (2026-05-27) sous calendrier grainerie :
| # | Sujet (titre GitLab) | Statut (2026-05-27) | Lien |
|---|---|---|---|
| 3106 | AG-3 — includes racine Configuration (docker compose) | Fermé | 3106 |
| 3107 | AG-4 — CalDAV sabre dav + Traefik | Ouvert (smoke DAV restant) | 3107 |
| 3108 | AG-5 — Webmail PostgreSQL prod | Ouvert (preuve worker 24 h) | 3108 |
| 3109 | AG-7 — Staging agenda-stage | Ouvert (smoke HTTPS Traefik) | 3109 |
| 3110 | Sidecars agenda-stack-complete | Ouvert (Infisical .env) | 3110 |
| 3111 | Spike Marty CPU + Coturn | Ouvert (recette Traefik / build lab) | 3111 |
| 3112 | Snapshot runtime ↔ diagrammes | Ouvert (collect-spok-readonly complet) | 3112 |
| 3113 | CI drift fork → cible | Fermé | 3113 |
Objectif
Reprendre toute la stack agenda documentée et composée dans l’atelier fork, la rendre versionnée et déployable via le mono-dépôt Grainerie (cible), et la suivre dans sans confondre avec les vagues n8n/Baserow (V4–V6).
Principe : pas de breaking change sur app.grainerie.netlib.re ; services additionnels (CalDAV, webmail, staging) par profils Compose ou include commentés, comme Authentik/Infisical (V9).
Référence — stack Qwik « production » (atelier)
Fichier Configuration (docker compose.production) (inclut Configuration (docker compose.collab ws)) : modèle opérationnel après déploiements 2026 sur app.grainerie.netlib.re.
- Images agenda qwik:latest /
agenda-ics(préfixe local, pas de push Docker Hub — aligné politique registre Grainerie). - Traefik : compress sauf
font/woff*sur le routeur agenda ; route dédiée/fonts/(middlewareidentity) ;agenda-baserow-wsbaserow) prio 15 sur le service agenda (relai WS same-origin, G17-T2) ; `agenda-public-icspour ics et ics (pages Qwik, prio 20) avantagenda-ics(PathPrefix/ics, prio 10— exports Node). agenda-collab-ws(collab, MTW-046) via second fichier compose — démarrage ciblé documenté en tête de Configuration (docker compose.collab ws).- Variables runtime agenda : `WEBMAIL_PG_, VESPA_HTTP_BASE, relai BASEROW_WS_RELAY_* (build + runtime) — voir commentaires du YAML atelier.
Cartographie des sources
| Zone | Emplacement | Rôle |
|---|---|---|
| Atelier (Git séparé) | fork | Code Qwik, specs, docker |
| Pont Grainerie | Configuration (docker compose.grainerie) | include → Configuration (docker compose) |
| Canon infra versionné | agenda | Configuration (docker compose) + include Configuration (docker compose.collab ws) + docker (fragments dev-infra…) |
| Agrégateur calendrier | Configuration (docker compose) | agenda + vespa |
| Racine stack | Configuration (docker compose) | include agenda + vespa (pas encore dev-infra / staging) |
Matrice services (atelier → cible → compose racine → Serveur Outils Grainerie)
| Service / conteneur | Fragment atelier (docker) | Fichiers agenda (racine ou docker) | Inclus racine Configuration (docker compose) | Serveur Outils Grainerie (état connu 2026-05-23) |
|---|---|---|---|---|
| agenda-collab-ws | Configuration (docker compose.collab ws) (include production) | agenda (Configuration (docker compose.collab ws), Dockerfile.collab-ws) | ✅ (include racine Configuration (docker compose)) | 🔶 si déployé (collab) |
| agenda (Qwik prod) | Configuration (docker compose.production) / fragment racine | Configuration (docker compose) | ✅ | ✅ healthy |
| agenda-ics | idem | Configuration (docker compose) | ✅ | ✅ |
| apid | idem | Configuration (docker compose) | ✅ | ✅ (si déployé) |
| vespa | Configuration (docker compose.vespa) | Configuration (docker compose) | ✅ | ✅ (fenêtre 2026-04-27) |
| agenda-caldav-db | Configuration (docker compose.dev infra) | Configuration (docker compose.dev infra) | ❌ | ✅ runtime (hors agrégateur) |
| agenda-caldav-server / agenda-caldav | dev-infra + route dav dans Configuration (docker compose.traefik.qwik) | Dockerfile.caldav, caldav | ❌ | 🔶 DB sans route Traefik documentée dans agrégateur |
| agenda-webmail-db + agenda-webmail-worker | dev-infra, Configuration (docker compose.webmail), stack complète | PostgreSQL uniquement | ❌ | ✅ runtime PG |
| agenda-marty-coordinator (Redis) | dev-infra — service agenda-mac-redis | dev-infra | ❌ | ✅ runtime (projet Compose dédié -p agenda-mac) |
| agenda-stage | Configuration (docker compose.staging) (include agenda-stack-complete) | Configuration (docker compose.staging) + Configuration (docker compose.agenda stack complete) | ❌ | ⚠️ aligner chemins Serveur Outils Grainerie (agenda) |
| marty-postgres | Configuration (docker compose.agenda stack complete) | Configuration (docker compose.agenda stack complete) | ❌ | 🔶 si stack complète déployée |
| marty-coordinator (Node BFF) | Configuration (docker compose.marty stack) | Configuration (docker compose.marty stack), marty coordinator | ❌ | 🔶 spike Marty CPU |
| marty-yjs | idem | idem, marty yjs | ❌ | 🔶 idem |
| coturn (TURN) | profil turn dans marty-stack | coturn | ❌ | 🔶 optionnel P2P |
| Traefik Qwik / Caddy (option A) | Configuration (docker compose.traefik.qwik) | copie sous docker | ❌ | Non — prod = image Node Qwik (Dockerfile.agenda.production) |
Écart principal : les fragments dev-infra, webmail, staging et CalDAV Traefik existent sous docker (alignés fork) mais ne sont pas raccordés à l’agrégateur racine ; Serveur Outils Grainerie exécute une partie en parallèle (compose manuel ou ancien bundle). Processus : toute évolution fork/docker/docker-compose.production.ymlICS) doit se refléter dansinfrastructure/cible/agenda/docker-compose.yml` dans la même session ou AG-1.
Décision webmail (2026-05-27) : stockage métier webmail uniquement PostgreSQL (docker-compose.webmail.yml, postgres:16, même schéma que dev-infraagenda-stack-complete). Le worker et les tests n’acceptent que les variables WEBMAIL_DB_, WEBMAIL_PG_` et secrets documentés.
Étapes AG-0 → AG-9
| ID | Timing | Action | GA / garde | Critère de validation |
|---|---|---|---|---|
| AG-0` | ☀️ | Cartographie + rapport daté | GA2 | AGENDA INFRA INTEGRATION PLAN 2026 05 23 à jour | ||||
| AG-1 | ☀️ | Procédure promotion atelier → cible : après MR dans fork, rsync ou script des fichiers *, Dockerfiles, worker référencés par compose | GA2, external-git-ateliers | Diff docker ↔ docker documenté ; pas de régression compose config |
| AG-2 | ☀️ | V1 : scan secrets CALDAV_*, WEBMAIL_*, STAGE_*, VESPA_* ; MAJ .env.example | GA3 | scan-compose-secret-keys.py --v1-1-bundle inclut fragments agenda |
| AG-3 | ☀️ | Compose racine : ajouter include commenté vers Configuration (docker compose.dev infra) (profils dev-infra, cpi, webmail, mac) + doc dans README | GA4 bis | cible && docker compose config) OK avec et sans décommentaire |
| AG-4 | 🌙 | CalDAV : déployer agenda-caldav + caldav-db ; route Traefik dav) ; smoke WebDAV/CalDAV | GA4, pas down stack entière | curl -k / client CalDAV sur https://app.grainerie.netlib.re/dav/ |
| AG-5 | 🌙 | Webmail : déploiement PostgreSQL (webmail-db + worker) ; preuve worker (imap-worker.mjs logs JSON) | GA4 | Healthchecks DB + worker stable 24h |
| AG-6 | 🌙 | Marty coordinator (Redis) : inclure dans compose modulaire si l’app l’exige en prod | GA4 | redis-cli ping + spec MAC |
| AG-7 | 🌙 | Staging : soit intégrer agenda-stage au plan (host app-stage.grainerie.netlib.re), soit arrêter conteneur orphelin | GA4 | Plus de agenda-stage fantôme OU staging documenté + HTTPS smoke |
| AG-8 | ☀️ | Vespa : package vespa-application ; npm run vespa:feed ; BFF search | — | ApplicationStatus OK ; recherche BM25 smoke |
| AG-9 | ☀️/🔶 | Produit : tickets RT-LOG / AUTHK agenda (docs) — hors infra pure, lien vague C / epic AUTHK-008 | GA5 si Baserow | Backlog aligné SUIVI |
Raccordement aux vagues V0–V9
| Vague | Lien AG |
|---|---|
| V1 | AG-2 secrets CalDAV / webmail / staging |
| V2 | Rebuild images agenda, agenda-ics, agenda-caldav (tags pin) |
| V9.1 | AG-3/4/5/6 : compléter l’agrégateur modulaire (comme Authentik commenté) |
| V9.3 | Middlewares authentik@docker sur agenda (déjà préparés en commentaires) |
| Vague C (AUTHK) | OIDC agenda — specs atelier, pas bloquant AG-4 |
Priorité relative au plan 2026-05-23 : après P0 GA6 Router et P1 V8.4 cron — traiter AG-3 ☀️ puis AG-4–7 🌙 par fenêtre maintenance.
Commandes utiles (☀️, sans lifecycle prod)
# Config locale agrégateur + agenda
(cd infrastructure/cible && docker compose -f docker-compose.yml config)
# Config avec dev-infra (après AG-3)
(cd infrastructure/cible && docker compose -f docker-compose.yml \
-f agenda/docker/docker-compose.dev-infra.yml --profile dev-infra config)
# Diff atelier ↔ cible (docker)
diff -ru external/calendar/fork/docker/ infrastructure/cible/agenda/docker/ | less
# Pont atelier
docker compose -f external/calendar/docker-compose.grainerie.yml config
Serveur Outils Grainerie : toute relance agenda / CalDAV / webmail via SSH + services nommés uniquement .
Références specs atelier (lecture agent)
| Sujet | Spec / doc (sous docs ou fork) |
|---|---|
| Webmail | SPEC WEBMAIL MAIL ASSISTANT MODULE |
| CalDAV | CPI-016/017 — Configuration (docker compose.dev infra), traefik.qwik dav |
| Traefik / ICS | TRAEFIK BASEROW WEBSOCKET G17, RECETTE SSH SPOK TRAEFIK ICS |
| Déploiement Qwik | PLAN DEPLOIEMENT QWIK (fork) |
Maintenu avec le suivi SUIVI MIGRATION TODO — section Annexe AG.