Commit Graph
263 Commits
Author SHA1 Message Date
IliesAllaliandClaude Haiku 5.5 6faaefebee Fiche : fermer en glissant vers le bas sur téléphone
La feuille de la fiche (PersonCard) se ferme en glissant sa poignée ou son en-tête vers le bas, comme le menu de la barre. Le geste est factorisé : logique pure dans utils/sheetDrag.js, hook dans hooks/useSheetDrag.js, utilisé aussi par NavMenu (poignée, seuil de 70 px inchangé).

- Le geste part seulement de la poignée et de l'en-tête. Jamais d'un champ de saisie, d'un libellé ni pendant une sélection de texte. Le contenu des onglets défile comme avant.
- La feuille suit le doigt (transform), ne monte jamais au-delà de sa position de repos.
- Fermeture au-delà d'un tiers de la hauteur, ou sur un lâcher rapide vers le bas. Sinon retour court.
- La fermeture passe par le même chemin que la croix (enregistrement automatique compris). Si l'enregistrement est refusé, la fiche revient et affiche son erreur.
- Mode feuille seulement (PHONE_QUERY et largeur de la feuille CSS). Sur ordinateur, rien ne change.
- prefers-reduced-motion respecté.

Tests : logique du geste (zones, direction, seuil, vitesse) en vitest. Recette Playwright iPhone 13 émulé, gestes tactiles CDP : fermeture par la poignée, retour après un petit glisser, lâcher rapide, défilement du contenu sans fermer, pas de geste depuis un champ, enregistrement puis fermeture, ordinateur inchangé, croix.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-19 11:06:35 +02:00
IliesAllali 0d08b0f148 Merge pull request #100 from IliesAllali/feat/barre-c
Barre : une pilule à droite, menus Ajouter/Corriger et compte (variante C)
2026-10-19 10:43:10 +02:00
IliesAllali dfc73858af Merge remote-tracking branch 'origin/main' into feat/barre-c
# Conflicts:
#	frontend/src/components/navbar/ContextualNavbar.css
2026-10-19 10:27:03 +02:00
IliesAllali 86e1d959a7 Merge pull request #101 from IliesAllali/feat/enregistrement-auto
Fiche : enregistrement automatique en quittant
2026-10-19 10:23:06 +02:00
IliesAllali 29324252a7 Merge pull request #104 from IliesAllali/fix/barre-libelles-courts
Barre : plus de libellé en double sur ordinateur
2026-10-19 10:19:43 +02:00
IliesAllaliandClaude Opus 5.5 7fbf5beab0 fix(barre): le libellé court de la famille ne s'affiche plus sur ordinateur
Il n'était caché que dans le bloc téléphone : sur ordinateur on lisait « Ajouter un souvenir Souvenir ».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:17:25 +02:00
IliesAllali 6fd76ff7a4 Merge pull request #102 from IliesAllali/fix/vie-sans-date
Onglet Vie : une union sans date à sa place logique
2026-10-19 01:24:34 +02:00
IliesAllaliandClaude Opus 5.5 68ac2fa8f8 fix(vie): une union sans date a sa place logique, plus apres le deces du conjoint
Un mariage sans date tombait tout en bas de l'onglet Vie, apres le deces du
conjoint, ce qui ne voulait rien dire. Il se place maintenant juste avant le
premier enfant du couple, sinon avant la fin de l'union ou le deces du
conjoint. Aucune annee n'est inventee : colonne vide et « date inconnue ».
Seul ce qui n'a aucun repere reste en bas, et tout moment sans date le dit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 01:22:07 +02:00
IliesAllaliandClaude Haiku 5.5 d4416ef2ee barre : partager, souvenir propriétaire, aide pour tous, nettoyage
- Rond du compte : « Partager l'arbre » ouvre la fenêtre « La famille
  participe » (propriétaire).
- « Propositions à relire » ouvre la même fenêtre et la fait défiler
  jusqu'à la section (ancre #contrib-propositions).
