usuyukiso/généalogie-biographie

Rédige une biographie narrative d'une personne à partir de documents d'archives (actes de naissance, mariage, décès, recensements, listes de confession, etc.), généralement présentés sous forme de tableau chronologique (.ods, .xlsx, .csv) ou de notes, liens et documents. Produit une page de personne pour un site MkDocs, avec des pages de sources et une indexation exhaustive.

Qu'est-ce que généalogie-biographie ?

Cette compétence (skill) permet à un agent IA de générer une biographie complète et vérifiable d'une personne à partir de documents d'archives. L'agent lit un tableau chronologique (via la compétence `chronology-table`) ou des notes, extrait les faits, les vérifie dans les scans Yandex Archive, et rédige une narration biographique qui cite systématiquement les sources (transcriptions et texte reconnu). La biographie est écrite au format Markdown avec un en-tête YAML structuré (dates, parents, conjoints, enfants, sources) et est placée dans un projet de site MkDocs (`family_tree_github`). L'agent crée également une page de source par document distinct (archives, livres, photos, pages web) et met à jour les index partagés des personnes et des sources. Les règles sont strictes : chaque affirmation doit être fondée sur une source, les citations sont textuelles, les liens sont exprimés par des ID, et la table de travail (privée) n'est jamais mentionnée. L'agent utilise des scripts Python pour trouver le prochain ID libre, rechercher des enregistrements, et gérer les logs de consultation d'archives.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/usuyukiso/genealogy-skills/tree/main/genealogy-biography

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Biographie

L'entrée décrit la vie d'une personne — le plus souvent un tableur chronologique (un événement par ligne, compilé à partir de registres paroissiaux, listes de confession, recensements, dossiers judiciaires/administratifs), mais cela peut aussi être des notes, des liens ou des documents. La sortie est une biographie lisible plus des pages de sources. L'exactitude importe plus que le style : les généalogistes vérifieront chaque affirmation par rapport aux documents.

Où va la sortie. Tout est écrit dans le projet du site family_tree_github/ (MkDocs Material ; voir son README.md) :

QuoiOù
Page de personnefamily_tree_github/docs/people/P1000-<slug>.md
Document d'archivesdocs/sources/archives/A1000-<slug>.md
Livre / publicationdocs/sources/books/B1000-<slug>.md
Photodocs/sources/photos/F1000-<slug>.md (image dans docs/assets/images/people/)
Page webdocs/sources/websites/W1000-<slug>.md
Lieu (localité)docs/places/PLC1000-<slug>.md
Index des lieuxdocs/places/index.md
Index des personnesdocs/people/index.md
Index des sourcesdocs/sources/index.md
Menunav: dans family_tree_github/mkdocs.yml

Les anciens fichiers racines (sources.md avec les numéros 3000–3011, people.md, *_biography.md) sont hérités : ne pas y écrire. Ne mentionner jamais les anciens numéros nulle part sur le site — pas de legacy_id, pas de colonne ou ligne « Прежний № ».

IDs. Un préfixe plus un nombre à quatre chiffres à partir de 1000, tiré du début du nom de fichier. Un ID ne change jamais et n'est jamais réutilisé, même après la suppression d'une page. Obtenir le prochain libre et vérifier les doublons avec :

python3 .claude/skills/genealogy-biography/scripts/next_id.py next A A P   # A1010, A1011, P1005
python3 .claude/skills/genealogy-biography/scripts/next_id.py find "23И, оп. 2, д. 24"   # est-ce déjà là ?
python3 .claude/skills/genealogy-biography/scripts/next_id.py list

Liens. Écrire uniquement l'ID ; le hook du site (hooks/id_links.py) le transforme en lien : [A1006] → lien étiqueté « A1006 » vers la page source ; [P1000] → lien étiqueté avec le nom de la personne ; [жена](P1000) → lien avec votre propre texte. Ne jamais écrire de chemins de fichiers ou d'URL vers des pages internes. Un ID inconnu casse la construction.

1. Lire l'entrée

Si l'entrée est un tableur chronologique (.ods, .xlsx, .csv), charger d'abord la compétence chronology-table et la suivre : elle vide le tableau, mappe les colonnes et donne une liste de faits réconciliés par ligne avec les sources. Toutes les biographies ne partent pas d'un tableau — si l'utilisateur donne d'autre matériel (notes, liens, documents), travailler à partir de cela et sauter l'étape du tableau.

