Commit Graph
129 Commits
Author SHA1 Message Date
IliesAllaliandClaude Opus 5.5 1caa090efd API : réordonner une fratrie en une transaction
PUT /trees/:id/links/order réécrit le displayOrder des liens parent-enfant
d'une fratrie, dans l'ordre reçu. Administrateurs seulement ; chaque lien
doit appartenir à l'arbre et à son enfant, et les enfants partager au moins
un parent. Journalisé (children_reordered).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:51:37 +02:00
IliesAllaliandClaude Opus 5.5 8574dfed9e Retour au placement automatique : abandon du placement libre
Le mainteneur préfère un réordonnancement des frères et soeurs au placement
libre (coordonnées enregistrées). Ce commit annule le glisser libre, ses
corrections, la migration des coordonnées et le bouton de remise à zéro ;
le réordonnancement arrive dans les commits suivants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:46:28 +02:00
IliesAllaliandClaude Opus 5.5 8fa2808b5d fix(galaxy): un deuxième doigt annule le glisser d'une personne
Au passage à deux doigts (ou en cas d'interruption tactile), le glisser en
cours est annulé et la personne revient à sa place : plus d'enregistrement
pendant un pincement. Un doigt qui reste après un pincement ne saisit plus
de personne, il ne fait que déplacer l'arbre.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:52 +02:00
IliesAllaliandClaude Opus 5.5 b27b5e9737 feat(arbre): rétablir la disposition automatique depuis les paramètres
Onglet Avancé des paramètres de l'arbre (admin) : une action « Rétablir la
disposition automatique », visible seulement s'il existe des positions
manuelles, avec confirmation. Elle appelle la route admin
/trees/:id/layout/reset puis recharge le graphe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:52 +02:00
IliesAllaliandClaude Opus 5.5 6ff99337d2 fix(arbre): place envoyée visible jusqu'à la relecture, erreurs d'enregistrement affichées
- Contributeur : après l'envoi, la place proposée reste à l'écran comme un
  nom modifié, au lieu de revenir à l'ancienne place jusqu'à l'approbation.
- Admin : un échec d'enregistrement d'une personne est signalé par un toast
  d'erreur, et le brouillon est conservé au lieu d'être vidé.
- Gestionnaire handleResetTreeLayout (le bouton arrive dans le commit suivant).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:46 +02:00
IliesAllaliandClaude Opus 5.5 697c0e3897 feat(arbre): « Position dans l'arbre » en relecture des contributions
Une contribution qui déplace une personne affiche désormais la ligne
« Position dans l'arbre » (Déplacée, Replacée automatiquement), sans
coordonnées brutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:23 +02:00
IliesAllaliandClaude Opus 5.5 de897070db fix(arbre): les positions du brouillon restent toutes à l'écran
La liste des positions manuelles était mise en cache sur un hasDraft et
une fonction qui ne changent plus après le premier glisser : une seule
personne (la première) restait placée. Le brouillon expose maintenant un
draftRevision incrémenté à chaque écriture, et le calcul des positions
passe par buildManualPositionOverrides (testé).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:13:18 +02:00
IliesAllaliandClaude Opus 5.5 d17cee20df feat(arbre): rétablir la disposition automatique
Route admin POST /trees/:id/layout/reset : remet layoutX/layoutY à null
pour toutes les personnes de l'arbre, dans une transaction, avec une
entrée de journal (tree_layout_reset). Documentée dans l'OpenAPI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:09:11 +02:00
IliesAllaliandClaude Opus 5.5 420bda5e38 fix(arbre): bornes des positions et conflit de relecture
- Les coordonnées de disposition sont bornées à ±1 000 000 (PATCH personne,
  modification en session de contribution, OpenAPI).
- Un déplacement par le propriétaire ne met plus en conflit les
  contributions en attente sur la même personne : layoutX/layoutY sont
  exclus de la comparaison de conflit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:08:50 +02:00
py5932 43441f31e1 Ajout de la fonctionnalité drag and drop 2026-10-14 23:25:11 +02:00
IliesAllaliandClaude Haiku 5.5 3a5fa42670 docs(readme): nom de l'auteur relié au portfolio iliesallali.design
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-13 18:41:19 +02:00
IliesAllali abee3c6e19 Merge pull request #57 from IliesAllali/docker/healthcheck-premier-lancement
fix(docker): 120 s de marge au healthcheck de l'API au premier lancement
2026-10-11 20:42:18 +02:00
IliesAllaliandClaude Opus 5.5 a91474f0e6 fix(docker): 120 s de marge au healthcheck de l'API au premier lancement
Les migrations Prisma passent avant que l'API réponde. Avec 30 s, le conteneur
web, qui attend une API saine, abandonnait au premier docker compose up
(signalé sur r/GenealogieFR le 11/10).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:38:04 +02:00
IliesAllali 8103154e02 Merge pull request #56 from IliesAllali/produit/premiere-photo
Premières photos : import dès la création, photos du logiciel retrouvées, premiers visages
2026-10-11 18:59:12 +02:00
IliesAllaliandClaude Opus 5.5 83443ac9dc Premières photos : import dès la création, photos du logiciel retrouvées, premiers visages
- Création d'arbre : « J'ai déjà un arbre » importe le .ged sans fiche « vous » en double.
- Import GEDCOM : lit les photos citées (OBJE / FILE, en ligne ou par renvoi, _PRIM d'abord)
  et renvoie leur chemin ; rien n'est gardé côté serveur.
- Fenêtre « Il manque les visages » après un import : dossier des photos apparié par nom de
  fichier, cinq visages à demander (famille de « Moi », sinon les plus jeunes).
- Portrait vide chez le propriétaire : cadre cliquable sur la fiche hors édition, « + photo »
  au survol sur l'arbre.
- Photos de plus de 5 Mo réduites à 2000 px avant l'envoi ; portraits à 120 envois par minute.
- PostHog : gedcom_imported, portraits_bulk_placed, portrait_added (effectifs arrondis).
- Corrigé : une union à un seul parent connu relie ses enfants à ce parent, sous un seul
  « Inconnu », au lieu de les laisser sans lien.
- Corrigé : réimporter un GEDCOM reprend les personnes, unions et liens déjà présents au lieu
  de tout doubler.

Recette locale (vraie API, vraie base) : 29/29 sur le parcours photos, 47/47 sur la recette
de non-régression des parcours. Tests 123 serveur, 107 app, lint et build propres.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:54:56 +02:00
IliesAllali 2a510bf474 Merge pull request #55 from IliesAllali/docker/api-upstream
Docker : le front lit l'adresse de l'API dans API_UPSTREAM
v1.0.3
2026-10-10 16:23:10 +02:00
IliesAllaliandClaude Opus 5.5 7becb821a3 CHANGELOG : 1.0.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:18:02 +02:00
IliesAllaliandClaude Opus 5.5 333a11e84b Docker : le front lit l'adresse de l'API dans API_UPSTREAM
Le conteneur web relayait l'API vers `api:4000`, écrit en dur. Sur un réseau
partagé entre plusieurs applications (Umbrel), ce nom peut appartenir à une autre.
L'adresse vient maintenant de API_UPSTREAM, `api:4000` par défaut : rien ne
change pour les installations existantes. L'image tout-en-un garde sa propre
configuration. La CI lance un second front qui joint l'API par le nom de son
conteneur et repasse le test de fumée.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:15:46 +02:00
IliesAllali b774b1dff8 Merge pull request #53 from IliesAllali/docker/aio
Docker : image tout-en-un pour Unraid et les NAS
2026-10-09 17:53:04 +02:00
IliesAllaliandClaude Opus 5.5 30d015f083 Docker tout-en-un : journal sur stderr, il polluait le mot de passe lu par $(secret ...)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:51:29 +02:00
IliesAllaliandClaude Opus 5.5 cea8d1db8f Docker tout-en-un : journal PostgreSQL dans le dossier de la base (écriture refusée à la racine de /data)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:46:58 +02:00
IliesAllaliandClaude Opus 5.5 91abe47614 Docker : image tout-en-un pour Unraid et les NAS
Une seule image (PostgreSQL 15, API, nginx) qui crée sa base et ses secrets dans /data au premier
démarrage. Publiée par images.yml sous ghcr.io/iliesallali/parenthese-aio, testée en CI (démarrage
à vide, redémarrage, test de fumée).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:42:14 +02:00
IliesAllali 5a11d00af9 Merge pull request #38 from IliesAllali/dependabot/npm_and_yarn/landing/landing-minor-patch-0c4d63a201
Bump posthog-js from 1.435.8 to 1.438.0 in /landing in the landing-minor-patch group across 1 directory
2026-10-09 17:04:54 +02:00
IliesAllali c564ebeb05 Merge pull request #52 from IliesAllali/dependabot/npm_and_yarn/frontend/frontend-minor-patch-8178106ae4
Bump the frontend-minor-patch group across 1 directory with 2 updates
2026-10-09 17:04:51 +02:00
dependabot[bot] ada823ab47 Bump the frontend-minor-patch group across 1 directory with 2 updates
Bumps the frontend-minor-patch group with 2 updates in the /frontend directory: [posthog-js](https://github.com/PostHog/posthog-js) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `posthog-js` from 1.436.0 to 1.438.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.436.0...posthog-js@1.438.0)

Updates `vite` from 8.3.2 to 8.3.3
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.3/packages/vite)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-version: 1.438.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: frontend-minor-patch
- dependency-name: vite
  dependency-version: 8.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: frontend-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-09 13:23:56 +00:00
dependabot[bot] 2e638d8a43 Bump posthog-js
Bumps the landing-minor-patch group with 1 update in the /landing directory: [posthog-js](https://github.com/PostHog/posthog-js).


Updates `posthog-js` from 1.435.8 to 1.438.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.435.8...posthog-js@1.438.0)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-version: 1.435.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: landing-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-09 13:23:34 +00:00
IliesAllaliandClaude Opus 5.5 52fff2b037 Dépendances du 09/10 et version 1.0.2
fast-jwt 6.3.4 (cache du vérificateur, jetons expirés sans iat), source-map-js 1.2.2 et
postcss-selector-parser 7.1.6 forcé sous Tailwind 3 (CSS produit identique octet pour octet).
Landing en Vite 8 et plugin-react 6, mêmes navigateurs cibles que le front, rendu comparé à
l'écran au build Vite 7 en 1920 et 390 px. Groupes mineurs front (#50) et landing (#38).
Reprend #38, #41, #46, #49, #50, #51. CHANGELOG 1.0.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.2
2026-10-09 15:21:08 +02:00
IliesAllaliandClaude Opus 5.5 3c263a708d Docker : images API et front publiées sur ghcr.io, installation sans cloner le dépôt
Après chaque CI verte sur main (et sur un tag vX.Y.Z), le workflow Images construit
parenthese-api et parenthese-web en amd64 et arm64, les pousse sur ghcr.io, puis teste
une installation dans un dossier vide avec docker-compose.yml et .env pour seuls fichiers.
docker-compose.yml tire ces images (PARENTHESE_VERSION, latest par défaut) et garde le
build depuis les sources en repli. Demande faite sur r/GenealogieFR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:24:19 +02:00
IliesAllali 4bdf7aa1f3 Merge pull request #43 from IliesAllali/dependabot/npm_and_yarn/frontend/globals-17.13.0
Bump globals from 16.5.0 to 17.13.0 in /frontend
2026-10-08 16:45:38 +02:00
IliesAllali 24e28e98b8 Merge pull request #45 from coutadeurf/fix/random-uuid-insecure-context
Correction : création d'arbre impossible en HTTP simple
2026-10-08 16:45:22 +02:00
Fabrice Coutadeur ebba0c8ce8 Correction : création d'arbre impossible en HTTP simple
crypto.randomUUID n'est exposé par le navigateur qu'en contexte sécurisé
(HTTPS ou localhost). Servie en HTTP simple, l'app plantait dans
generateSecurePassword à l'étape de création de l'arbre.

Repli sur crypto.getRandomValues, disponible partout, qui produit le
même UUID v4 sans tirets.

Signed-off-by: Fabrice Coutadeur <coutadeurf@gmail.com>
2026-10-08 12:00:17 +02:00
dependabot[bot] e49467059e Bump globals from 16.5.0 to 17.13.0 in /frontend
Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to 17.13.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.5.0...v17.13.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.13.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-08 01:15:29 +00:00
IliesAllaliandClaude Opus 5.5 0365a71618 Suivi avant le Show HN : démo, source jusqu'à l'inscription, un seul clic CTA
- demo_opened (une fois par chargement, visiteur sans compte) et demo_interaction (personne, média, recherche, édition, création d'arbre ; une fois par type, sans contenu)
- Source d'arrivée gardée sur l'appareil (?source=hn) et jointe à account_screen_viewed et account_registered ; la landing transmet la vraie source au CTA et à l'iframe de démo au lieu de source=landing
- Plus de remise à zéro PostHog à chaque ouverture anonyme (effaçait le visiteur de la landing), seulement à la déconnexion
- Landing : un seul événement signup_cta_clicked (hero_cta_clicked retiré, plus utilisé par le funnel), envoyé avant la navigation sans sendBeacon (bloqué par Brave)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:41:21 +02:00
IliesAllaliandClaude Opus 5.5 10f1fc5d14 Typo : plus de mot ni de signe seul en fin de ligne
- text-wrap-style pretty sur les paragraphes, listes, légendes et chapôs, balance sur les titres
  (landing, guides statiques, base pz.css de l'app). Longhand pour ne pas réactiver le retour
  à la ligne là où white-space: nowrap est posé. Les noms de l'arbre sont sur le canvas, non touchés.
- Espaces insécables du français dans le texte visible : fine insécable avant ? ! ;,
  insécable avant : et dans les guillemets, entre un nombre et son unité (Mo, Go, €, dpi).
  Landing (i18n.js, bloc fr hors meta) et pages guides FR (corps de page, hors script).
- App : frenchTypography() appliquée par t() en français, avant le remplacement des variables ;
  le dictionnaire anglais reste indexé sur le français tel qu'écrit. Tests mis à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 17:06:44 +02:00
IliesAllaliandClaude Opus 5.5 d7c86b5ae8 docs(readme): what each backup command saves, GEDCOM is not a backup
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 15:14:53 +02:00
IliesAllaliandClaude Opus 5.5 b41eb7c2ec Landing : capture de l'arbre de démo sous le bouton « Entrer dans la démo »
Avant le chargement de l'iframe, le bloc #demo n'affichait qu'un fond papier
et le bouton n'apparaissait qu'une fois la démo chargée. Une capture fixe de
l'arbre (FR/EN, grand écran et mobile, WebP 29 à 69 Ko, même origine) sert
maintenant de fond, et le bouton est visible dès l'arrivée sur la section.
Le clic garde le même comportement ; s'il arrive avant la fin du chargement,
le symbole de chargement s'affiche par-dessus la capture.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:25:16 +02:00
IliesAllaliandClaude Opus 5.5 aeb6db9036 Landing : aplats de la démo et de l'appel final en terracotta vive, démo sans ombre
Choix A de Patch le 02/10/2026 sur la planche des trois terracotta : fond
#D2694A (--a500) sur .sec-demo et .final à la place des roses --a50 et
--peche-50, titres et textes en blanc, bouton final blanc à texte encre.
Le cadre de la démo perd son ombre portée, il garde sa bordure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 17:15:05 +02:00
IliesAllaliandClaude Opus 5.5 8b50356c4b Démo : vraie vidéo d'époque pour le mariage de Simone, vidéos de remplacement retirées
Le souvenir « Mariage Simone 1943 » ouvrait Big Buck Bunny sur YouTube.
Remplacé par 25 s des actualités Polygoon « Bruiloft te Giethoorn » (1947,
Beeld en Geluid via Open Beelden, CC BY-SA 3.0 NL), sans le son, en H.264
pour Safari, servi par le site (media-src 'self'). Crédit dans CREDITS.md
et sources.json. Les trois autres vidéos YouTube de remplacement de la démo
(Témoignage filmé 1960, Anniversaire 2020, Interview archive radio) sont
retirées.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 14:55:05 +02:00
IliesAllaliandClaude Opus 5.5 75922f3ed3 Sécurité 1.0.1 : audit indépendant de la 1.0
- Vidéo piégée : l'expression régulière de position était quadratique, un faux MP4 de 2 Mo figeait l'API (bornée, linéaire)
- Sessions émises avant le 01/10/2026 refusées (SESSIONS_NOT_BEFORE) : des sessions ont fuité dans les annotations et les journaux jusqu'à la 1.0
- Contributions : l'« avant » montré au propriétaire vient de la base ; une suppression approuvée part en cascade (unions, liens, souvenirs, portrait, fichiers)
- Mot de passe de partage : essai compté avant bcrypt, comparaisons une par une, changement et rattachement dans une transaction
- Quota mesuré sur le disque, 10 arbres par compte, corps à 1 Mo hors envois, bornes sur annotations, contributions et GEDCOM
- GIF réencodés ; anciennes propositions d'annotation sans adresse stockée ; clé d'exemple refusée sans NODE_ENV
- Déploiement du commit validé par la CI, clé d'hôte obligatoire ; nginx : X-Forwarded-For écrasé, version masquée, journal sans query string
- PostHog verrouillé dans le code, sans script externe ; CSP sans *.posthog.com ; sauvegardes hors serveur chiffrées par défaut

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.1
2026-10-01 12:19:41 +02:00
IliesAllaliandClaude Opus 5.5 ee7d2809fc Front : mêmes navigateurs qu'avec Vite 7
Vite 8 relève sa cible par défaut à Safari 16.4 et Chrome 111. La famille ouvre souvent l'arbre sur un vieil iPad ou un ancien téléphone : la cible reste celle de Vite 7 (Chrome et Edge 107, Firefox 104, Safari 16.0), valeurs lues dans le guide de migration de Vite 8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:13:19 +02:00
IliesAllali 2f9fa742fa Intègre deps/landing-infra 2026-10-01 11:56:15 +02:00
IliesAllali 6a4b8d9539 Intègre deps/frontend 2026-10-01 11:56:15 +02:00
IliesAllali 0e055a34f7 Intègre deps/backend 2026-10-01 11:56:15 +02:00
IliesAllaliandClaude Opus 5.5 e145cad509 Vitest 5.0 (Dependabot #37)
Vitest 5 demande Vite 6.4 ou plus et Node 22.12 ou plus (Vite 8.3 et Node 24 ici). Aucun test n'utilise vi.mock, bench, describe.sequential, toThrow('') ni d'assertion asynchrone non attendue, les points touchés par le guide de migration ; clearMocks activé par défaut est sans effet sans mock. 97 tests passent, comme avant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:20:22 +02:00
IliesAllaliandClaude Opus 5.5 431eb06a87 ESLint 10 et @eslint/js 10 (Dependabot #36)
La PR montait @eslint/js seul, dont la config recommandée ajoute no-useless-assignment, no-unassigned-vars et preserve-caught-error. eslint passe aussi en 10 (configuration à plat déjà en place, aucun commentaire eslint-env, Node 24) ; eslint-plugin-react-hooks 7.1 et eslint-plugin-react-refresh 0.5 la déclarent prise en charge. Les trois signalements de no-useless-assignment étaient fondés : une valeur initiale jamais lue, chaque branche suivante l'écrase ou quitte la fonction (libellé de parenté, contenu JSON d'une photo ou d'un tracé posé sur l'arbre). Valeur initiale retirée, comportement inchangé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:19:27 +02:00
IliesAllaliandClaude Opus 5.5 bfa05ddffa Vite 8.3 et @vitejs/plugin-react 6.1 (Dependabot #35)
La PR seule ne pouvait pas s'installer : @vitejs/plugin-react 5 n'accepte pas Vite 8 (ERESOLVE à npm ci, en CI comme dans l'image Docker). Les deux montent ensemble : Vite 8 construit avec Rolldown et Oxc, la 6 du plugin abandonne Babel, dont ce projet n'utilisait aucune option. Rien à migrer dans vite.config.js (ni rollupOptions, ni esbuild, ni manualChunks). Le build garde un seul script module externe dans index.html, sans eval ni script en ligne, compatible avec la CSP ; les polices auto-hébergées sortent avec les mêmes empreintes. Changements à connaître : CSS minifiée par Lightning CSS, cible navigateur par défaut relevée (Safari 16.4, Chrome et Edge 111, Firefox 114), Node 20.19 ou 22.12 minimum (Docker et CI en Node 24).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:17:53 +02:00
IliesAllaliandClaude Opus 5.5 f509bc1751 lucide-react 1.49 (Dependabot #33) : tracés de l'arbre lus dans @lucide/icons
La version 1 ne publie plus dist/esm/icons/*.js ni __iconNode : renderers.js importait ces fichiers internes pour dessiner les vignettes carte et GPX sur le canvas, d'où l'échec du build (CI Frontend et image Docker). Les tracés viennent maintenant de @lucide/icons, le paquet officiel des données d'icônes (export nommé, propriété node), à la même version que lucide-react. Les 47 icônes utilisées existent toujours sous leur nom (Edit3, HelpCircle, MoreHorizontal, Trash2 restent des alias) et rendent un SVG identique à la 0.564, aria-hidden compris. Les icônes de marque retirées en v1 ne sont pas utilisées ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:16:33 +02:00
IliesAllaliandClaude Opus 5.5 b33ef1e61e API : TypeScript 7.0.2, compilateur natif
Reprend la PR Dependabot #30. La 7.0 adopte les défauts de la 6.0 et rend fatales ses options dépréciées : rien de cela ne touche tsconfig.json, qui fixait déjà rootDir (src), types (["node"]), module et moduleResolution NodeNext, target ES2022, strict, esModuleInterop à true. Le JavaScript produit dans dist/ est identique octet pour octet à celui de TypeScript 5.9.3 (diff -r vide sur les 27 fichiers). La 7.0 n'a plus d'API JavaScript, mais aucun outil du backend ne s'en sert : vitest et tsx ne passent pas par tsc, Prisma ne lit que le numéro de version et tolère son absence. Binaires natifs dans le package-lock pour Linux x64 (CI, Docker, VPS) et Windows. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:15:12 +02:00
IliesAllaliandClaude Opus 5.5 ca4138ebc2 API : dotenv 18.0.5, démarrage sans ligne « injected env »
Reprend la PR Dependabot #34 (18.0.5, correctif publié depuis). Depuis la 17.0.0, config() écrit « ◇ injected env (N) from .env » à chaque démarrage, même sans fichier .env (vu avec la 18.0.5 : « injected env (0) »), ce qui glisse une ligne hors format dans les journaux JSON de production : config({ quiet: true }). Les autres ruptures de la 18.0.0 (préchargement -r dotenv/config retiré, .env.vault retiré) ne touchent pas Parenthèse, qui n'appelle que config() dans config/env.ts. La CLI Prisma garde sa propre copie de dotenv 16. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:13:50 +02:00
IliesAllaliandClaude Opus 5.5 f6fb6540e7 API : @fastify/cors 11.3.0, méthodes annoncées gardées
Reprend la PR Dependabot #32. Rupture de la 11.0.0 : la pré-vérification CORS n'annonce plus par défaut que GET, HEAD et POST, un navigateur d'une autre origine aurait refusé les PUT, PATCH et DELETE de l'API. La liste d'avant est maintenant écrite dans app.ts, et un test vérifie la réponse à un OPTIONS d'une origine autorisée (il échoue sans la ligne). Option origin inchangée. Les ajouts de la 11.x (logLevel du préflight, cors par route dans config.cors) ne sont pas utilisés. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:13:07 +02:00