docs: record iCalendar parser decisions (T1)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Pierre Martin
2026-06-30 01:18:29 +02:00
co-authored by Claude Opus 4.8
parent 1878ba08ec
commit 2a25f1c34e
2 changed files with 31 additions and 0 deletions
+26
View File
@@ -39,6 +39,32 @@ navigateur). L'extension facilite le geste (affiche l'image à glisser) mais ne
l'automatise pas. L'affiche vient souvent de la newsletter Brevo, hors
calendrier.
## 2026-06-30 — Parseur iCalendar (T1) : contrat `Event` figé + ical.js vendoré
Le flux brut est transformé en `Event[]` par une fonction pure
`parserEvenements(flux, aujourdhui)` (`extension/evenements.js`), via **ical.js
v2.2.1 vendoré** (approche 3 du brainstorm : pas de build, dépendance en `.js`).
**Contrat `Event` figé** (ne pas rouvrir sans accord) :
`{ uid, titre, description, lieu, debut: Date, fin: Date, categories: string[],
journeeEntiere: boolean }`. Champs texte coercés en `""` si absents (l'aval
suppose des chaînes). Le défaut « café » du lieu est appliqué **en aval**, pas
ici.
**Décisions tranchées :**
- **`uid` seul, pas de `href`/`ETag`.** Le transport actuel (`?export`) renvoie
un ICS concaténé sans `href`/`ETag` par événement. L'`UID` est la clé stable ;
T2 résoudra l'adressage CalDAV par UID au moment du PUT. Le contrat n'est pas
alourdi.
- **`journeeEntiere` dès T1** (drapeau porté, comportement « heure exigée »
différé à T3).
- **Cas limites traités « au plus simple », différés à T3** : pas d'expansion
RRULE (récurrents pris au DTSTART maître + filtre futur → un récurrent au
maître **passé** disparaît, **trou assumé et documenté**), exceptions
d'occurrence (`RECURRENCE-ID`) ignorées, journées entières au minuit local.
- **Tri & message « 0 événement futur » hors parseur** : le parseur renvoie les
événements **dans l'ordre du flux**, non triés (responsabilité de la liste).
## 2026-06-29 — Pré-remplissage par content script, pas par URL
Gravity Forms n'accepte `?input_X=` que si chaque champ est configuré
+5
View File
@@ -26,6 +26,11 @@ Document de référence pour l'implémentation. Toutes les valeurs ci-dessous so
> Recommandation parsing : `ical.js` (Mozilla) plutôt que regex maison — gère RRULE, TZID, VALUE=DATE.
> **T1 — parseur** : `ical.js` **v2.2.1** vendoré (build ESM `dist/ical.js`) dans
> `extension/vendor/ical.js`. ⚠️ Les `VTIMEZONE` embarqués dans le flux doivent
> être enregistrés (`ICAL.TimezoneService.register`) **avant** `toJSDate()`,
> sinon l'offset est faux pour les TZID non standards (ex. `Africa/Lagos`).
---
## 2. Cible : formulaire mairie (Gravity Forms, form id = 6)