Vérifier si la personne a déjà une page (next_id.py find "<nom>", et le tableau en haut de docs/people/index.md). Une page marquée !!! warning "Страница-заготовка" est un placeholder : écrire la biographie dedans, en conservant son ID et son nom de fichier.

1a. Lire les scans sur Yandex Archive

Pour chaque enregistrement avec un lien yandex.ru/archive/catalog/..., obtenir le texte reconnu du scan :

python3 .claude/skills/genealogy-biography/scripts/yandex_archive.py page "<url>"

Il affiche le titre du document et le chemin du catalogue (archive / fonds / inventaire / dossier) puis les lignes reconnues de la page. Les utiliser pour :

  • trouver l'enregistrement concernant la personne et le citer (voir « Citer les enregistrements » ci-dessous) ;
  • récupérer les détails que le tableau ne fournit pas : numéro d'enregistrement, date de baptême vs date de naissance, nom et parents de l'enfant, parrains, garants à un mariage, prêtre, cause du décès, âges ;
  • compléter une référence d'archives manquante (fonds/inventaire/dossier) à partir du chemin du catalogue.

Le texte est une écriture manuscrite reconnue par machine. Les colonnes du tableau sortent comme des lignes séparées, donc faire correspondre les dates et les âges à leurs colonnes par ordre, et traiter les nombres et les noms rares avec prudence. Pour rechercher des enregistrements qui n'ont pas de lien dans le tableau (par ex. un acte de décès), essayer yandex_archive.py search "<formes du nom, lieu>". Ses extraits proviennent d'un balisage structurel et sont parfois plus lisibles que les lignes de la page (par ex. un âge). Enregistrer chaque recherche effectuée, afin qu'un résultat négatif puisse être rapporté.

Journaliser chaque consultation d'archives. Avant de consulter un dossier ou un ensemble de scans, vérifier family_tree_github/internal/checks/reviewed_documents.md (interne, pas sur le site) — il est peut-être déjà recherché. Après avoir consulté un — un registre paroissial lu pour cette personne, une recherche Yandex Archive, un dossier parcouru pour un enregistrement manquant — ajouter ou étendre son entrée là, y compris les résultats négatifs : quoi (archive, fonds, inventaire, dossier ou chemin de scan), date, comment (toutes les feuilles / échantillon / recherche uniquement), ce qui a été recherché (noms, lieux), résultat (trouvé → [A…] ou cadres ; non trouvé → « искали …, не нашли »), ce qui reste non lu. Les grandes collections de scans sont recherchées avec la compétence archive-scan-search ; les registres paroissiaux entiers sont indexés avec la compétence metric-book-index.

2. Extraire les faits et les réconcilier

