| KPI | 現状 | 不足改修 | 担当 |
|---|---|---|---|
| K1 | Community ビルドは Cargo feature で実装済み | なし | — |
| K2 | Pro ビルドは --no-default-features --features pro で実装済み |
なし | — |
| K3 | launch「Community で起動」あり。ログに Edition 出力済み | なし | — |
| K4 | launch「Pro で起動」あり | なし | — |
| K5 | test:headless で TELOS_HEADLESS=1 起動。spawn は shell:true で対応済み |
なし | — |
Phase 1 の追加改修: 特になし。必要なら「K1–K2 のみ検証する npm スクリプト」を追加可。
cd src/backend && cargo build --manifest-path Cargo.tomlcargo build --no-default-features --features pro --manifest-path src/backend/Cargo.toml[BOOT] Edition: community を確認。[BOOT] Edition: pro を確認。npm run test:headless| KPI | 現状 | 不足改修 | 担当 |
|---|---|---|---|
| K6 | tools/list は MCP で実装済み | なし | — |
| K7 | search_text は FTS+LIKE フォールバック実装済み | なし | — |
| K8 | GET /heal と heal_items_fts 実装済み | なし | — |
| K9 | GET /edition と AppState.edition 実装済み | なし | — |
Phase 2 の追加改修: 特になし。
node tests/test_mcp_client.mjscurl -s http://127.0.0.1:3001/heal{"synced":n} 形式なら合格。curl -s http://127.0.0.1:3001/edition → "edition":"community"。"edition":"pro" を確認。| KPI | 現状 | 不足改修 | 担当 |
|---|---|---|---|
| K10 | init_schema 内で sync_items_fts 呼び出し済み | なし | — |
| K11 | GET /heal で heal_items_fts 実行済み | なし | — |
Phase 3 の追加改修: 特になし。必要なら「items のみ存在する DB コピー」で検証用データを用意する。
[db] items_fts: synced N rows(N>0)が出る、または検索でヒットするようになることを確認。GET /heal を 1 回実行。| KPI | 現状 | 不足改修 | 担当 |
|---|---|---|---|
| K12 | Community の LSA・HNSW・検索は feature 分岐で維持済み | なし | — |
| K13 | db, lsa, mcp の #[cfg(test)] が存在 | なし | — |
Phase 4 の追加改修: 特になし。
npm run test:rustcargo test が exit 0。| KPI | 現状 | 不足改修 | 担当 |
|---|---|---|---|
| K14 | test-and-heal:pro(--pro)で Pro 起動 → heal → test 実装済み | なし | — |
| K15 | --continuous で繰り返し実行実装済み | なし | — |
Phase 5 の追加改修: 特になし。必要なら「2 サイクルで自動停止」するオプションを追加(例: --cycles 2)。
npm run test-and-heal:pronpm run test-and-heal:pro:continuousPro エディションでドキュメントのベクトル化と近似近傍検索が動作するようにする。前提: 埋め込みモデルを確実にロードし、テストに使えるようにする。
| KPI | 改修 | 内容 | 優先度 |
|---|---|---|---|
| K16 | M1: 埋め込みロードの安定化 | 実装済み: (a) 環境変数 TELOS_EMBEDDING_NO_OPTIMIZE=1 のとき into_typed().into_runnable() でロード(最適化スキップ)。(b) 最適化失敗時(エラーに "Cast" / "optim" / "optimize" 含む)は自動で同経路にフォールバック。これで量子化 ONNX の Cast ノードでもモデルを確実にロードしてテストに利用可能。 |
必須 |
| K17–K19 | M2: テスト用スタブ埋め込み(任意) | 環境変数 TELOS_EMBEDDING_STUB=1 のとき、実モデルではなく固定 768 次元ベクトルを返すスタブを使う。モデルが読めない環境でも「ベクトル化 → vec_items → HNSW → 検索」のパイプラインをテスト可能。 |
推奨 |
| — | M3: ベクトル化・ANN 利用のログ | add_item で vec_items に挿入したときに [pro] vec_items inserted id={}。検索で HNSW または vec_items を利用したときに 1 行ログ。動作確認の証跡用。 |
推奨 |
| # | テスト | 手順 | 合格基準 | 対応 KPI |
|---|---|---|---|---|
| T1 | ベクトル化: 1 件追加 | Pro 起動 → add_item_text で 1 件追加 → DB で SELECT COUNT(*) FROM vec_items が 1 増え、該当 id で vec_to_json(embedding) が 768 要素 |
vec_items に 1 行・768 次元 | K17 |
| T2 | 起動時 HNSW | 上記のあと Pro を再起動。ログに [BOOT] Pro HNSW: inserting 1 items (768d)... および [BOOT] Pro HNSW: index built. |
ログで HNSW 構築確認 | K18 |
| T3 | ANN: 検索でベクトルヒット | 追加した文書に近いクエリで search_text を実行。結果の content にその文書が含まれ、similarity が付与される | 意味的に近い文書がヒットし類似度が妥当 | K19 |
| T4 | ANN: 複数文書で順序 | 複数文書を追加し、ある 1 文書と意味的に近いクエリで検索。その文書が上位に来る | 類似度順のランキングが妥当 | K19 |
| # | テスト | 手順 | 合格基準 | 対応 KPI |
|---|---|---|---|---|
| T5 | スタブで vec_items 投入 | TELOS_EMBEDDING_STUB=1 で Pro 起動 → add_item_text で 1 件追加。vec_items に 1 行・768 次元が入る |
vec_items に 1 行・768 次元(スタブ) | K17 |
| T6 | スタブで HNSW 検索 | 続けて search_text を実行。HNSW または vec_items でベクトル検索が動き、該当 id が結果に含まれる | ベクトル経路でヒット 1 件以上 | K19 |
実行順に並べたチェックリスト。CI や手動検証で使用する。
| # | 実施内容 | 合格目安 | 対応 KPI |
|---|---|---|---|
| 1 | npm run test:rust |
exit 0 | K13 |
| 2 | Community ビルド(cargo build in src/backend) |
exit 0 | K1 |
| 3 | Pro ビルド(cargo build --no-default-features --features pro) |
exit 0 | K2 |
| 4 | launch「Community で起動」→ ログで Edition: community 確認 | ログに 1 行 | K3 |
| 5 | launch「Pro で起動」→ ログで Edition: pro 確認 | ログに 1 行 | K4 |
| 6 | ポート 8474/3001 解放 → npm run test:headless |
MCP 待機まで完了 | K5 |
| 7 | MCP 起動中に node tests/test_mcp_client.mjs |
tools/list 成功・search_text 例外なし | K6, K7 |
| 8 | curl -s http://127.0.0.1:3001/heal |
200 + JSON | K8 |
| 9 | curl -s http://127.0.0.1:3001/edition(Community/Pro 各 1 回) |
edition 一致 | K9 |
| 10 | 起動時 FTS 同期の確認(必要なら DB をわざと不整合にして再起動) | ログまたは検索で同期確認 | K10 |
| 11 | 手動 heal 効果の確認(必要なら不整合 DB で GET /heal 前後で検索) | ヒット増加 | K11 |
| 12 | Community 起動 → 文書追加 → 検索ヒット確認 | ヒット 1 件以上 | K12 |
| 13 | npm run test-and-heal:pro |
exit 0 | K14 |
| 14 | npm run test-and-heal:pro:continuous を 2 サイクル以上実行 |
両サイクル test 完了 | K15 |
| 15 | Pro 起動 → ログで埋め込みモデルロード成功確認(または /model_name で pro 系) | ログにエラーなし or model_name が pro 系 | K16 |
| 16 | Pro で add_item_text 1 件 → vec_items に 1 行・768 次元が入ることを DB で確認 | vec_items COUNT 増加・embedding 768 次元 | K17 |
| 17 | vec_items にデータがある状態で Pro 再起動 → ログで HNSW 構築確認 | Pro HNSW: inserting N items (768d)... 等 |
K18 |
| 18 | Pro で文書追加後、意味的に近いクエリで search_text → 該当文書がヒットし類似度付与 | 検索結果に該当 content・similarity | K19 |
自動化できる範囲だけを 1 本のスクリプトにまとめる場合の例。
npm run test:kpi → 順に test:rust → Community/Pro の cargo build → test:headless(または test-and-heal:pro)を実行し、いずれか失敗で exit 1。test:kpi は test:rust + test-and-heal:pro のみ(MCP 未起動ならヘッドレスで Pro 起動してから heal → test)。K1–K2 は別途 npm run build:community / npm run build:pro で確認。必要に応じて tools/run-kpi-check.mjs などを追加し、上記チェックリストの 1, 2, 3, 6, 13 をスクリプト化する。