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>
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>
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>
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>
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>
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>
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>
- 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>
Le test cherchait l'ancienne barre (« Contribuer à l'arbre »). Il suit maintenant la carte d'accueil, la barre « Ajouter un souvenir » et le menu « Plus » pour créer un compte. 19/19 en local.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Camille et Alex (hero, « Pour qui ») venaient de randomuser.me, sans licence établie pour un site public. Remplacés par deux portraits Pexels recadrés en 400 x 400 (Clay Elliot, Vitaly Gariev), sources dans CREDITS.md. Images d'aperçu refaites depuis le hero actuel, sur le fond de la DA.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lancé à la main. Clone, .env, docker compose up -d sur le port 80 comme le
README, test de fumée, puis captures de l'app en anglais jointes au run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Utilisateurs
- Suppression de compte depuis l'écran « Votre compte », confirmée par mot de passe :
arbres possédés et médias effacés, email retiré des contributions, sessions fermées partout.
- Suppression d'arbre définitive, en base et sur le disque.
- Ajout d'un frère ou d'une sœur relié aux parents existants ; relations parent et enfant
corrigées en mode démo.
- Liste d'attente retirée (route, envoi d'emails, dépendance Resend).
Projet ouvert
- CI : front, landing, backend avec vérification des migrations, test Docker de bout en bout.
- Déploiement lancé seulement après une CI réussie sur main.
- Image API : CLI Prisma installée à part pour que les migrations tournent au démarrage.
- SECURITY.md, CONTRIBUTING.md, modèles d'issue et de pull request.
- Migration renommée avec un nom descriptif, contenu identique.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Galaxie familiale : personnes, unions et filiations, photos, vidéos et voix sur chaque personne,
partage par lien avec consultation sans compte et contributions validées par le propriétaire.
Auto-hébergeable avec Docker. Licence PolyForm Noncommercial 1.0.0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>