Avant d'écrire, disposer d'une liste de faits par événement avec sa source justificative (de la compétence chronology-table lorsque l'entrée est un tableau), avec les âges, les variantes de nom, les changements de statut, la famille et les lacunes réconciliés. Expliquer les transitions de statut simplement ; voir references/terms.md.

3. Écrire la biographie

Le tableau d'entrée n'est pas une source — ne jamais le mentionner. Le tableau chronologique (et toute autre note de travail que l'utilisateur donne) est le fichier de recherche privé de l'utilisateur ; les lecteurs du site ne savent pas qu'il existe et ne connaissent rien à la généalogie ou à la recherche archivistique. Donc dans tout le texte de sortie :

  • Ne jamais écrire « в таблице », « по таблице », « из таблицы », « в исходных данных », « столбец », « строка N » et autres. Citer uniquement les sources réelles : documents d'archives, scans, publications, sites web.
  • Là où rien n'est connu, le dire en termes généraux : « в имеющихся источниках об этом не сказано », « дословный текст записи недоступен », « архивный шифр неизвестен », « скан найти не удалось ».
  • Une transcription de la colonne de commentaires est appelée simplement « расшифровка » (le texte de l'enregistrement), pas « расшифровка из таблицы ».
  • Les erreurs et les lacunes dans le tableau lui-même (mauvaise préfecture, date de naissance donnée au lieu de la date de baptême, lignes sans lieu, noms mal orthographiés) ne sont pas discutées dans la biographie : utiliser la valeur correcte dans le texte et signaler le problème du tableau à l'utilisateur dans le chat (étape 6). Mentionner une variante orthographique dans les notes seulement si elle apparaît dans une source réelle.
  • Tout expliquer pour un lecteur non spécialiste : ce qu'est un type d'enregistrement, ce qu'une abréviation ou un statut signifie.

Fonder chaque affirmation factuelle sur les données d'entrée. Ne jamais inventer de dates, lieux, parents, professions, causes ou motifs. Là où les données sont muettes, soit rester silencieux, soit dire clairement que les enregistrements ne le montrent pas. Les expressions comme « probablement », « vraisemblablement » sont autorisées uniquement pour des inférences raisonnables directement soutenues par les données (par ex. un déménagement déduit d'enregistrements dans un nouveau lieu), et doivent être marquées comme des inférences. Une hypothèse de travail (par ex. que deux enregistrements sont la même personne) va sous « Исследовательские заметки », commençant par Предположение (не подтверждено документами).

Prouver le lien de parenté lien par lien. Chaque lien parent-enfant et conjoint est une affirmation distincte avec ses propres sources ; un grand-parent ou ancêtre plus lointain est prouvé uniquement par une chaîne de liens prouvés. En écrivant sur un lien :

  • Dire sur quoi il repose. Un lien nommé dans un enregistrement est écrit comme tel (« по записи о рождении 1919 г. »), pas comme un fait établi provenant de nombreuses sources. Il compte comme confirmé par plusieurs documents seulement s'ils sont indépendants : une copie, un extrait, un certificat ou une redite du même enregistrement est la même source.
  • Un patronyme ne nomme que le père (« Яковлевич » = père nommé Яков) ; il ne montre pas quel Яков. Le nom de famille, le village ou le ménage partagé n'est pas non plus une preuve de parenté.
  • Garder les homonymes complets (même nom et patronyme, même village) comme des personnes distinctes jusqu'à ce que les enregistrements les distinguent ; un homonyme en dehors de l'arbre obtient sa propre page de comparaison.
  • Lorsque les enregistrements divergent (par ex. un patronyme de mère), donner les deux versions côte à côte avec qui a fourni l'information et quand : un enregistrement fait au moment de l'événement ou par la personne elle-même pèse généralement plus qu'un enregistrement ultérieur d'autres personnes. Le journaliser dans research_open_questions.md.
  • Une histoire de famille ou la note du compilateur est une piste, pas un document : l'attribuer « по заметкам составителя » et ne jamais la présenter comme un enregistrement.

Un bref contexte historique est bienvenu lorsqu'il aide le lecteur à comprendre un enregistrement (ce qu'était la colonie pénitentiaire de Sakhaline, ce qu'était le recensement de Tchekhov de 1890, ce que signifiait être parrain, ce que permettait le statut de « ссыльнопоселенец »). Le garder court, général, et clairement sur l'époque — ne jamais le présenter comme un fait concernant cette personne.

Toujours décrire les lieux visités. Chaque fois que la personne a visité un site spécifique — un temple, sanctuaire, église, monastère, musée, château, ferme, usine, parc, école, mémorial, etc. — ajouter une brève description (2–5 phrases) : ce que c'est, où exactement, quand et par qui il a été fondé, ce pour quoi il est connu, ce qu'un visiteur y voit. Rechercher les faits (site officiel, Wikipédia, encyclopédies) et les garder exacts ; le lien propre de la personne avec le lieu (avec qui, ce qu'elle y a fait) vient uniquement des données. Une ville, un village ou une région en soi n'a pas besoin de description (une courte ligne de contexte est facultative). Si un nom de lieu dans les données semble mal orthographié ou introuvable, utiliser le nom réel le plus probable dans le texte et noter l'orthographe originale dans la section des notes.

Citer les enregistrements. Partout où le texte d'un enregistrement est disponible (une transcription dans la colonne de commentaires du tableau, ou un texte reconnu du scan), le citer textuellement, sous la forme : Согласно записи в метрической книге: «Корсаковской тюрьмы ссыльно-каторжная Евдокія Андреева Лапина…» [A1000]. Ceci s'applique à chaque événement : naissances, décès (y compris la cause et l'âge tels qu'écrits), mariages, parrainage, recensements et listes de confession.

  • Conserver l'orthographe originale, y compris l'orthographe pré-réforme et les variantes de nom.
  • Dans la biographie, corriger silencieusement les erreurs OCR évidentes. Sur la page source, les montrer entre crochets : Корсаковскаго [в распознании: «Корожковскаго»].
  • L'interprétation et l'explication sont bienvenues et restent dans le texte. Les placer à côté de la citation, pas à sa place, par ex. «…(старости)» — то есть умерла от старости.
  • Si aucun texte n'existe (pas de transcription dans le tableau, et pas de scan ou un scan illisible), le dire clairement dans le texte : « Дословный текст записи недоступен, скан найти не удалось. » Ne jamais paraphraser un enregistrement comme s'il avait été cité.
  • L'origine d'une citation est indiquée sur sa page source, pas dans la biographie (voir « Étiquette d'origine du texte » à l'étape 4). L'explication générale de ces étiquettes et des marques [?], […], [неразборчиво], [в распознании: «…»] vit une fois dans la section « Откуда взяты цитаты » de docs/sources/index.md ; ne pas la répéter sur les pages de personne.

Citer en ligne. Après chaque affirmation, ajouter l'ID de la source entre crochets : ...родились близнецы Иван и Мария [A1000]. Plusieurs à la suite : [B1000][A1005]. Chaque ID utilisé doit avoir une page, et chaque page source de cette personne doit être citée au moins une fois.

Lier les personnes. Lorsqu'une personne qui a sa propre page est mentionnée, la lier : [Егор Почеревин](P1001) dans le texte courant, [P1001] dans les listes (s'affiche comme le nom complet). Les personnes sans page restent en texte brut — ne pas créer de pages pour tous ceux qui sont mentionnés.

Langue. Écrire dans la langue demandée par l'utilisateur. Si non spécifiée, utiliser la langue du contenu du tableau (pour les tableaux russes — russe). Garder les noms et le texte cité des enregistrements dans leur forme originale ; lorsqu'on écrit dans une autre langue, translittérer les noms et donner l'original entre parenthèses à la première mention.

Structure (adapter les titres à la vie de la personne ; sauter les sections sans donnée) :

---
person_id: P1005
name: "Имя Отчество Фамилия"
name_variants:
  - "<как записан в документах>"
birth_date: "1885-07-15"        # ISO ; "1851/1857" pour une plage ; "" si inconnu
birth_date_status: confirmed    # confirmed | probable | unknown
death_date: ""
death_date_status: unknown
parents: [P1000]                # uniquement les IDs de personnes qui ont des pages
spouses: []
children: []
sources: [A1000, A1005]
---

# <Nom complet> (<année de naissance ou plage> – <année de décès>)

<Résumé en un paragraphe : qui, où, l'arc de la vie en 3–4 phrases.>

Ne PAS ajouter de paragraphe expliquant les codes sources ("Коды в квадратных скобках — ...",
types de sources, mises en garde OCR). Cette explication générale vit une fois dans
docs/research-method.md et docs/sources/index.md, pas sur les pages de personne.

## <Période de vie 1, par ex. Origines>
## <...>
## <Dernières années et décès>

## Семья
<Conjoints et enfants avec dates, sous forme de courte liste ; lier ceux qui ont des pages.>

## Хронология
| Дата | Событие | Место | Источник |
<Tableau compact, une ligne par ligne de l'entrée.>

## Замечания о документах
<Divergences dans les âges, les noms, les dates ; lacunes ; questions non résolues
valant la peine d'être recherchées plus avant ; quels enregistrements n'ont pas de texte
disponible ; lectures OCR qui nécessitent une vérification par rapport au scan.>

## Исследовательские заметки
<Hypothèses et pistes de recherche, chacune marquée « Предположение ». Sauter s'il n'y en a
pas.>

## Источники
- [A1000] — <description courte>
- ...

## Связанные персоны
- <rôle> — [P1000]

4. Pages source (obligatoire lorsqu'il existe des sources)

Une page par document distinct, partagée par toutes les biographies. Si plusieurs lignes citent le même enregistrement, citer le même ID. Avant de créer une page, la rechercher (next_id.py find par référence d'archives, URL de scan, code original) : si elle existe, réutiliser l'ID, ajouter tout nouveau détail ou citation concernant cette personne à cette page, et ajouter la personne à ses related_people et « Связанные персоны ».

Choisir le préfixe — selon le rôle du matériau, pas selon l'endroit où il est stocké :

  • A — un document d'archives : entrée de registre paroissial, liste de confession, fiche de recensement, dossier. La page contient la référence d'archives (archive, fonds, inventaire, dossier, feuille) et le lien vers le scan. Utiliser A même si la référence est inconnue mais qu'il s'agit clairement d'un document d'archives.
  • D — un dossier ou document concret (scan/PDF local, notes du compilateur, un certificat). Pour l'instant, les sources D ne sont pas publiées : créer un…

[Le contenu a été tronqué dans la demande originale]

Skills associés