4.2 KiB
4.2 KiB
Review: TUI # Knowledge 補完の未実装解消
対象実装: 7b8eb3a feat(pod): wire knowledge slugs into # completion (branch tui-knowledge-completion)
前提・要件の確認
要件4項目すべてを diff 上に対応コードと根拠付きで確認した。
- 「
.insomnia/knowledge/配下の slug がmodel_invokationの真偽に関わらず列挙される」:memory::list_knowledge_slugsがwalk_knowledgeをmodel_invokationフィルタなしで通す(crates/memory/src/resident.rs:47-52)。テストlist_slugs_returns_all_regardless_of_model_invokation(同:196-204)がtrue/false/trueの 3 件を全部返すことを確認している。 - 「
#fooの prefix 入力中は prefix マッチのみが返る」:PodSharedState::list_knowledge_completionsがstarts_withで絞り込み(crates/pod/src/shared_state.rs:102-113)。テストknowledge_completions_filter_by_prefix(同:262-287)がalphaprefix でalpha/alphabetのみ返り、zzzで空、空 prefix で全件、を確認。 - 「memory_layout が None の Pod で空ベクタ、エラーにならない」:
Pod::knowledge_completionsがmemory_layout.as_ref().map(...).unwrap_or_default()で短絡(crates/pod/src/pod.rs:1240-1245)。controller もVec<String>を素通しでset_knowledgeに渡すだけで panic 経路なし(crates/pod/src/controller.rs:391-396)。IPC 側もOnceLock未 set で空を返す(テストknowledge_completions_empty_when_unset:256-260で確認)。 - 「確定時挙動は既存 TUI のまま、Pod 側を埋めるだけ」: TUI クレートには変更なし。IPC server の
CompletionKind::Knowledge分岐のみがVec::new()から実装に差し替えられている(crates/pod/src/ipc/server.rs:105-113)。CompletionEntryのvalueに slug、is_dir: falseを詰める形は Workflow 分岐と完全に同形。
単体テスト 4 項目もすべて存在し、cargo test -p memory --lib resident:: と cargo test -p pod --lib shared_state:: でグリーン。
アーキテクチャ・スコープ
- 列挙 API を
memoryクレート(低レベル workspace 操作の所在)に追加し、Pod 層は Memory layout から「引いて詰めるだけ」というレイヤ分割を保っている。llm-workerを巻き込まない、higher-level は上層という方針に合致。 WorkflowCandidate/set_workflows/list_workflow_completionsとKnowledgeCandidate/set_knowledge/list_knowledge_completionsがフィールド順・docstring の有無・実装行数まで揃っており、mirror 対象(shared_state.rs:74-89、controller.rs:385-390、pod.rs:1236)のスタイルと一貫している。walk_knowledgeの共通化はFnMut(String, KnowledgeFrontmatter)1 つの最小抽象で、2 呼び出し元の重複(read_dirのエラー早抜け、非.mdスキップ、frontmatter parse スキップ)を素直にまとめている。やりすぎ(Iterator 化、ジェネリック化)はしておらず、CLAUDE.md の「変更量を最小に」「設計を歪めない」に合致する。逆に共通化を見送って書き写すと 30 行程度の同形コード重複になるので、この程度の抽出は妥当。- 範囲外は守られている。frontmatter スキーマ、
collect_resident_knowledgeの挙動(model_invokation: trueのみ返す resident 注入用途)、workflow/file 補完経路、TUI コードへの手入れは一切なし。
指摘事項
Non-blocking / Follow-up
- なし。
Nits
crates/memory/src/resident.rs:26-28のcollect_resident_knowledgeの docstring が<workspace>/knowledge/*.mdのままで、実 path<workspace>/.insomnia/knowledge/*.md(list_knowledge_slugs側の docstring:43-46では正しく書かれている)と齟齬がある。本チケットの範囲外の既存記述だが、隣接行を編集したついでに同期しておくと整う。今回は追わなくてよい。
判断
Approve — ticket の前提・方針・要件・テスト 4 項目すべてに対応コードとパスする単体テストがあり、範囲外を踏まず、Workflow 経路と整合した最小実装になっている。