传记
输入内容描述了一个人的一生——最常见的是一份年表电子表格(每行一个事件,从出生登记簿、忏悔名单、人口普查记录、法庭/行政档案中整理而来),但也可能是笔记、链接或文档。输出是一份可读的传记以及来源页面。准确性比文笔更重要:家谱学者会对照文档核对每一项声明。
输出文件的存放位置。 所有内容都写入站点项目 family_tree_github/(MkDocs Material;具体参见其 README.md):
| 内容 | 位置 |
|---|---|
| 人物页面 | family_tree_github/docs/people/P1000-<slug>.md |
| 档案记录 | docs/sources/archives/A1000-<slug>.md |
| 书籍/出版物 | docs/sources/books/B1000-<slug>.md |
| 照片 | docs/sources/photos/F1000-<slug>.md(图片位于 docs/assets/images/people/) |
| 网页 | docs/sources/websites/W1000-<slug>.md |
| 地点(居民点) | docs/places/PLC1000-<slug>.md |
| 地点索引 | docs/places/index.md |
| 人物索引 | docs/people/index.md |
| 来源索引 | docs/sources/index.md |
| 菜单 | family_tree_github/mkdocs.yml 中的 nav: |
旧的根文件(带编号 3000–3011 的 sources.md、people.md、*_biography.md)是遗留文件:请勿写入。不要在站点的任何地方提及旧的编号——不要有 legacy_id,不要有「Прежний №」列或行。
ID。 前缀加一个从 1000 开始的四位数编号,取自文件名的开头。ID 永不更改,即使页面被删除也不会重新使用。获取下一个空闲 ID 并使用以下命令检查重复项:
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" # 是否已存在?
python3 .claude/skills/genealogy-biography/scripts/next_id.py list
链接。 仅写入 ID;站点的钩子(hooks/id_links.py)会将其转换为链接:[A1006] → 带有「A1006」标签的指向来源页面的链接;[P1000] → 带有该人物姓名标签的链接;[жена](P1000) → 带有自定义文本的链接。切勿写入内部页面的文件路径或 URL。未知的 ID 会导致构建失败。
1. 读取输入
如果输入是年表电子表格(.ods、.xlsx、.csv),请先加载 chronology-table 技能并遵循其指引:它会转储表格、映射列,并给出每行带来源的核对事实列表。并非每份传记都从表格开始——如果用户提供了其他材料(笔记、链接、文档),则基于这些材料工作,并跳过表格步骤。
检查该人物是否已有页面(next_id.py find "<姓氏>",以及 docs/people/index.md 顶部表格)。标记为 !!! warning "Страница-заготовка" 的页面是占位符:将传记写入该页面,保持其 ID 和文件名。
1a. 读取 Yandex Archive 上的扫描件
对于每个带有 yandex.ru/archive/catalog/... 链接的记录,获取扫描件的识别文本:
python3 .claude/skills/genealogy-biography/scripts/yandex_archive.py page "<url>"
它会打印文档标题、目录路径(архив / фонд / опись / дело),然后打印该页面的识别行。使用它们:
- 找到关于该人物的记录并引用它(参见下面的「引用记录」);
- 获取表格中遗漏的细节:记录编号、受洗日期与出生日期、子女姓名和父母、教父母、婚礼担保人、神父、死亡原因、年龄;
- 从目录路径中补充缺失的档案引用(fond/opis/delo)。
文本是机器识别的手写内容。表格列以单独的行输出,因此需按顺序将日期和年龄与其列匹配,并谨慎对待数字和罕见姓名。要查找表格中没有链接的记录(例如死亡记录),请尝试 yandex_archive.py search "<姓名形式,地点>"。其片段来自结构化标记,有时比页面行更容易阅读(例如年龄)。记录您尝试过的每次搜索,以便报告否定结果。
记录每一次档案审查。 在审查一份案卷或一组扫描件之前,先检查 family_tree_github/internal/checks/reviewed_documents.md(内部文件,不在站点上)——可能已经搜索过。在为此人物搜索了一份出生登记簿、进行了一次 Yandex Archive 搜索、浏览了一份案卷以查找缺失记录后,在其中添加或扩展其条目,包括否定结果:什么内容(архив, fond, opis, delo 或扫描路径)、日期、方式(所有页/抽样/仅搜索)、搜索内容(姓名、地点)、结果(找到 → [A…] 或页面;未找到 → «искали …, не нашли»)、未阅读部分。大量扫描集合使用 archive-scan-search 技能搜索;整本出生登记簿使用 metric-book-index 技能索引。
2. 提取事实并核对
在撰写之前,先为每个事件整理一个事实列表,附上支持来源(当输入是表格时来自 chronology-table 技能),并核对年龄、姓名变体、身份变更、家庭和空白处。清晰地解释身份转变;参见 references/terms.md。
3. 撰写传记
输入表格不是来源——切勿提及它。 年表表格(以及用户提供的任何其他工作笔记)是用户私人的研究文件;站点的读者不知道它的存在,也不了解家谱学或档案搜索。因此,在所有输出文本中:
- 切勿写入「в таблице」、「по таблице」、「из таблицы」、「в исходных данных」、「столбец」、「строка N」等类似表述。仅引用真实来源:档案记录、扫描件、出版物、网站。
- 在未知之处,使用一般性表述:«в имеющихся источниках об этом не сказано»、«дословный текст записи недоступен»、«архивный шифр неизвестен»、«скан найти не удалось»。
- 评论列中的抄本仅称为«расшифровка»(记录的文本),而不是«расшифровка из таблицы»。
- 表格本身的错误和空白(错误的省份、提供的出生日期代替受洗日期、缺少地点的行、拼写错误的姓名)不在传记中讨论:在文本中使用正确的值,并在聊天中向用户报告表格问题(第 6 步)。仅当变体拼写出现在真实来源中时,才在注释中提及。
- 为普通读者解释一切:记录类型是什么、缩写或身份意味着什么。
将每一项事实性声明基于输入数据。 切勿发明日期、地点、亲属、职业、原因或动机。数据沉默之处,要么保持沉默,要么明确说明记录没有显示。诸如「probably」、「likely」之类的短语仅允许用于直接由数据支持的合理推断(例如,根据新地点的记录推断出迁移),并且必须标记为推断。一个工作假设(例如两条记录是同一人)放在«Исследовательские заметки»下,以 Предположение (не подтверждено документами). 开头。
逐条证明亲属关系。 每个父母-子女和配偶链接都是一个独立的声明,有其自己的来源;祖父母或更远的祖先只能通过一系列已证明的链接来证明。在撰写链接时:
- 说明其依据。一条记录中命名的链接应如此撰写(«по записи о рождении 1919 г.»),而不是作为来自多个来源的确定事实。仅当文档相互独立时,它才被视为由多个文档确认:同一记录的副本、摘录、证明或复述是同一来源。
- 父名仅命名父亲(«Яковлевич» = 父亲叫 Яков);它不显示哪个 Яков。共享姓氏、村庄或家庭也不是亲属关系的证据。
- 将完全同姓名者(同名和父名,同村)保持为独立人物,直到记录将他们区分开来;家谱外部的同姓名者获得其自己的比较页面。
- 当记录存在分歧时(例如母亲的父名),同时给出两个版本,并注明谁在何时提供了信息:事件发生时或来自本人做出的记录通常比后来来自他人的记录更有分量。将其记录在
research_open_questions.md中。 - 家庭故事或编撰者的笔记是线索,而非文档:注明来源«по заметкам составителя»,切勿将其呈现为记录。
简短的历史背景是受欢迎的,当它有助于读者理解记录时(什么是萨哈林流刑地、什么是契诃夫 1890 年人口普查、成为教父母意味着什么、«ссыльнопоселенец»身份允许什么)。保持简短、一般性,且明确关于时代——切勿将其作为关于此人的事实呈现。
始终描述访问过的地方。 每当此人访问过特定地点——寺庙、神社、教堂、修道院、博物馆、城堡、农场、工厂、公园、学校、纪念馆等——添加一个简短描述(2-5 句话):它是什么、具体位置在哪里、何时由谁建立、以什么闻名、游客在那里能看到什么。查阅事实(官方网站、维基百科、百科全书)并保持准确;此人自己与该地点的联系(与谁、做什么)仅来自数据。城市、城镇或地区本身不需要描述(可选一行上下文)。如果数据中的地点名称看起来拼写错误或找不到,在文本中使用最可能的真实名称,并在注释部分注明原始拼写。
引用记录。 凡记录文本可用时(表格注释列中的抄本,或来自扫描的识别文本),逐字引用它,格式为:Согласно записи в метрической книге: «Корсаковской тюрьмы ссыльно-каторжная Евдокія Андреева Лапина…» [A1000]. 这适用于每个事件:出生、死亡(包括按原样写的原因和年龄)、结婚、教父母身份、人口普查和忏悔名单。
- 保留原始拼写,包括改革前的正字法和姓名变体。
- 在传记中,静默修正明显的 OCR 错误。在来源页面上,用方括号显示它们:
Корсаковскаго [в распознании: «Корожковскаго»]。 - 欢迎解释和说明,并保留在文本中。将它们放在引文旁边,而不是代替引文,例如 «…(старости)» — то есть умерла от старости。
- 如果没有文本(表格中没有抄本,并且没有扫描件或扫描件不可读),在文本中明确说明:«Дословный текст записи недоступен, скан найти не удалось.» 切勿将记录改写成好像已被引用过一样。
- 引文的来源在其来源页面上说明,而不是在传记中(参见第 4 步的「文本来源标签」)。这些标签以及标记 [?]、[…]、[неразборчиво]、[в распознании: «…»] 的一般说明一次性地存在于 docs/sources/index.md 的 «Откуда взяты цитаты» 部分中;不要在人物页面上重复。
内联引用。 每项声明后,在方括号中添加来源 ID:...родились близнецы Иван и Мария [A1000]. 连续多个:[B1000][A1005]。使用的每个 ID 都必须有对应页面,并且此人每个来源页面至少应被引用一次。
链接人物。 当提到拥有自己页面的人物时,链接他们:运行文本中的 [Егор Почеревин](P1001),列表中的 [P1001](渲染为全名)。没有页面的人物保持纯文本——不为所有提到的人创建页面。
语言。 使用用户要求的语言撰写。如果未指定,使用表格内容的语言(俄语表格用俄语)。保持名称和引用的记录文本为其原始形式;当用另一种语言撰写时,音译名称并在首次提及时在括号中给出原文。
结构(根据人物的生平调整标题;跳过没有数据的部分):
---
person_id: P1005
name: "Имя Отчество Фамилия"
name_variants:
- "<как записан в документах>"
birth_date: "1885-07-15" # ISO;如果是范围则用 "1851/1857";未知则为 ""
birth_date_status: confirmed # confirmed | probable | unknown
death_date: ""
death_date_status: unknown
parents: [P1000] # 仅限拥有页面的人物 ID
spouses: []
children: []
sources: [A1000, A1005]
---
# <全名>(<出生年份或范围> – <死亡年份>)
<一段摘要:谁、哪里、人生历程简述(3-4 句话)。>
不要添加解释来源代码的段落(«Коды в квадратных скобках — ...»、来源类型、OCR 注意事项)。该通用说明一次性地存在于 docs/research-method.md 和 docs/sources/index.md 中,而不是人物页面上。
## <人生阶段 1,例如 起源>
## <...>
## <晚年和去世>
## Семья
<配偶和子女及其日期,以简短列表形式;链接那些拥有页面的人物。>
## Хронология
| 日期 | 事件 | 地点 | 来源 |
<紧凑表格,每输入行一行。>
## Замечания о документах
<年龄、姓名、日期中的差异;空白;值得进一步研究的未解决问题;哪些记录没有可用文本;需要对照扫描件检查的 OCR 读取结果。>
## Исследовательские заметки
<假设和研究线索,每一条标记为 «Предположение»。如果没有则跳过。>
## Источники
- [A1000] — <简短描述>
- ...
## Связанные персоны
- <角色> — [P1000]
4. 来源页面(存在任何来源时必须创建)
每个独立文档一个页面,由所有传记共享。如果多行引用同一记录,则引用同一 ID。在创建页面之前,搜索它(next_id.py find 按档案引用、扫描 URL、原始代码):如果存在,则重用 ID,将关于此人的任何新细节或引用添加到该页面,并将此人添加到其 related_people 和 «Связанные персоны» 中。
选择前缀——根据材料的角色,而非存储位置:
A— 档案记录:出生登记簿条目、忏悔名单、人口普查卡、案卷。页面包含档案引用(архив, фонд, опись, дело, лист)和扫描链接。即使引用未知,但明显是档案记录,也使用A。D— 具体文件或文档(本地扫描/PDF、编撰者的笔记、证明)。目前D来源不发布:不创建...