- « Un souvenir » disponible pour le propriétaire, même parcours que
  le membre (choix de la personne, puis souvenirs).
- Aide : HELP_URL passé à tous les rôles.
- Suppression de .pz-lang--nav (plus aucune référence).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-19 01:11:05 +02:00
IliesAllaliandClaude Haiku 5.5 a25f263451 fiche: enregistrer automatiquement en quittant la fiche
Les modifications en cours d'une fiche ne sont plus perdues quand on
change de personne, ferme la fiche, sort du mode modification, ouvre
un souvenir, ajoute une personne ou envoie les contributions.

- La fiche enregistre par le même chemin que « Enregistrer » (onSave),
  pour la personne quittée. Un échec ou une validation la garde ouverte
  avec le message d'erreur.
- Invité en contribution : les changements vont dans le brouillon, puis
  partent avec « Envoyer ».
- Un petit message confirme l'enregistrement. Rien n'est enregistré
  quand rien n'a changé, ni en démo.
- Un second enregistrement pendant l'envoi reçoit la même promesse
  (utils/saveOnLeave.js), sans double appel.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-19 01:08:26 +02:00
IliesAllaliandClaude Haiku 5.5 7d123d66ef barre: une pilule à droite, menus « Ajouter / Corriger » et compte
Variante C validée : une seule pilule en bas à droite (+ et compte), le
zoom reste à gauche. Le « Plus » et le second crayon disparaissent.

