- update_url remis sur .../raw/branch/main/firefox-updates.json maintenant que le repo est public (raw URL accessible sans auth). - firefox-updates.json toujours à la racine, contient toutes les versions ; Firefox lit la liste et choisit la plus haute compatible. - Sha256 du .xpi v2026.5.41 mis à jour suite au rebuild. - CLAUDE.md : note sur le channel d'update simplifiée.
9.0 KiB
CLAUDE.md — Workflow de développement Planification
À lire avant toute modification. Ce fichier décrit le processus complet que Claude doit suivre quand Quentin demande une modification de l'extension.
Stack du projet
- Type : extension navigateur Manifest V3 (Chrome / Edge / Firefox 140+)
- Fonction : viewer du planning des techniciens DGNSI dans EasyVista
- Cible utilisateurs : techniciens DGNSI (Canton de Vaud)
- Auteur : Quentin Rouiller (email dans la mémoire Claude
user_role.md) - Repo Gitea : https://gitea.netaplaid.ch/FroSteel/Planification
- Config runtime :
chrome.storage.local["admin_config"](persiste entre updates)
Structure du repo
src/ # Sources de l'extension (chargées par le navigateur)
├── manifest.json # Manifest V3 — version YYYY.M.PATCH
├── background.js # Service worker
├── viewer.{html,js,css}
└── icons/
Autres/ # Méta + build
├── build.sh # Génère dist/{chromium,firefox}/, .zip, .xpi, met à jour firefox-updates.json
├── CHANGELOG.md # Synchronisé avec le CHANGELOG.md à la racine
├── README.md # Synchronisé avec le README.md à la racine
└── LICENSE
Builds/ # Artefacts distribués (Chromium/, Firefox/, .zip, .xpi)
dist/ # Sortie de build (gitignoré)
firefox-updates.json # Manifest d'auto-update Firefox (servi via update_url)
CLAUDE.md # Ce fichier
CHANGELOG.md # Source de vérité du changelog (lu par AMO + GitHub-style)
README.md # Source de vérité du README
NB : le repo Gitea utilise un layout flat à la racine pour le code source historique (
build.sh,README.md,CHANGELOG.md,LICENSE,firefox-updates.jsonà la racine, etsrc/pour le code). En local, le dossierAutres/contient une copie de ces fichiers — tu peux éditer l'un ou l'autre, mais quand tu pousses sur Gitea c'est la racine qui doit être mise à jour.
Workflow standard d'une demande de modification
Quand Quentin demande une nouvelle fonctionnalité ou un bugfix :
Phase 1 — Code + build local (toi seul, pas encore de push)
- Comprendre la demande, poser des questions si nécessaire avant d'écrire du code.
- Coder les modifications dans
src/(jamais directement dansdist/ouBuilds/). - Bumper la version : incrémenter le 3e chiffre dans
src/manifest.json(ex:2026.5.41→2026.5.42). Bump majeur (2e chiffre) seulement pour les refontes ; année (1er chiffre) au passage à 2027. - Mettre à jour le CHANGELOG (
Autres/CHANGELOG.mdET la copie racineCHANGELOG.md) en ajoutant une nouvelle entrée en haut. - Mettre à jour le README (
Autres/README.mdET racineREADME.md) si la nouvelle version touche aux fonctionnalités principales. - Builder :
./Autres/build.sh— ça produitdist/chromium/,dist/firefox/, le.zipet le.xpiavec la nouvelle version. - Annoncer à Quentin : "v2026.5.X buildée, recharge l'extension dans ton navigateur et teste". Décrire brièvement ce qui a changé visuellement.
- Attendre son retour. Tant qu'il n'a pas dit "OK", ne pas pousser sur Gitea. Si correction demandée, retourner à l'étape 2.
Phase 2 — Push sur Gitea (uniquement après validation explicite)
Quand Quentin dit "OK push" / "valide" / équivalent :
-
Préparer un clone Gitea à jour dans
/tmp/planif-push/(clone si pas présent, sinongit fetch origin && git reset --hard origin/main). -
Synchroniser :
rsync -a --delete /Users/quentin/Documents/Planning/src/ /tmp/planif-push/src/- Copier les versions racine de
CHANGELOG.md,README.md,LICENSE,build.sh(les versions racine sur Gitea, pas celles deAutres/)
-
Régénérer
firefox-updates.jsonà la racine du repo : ajouter l'entrée de la nouvelle version en haut de la listeupdates(les anciennes entrées restent — Firefox prend la version la plus haute parmi celles listées). Leupdate_linkpointe vers la release Gitea :https://gitea.netaplaid.ch/FroSteel/Planification/releases/download/vYYYY.M.PATCH/planification-vYYYY.M.PATCH-firefox.xpi. Leupdate_hashest calculé après signature AMO (cf. Phase 3).Le repo Gitea est public, donc l'URL fixe
update_url=https://gitea.netaplaid.ch/FroSteel/Planification/raw/branch/main/firefox-updates.jsonest accessible sans auth → Firefox peut le fetcher directement.build.shmaintient automatiquement ce JSON à chaque build (ajoute / met à jour l'entrée de la version courante). -
Commit + push :
cd /tmp/planif-push git add -A git commit -m "vYYYY.M.PATCH — <description courte>" git push origin main git tag -a vYYYY.M.PATCH -m "vYYYY.M.PATCH" git push origin vYYYY.M.PATCH -
Créer la release Gitea via l'API (POST
/repos/FroSteel/Planification/releases) avec :tag_name:vYYYY.M.PATCHname:vYYYY.M.PATCHbody: extrait du CHANGELOG (la section de cette version)
-
Uploader les binaires comme assets de la release :
dist/planification-vYYYY.M.PATCH-chromium.zipdist/planification-vYYYY.M.PATCH-firefox.xpi(NON signé pour le moment)
-
Mettre à jour le wiki Gitea :
- Page Versions : ajouter une entrée détaillée en haut (dérivée du CHANGELOG)
- Page Utilisation : si le changement modifie l'UX (ajout d'un bouton, d'une section admin, d'un comportement) → documenter
- Page Architecture : si nouvelles fonctions clés / nouvelle config persistée → documenter
Phase 3 — Signature Firefox (manuel, fait par Quentin)
C'est la seule étape que Claude ne peut pas automatiser :
- Quentin va sur https://addons.mozilla.org/developers/
- Submit New Version → uploade le
.xpinon signé de la release Gitea - Choisit "On your own" (Unlisted, self-distributed)
- Mozilla signe → Quentin télécharge le
.xpisigné
Quentin revient ensuite avec le .xpi signé et demande "remplace par le signé".
À ce moment Claude fait :
- Remplacer l'asset
.xpide la release Gitea (delete + upload) - Calculer le
sha256du.xpisigné - Mettre à jour
firefox-updates.json: ajouter"update_hash": "sha256:<hash>" - Commit + push le JSON mis à jour
À partir de ce moment, l'auto-update Firefox fonctionne pour cette version.
Token Gitea
⚠️ Le token API Gitea ne doit JAMAIS apparaître dans ce fichier ni dans le
repo Gitea. Il est stocké uniquement dans la mémoire Claude locale
(~/.claude/projects/-Users-quentin-Documents-Planning/memory/gitea_token.md,
hors repo). Si Claude perd la mémoire (nouvelle session non héritée),
demander à Quentin de redonner le token.
Header API à utiliser : Authorization: token <TOKEN> + User-Agent: curl/8.4.0
(le User-Agent évite que Cloudflare bloque les requêtes Python urllib).
Règles importantes
- Ne jamais hardcoder dans
src/: groupe EV, équipe, domaines, absences récurrentes. Tout passe paradmin_config. Les seuls hardcodes acceptables sont les filets de sécurité (DEFAULT_GROUP_ID, DEFAULT_EV_ORIGINS pour le 1er install). Cf. v2026.5.41 pour la migration complète. - Ne jamais pousser sur Gitea sans validation explicite de Quentin.
- Toujours bumper la version avant un push qui modifie le code.
- Toujours mettre à jour le CHANGELOG avant un push.
- Tags non touchés sur Gitea :
v1.0.0-v3.3.0,v4.1.x-v4.3.0,v5.0.0,v2026.5.27-v2026.5.32(ceux-là pointent vers du code reconstitué historique, ne jamais les bouger). - Force-push uniquement si Quentin le demande explicitement.
- L'email de l'auteur ne doit apparaître nulle part dans
src/ni dans les fichiers Markdown du repo (CLAUDE.md, README.md inclus). Il est stocké uniquement en mémoire Claude (user_role.md/gitea_token.md) et exposé obfusqué (entités HTML) sur la page wiki Contact.
Pages wiki Gitea
| Page | Contenu | Quand mettre à jour |
|---|---|---|
| Home | Pitch, contexte, démarrage rapide | Rarement |
| Utilisation | Guide complet pour l'utilisateur | À chaque changement UX |
| Versions | Historique détaillé des versions | À chaque release |
| Architecture | Doc technique (fonctions, config, structure) | À chaque ajout d'helper / changement structurel |
| Contact | Email obfusqué + lien Issue Gitea | Rarement |
URL de base wiki : https://gitea.netaplaid.ch/FroSteel/Planification/wiki/<NOM>
Endpoint API : /api/v1/repos/FroSteel/Planification/wiki/page/<NOM> (PATCH avec
content_base64).
Pour résumer ton rôle, Claude
Quentin demande une modif → tu codes → tu builds → il teste → il valide →
tu push tout (Gitea + wiki + firefox-updates.json). Plus tard il revient avec
le .xpi signé d'AMO → tu mets à jour la release et le update_hash du JSON.
Si tu hésites sur quoi faire à un moment, demande. Ne suppose pas.