Corrigé · poussé · 18/09/2026

Extension TEETCHE — le bug du domaine

Reproduit avant d'être corrigé, vérifié après · sur la vraie production

2 commits sur main 317 tests verts 13/13 contrôles bout en bout paquet v1.1.0 prêt

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.

ÉtatMarqueur poséBouton
Avant — domaine de la prod inconnuaucundésactivé
Sans extension (comportement normal)aucundésactivé
Après — sur la fiche d'inscriptionprésentactif
Après — sur /connexion et l'accueilaucun
Avant correction
Avant — le bouton « Envoyer vers TEETCHE » grisé avec sa phrase d'explication, extension pourtant installée.
Après correction
Après — le bouton est actif, l'extension est reconnue par la fiche.

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.

L'ordre est critique. Le garde passe avant la pose du marqueur. L'inverse ferait croire à la fiche que l'extension est présente sur des pages qui ne la concernent pas — elle activerait un bouton que personne n'écoute. Un test verrouille cet ordre.

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-fouRôle
tests/unit/extension-manifest.test.tsRefuse 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êmePorte la raison, à l'endroit exact où l'erreur serait commise.
docs/EXTENSION-TEETCHE.md §9Explique 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.

Télécharger le paquet →

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é.

Il reste une étape que je ne peux pas faire d'ici. Le correctif n'atteint l'associé que s'il remplace le contenu de son dossier et recharge l'extension dans 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é.