docs: record the prefill seam and the optional local config

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Pierre Martin
2026-07-17 14:30:48 +02:00
co-authored by Claude Opus 4.8
parent 2e60bd08d8
commit 23e58b17ee
3 changed files with 114 additions and 18 deletions
+55
View File
@@ -126,3 +126,58 @@ deux avals du parseur ont chacun le leur : la liste affiche l'adresse pour ne pa
montrer une ligne vide (cas majoritaire), le content script décide s'il pose
**aussi** les coordonnées (`input_18`). Écrire l'adresse dans le payload
détruirait le signal « pas de lieu » dont il a besoin.
## 2026-07-17 — [T1] Pré-remplissage : content scripts classiques + `globalThis`
Le formulaire mairie est pré-rempli par deux content scripts (`config.js`,
`formulaire-valeurs.js`, `formulaire-mairie.js`), **classiques — pas des modules
ESM** — qui communiquent par des namespaces `globalThis` (`EchoConfig`,
`EchoFormulaire`).
**Pourquoi pas ESM :** un content script n'est pas un module (`import` y lève une
`SyntaxError`), et le `import()` dynamique y est cassé côté Firefox (bugs ouverts
1803950 / 1536094). Restait à convertir la couture `transfert.js`, figée le
2026-07-14 : non.
⚠️ **`config.js` et `formulaire-valeurs.js` n'ont NI `import` NI `export`, et
c'est délibéré — ne pas « corriger ».** Un fichier sans les deux est valide **à la
fois** comme script classique (content script, background) et comme module ESM
(`import "./config.js"` depuis `presentation.js` et depuis `bun test`). C'est ce
qui permet à `presentation.js` de partager l'adresse du café **sans build**. Le
jour où quelqu'un y ajoute un `export`, les content scripts cassent
silencieusement.
**Corollaire : l'ordre des tableaux `js` du manifest EST la dépendance**
(`config` → `valeurs` → `mairie`), testé dans `extension.test.ts`.
**`CLE_EVENEMENT_EN_ATTENTE` est dupliquée** dans `formulaire-valeurs.js`
(l'original vit dans `transfert.js`, en ESM, inatteignable depuis un content
script classique). Un **test de dérive** garantit l'égalité des deux.
**Config (a) : défauts committés + `config.local.json` optionnel.** Les défauts
(thème, tarifs, café) sont dans `config.js` ; seuls organisateur et email sont
personnels et vivent dans `config.local.json` (gitignoré). Le fichier n'est
**pas requis** : un clone frais doit marcher, il laisserait sinon l'extension
cassée par défaut. Absent ou invalide → défauts nus, manque **signalé** dans le
bandeau, jamais d'exception.
**C'est le background qui lit `config.local.json`**, puis le passe par le
storage. Un content script ne pourrait le `fetch(runtime.getURL(...))` que si le
fichier était en `web_accessible_resources` — ce qui **exposerait l'email à la
page de la mairie**. Le fichier étant optionnel, il ne peut pas non plus être
listé dans un tableau `js` (Firefox refuse d'installer si un fichier déclaré
manque) : `fetch` + repli est la seule voie.
**On ne remplit que ce qu'on sait ; le reste est dit, jamais inventé.** Pas
d'heure « 00:00 » pour une journée entière, pas de `lat|lng` deviné pour un lieu
hors café, pas d'organisateur par défaut. Ce qui manque part dans le bandeau
(`aCompleter`). En particulier, **`input_6_35` (accessibilité) est laissé
intact** : `RECHERCHE.md` le dit « fixe », mais la machine ne sait pas si le lieu
est accessible — cocher au hasard sur un formulaire **modéré** serait exactement
le « champ rempli faux » qu'on veut éviter.
**Séparation calcul / DOM** : `formulaire-valeurs.js` est pur et testé (les dates
sont le vrai risque, invisible sous `TZ=Europe/Paris`) ; `formulaire-mairie.js`
est fin, impur et **non testé unitairement** — aucun harnais DOM dans le repo, et
happy-dom n'émulerait de toute façon pas Gravity Forms. C'est le test humain qui
tranche.