Commit Graph
326 Commits
Author SHA1 Message Date
IliesAllaliandClaude Opus 5.5 d55ea6ce4a fix(arbre): « + photo » seulement en modification (issue #124)
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>
2026-10-21 15:38:00 +02:00
IliesAllali 3b08fc1dce Merge pull request #123 from IliesAllali/release/1.2.0
Release 1.2.0 : changelog, OIDC expérimental, jamais relié à un compte à mot de passe
v1.2.0
2026-10-20 16:15:04 +02:00
IliesAllaliandClaude Opus 5.5 07e4fb11f9 1.2.0 : changelog, OIDC marqué expérimental, jamais relié à un compte à mot de passe
- 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>
2026-10-20 16:12:42 +02:00
IliesAllali 441693bf43 Merge pull request #118 from IliesAllali/feat/sexe-et-liens
Sexe d'une personne et liens de parenté genrés (#114)
2026-10-20 15:47:57 +02:00
IliesAllaliandClaude Opus 5.5 9ba1aee96f Merge origin/main dans feat/sexe-et-liens, trois choix à bascule, « Décédé(e), date inconnue » sur une ligne (#114)
- 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>
2026-10-20 15:45:26 +02:00
IliesAllali 504411adf3 Merge pull request #122 from IliesAllali/feat/connexion-oidc
Auto-hébergement : connexion par un fournisseur d'identité OIDC
2026-10-20 15:34:16 +02:00
IliesAllaliandClaude Opus 5.5 65900a4372 feat(comptes): connexion par un fournisseur OIDC (#115)
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>
2026-10-20 15:26:01 +02:00
IliesAllali 72a3869d52 Merge pull request #121 from IliesAllali/fix/pastille-propositions
Propositions à relire : la pastille s'allume dès l'ouverture de l'arbre
2026-10-20 15:25:40 +02:00
IliesAllaliandClaude Opus 5.5 7a43fe4aaf feat(personnes): quatrième choix « Autre » (SEX X), case du prénom inconnu sur une ligne (#114)
- 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>
2026-10-20 15:13:12 +02:00
IliesAllaliandClaude Opus 5.5 0ad44fbaa7 Propositions à relire : la pastille s'allume dès l'ouverture de l'arbre
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>
2026-10-20 15:08:32 +02:00
IliesAllali 352951979a Merge pull request #120 from IliesAllali/fix/onglet-souvenirs
Fiche : « Souvenirs · 3 » sur une ligne en modification
2026-10-20 14:37:39 +02:00
IliesAllali 111a5d3df5 Merge pull request #119 from IliesAllali/chore/code-mort
Ménage : retirer onze modules de l'interface que plus rien n'importe
2026-10-20 14:37:26 +02:00
IliesAllaliandClaude Opus 5.5 c46cc747f6 Fiche : « Souvenirs · 3 » ne passe plus sur deux lignes en modification
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>
2026-10-20 14:34:36 +02:00
IliesAllaliandClaude Opus 5.5 34454abc18 Ménage : retirer onze modules de l'interface que plus rien n'importe
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>
2026-10-20 14:27:49 +02:00
IliesAllaliandClaude Opus 5.5 eaecac8fa5 feat(personnes): saisir le sexe et nommer les liens de parenté en conséquence (#114)
- 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>
2026-10-20 14:25:45 +02:00
IliesAllali 4dd0db9699 Merge pull request #117 from IliesAllali/feat/inscription-fermee
Auto-hébergement : fermer la création de compte (ALLOW_REGISTRATION)
2026-10-20 14:14:44 +02:00
IliesAllaliandClaude Opus 5.5 1b2d8ed6e2 feat(comptes): ALLOW_REGISTRATION ferme la création de compte (#113)
À 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>
2026-10-20 14:12:18 +02:00
IliesAllali 5f115322e2 Merge pull request #116 from IliesAllali/feat/placement-un-seul-arbre
Placement : un seul arbre, grandes belles-familles en onglets
2026-10-20 13:59:31 +02:00
IliesAllali caa940f4ca Merge pull request #112 from IliesAllali/feat/layout-bench-v2
Banc du placement v2 : invariants, tracé réel, archétypes en texte, stabilité
2026-10-20 13:59:14 +02:00
IliesAllali da5c87d002 Merge pull request #111 from IliesAllali/fix/generation-parente
Placement : rangées = génération de parenté depuis la personne de référence
2026-10-20 13:58:19 +02:00
IliesAllali b7b67e76b9 Merge remote-tracking branch 'origin/main' into fix/generation-parente 2026-10-20 13:56:17 +02:00
IliesAllali b057733f64 Merge pull request #105 from IliesAllali/fix/placement-trois-correctifs
Placement : rangées stables, couples tournés vers leurs familles, fil libre malgré les conjoints de la fratrie
2026-10-20 13:54:58 +02:00
IliesAllaliandClaude Opus 5.5 ff078fd2bf onglets : la recherche ouvre l'onglet de la personne ; barre jamais cachée par la fiche ou la recherche
- 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>
2026-10-20 13:33:30 +02:00
IliesAllaliandClaude Opus 5.5 eb8e717638 onglets : pas d'onglet pour une famille de 10 personnes ou moins, elle reste dessinée
desc-3 : 30 → 5 onglets, croisements 30 → 41 ; arbre réel et asc-23 inchangés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:00:54 +02:00
IliesAllaliandClaude Opus 5.5 e6aa6d7fda onglets : deux familles au même nom se distinguent par les prénoms de leur charnière
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>
2026-10-20 12:58:27 +02:00
IliesAllaliandClaude Opus 5.5 bfa85f83fc placement : le côté extérieur de la branche prime sur le centre ; oncles et tantes ne montent pas
- 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>
2026-10-20 10:29:50 +02:00
IliesAllaliandClaude Fable 5.1 a1203fa767 placement : les parents du conjoint juste au-dessus de lui
- 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>
2026-10-20 10:20:40 +02:00
IliesAllaliandClaude Fable 5.1 a562ad9c6e placement : une belle-famille collée ne grimpe pas au-dessus des parents du conjoint
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>
2026-10-20 10:08:09 +02:00
IliesAllaliandClaude Fable 5.1 10815498b7 placement : un enfant au bord d'un large bloc de descendants va du côté où son bloc déborde
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>
2026-10-20 00:03:34 +02:00
IliesAllaliandClaude Fable 5.1 33718470ee belle-famille qui ne tient pas au bout : parents seuls au-dessus du conjoint, le reste en onglet ; pastille au-dessus du portrait
- 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>
2026-10-19 23:43:14 +02:00
IliesAllaliandClaude Fable 5.1 3df9abe63f barre d'onglets fondue aux bords, fil croisant la rangée des parents = pastille, le sang garde ses chaînes
- 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>
2026-10-19 23:30:23 +02:00
IliesAllaliandClaude Fable 5.1 e23618806b placement : le côté des belles-familles se décide par le centre de la famille dessinée, plus par la référence
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>
2026-10-19 22:59:31 +02:00
IliesAllaliandClaude Fable 5.1 65049658a1 onglets : un onglet = la famille cachée, liste complète dès le chargement, réglage dans les paramètres
- 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>
2026-10-19 22:40:59 +02:00
IliesAllaliandClaude Fable 5.1 8637d7f323 familles : bascule « Tout l'arbre / Par famille », barre abaissée en mode modification, cadrage téléphone
- 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>
2026-10-19 22:19:48 +02:00
IliesAllaliandClaude Fable 5.1 2fab1edbef onglets : l'onglet actif se met en vue dans la barre (téléphone)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 22:12:45 +02:00
IliesAllaliandClaude Fable 5.1 ef46733329 onglets de familles : une belle-famille trop large devient son propre arbre
- 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>
2026-10-19 21:50:40 +02:00
IliesAllaliandClaude Fable 5.1 c29610ee14 placement(global): l'arbre s'ouvre à partir de la référence
- Toute belle-famille, grosse (cluster) ou petite, part du côté opposé à la personne de référence : à droite
  pour un conjoint à sa droite, à gauche sinon. Passes successives jusqu'à stabilité (4 au plus).
- Dans une belle-famille, la branche qui mène au conjoint longe, à tous les niveaux, le bord qui regarde
  la famille principale : la carte de la famille principale est au bon bord du cluster.
- Les fratries ne sont plus dessinées en miroir pour ça : seul le bloc du conjoint change de place.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 18:43:07 +02:00
IliesAllaliandClaude Fable 5.1 77eef8e8a0 placement(remariage): l'enfant de la lignée reste près de sa fratrie, la carte au-dessus du conjoint
- Sur une chaîne de remariage où l'enfant de la lignée est à un bout, toute la suite de conjoints (ex-époux
  compris) part du côté de la belle-famille et l'enfant reste du côté de ses frères et sœurs.
- La rangée des parents n'est plus réservée que sur la moitié de l'enfant : la carte de famille peut se
  poser juste au-dessus du conjoint.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 18:29:39 +02:00
IliesAllaliandClaude Fable 5.1 e2af4fb580 placement(familles): côté du conjoint, carte au plus près, bandeau et carte des familles sans fondu
- Un cluster se range du côté où son conjoint se trouve dans la lignée principale (seconde passe si la
  première construction l'avait mis de l'autre côté) ; le couple se tourne vers sa famille.
- La carte de famille se pose au plus près au-dessus du conjoint, en préférant le côté de sa famille.
- La carte inverse réserve sa place sous l'écho du conjoint dans le cluster (plus de chevauchement).
- La reconstruction d'un cluster ne laisse aucune trace (clusters imbriqués, chaînes posées, arêtes
  externes) : 0 chevauchement sur l'arbre réel, 8 à 0 sur asc-3.
- Bandeau à l'écran avec le nom et la taille de la famille où l'on est.
- Carte des familles : bascule nette sous une échelle, sans fondu ni glissement ; famille principale au
  milieu, familles par alliance en colonne de leur côté, traits de bloc à bloc avec les prénoms du mariage.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 17:54:20 +02:00
IliesAllaliandClaude Fable 5.1 c3d0ac30e4 Carte des familles v2 : blocs calculés par le placement, repli net, traits de bloc à bloc
Retours de Patch : pas d'animation, familles rangées comme sur le schéma, lien
plus naturel, bloc calculé dans l'arbre et non dessiné par-dessus.

- Le placement donne à chaque famille sa place réelle et sa place sur la
  carte (autour de la famille principale, en coordonnées de l'arbre).
- Passé le seuil de dézoom, une famille par alliance se replie net en son
  bloc, qui glisse de sa place réelle vers sa place sur la carte à mesure
  qu'on dézoome ; plus bas, la famille principale se replie aussi. Plus de
  fondu, plus de clic sur les blocs.
- Les traits entre familles vont de bord à bord, avec les deux prénoms du
  mariage. Le pont d'une carte de famille est un fil plein.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 17:19:15 +02:00
IliesAllaliandClaude Fable 5.1 71c8e1a93d Carte des familles : au dézoom, chaque famille devient une tuile
Maquette J retenue par Patch le 19/10 (« quand on dézoome pas mal, une
famille devient un gros bloc »). Entre les échelles 0,3 et 0,2 l'arbre
s'efface et les tuiles apparaissent : une par famille (la lignée principale
et chaque cluster), de taille constante à l'écran, avec le nom, six
portraits et le nombre de personnes ; un trait par mariage entre familles,
avec le prénom de la personne qui relie. Les tuiles se rangent autour de la
famille principale à distance d'écran fixe, quel que soit l'éloignement réel
des familles sur la toile. Un clic sur une tuile s'approche de la famille
(même mécanique que les pastilles). Le placement expose `result.families`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 17:11:22 +02:00
IliesAllaliandClaude Fable 5.1 fb02139929 Placement : carte de famille et pont, les grosses belles-familles en cluster
Patch a écarté le plan arrière (« beaucoup trop d'infos, 150 personnes en
plus, illisible ») et retenu la maquette A. Une belle-famille plus large que
deux écrans devient un cluster dessiné à part, sur les mêmes rangées, par le
même placement. À sa place, au-dessus du conjoint, une carte de famille
(nom, quatre portraits, nombre de personnes) reliée à lui par un pont en
pointillé. Dans le cluster, le conjoint apparaît dans sa fratrie (écho de
la même personne) avec, sous lui, la carte inverse de la lignée qu'il a
rejointe. Un clic sur une carte mène de l'autre côté (même mécanique que
les pastilles). Le fil des parents vers le conjoint du plan principal est
masqué, il va à l'écho.

Nouveau type de nœud « family » dans le placement et le rendu, deux
constantes de carte, deux textes anglais. Le plan arrière et son calque
sont retirés.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 16:57:01 +02:00
IliesAllaliandClaude Fable 5.1 5a069c25c5 Placement : prototype des deux plans, les grosses belles-familles en arrière-plan
Maquette F retenue par Patch le 19/10 au soir. Une belle-famille plus large
que deux écrans ne se colle plus devant : elle passe sur un plan arrière,
dessinée par le même placement, à l'échelle 0,55, ancrée pour que la place
fantôme de son conjoint coïncide avec lui (ses parents juste au-dessus de
lui, en retrait). Le plan avant garde ses rangées compactes.

Rendu : le plan arrière est dessiné d'abord sur un calque (couples, fils,
nœuds à leur échelle), composé sous le plan avant à 42 % avec un léger flou.
Le rayon des nœuds, la hauteur des lignes de fratrie et le culling suivent
l'échelle du nœud. Les filiations du plan arrière et le fil des parents
arrière vers leur enfant avant ne comptent ni pour les renvois ni pour les
niveaux de lignes.

Banc : le plan avant seul est mesuré, le nombre de personnes en arrière est
compté. Famille réelle de 385 : 202 personnes derrière, plan avant à 0
croisement et 7 fils de plus d'un écran (contre 9 et 15). Prototype : pas
encore de survol, d'échange des plans ni de masquage sous les portraits.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 16:47:14 +02:00
IliesAllaliandClaude Fable 5.1 b4df1a6b69 Placement : belle-famille à côté de son enfant, jamais au-dessus de la place des parents
Retours de Patch sur l'arbre réel (385 personnes) : de longs fils et des
parents séparés de leurs enfants.

- La plus grande lignée est construite d'abord (sinon une petite branche
  aspirait toute la lignée principale comme « famille du conjoint »).
- Pour remonter au sommet d'une famille, on passe par le sang de la
  référence quand un membre en est : on retombe sur la lignée principale,
  rien à attacher, la seconde filiation reste un renvoi.
- Une famille reliée deux fois dont le fil devrait traverser plus d'un écran
  devient une pastille.
- La belle-famille change de côté si l'autre côté la rapproche d'un écran
  ou plus ; le couple se retourne avec elle.
- Si une belle-famille est poussée loin par les descendants du couple, le
  couple se décale au bord de sa rangée d'enfants, de son côté.
- Au-dessus de chaque couple, la place de ses propres parents est réservée :
  les parents du conjoint se posent à côté, pas dessus.
- Les parents qui évitent un obstacle sur leur rangée restent au-dessus de
  leurs enfants plutôt que de sauter de l'autre côté.

Témoins des 14 archétypes relus. Banc : arbre réel, pastilles 0,
croisements 9 ; arbre fictif de 265, pastilles 0, croisements 1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 16:05:06 +02:00
IliesAllaliandClaude Fable 5.1 6950a9c21d Placement : plus jamais d'îlot, belle-famille posée depuis sa place idéale
Retour de Patch sur un arbre de 265 personnes : les familles « posées à
part » (trop loin pour être collées) faisaient une rangée d'îlots reliés
par des pastilles. Plus aucune famille n'est posée à part : une famille
collée garde son fil, aussi long soit-il.

La belle-famille part de sa place idéale (parents juste au-dessus de
l'enfant) et est poussée vers l'extérieur : sur les rangées de l'enfant et
en dessous (sa fratrie et leurs descendants), au-delà de tout ce qui est
déjà posé, jamais sous la ligne d'une fratrie ; sur les rangées au-dessus
(ses ancêtres, de petits couples), au premier trou libre, à côté des autres
ancêtres. Plusieurs belles-familles du même côté s'emboîtent comme des
parenthèses. Une rangée de lignes de fratrie peut prendre cinq niveaux.

Banc : famille réelle de 385, pastilles 2 → 0 ; descendance fictive de
1 454, pastilles 17 → 0 ; les 14 archétypes passent leurs invariants.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 15:43:12 +02:00
IliesAllaliandClaude Fable 5.1 02177d93b3 Placement : remariage, chaque union au-dessus de ses propres enfants
Retour de Patch sur un arbre de 265 personnes : dans un remariage, la fille
de la seconde union partait au bout de la fratrie entière et la ligne de son
union passait au-dessus des enfants de la première.

- Les enfants de chaque union restent groupés dans l'ordre des unions ; une
  belle-famille va du côté de son union, jamais au-delà des demi-frères.
- La chaîne se cale pour que chaque union soit au plus près au-dessus de son
  groupe : on garde, parmi les alignements possibles, celui où les lignes
  débordent le moins au-dessus des autres groupes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 15:30:09 +02:00
IliesAllaliandClaude Fable 5.1 c0d057a675 Placement : la belle-famille au bout de la fratrie, l'enfant marié avec elle
Retours de Patch sur un arbre de 102 personnes : une famille de conjoint se
glissait dans un trou du contour entre deux frères, et celle d'un enfant du
milieu se posait entre lui et ses frères, sa ligne passant au-dessus d'eux.

- La famille d'un conjoint est construite par la chaîne de l'enfant puis
  posée par le bloc du dessus, au-delà de toute l'étendue de la fratrie,
  jamais dans un trou.
- L'enfant dont le conjoint amène sa famille va au bout de sa fratrie, de
  son côté (l'ordre de naissance s'efface pour lui, choix de Patch), et sa
  belle-famille se colle à lui sans survoler personne.
- Le côté est hérité de la lignée : toutes les belles-familles d'une branche
  vont du côté où la branche est au bord de l'arbre.
- Le couple ne se tourne vers la belle-famille que si elle est vraiment
  attachée (un cousin marié garde son orientation naturelle).
- Le fil d'une famille collée est toujours dessiné ; pastille seulement pour
  une famille posée à part.
- Niveaux des lignes de fratrie : une ligne qui en contient une autre passe
  au-dessus ; entre deux lignes qui se chevauchent, celle dont l'union est à
  l'extérieur passe au-dessus (son fil n'entre qu'une fois, à l'enfant collé).

Banc : sur l'arbre de 102 personnes, pastilles 2 → 0 et croisements 3 → 0 ;
famille réelle de 385, pastilles 4 → 2 ; témoins des archétypes relus.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 15:22:31 +02:00
IliesAllaliandClaude Fable 5.1 e4ee286920 Placement : un seul arbre, la famille d'un conjoint se colle à lui
Avant, la famille d'un conjoint (ses parents, sa fratrie, ses ancêtres)
était posée au premier créneau libre, souvent au bout de l'arbre, et la
filiation devenait une pastille « Voir ». L'arbre se lisait comme plusieurs
arbres reliés par des pastilles.

Maintenant chaque famille de conjoint est construite entière depuis son
ancêtre le plus haut et collée au conjoint, de son côté, en poussant les
voisins pour faire la place. Le conjoint est tourné vers l'extérieur de sa
fratrie ; sa propre fratrie est dessinée en miroir s'il faut qu'il finisse
au bout, contre le couple ; un enfant déjà dessiné ailleurs garde une place
fantôme dans l'ordre de sa fratrie pour le centrage. Les lignées de la
personne de référence sont dessinées d'abord (le sang gagne) ; une famille
reliée deux fois (cousins, deux grandes lignées) n'est dessinée qu'une fois,
l'autre filiation reste une pastille si son fil croiserait une famille ; une
famille qu'il faudrait pousser de plus d'un écran est posée à part. L'ordre
des lignées ne dépend plus des effectifs (rangée, année, identifiant).

Les lignes de fratrie s'emboîtent : la ligne d'une famille qui en entoure
une autre passe au-dessus (_railLift posé par le placement, plus de hachage),
plus aucune superposition.

Mesuré par le banc (tools/layout-bench) : pastilles 4 → 2 sur une famille
réelle de 385 personnes, 78 → 12 sur une descendance fictive de 1 454 ;
les 14 archétypes passent leurs invariants, Marc et Nadia et l'issue #67
sans aucune pastille ni croisement.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 14:47:32 +02:00
IliesAllaliandClaude Fable 5.1 1664fc0771 Témoins des archétypes toujours en LF (comparés octet pour octet par vitest)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 14:14:47 +02:00
IliesAllaliandClaude Fable 5.1 3be95b1a0f Banc du placement v2 : invariants, défauts sur le tracé réel, archétypes en texte, stabilité
Le banc mesure maintenant le code de production (computeBlockLayout), sans
écran, en quatre étages lus dans l'ordre et jamais additionnés :

- invariants qui doivent valoir zéro (chevauchement, couple non adjacent,
  fratrie coupée ou hors de l'ordre choisi, rangée différente de la génération
  de parenté recalculée ici, années de naissance qui redescendent) ;
- défauts comptés sur la géométrie vraiment dessinée (renvois, lignes de
  fratrie au-dessus d'un portrait étranger, croisements, lignes et foyers plus
  larges qu'un écran, proches de la référence visibles dans un écran) ;
- quatorze archétypes (ordre d'une fratrie, issue #67, branche courte, Marc et
  Nadia, petit conjoint, fratrie de douze, remariage, cousins, oncle et nièce,
  parent seul, adoption, deux familles, belle-famille, trois familles
  enchaînées) rendus en texte, témoins dans __snapshots__/archetypes, testés
  par vitest ; deux échecs connus (belle-famille, trois-belles-familles) en
  attendant la règle « le sang de la référence garde son enfant » ;
- stabilité : retirer une feuille ne devrait déplacer que son foyer.

Les modèles ELK écartés en septembre, elk-common et l'ancienne mesure sur
segments droits sont supprimés, avec la dépendance elkjs. Le générateur
d'arbres fictifs (gen-fr.mjs) entre dans le dépôt ; les arbres réels restent
dans fixtures/, ignoré par git.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 14:14:03 +02:00