- Le titre tiré du nom de fichier ne retire plus que l'extension (point échappé).
- Zone de dépôt unique, un label comme sur main, avec « depuis Immich » en bouton dedans.
- Le lien Immich n'apparaît que pour une photo ou une vidéo.
- Plusieurs souvenirs venus d'Immich : le champ Titre disparaît, le bouton dit « Ajouter ces n souvenirs ».
- Message vide et nom dans l'aperçu en serif 20 px, comme ailleurs dans l'app.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reprend les commits de la PR #103 d'Askrosm (sélecteur Immich).
- Sélecteur : aide retirée sous le titre, aide de recherche déplacée dans le titre du champ, onglets Photos/Vidéos et filtre visage sur une ligne sur mobile, erreur Immich affichée en haut des résultats avec Réessayer.
- Panneau souvenirs : plusieurs fichiers Immich peuvent être cochés, « Terminer la sélection » les ajoute à la liste ; à l'enregistrement, un souvenir est créé par fichier, titré par son nom de fichier.
- Le bouton « Depuis Immich » pleine largeur devient un lien dans la zone de dépôt.
- Cible de sélection portée à 44 px, choix de visage à 44 px minimum.
- Tailles de police et rayon de bordure ramenés à l'échelle de pz.css.
- useMediaManager : handleUploadPersonMedia renvoie true ou false pour arrêter l'envoi à la première erreur.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Une photo HEIC (marques heic, heix, mif1, msf1, heim, heis) était typée video/mp4. Elle est maintenant image/heic,
et AVIF image/avif. Elles restent refusées à l'envoi (invalid_media_mime_type), comme avant : sharp ne décode
que l'AVIF en entrée HEIF, pas le HEVC des HEIC. La marque hevc n'est une photo que si l'envoi se déclare photo,
pour qu'une vidéo HEVC en MP4 reste acceptée. Les vignettes Immich ne sont servies que pour les types image
autorisés.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Suppression de compte : un compte qui avait un mot de passe mais qui est relié à OIDC, sur une instance avec
PASSWORD_LOGIN=false, ne pouvait plus se supprimer (le mot de passe ne sert plus). Il se confirme désormais par
son email après une connexion récente, comme un compte né du fournisseur. /me et l'échange OIDC renvoient
hasPassword=false dans ce cas, pour que l'écran demande l'email : aucun changement d'interface.
Identité OIDC : un email vérifié déjà relié à une autre identité (un autre sujet) n'est plus repris par un
nouveau sujet (oidc_email_taken). La connexion d'une identité déjà reliée reste faite par émetteur et sujet,
jamais par email.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
GEDCOM 5.5.1 n'admet que M, F et U ; SEX X n'existe qu'en 7.0, et l'export écrivait X sous un en-tête 5.5.1.
Un sexe « autre » s'écrit maintenant U. L'import lit toujours X comme avant.
Conséquence connue : à l'aller-retour, « autre » revient comme « non précisé » (5.5.1 n'a pas de valeur pour
« autre »). Décision à trancher, voir la description de la PR.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Depuis la 1.2.0, chez le propriétaire, un clic sur un portrait vide ouvrait
le sélecteur de fichiers même en simple lecture, sur chaque personne sans
photo. En lecture, le clic ouvre maintenant la fiche, comme pour les autres
portraits ; l'invite « + photo » au survol et le sélecteur direct ne restent
qu'en mode modification. L'ajout de photo depuis la fiche ne change pas.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use Immich previews for photos, enforce the image download cap while streaming,
reuse design tokens and remove unused translations. Add regression coverage.
Signed-off-by: Askrosm <155456680+Askrosm@users.noreply.github.com>
- OIDC : une identité n'est plus reliée automatiquement à un compte existant qui a un mot de passe.
L'inscription ne vérifie pas l'adresse, un tiers aurait pu créer ce compte avec l'email de la victime et lire
ce qu'elle y met ensuite. Refus avec oidc_email_taken et un message clair (FR, EN). Trouvé par la relecture
de sécurité avant la release.
- Tests OIDC : chaque connexion simulée a sa propre adresse (limite de 20 appels par minute et par adresse).
- CHANGELOG 1.2.0, OIDC marqué expérimental dans les deux README.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fusion de main : graphAdapter.js supprimé par #119 ; le sexe est relu par
normalizeSex au chargement du graphe (data/mockData.js), en plus du serveur
qui renvoie déjà male/female/other/null. Mention retirée de i18n/en/app.js.
- Sexe : trois boutons à bascule (Femme, Homme, Autre, aria-pressed). Rien de
choisi = non précisé (null), la valeur par défaut ; un second clic sur le
choix actif y revient. La relecture affiche « Non précisé » pour une valeur
vide (sexLabel).
- « Ajouter quelqu'un » : « Décédé(e), date inconnue » sort de la colonne Décès
et tient sur une ligne, comme la case du prénom (règle CSS commune).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET et OIDC_REDIRECT_URI
ajoutent « Se connecter avec … » à l'écran de connexion. Tout le protocole
passe par openid-client 6 : découverte, PKCE S256, state et nonce, échange
du code, vérification de l'ID token (signature, émetteur, audience, dates).
State, nonce et vérificateur PKCE vivent dans un cookie signé, httpOnly,
SameSite=Lax, qui lie le retour au navigateur qui a commencé la connexion.
Le compte est trouvé par (émetteur, sub), sinon relié par email vérifié,
sinon créé sans mot de passe si ALLOW_REGISTRATION le permet (instance
vide comprise). Retour vers l'app par un jeton de passage de 60 s, à usage
unique, dans le fragment, échangé contre une session.
PASSWORD_LOGIN=false retire les mots de passe Parenthèse. Un compte sans
mot de passe se supprime en retapant son email, dans les 15 minutes qui
suivent une connexion. Code OIDC masqué dans les journaux.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sexe : Femme, Homme, Autre, Non précisé. Autre est enregistré « other »,
refusé en 400 comme toute valeur inconnue, et prend les formes neutres ou
doubles pour nommer un lien.
- GEDCOM : import SEX X (GEDCOM 7) → other, SEX U → non précisé ; export
other → SEX X, non précisé sans ligne SEX. Aller-retour testé.
- « Ajouter quelqu'un » : « Je ne connais pas son prénom » sort de la colonne
Prénom et tient sur une ligne (sous les deux champs sur ordinateur, sous
Prénom sur téléphone) ; les quatre choix du sexe tiennent sur une ligne.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le compte des propositions en attente ne se chargeait qu'à l'ouverture de Partager ou du panneau des
propositions. Il se charge maintenant quand le propriétaire ouvre son arbre et se remet à jour quand il
revient sur l'onglet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Les quatre onglets (Liens en plus) se partagent la place selon leur texte, sans retour à la ligne.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AddPersonButton, DropTrashZone, CreateMyTreeButton, EditModeOverlay.jsx (App importe EditSessionBar sous ce
nom, sa feuille de style reste), InitialTreeWizard, InlinePersonForm, ProximityFeedback, useAddPersonDrag,
graphAdapter et graphDataHelpers, avec leurs feuilles de style. Aucun import, test compris ; lint, 253 tests et
build verts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Champ Sexe (femme, homme, non précisé) dans la fiche en modification, à l'ajout
d'une personne et dans une proposition de la famille ; relu « Sexe » dans les
propositions à relire.
- Valeurs ramenées à male / female / null à l'écriture et à la lecture (anciennes
valeurs M/F relues sans migration), valeur inconnue refusée (400). Export GEDCOM
inchangé dans sa forme.
- Lien au survol genré quand le sexe est connu (Père, Tante, Cousine germaine,
Belle-mère…), forme double sinon. Nommage déplacé dans utils/kinship : une
fonction par langue reçoit le chemin complet (pas, personnes, sexe, année de
naissance), pour brancher d'autres langues.
- Anglais : beau-parent distingué de parent par alliance selon l'ordre du chemin
(Stepmother / Mother-in-law).
- Propositions à relire : le nom de la personne modifiée vient de l'avant lu en
base quand la modification ne porte que le champ changé.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
À false, POST /auth/register répond 403 registration_closed et l'app ne
propose plus de créer un compte (accueil, connexion, porte d'un arbre
partagé, menu du visiteur). Les comptes existants se connectent et créent
leurs arbres, le partage par lien et mot de passe ne change pas.
Une instance sans aucun compte accepte quand même le premier, sous un
verrou de transaction PostgreSQL (deux inscriptions simultanées n'en
créent qu'un). GET /auth/options expose l'état à l'écran d'accueil.
Défaut true : rien ne change pour les instances existantes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Une personne trouvée par la recherche mais rangée dans un autre onglet : l'onglet s'ouvre et la vue va
sur elle (avant, la fiche s'ouvrait et l'arbre ne bougeait pas).
- Téléphone : recherche ouverte, la barre passe dessous. Grand écran : fiche ouverte, la barre passe à sa
droite ; recherche ouverte, elle s'arrête avant et se fond au bord.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sauf le plus grand, chaque onglet homonyme prend les prénoms du couple charnière (« Bonnet · Hugo et
Françoise »), et la pastille qui y mène porte le même nom.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Une branche au bout de sa fratrie pose ses belles-familles au-delà, jamais dans la fratrie des aînés :
la branche de Paul passe à droite d'Eugénie et de Louise, hors de la ligne d'Auguste et Yvonne.
- Une belle-famille qui monte au-dessus des parents du conjoint se réduit aux parents si elle y amène des
oncles ou tantes ; une simple colonne d'ancêtres reste dessinée (archétype issue-67 inchangé).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- La rangée des parents n'est réservée que sur la moitié de l'enfant de la lignée, pour tout couple : au-dessus
du conjoint, ses propres parents se posent (Louis et Joséphine au-dessus de Victor, 936 → 138 px).
- Un enfant parti dans un onglet ne laisse plus de place fantôme : ses parents se centrent sur les enfants
dessinés.
- Cinq archétypes mis à jour : les parents du conjoint collés au-dessus de lui.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Avec des ancêtres plus haut que les parents, elle montait dans les rangées des aînés de la lignée et s'y
glissait entre deux frères (Marc et Sophie entre Anaïs et Germaine). Les parents restent au-dessus du
conjoint, le reste devient un onglet, sauf les toutes petites familles (FAMILY_INLINE_MAX = 6 au-delà des
parents) qui restent dessinées. asc-23 : croisements 15 → 0, fratries coupées 7 → 1 ; arbre réel 1 → 0.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Les couples d'une fratrie restent groupés sous leurs parents, le gros bloc part au-delà. asc-23 :
croisements 21 → 15, fratries coupées 17 → 7 ; desc-3 : 47 → 40 ; Antoine 1787 à 91 px de ses parents
au lieu de 2 600.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Règle du bout : seule une belle-famille au bout de la fratrie est dessinée entière. Un enfant marié au
milieu de sa fratrie est rebâti avec les seuls parents de son conjoint au-dessus de lui ; frères, sœurs et
ancêtres du conjoint deviennent un onglet dont ces parents sont les charnières.
- Même réduction pour une belle-famille que la pose pousse à plus de FAMILY_FIT_PX (480 px) de son enfant.
- Le badge « Famille X · n › » devient une pastille au-dessus du portrait, à la place des parents, dessinée
après portraits et souvenirs (l'orbite évite le haut) : plus rien ne passe dessus.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- La barre d'onglets signale par un fondu le côté qui défile encore.
- Un fil de famille reliée deux fois qui passerait sous d'autres couples de la rangée des parents devient
une pastille, comme celui qui passerait devant la rangée de l'enfant (archétype cousins mis à jour).
- Une belle-famille en construction ne s'approprie pas une chaîne du sang de la référence dont les parents
sont ailleurs : elle ira sous eux.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Au bord (dernière génération, charnière d'un onglet), la référence envoyait toutes les belles-familles
du même côté. Onglet Lecarpentier : croisements 3 → 1, fratries coupées 2 → 1.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Un onglet est exactement le bloc d'une grande belle-famille (plus les conjoints charnières), posé avec
le conjoint comme référence : plus de descendants de la famille de départ dedans.
- La liste des onglets est calculée de proche en proche au chargement (familyTabsOf) : toutes les familles
sont dans la barre dès le début, chaque personne dans un seul onglet, les charnières des deux côtés.
- Un second conjoint de la même famille renvoie au même onglet ; les familles emboîtées restent dans
l'onglet qui les contient ; chaque charnière porte un badge de retour.
- La bascule « Tout l'arbre / Par famille » quitte la barre : case à cocher dans Paramètres de l'arbre,
réglage du navigateur (parenthese.familyTabs).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Deux modes au choix du spectateur, gardés dans son navigateur : « Par famille » (onglets) et « Tout
l'arbre » (une belle-famille trop large reste dessinée d'un tenant). La bascule est en tête de la barre.
- En mode modification, la barre laisse la place au message du haut : moitié gauche sur grand écran,
sous le message sur téléphone.
- Sur un écran étroit, la personne de départ s'ouvre plus bas, la barre ne couvre plus ses parents.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Une belle-famille plus large qu'un écran (FAMILY_TAB_PX) n'est plus dessinée dans l'arbre : elle devient
un onglet, le même arbre recalculé avec le conjoint comme référence. Ses personnes sortent du placement,
le fil de ses parents vers le conjoint n'est pas dessiné.
- Le conjoint porte un badge « Famille X · n › » sous ses dates, un clic ouvre l'onglet.
- Barre d'onglets en haut à gauche : la famille de départ d'abord, puis chaque famille rencontrée, sans
doublon (une famille déjà en onglet se reconnaît à sa personne de référence parmi les membres).
- Retrait des clusters, cartes de famille, échos, bandeau et carte des familles.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>