Skip to content

feat(graph): opt-in GraphRAG layer over Decision Structure (D1 edges + traversal) #155

Description

@liplus-lin-lay

目的

dense(Vectorize)+sparse(D1 FTS5) の RRF ハイブリッドにグラフ索引を additive に追加。判断知(Decision Structure = liplus-language wiki の kebab エントリ)の関係を D1 に edges として索引化し、search に opt-in のグラフ展開を足す。judgment-learning が関係を辿って関連判断を拾えるようにする。

前提

  • Phase 0 実測: DS は関係実体として 72% 連結(slug 言及 51 edges / 36 nodes)。現状 prose 言及で索引化されていない。
  • エッジ抽出は決定的 slug-match(LLM 不要)。dst vector_id は wikiDocVectorId で計算。
  • 評価は ship 後の実運用観測(Li+ ネイティブ)。offline harness は作らない。

制約 / 設計方針

  • 完全 additive・既定 off(graph_expand=false で既存 retrieval と byte-identical = 回帰なし)。
  • まず generic "mention" edge のみ(typed supersede/depend/conflict は後続)。migration は IF NOT EXISTS。auto モード: AI self-review+merge+deploy、deploy 後 observe。

対象ファイル / フック

  • migrations/0002_graph_edges.sql (doc_edges + index)
  • src/graph.ts (抽出 indexWikiEdges / upsert / 再帰CTE queryNeighbors / delete / neighbor enrich)
  • src/pipeline/embed-doc.ts (wiki index 直後に抽出フック)
  • src/mcp.ts (search に graph_expand/graph_hops、RRF 後に neighbor append、ResultItem 拡張)
  • src/poller.ts (wiki 削除の edge fan-out)
  • src/index.ts (POST /admin/backfill-edges)
  • docs/0-requirements.{ja,}.md (graph 節)

実装・検証

実装と検証の詳細 = PR #156 本文 + docs/0-requirements の "8. Graph Index" 節(永続・RAG 索引対象) を参照。

注: 当初この設計詳細を harness のローカルプランファイルに置いていたが、外部記憶原則(language-definition.md「External memory = issue/docs/commit, reproduce judgment across sessions/AIs」)に反する dangling 参照だったため、issue 本文(=外部記憶)へ移設した。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions