Ce qui n'allait pas
Le domaine du Copilot était écrit en dur dans le manifeste de l'extension :
cdl-copilot.vercel.app et localhost:3000. Quand le Copilot est
passé sur son propre serveur, l'extension a cessé de fonctionner.
Et rien ne le signalait. Chrome chargeait bien l'extension ; c'est son script qui ne s'exécutait plus sur la production. Le bouton « Envoyer vers TEETCHE » restait désactivé — le bon comportement face à une extension absente. Aucune erreur nulle part.
La preuve, avant / après
Mesuré sur la production réelle, extension chargée par Chrome.
| État | Marqueur posé | Bouton |
|---|---|---|
| Avant — domaine de la prod inconnu | aucun | désactivé |
| Sans extension (comportement normal) | aucun | désactivé |
| Après — sur la fiche d'inscription | présent | actif |
| Après — sur /connexion et l'accueil | aucun | — |
La correction
On n'a pas ajouté l'URL de production à la liste — c'est la liste qui était le bug. On a supprimé la connaissance du domaine.
// manifest.json — plus AUCUN domaine du Copilot
"host_permissions": ["http://*/*", "https://*/*", "https://pro.teetche.com/*"]
"content_scripts": [{ "matches": ["http://*/*", "https://*/*"], ... }]
// content-copilot.js — le garde, en PREMIÈRE instruction
if (!document.getElementById("cdl-copilot-teetche")) return;
document.documentElement.setAttribute("data-cdl-teetche-extension", "present");
Le script tourne partout mais ne s'active que sur une page qui porte le bloc
#cdl-copilot-teetche, que seule la fiche d'inscription émet. Ailleurs il ne fait
strictement rien : aucun élément ajouté, aucun attribut posé, aucun appel réseau,
aucune écriture dans le stockage. Le Copilot peut déménager, l'extension suit.
Ce qui empêche le bug de revenir
Le bug est passé parce que rien ne reliait le manifeste au déploiement réel. Le README se contentait de prévenir : « pensez à ajouter l'URL aux deux endroits ». Trois garde-fous désormais :
| Garde-fou | Rôle |
|---|---|
tests/unit/extension-manifest.test.ts | Refuse tout domaine du Copilot écrit en dur — vercel.app, localhost, hstgr.cloud. Vérifie aussi que les fichiers déclarés existent, et l'ordre garde → marqueur. |
| Le manifeste lui-même | Porte la raison, à l'endroit exact où l'erreur serait commise. |
docs/EXTENSION-TEETCHE.md §9 | Explique pourquoi la permission est large, pour que personne ne la « corrige » en la resserrant. |
Le paquet à donner à l'associé
https://copilot-pause.dev.srv1899780.hstgr.cloud/extension-teetche-v1.1.0.zip
Rien ne produisait de paquet jusqu'ici : la consigne était « télécharger le dossier », sans
dire d'où ni sous quelle forme. scripts/empaqueter-extension.sh construit le zip,
puis le relit et refuse de le livrer si le manifeste n'est pas à la racine ou si un
fichier déclaré manque.
Le test a été refait avec l'extension extraite de ce zip, pas depuis le dossier de travail : ce qui part est exactement ce qui a été mesuré.
chrome://extensions. Tant que ce n'est pas fait, son extension reste celle qui ne
marche pas. — Et pro.teetche.com n'est pas testable sans compte : je ne l'ai pas
simulé.