支柱一·语料库(资产)

更新于 · 在 sijie.xyz 查看原条目 ↗

父级:key-designs

这是主理人的知识库——护城河所在。一张表 corpus_notes,带一列 genre(raw / wiki / output / subjectivity / writing)——三层仍然是 raw→wiki→output(与 Obsidian vault 的 raw→wiki→output 同构),但原来分开的 raw_entries / wiki_entries / output_entries / writings 几张表已在 2026-07-09 折进这一个结构(d925d9081 raw、bfb8c7129 writings;backend/db/schema.sql:189)。一棵 parent_id 派生路径树(不存 path 列,重新挂载父节点零成本),以及从 [[wikilinks]] 声明式重建的 note_refs 反链边表(2026-07-06 由 wiki_refs 改名,4fc769d61)。字段:excerpt(原名 summary)、published(原名 seo_indexed)。目前的入口(ingress)= 整库 SyncVault(raw + writing + wiki/subjectivity + CSS)+ writings 的导出/导入 + 管理员直接写入;出口(egress)= 落地页/阅读器(app/src/app/wiki|output|writings)与 agent 的检索工具。

现状: corpus-as-vault 这一块已经落地——三个面都已建成:feed(SyncVault 打通 raw + writing + wiki/subjectivity + .obsidian CSS;output 仍是 promote 派生的;反向导出自 2026-07-29 起把 wiki/subjectivity/output 按 genre 文件夹 + 树 + folder-note 写回 vault——backend/internal/corpus/obsidian/export_corpus.go,9f1ffcf13——与 writings/<slug>.md 并列)、crawl(Meili 全文检索 + 基于 note_refs 的 corpus_links 一跳查询,ACL 在查询里做)、render(KaTeX + Mermaid + callouts + TikZ + widgets)。sync 现在已经是一个 sync 模式的 connector(backend/internal/connector/obsidian.go)。

flowchart LR
  OV["owner side:
Obsidian vault · AI session (push)"] -- "feed face" --> RAW
  subgraph SM["StandMeet — our box"]
    RAW["corpus_notes · genre=raw"] -- promote --> WIKI["corpus_notes · genre=wiki"]
    WIKI -- promote --> OUT["corpus_notes · genre=output"]
    WIKI --- REFS["note_refs
(edge table, rebuilt)"]
    WIKI --> READER["reader UI (app, Next.js)
/wiki /output /writings
(render face)"]
    OUT --> READER
    WIKI --> RET["retrieval (crawl face)
> > Meili lexical entry + corpus_links (1-hop, agent drives depth)"]
  end
  READER --> VIS["visitors · crawlers"]

数据模型(ER)

erDiagram
  CORPUS_NOTES |o--o{ CORPUS_NOTES : "parent_id (derived-path tree, every genre)"
  CORPUS_NOTES ||--o{ CORPUS_NOTES : "source_ids / promoted_to (raw→wiki→output)"
  CORPUS_NOTES ||--o{ NOTE_REFS : "outgoing links (wiki/subjectivity)"
  NOTE_REFS }o--|| CORPUS_NOTES : "targets"
  CORPUS_NOTES ||--o{ WRITING_REFS : "links (genre=writing)"
  ASSETS ||--o{ ASSET_REFERENCES : "in use by"
  ASSET_REFERENCES }o--|| CORPUS_NOTES : "referrer (cover / body standmeet-asset:id)"

  CORPUS_NOTES {
    text genre
    uuid parent_id
    uuid[] source_ids
    text excerpt
    bool published
    bool show_as_source
    text slug
    timestamptz published_at
  }
  ASSETS {
    uuid owner_id
    text kind
  }

刻意保留两套链接体系:语料库树用 note_refs,writings 用 writing_refs——两者都是声明式重建的,从不手工维护(backlinks-as-rebuilt-edge-tables)。writings 与语料库分层之间的区别是一个常设的易混点(confusables)——即便现在两者都是 corpus_notes 里的行,writing 的寻址仍是扁平、按 slug 的,而 wiki/output 的路径由树派生。

media_assets(三个 genre 外键、零个写者)已经删掉;素材现在住在 owner 范围的全局素材池里——assets + asset_references,被引用的素材不能删(d81d2782a,2026-09-05;backend/db/schema.sql:585-613)。

子条目

  • corpus-diagram-coverage — 图表覆盖台账。
  • derived-path-corpus-as-filesystem — parent_id 树,路径是派生的而非存储的。
  • three-tier-corpus-promotion — raw→wiki→output 作为整理管线。
  • backlinks-as-rebuilt-edge-tables — note_refs/writing_refs,声明式重建。
  • global-asset-pool — 一个 owner 范围的 assets 池 + 每次保存从内容重算的 asset_references;被引用的素材拒绝删除并点名引用者。
  • corpus-retrieval —— Meilisearch 词法(Postgres FTS 作退路)+ 树 + corpus_links(1 跳,深度由 agent 决定 —— BFS 是错的心智模型)。不用向量检索,这是刻意的选择。
  • writings-import-export — obsidian 子系统:zip 布局、发布闸门、source-path/slug 幂等性(web-edit 防护已经没了——vault 是唯一的活数据源)、整批链接解析;身份以标题为键,而重命名故意产生孤儿。
  • obsidian-sync-mechanism —— 同步设计(protocol / vault-ingestion / rendering-and-extensibility);所有体裁双向都已接通,而且现在是以 sync 模式连接器的身份在跑。
  • rendering-engines —— 渲染对称性:KaTeX · Mermaid · TikZ · callouts · widgets,全部已上线。

相关笔记