反向链接即重建的边表
父节点:corpus
[[X]] 原样存在正文里(存储时从不改写)。每次保存时,代码会提取全部 [[X]],把它们解析成 id,然后先删掉全部出边、再插入新的一整套(note_refs / writing_refs——note_refs 在 2026-07-06 之前叫 wiki_refs,4fc769d61;两张表现在都指向 corpus_notes,backend/db/schema.sql:294、:639)——这是声明式而非增量式的做法,所以不会出现边记录对不上的 bug。出度对应"来源 / 接下来读";入度(按 dst 统计)就是反向链接;两者都是实时 COUNT,不额外存冗余列。
两套体系的解析规则不同:writing_refs 先按 slug、再按标题,不区分大小写(refreshCrossLinks,backend/internal/corpus/usecase/writings_save.go:185);note_refs 没有 slug——按标题加上笔记 frontmatter 的 aliases 别名池,不区分大小写(corpus_notes.aliases,463411b48,2026-08-05)。找不到匹配就照原样渲染 [[X]](与 Quartz/Obsidian 兼容)。vault 自身的 [[]] 行为一致,而 show_as_source 控制的是一条已读记录是否被引用显示 → derived-path-corpus-as-filesystem 是与此并列的树形思路。