- « + » : Ajouter (souvenir, personne, mot ou dessin) et Corriger
  (proposer des changements, modifier l'arbre, modifier la démo).
- Rond du compte : identité, propositions à relire (pastille), arbres,
  paramètres, aide et langue sur une ligne, déconnexion. Sans compte :
  se connecter, créer mon arbre, aide, langue.
- Téléphone (moins de 768 px ou pointeur grossier) : feuille qui monte
  du bas, voile, poignée glissable. Ordinateur : popover ancré à la pilule.
- Barre d'annotation mobile conservée ; « Ajouter » et « Plus » ne font
  plus qu'un bouton.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-19 01:06:15 +02:00
IliesAllali e98125b796 Merge pull request #99 from IliesAllali/fix/test-limite-connexion
Test : délai de 20 s pour la limite des connexions
2026-10-19 00:22:08 +02:00
IliesAllali bc5c31f594 Merge pull request #97 from IliesAllali/fix/audit-1-1
Audit du 18/10 : import GEDCOM, transactions, arbre au repos, délai réseau, visites, sauvegardes
2026-10-19 00:21:23 +02:00
IliesAllaliandClaude Opus 5.5 b1a7a2f489 test: délai de 20 s pour le test de limite des connexions
Onze connexions avec vérification bcrypt dépassaient parfois 5 s sur la CI : quatre échecs le 18/10 sans lien avec les changements.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:19:58 +02:00
IliesAllali d44aae933b Merge pull request #96 from IliesAllali/feat/crayon-invite
Crayon pour les invités : proposer des changements
2026-10-19 00:14:30 +02:00
IliesAllali 14b5f0e99f Merge pull request #98 from IliesAllali/fix/infos-annee-seule
Fiche : un champ vidé pendant la saisie reste affiché
2026-10-19 00:11:33 +02:00
IliesAllaliandClaude Opus 5.5 6fa86d6716 fix(ci): le controle de restauration cree ses propres donnees
Le test de fumee supprime son arbre a la fin : le controle partait d'une base
sans arbre. Il cree maintenant un compte, un arbre et une personne par l'API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:11:28 +02:00
IliesAllaliandClaude Opus 5.5 85edf9ce2a fix(fiche): un champ vidé pendant la saisie reste affiché jusqu'à l'enregistrement
Avec l'onglet Infos qui n'affiche que les champs remplis (#93), vider un champ pour le retaper le faisait disparaître sous les doigts, et la frappe partait dans le champ suivant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:09:33 +02:00
IliesAllaliandClaude Haiku 5.5 6c5cacab0f fix(invite): libellés courts de la barre famille sous 420 px
Sous 420 px, « Ajouter un souvenir » et « Ajouter une personne » passaient
sur deux lignes : « Souvenir » et « Personne » tiennent sur une ligne. Le
libellé complet reste en aria-label et en title.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-19 00:08:21 +02:00
IliesAllaliandClaude Opus 5.5 217d503e20 fix(sauvegardes): restauration testee en CI, copie de la base avant migration en tout-en-un
- La CI joue les commandes de sauvegarde et de restauration du README sur une
  vraie installation compose (base videe, medias effaces) et verifie comptes,
  arbres, personnes, migrations et fichiers (tools/docker-restore-check.sh).
- README : restauration avec --if-exists, sinon pg_restore echoue sur une
  base vide. Sauvegarde avant chaque mise a jour, dite clairement.
- Image tout-en-un : copie de la base dans /data/backups avant d'appliquer une
  migration (5 gardees), demarrage arrete si la copie echoue.
- backup.sh : l'empreinte d'une archive de medias gardee disparaissait avec la
  rotation des fichiers d'empreintes, elle est recalculee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:30 +02:00
IliesAllaliandClaude Opus 5.5 1504a1e124 fix(gedcom): import sans union d'une personne avec elle-meme ni boucle parent-enfant
Un fichier abime pouvait marier une personne a elle-meme ou faire de
quelqu'un son propre ancetre, ce que l'API refuse partout ailleurs. Le
controle se fait en memoire pendant l'import (les validateurs relisent tout
l'arbre a chaque lien), et la reponse compte les relations ecartees
(relationsSkipped).

Premier test de la route d'import.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:30 +02:00
IliesAllaliandClaude Opus 5.5 9c84bd0efc fix(visites): duree de conservation d'un an tenue, comptes supprimes anonymises
La purge des visites de plus d'un an ne passait qu'a l'ouverture de l'onglet
Visites par un administrateur : un arbre jamais consulte gardait tout. Elle
passe aussi a l'enregistrement d'une visite, au plus une fois par heure, pour
tous les arbres.

A la suppression d'un compte, ses visites d'autres arbres gardaient son
identifiant dans la cle du visiteur : elles restent comptees, sous une cle
anonyme.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:30 +02:00
IliesAllaliandClaude Opus 5.5 51232d8150 fix(app): delai maximal sur les appels a l'API
Un reseau mobile qui decroche laissait l'app en chargement pour toujours.
30 s par appel, 5 min pour un envoi de fichier (corps de plus de 100 Ko),
3 min pour un import GEDCOM. Le message dit que le serveur ne repond pas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:29 +02:00
IliesAllaliandClaude Opus 5.5 93307e41ab perf(arbre): la boucle d'animation ne recalcule plus rien au repos
Positions des noeuds et ensembles de recherche ou de chemin etaient recalcules
60 fois par seconde meme quand rien ne bougeait. Ils ne le sont plus que pour
une image a redessiner (ensemble de recherche construit a son changement).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:29 +02:00
IliesAllaliandClaude Opus 5.5 f20b58be32 fix(api): ecritures en plusieurs temps dans une transaction
Une erreur au milieu laissait un etat partiel, et un nouvel essai du client
recreait des doublons.

- Lot d'annotations : creations, modifications, suppressions et trace.
- Moments : session de contribution, moment, souvenirs rattaches et trace ;
  modification et suppression d'un moment avec ses souvenirs.
- Reordonnancement des souvenirs d'une personne.
- La famille ne rattache a son moment que des souvenirs libres : elle ne
  detache plus un souvenir du moment d'un administrateur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:29 +02:00
IliesAllaliandClaude Opus 5.5 82f888b1dc perf(gedcom): notes et sources partagees lues une fois par import
Un fichier dont chaque fiche cite une note ou une source enorme faisait relire
ce texte pour chaque personne : environ 35 min de calcul pour 20 000 fiches,
0,1 s maintenant (memo par noeud, pour la duree de l'import).

- La lecture des medias ne descend que dans les branches qui menent a un
  fichier, avec un budget par personne et une profondeur bornee.
- Les niveaux au-dela de 99 (limite de la norme) sont ignores : une chaine de
  sources faisait deborder la pile.
- Les notes ne sont calculees que pour une personne creee, pas reutilisee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:29 +02:00
IliesAllali 721c8111f2 Merge origin/main dans feat/crayon-invite 2026-10-19 00:05:31 +02:00
IliesAllali edbbf7b163 Merge pull request #95 from IliesAllali/feat/recadrage-portrait
Recadrage du portrait, photo entière conservée
2026-10-19 00:02:56 +02:00
IliesAllaliandClaude Opus 5.5 3d5d9fea21 Merge main dans feat/recadrage-portrait (après #92, #93, #94)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:01:14 +02:00
IliesAllali b013f0f40c Merge pull request #92 from IliesAllali/fix/fiche-entete-partage
Fiche, partage, landing et bannière de création
2026-10-18 23:57:45 +02:00
IliesAllaliandClaude Opus 5.5 53e4dc326a fix(fiche): portrait en modification à taille fixe, même avec une vraie photo
La hauteur venait du contenu : une photo réelle a une taille propre et le portrait grandissait jusqu'à écraser les champs nom. Taille calculée depuis la hauteur des deux champs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 23:56:01 +02:00
IliesAllaliandClaude Haiku 5.5 ac3cd6aec2 feat(invite): crayon pour proposer des changements
L'invité a le crayon du propriétaire dans la barre du bas, avant « Plus ».
Le bandeau du mode contribution dit « Vous proposez » (« Vous proposez des
changements » sur ordinateur), sur une seule ligne, avec « Envoyer ».
Le propriétaire ne voit aucun changement.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 23:55:29 +02:00
IliesAllali c6f62dc907 Merge remote-tracking branch 'origin/main' into fix/fiche-entete-partage 2026-10-18 23:52:23 +02:00
IliesAllali 6a9034cf98 Merge pull request #93 from IliesAllali/feat/fiche-pastilles-adoption
Fiche : pastilles, lieu de décès, adoption
2026-10-18 23:50:10 +02:00
IliesAllali c24be211e1 Merge pull request #94 from IliesAllali/feat/modifier-souvenir
Modifier un souvenir (administrateur)
2026-10-18 23:47:50 +02:00
IliesAllali 178a932f0d Merge pull request #89 from IliesAllali/fix/nom-facultatif
Nom de famille facultatif, case du prénom inconnu
2026-10-18 23:44:31 +02:00
IliesAllaliandClaude Opus 5.5 942310d30f Merge main dans fix/nom-facultatif (après #91)
Conflit dans PersonCard : hasChanges vient maintenant de l'état de saisie rattaché à la personne (#91), lastNameMissing est gardé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 23:42:28 +02:00
IliesAllali 4d03864824 Merge pull request #91 from IliesAllali/fix/fiche-saisie-par-personne
Fiche : une date en cours ne passe plus sur la personne suivante
2026-10-18 23:37:49 +02:00
IliesAllaliandClaude Haiku 5.5 9dce288678 fix: recadrage, sans sur-titre en capitales
Le titre « Recadrer la photo » se suffit à lui-même : on retire le sur-titre « PORTRAIT ».

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 23:34:59 +02:00
IliesAllaliandClaude Haiku 5.5 63f5b63f12 feat: recadrage du portrait, photo entière conservée
Le cadrage (centre et zoom) est stocké dans Person.avatarCrop (JSON, nullable),
l'original reste sur disque et le cadrage s'applique à l'affichage (canevas et fiche).
Route PUT /trees/:id/persons/:personId/avatar/crop, réservée aux administrateurs.
La suppression et le nouvel envoi remettent le cadrage à zéro.

Migration additive (colonne nullable, sans défaut), testée sur base vide et sur base avec données.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 23:28:34 +02:00
IliesAllaliandClaude Haiku 5.5 a36b287a32 fiche : aperçu du choix d'adoption en attente, titres de section en casse normale
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:43:29 +02:00
IliesAllaliandClaude Haiku 5.5 e75ff5e040 fix: portrait à la hauteur des champs en modification, symbole du logo sur téléphone
- Fiche en modification : le portrait prend la hauteur des champs Prénom et Nom (écart compris), carré (align-self stretch + aspect-ratio 1)
- Landing, téléphone (≤ 820 px) : symbole du logo seul, nom accessible « Parenthèse, accueil » conservé

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:43:19 +02:00
IliesAllaliandClaude Haiku 5.5 b09f915662 feat(souvenir): modifier le titre, le moment et la citation
Un administrateur, en mode modification, peut modifier un souvenir depuis la visionneuse : crayon à droite du titre (visible au survol sur ordinateur, toujours visible sur écran tactile), formulaire Titre et Moment de sa vie, texte de la citation réécrit dans caption et dans le fichier citation.txt.

Route PATCH /trees/:id/persons/:personId/media/:mediaId, réservée aux administrateurs. Pas de migration : la date vient du moment de vie rattaché. La légende séparée n'existe pas en base et n'est pas ajoutée.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:36:21 +02:00
IliesAllaliandClaude Haiku 5.5 8e1b244a4a fix: en-tête de la fiche en modification et bouton de connexion de la landing
- Fiche : pastille Édition retirée ; case « Je ne connais pas son prénom » sur une ligne pleine largeur ; badge caméra « Changer la photo » sur le portrait (même choix de source)
- Landing : « Se connecter » en bouton blanc sans contour, icône de profil ; sur téléphone, icône ronde seule avec aria-label

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:33:19 +02:00
IliesAllaliandClaude Haiku 5.5 cde9c3d44d fiche : infos en pastilles, lieu de décès, adoption (arbre, liens, ajout)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:31:15 +02:00
IliesAllali 0f6ce774e7 Merge origin/fix/nom-facultatif into fix/fiche-entete-partage 2026-10-18 22:26:48 +02:00
IliesAllaliandClaude Haiku 5.5 97b92e3f84 fix: fiche, partage, landing et bannière de création
- Fiche : nom, puis une ligne « surnom · repères de vie · âge » (point médian, sans pastille d'âge)
- Portrait vide : icône seule, avec aria-label et title « Ajouter une photo »
- Partage : message replié (copie directe, « Voir ou modifier le message »), sur-titre retiré
- Landing : « Se connecter » en bouton secondaire à gauche de « Créer mon arbre », masqué sur téléphone
- Bannière « Votre arbre est créé. » dans la DA (carte pz, Newsreader, bouton pilule)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-18 22:20:20 +02:00
IliesAllaliandClaude Opus 5.5 c2ad11df2e fix(fiche): une date en cours de saisie ne passe plus sur la personne suivante
En changeant de fiche sans enregistrer, le premier rendu de la nouvelle fiche voyait encore les
modifications de l'ancienne. DateField initialise son texte à ce moment-là et le gardait : la date
tapée pour une personne s'affichait sur l'autre, et partait avec elle si on enregistrait.
Les modifications en cours sont maintenant rattachées à la personne qu'elles concernent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:26:48 +02:00
IliesAllali f0196eec54 Merge pull request #90 from IliesAllali/fix/aplomb-sans-decrochage
Fil : plus de marche pour un enfant presque sous l'union
2026-10-18 21:18:15 +02:00
IliesAllaliandClaude Opus 5.5 c43fdbff4f fix(fil): enfant presque à l'aplomb, un S doux depuis la barre au lieu d'une marche
Sous deux rayons d'écart, deux coins de 24 px ne tenaient pas : le fil faisait une petite marche.
Le tronc descend jusqu'à la barre et un S vertical au départ et à l'arrivée rejoint l'enfant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:16:05 +02:00