fix: sync changelog to public/ and automate on build/dev (#37) #38

Merged
maximus merged 4 commits from fix/simpl-resultat-37-changelog into main 2026-03-11 21:26:07 +00:00
Collaborator

Fixes #37

Problem

The in-app changelog page reads from public/CHANGELOG*.md, but these files were last manually synced at version 0.6.3. Users see an incomplete version history.

Solution

  1. Sync now: copied current CHANGELOG.md and CHANGELOG.fr.md to public/
  2. Automate: added a syncChangelogs() function in vite.config.ts that copies the root changelogs to public/ on every dev or build start
  3. Belt and suspenders: added prebuild npm script (cp CHANGELOG*.md public/) for standalone builds
  4. Updated CLAUDE.md: removed the manual sync instruction, documented the automated approach

Test plan

  • npm test passes (17 tests)
  • Run npm run dev and verify public/CHANGELOG.md is up to date
  • Navigate to Settings → Changelog and confirm all versions appear
Fixes #37 ## Problem The in-app changelog page reads from `public/CHANGELOG*.md`, but these files were last manually synced at version 0.6.3. Users see an incomplete version history. ## Solution 1. **Sync now**: copied current `CHANGELOG.md` and `CHANGELOG.fr.md` to `public/` 2. **Automate**: added a `syncChangelogs()` function in `vite.config.ts` that copies the root changelogs to `public/` on every `dev` or `build` start 3. **Belt and suspenders**: added `prebuild` npm script (`cp CHANGELOG*.md public/`) for standalone builds 4. **Updated CLAUDE.md**: removed the manual sync instruction, documented the automated approach ## Test plan - [x] `npm test` passes (17 tests) - [ ] Run `npm run dev` and verify `public/CHANGELOG.md` is up to date - [ ] Navigate to Settings → Changelog and confirm all versions appear
medic-bot added 1 commit 2026-03-11 12:03:23 +00:00
The in-app changelog page reads from public/CHANGELOG*.md which were
stale (last synced at 0.6.3). Add automatic sync via Vite config
(runs on dev/build start) and npm prebuild script so public/ copies
are always up to date without manual intervention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Collaborator

Reviewer automatique — needs-simplify

Le fix résout l'issue : les entrées manquantes sont ajoutées et l'automatisation empêche la récurrence. Cependant, il y a un double mécanisme redondant (prebuild npm + vite config) qui fait exactement la même chose, et le script prebuild introduit une dépendance plateforme inutile.

Suggestions de simplification

  • package.json : Le script prebuild est complètement redondant. syncChangelogs() dans vite.config.ts s'exécute déjà au début de vite build (appelé par build). Le prebuild copie les fichiers, puis vite.config.ts les recopie immédiatement après. Supprimer prebuild — le mécanisme Vite couvre déjà dev ET build, et il est cross-platform (pas de cp Unix).
  • CLAUDE.md : La doc mentionne que le prebuild npm script 'handles standalone builds', ce qui justifie le doublon. Si le prebuild est supprimé, mettre à jour cette ligne pour refléter que seul vite.config.ts gère la synchro.
  • vite.config.ts : Le catch vide (catch {}) avale silencieusement les erreurs. Si CHANGELOG.md n'existe pas, l'app affichera un contenu périmé sans aucun avertissement. Au minimum, ajouter un console.warn pour signaler le fichier manquant.
## Reviewer automatique — needs-simplify Le fix résout l'issue : les entrées manquantes sont ajoutées et l'automatisation empêche la récurrence. Cependant, il y a un double mécanisme redondant (prebuild npm + vite config) qui fait exactement la même chose, et le script prebuild introduit une dépendance plateforme inutile. ### Suggestions de simplification - **package.json** : Le script `prebuild` est complètement redondant. `syncChangelogs()` dans vite.config.ts s'exécute déjà au début de `vite build` (appelé par `build`). Le prebuild copie les fichiers, puis vite.config.ts les recopie immédiatement après. Supprimer `prebuild` — le mécanisme Vite couvre déjà dev ET build, et il est cross-platform (pas de `cp` Unix). - **CLAUDE.md** : La doc mentionne que le `prebuild` npm script 'handles standalone builds', ce qui justifie le doublon. Si le `prebuild` est supprimé, mettre à jour cette ligne pour refléter que seul vite.config.ts gère la synchro. - **vite.config.ts** : Le catch vide (`catch {}`) avale silencieusement les erreurs. Si CHANGELOG.md n'existe pas, l'app affichera un contenu périmé sans aucun avertissement. Au minimum, ajouter un `console.warn` pour signaler le fichier manquant.
maximus added 1 commit 2026-03-11 16:03:54 +00:00
syncChangelogs() in vite.config.ts already handles copying changelogs
to public/ on dev/build start. The prebuild npm script was redundant
and introduced a platform dependency (cp command).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Collaborator

Reviewer automatique — needs-fix

Bug critique : la PR ajoute les entrées 0.6.4/0.6.5 dans public/CHANGELOG*.md, mais syncChangelogs() copie depuis la racine vers public/. Au prochain build/dev, les fichiers racine (non modifiés par cette PR) écraseront les ajouts dans public/. Le fix s'annule lui-même.

Suggestions de simplification

  • vite.config.ts : Le calcul manuel de __dirname (dirname + fileURLToPath + import.meta.url) peut être remplacé par import.meta.dirname disponible nativement en Node 21.2+. Si la version Node du projet le supporte, ça élimine 2 imports et 1 ligne.

Problèmes détectés

  • public/CHANGELOG.md:5 [high] Les entrées 0.6.4 et 0.6.5 sont ajoutées ici dans public/, mais syncChangelogs() copie les fichiers RACINE (CHANGELOG.md, CHANGELOG.fr.md) vers public/ à chaque dev/build. Si les fichiers racine ne contiennent pas ces entrées, elles seront écrasées immédiatement. Si les fichiers racine les contiennent déjà, ces modifications dans public/ sont du bruit inutile. Dans les deux cas, c'est incorrect : les entrées doivent être ajoutées dans les fichiers RACINE (CHANGELOG.md et CHANGELOG.fr.md), pas dans public/.
  • public/CHANGELOG.fr.md:5 [high] Même problème que public/CHANGELOG.md — les ajouts seront écrasés par syncChangelogs() qui copie depuis la racine.
## Reviewer automatique — needs-fix Bug critique : la PR ajoute les entrées 0.6.4/0.6.5 dans public/CHANGELOG*.md, mais syncChangelogs() copie depuis la racine vers public/. Au prochain build/dev, les fichiers racine (non modifiés par cette PR) écraseront les ajouts dans public/. Le fix s'annule lui-même. ### Suggestions de simplification - **vite.config.ts** : Le calcul manuel de __dirname (dirname + fileURLToPath + import.meta.url) peut être remplacé par import.meta.dirname disponible nativement en Node 21.2+. Si la version Node du projet le supporte, ça élimine 2 imports et 1 ligne. ### Problèmes détectés - **public/CHANGELOG.md:5** [high] Les entrées 0.6.4 et 0.6.5 sont ajoutées ici dans public/, mais syncChangelogs() copie les fichiers RACINE (CHANGELOG.md, CHANGELOG.fr.md) vers public/ à chaque dev/build. Si les fichiers racine ne contiennent pas ces entrées, elles seront écrasées immédiatement. Si les fichiers racine les contiennent déjà, ces modifications dans public/ sont du bruit inutile. Dans les deux cas, c'est incorrect : les entrées doivent être ajoutées dans les fichiers RACINE (CHANGELOG.md et CHANGELOG.fr.md), pas dans public/. - **public/CHANGELOG.fr.md:5** [high] Même problème que public/CHANGELOG.md — les ajouts seront écrasés par syncChangelogs() qui copie depuis la racine.
maximus added 1 commit 2026-03-11 17:01:57 +00:00
- Revert public/ changelog changes (syncChangelogs copies from root)
- Replace manual __dirname with import.meta.dirname

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Collaborator

Reviewer automatique — needs-fix

Problème critique : les fichiers racine CHANGELOG.md et CHANGELOG.fr.md ne sont PAS dans le diff. Si ces fichiers n'ont pas les entrées 0.6.4/0.6.5, le syncChangelogs() va écraser les ajouts dans public/ au prochain build. De plus, les fichiers public/CHANGELOG*.md devraient être dans .gitignore puisqu'ils sont maintenant auto-générés.

Suggestions de simplification

  • vite.config.ts : syncChangelogs() s'exécute une seule fois à l'évaluation du config. En mode dev, si quelqu'un modifie le CHANGELOG racine, public/ ne sera pas mis à jour sans redémarrer. Utiliser un plugin Vite avec le hook buildStart serait plus idiomatique et gèrerait aussi le rebuild : { name: 'sync-changelogs', buildStart() { syncChangelogs(); } }. Alternative encore plus simple : utiliser l'option publicDir de Vite ou un plugin vite-plugin-static-copy pour éviter la copie manuelle.

Problèmes détectés

  • vite.config.ts:8 [high] Les fichiers source (racine) CHANGELOG.md et CHANGELOG.fr.md ne figurent pas dans le diff de cette PR. syncChangelogs() copie de la racine vers public/. Si les fichiers racine n'ont pas les entrées 0.6.4 et 0.6.5, le prochain build/dev écrasera les ajouts faits dans public/. Il faut soit : (a) confirmer que les fichiers racine sont déjà à jour (et alors les changements dans public/ sont redondants), soit (b) ajouter les entrées dans les fichiers racine plutôt que dans public/.
  • public/CHANGELOG.md:1 [high] Les fichiers public/CHANGELOG*.md sont maintenant auto-générés par syncChangelogs() mais restent trackés dans git. Cela va créer un working tree 'dirty' après chaque build si la racine diverge, et des conflits de merge inutiles. Il faut ajouter public/CHANGELOG.md et public/CHANGELOG.fr.md dans .gitignore, et retirer ces fichiers du suivi git (git rm --cached).
  • vite.config.ts:12 [medium] Le catch vide avale TOUTES les erreurs silencieusement, pas seulement ENOENT (fichier inexistant). Une erreur de permissions (EACCES) ou de disque plein serait ignorée, rendant le debug difficile. Filtrer sur le code d'erreur : catch (e) { if (e.code !== 'ENOENT') throw e; }
## Reviewer automatique — needs-fix Problème critique : les fichiers racine CHANGELOG.md et CHANGELOG.fr.md ne sont PAS dans le diff. Si ces fichiers n'ont pas les entrées 0.6.4/0.6.5, le syncChangelogs() va écraser les ajouts dans public/ au prochain build. De plus, les fichiers public/CHANGELOG*.md devraient être dans .gitignore puisqu'ils sont maintenant auto-générés. ### Suggestions de simplification - **vite.config.ts** : syncChangelogs() s'exécute une seule fois à l'évaluation du config. En mode dev, si quelqu'un modifie le CHANGELOG racine, public/ ne sera pas mis à jour sans redémarrer. Utiliser un plugin Vite avec le hook buildStart serait plus idiomatique et gèrerait aussi le rebuild : { name: 'sync-changelogs', buildStart() { syncChangelogs(); } }. Alternative encore plus simple : utiliser l'option publicDir de Vite ou un plugin vite-plugin-static-copy pour éviter la copie manuelle. ### Problèmes détectés - **vite.config.ts:8** [high] Les fichiers source (racine) CHANGELOG.md et CHANGELOG.fr.md ne figurent pas dans le diff de cette PR. syncChangelogs() copie de la racine vers public/. Si les fichiers racine n'ont pas les entrées 0.6.4 et 0.6.5, le prochain build/dev écrasera les ajouts faits dans public/. Il faut soit : (a) confirmer que les fichiers racine sont déjà à jour (et alors les changements dans public/ sont redondants), soit (b) ajouter les entrées dans les fichiers racine plutôt que dans public/. - **public/CHANGELOG.md:1** [high] Les fichiers public/CHANGELOG*.md sont maintenant auto-générés par syncChangelogs() mais restent trackés dans git. Cela va créer un working tree 'dirty' après chaque build si la racine diverge, et des conflits de merge inutiles. Il faut ajouter public/CHANGELOG.md et public/CHANGELOG.fr.md dans .gitignore, et retirer ces fichiers du suivi git (git rm --cached). - **vite.config.ts:12** [medium] Le catch vide avale TOUTES les erreurs silencieusement, pas seulement ENOENT (fichier inexistant). Une erreur de permissions (EACCES) ou de disque plein serait ignorée, rendant le debug difficile. Filtrer sur le code d'erreur : catch (e) { if (e.code !== 'ENOENT') throw e; }
maximus added 1 commit 2026-03-11 18:04:39 +00:00
- Restore Unreleased entries in root CHANGELOG files (were incorrectly removed)
- Add public/CHANGELOG*.md to .gitignore (auto-generated by syncChangelogs)
- Remove public/CHANGELOG*.md from git tracking
- Fix indentation in vite.config.ts return block

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Collaborator

Reviewer automatique — approved

Le fix est correct et répond bien aux commentaires du round 1. Les fichiers racine contiennent maintenant toutes les entrées, le sync automatique via Vite remplace la copie manuelle, les fichiers public/ sont supprimés du repo et ajoutés au .gitignore, et la redondance prebuild a été éliminée.

Suggestions de simplification

  • vite.config.ts : Le catch vide avale toutes les erreurs (permissions, disque plein, etc.), pas seulement ENOENT. Envisager de filtrer sur err.code === 'ENOENT' et de logger les autres erreurs, pour éviter un débogage pénible si la copie échoue silencieusement pour une raison inattendue.
## Reviewer automatique — approved Le fix est correct et répond bien aux commentaires du round 1. Les fichiers racine contiennent maintenant toutes les entrées, le sync automatique via Vite remplace la copie manuelle, les fichiers public/ sont supprimés du repo et ajoutés au .gitignore, et la redondance prebuild a été éliminée. ### Suggestions de simplification - **vite.config.ts** : Le catch vide avale toutes les erreurs (permissions, disque plein, etc.), pas seulement ENOENT. Envisager de filtrer sur err.code === 'ENOENT' et de logger les autres erreurs, pour éviter un débogage pénible si la copie échoue silencieusement pour une raison inattendue.
maximus merged commit 61a5b2e40d into main 2026-03-11 21:26:07 +00:00
maximus deleted branch fix/simpl-resultat-37-changelog 2026-03-11 21:26:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#38
No description provided.