Skip to content

feat(search): add document path-prefix filter #252

Closed

Description

@lipluscodex

目的

search に任意の path_prefix structured filter を追加し、既存リポジトリ内の専用ディレクトリを独立した文書検索母集合として扱えるようにする。Neuron Graph RAG との再現可能な検索性能比較で、通常文書を候補へ混入させず固定 Markdown コーパスだけを検索できることを直接の利用例とする。

前提

  • doc_path は doc vector metadata と D1 search_docs.doc_path の両方へ既に格納されている。
  • Cloudflare Vectorize の metadata index は1 indexあたり最大10 propertyで、現構成は10枠を使用済み。assignee_1 は将来の pre-filter 用に保存されているだけで、現行の assignee filter は post-filter である。公式上限: https://developers.cloudflare.com/vectorize/platform/limits/
  • Cloudflare Vectorize は string metadata の $gte / $lt range による prefix search を提供する。ただし対象 property の metadata index が必要で、index 作成前に upsert された vector は再 upsert しない限りその index に含まれない。公式仕様: https://developers.cloudflare.com/vectorize/reference/metadata-filtering/
  • sparse 側は search_docs.doc_path の range predicate、scan 側は DocRecord.path の prefix 判定で同じ母集合を選べる。

制約

  • 初期契約では path_prefix は type: "doc" と組み合わせた場合だけ有効とする。その他の type、type: "all"、type 省略との併用は入力エラーにする。
  • 値は / から始まらない repository-relative directory prefix とし、末尾 / を必須にする。空文字、空 segment、. / .. path segment、backslash、NUL を拒否する。
  • Vectorize string metadata index が先頭 64 bytes だけを索引する制約に合わせ、UTF-8 で 64 bytes 以下にする。
  • metadata index の10枠上限を守るため、未使用の将来用 assignee_1 index を削除して doc_path index を作る。vector metadata 自体の assignee_1 は保持し、現行の assignee post-filter は変えない。
  • 末尾 / の次の文字境界を upper bound とし、dense / sparse 側は doc_path >= prefix AND doc_path < upperBound の同じ半開区間、scan 側は同じ範囲を store query へ押し下げたうえで startsWith(prefix) を最終確認に用いる。結果末尾だけの post-filter にして候補枯れを起こしてはならない。
  • fetch mode (vector_ids) は既存どおり全 metadata filter を無視する。
  • Worker と stdio bridge の tool schema、英日要件文書、導入手順を同じ PR で同期する。
  • 既存の検索結果と filter 未指定時の動作を変えない。
  • 新規リポジトリは作成しない。

対象ファイル

  • src/mcp.ts: 入力契約、dense filter、各 mode への引き渡し、説明文
  • src/path-prefix.ts: validation と共通の半開区間
  • src/fts.ts: sparse prefix pre-filter と filter 不成立 probe
  • src/store.ts / src/scan.ts: scan prefix の store query pushdown と最終確認
  • migrations/0007_doc_path_prefix.sql: repository / doc type / path range probe index
  • src/*.test.ts: 入力契約・search / scan 回帰
  • mcp-server/server/tools.js と bridge schema tests: static schema mirror
  • docs/0-requirements.md / docs/0-requirements.ja.md: structured filter の規範
  • docs/installation.md / docs/installation.ja.md: doc_path metadata index と既存 vector の再 index 手順
  • README.md / README.ja.md: tool parameter 一覧

Activity

  1. added
    enhancement新機能・改善要望
    ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能
    in-progress着手中、実装または検証が進行中
    on Sep 7, 2026
  2. self-assigned this
    on Sep 7, 2026
  3. lipluscodex commented on Sep 9, 2026

    @lipluscodex
    MemberAuthor

    リリース進行状況

    v0.11.0 の GitHub Release は origin/main の 1a826baad05e8c657ea14e53e8c8bf0bac5efdf6 を対象に公開済みです。MCPB の生成・Release への添付、および origin/main:docs/*.md から Wiki への同期は成功しました。

    CD run https://github.com/Liplus-Project/github-rag-mcp/actions/runs/34331464517 では npm-publish だけが失敗しています。失敗 job を一度再実行しましたが、npm publish --access public --tag latest が同じ E404(package publish permission)で失敗し、npm registry の公開版は 0.10.2 のままです。

    再開条件は、GitHub Actions の NPM_TOKEN または npm package publish 権限を復旧したうえで、同 run の failed job を再実行できることです。Release、タグ、MCPB、Wiki は削除・巻き戻ししていません。 #252

  4. added
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    in-progress着手中、実装または検証が進行中
    and removed
    in-progress着手中、実装または検証が進行中
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    on Sep 9, 2026
  5. lipluscodex commented on Sep 9, 2026

    @lipluscodex
    MemberAuthor

    リリース回復完了

    npm publish 資格情報の復旧後、CD run https://github.com/Liplus-Project/github-rag-mcp/actions/runs/34331464517 の失敗 job を再実行し、build-mcpb、attach-mcpb、npm-publish の全 job が成功しました。

    npm registry で github-rag-mcp@0.11.0 と dist-tag latest=0.11.0 を確認しました。公開 tarball 内の package/server/tools.js には、search input schema の文字列 property として path_prefix が含まれています。秘密値の読み取りや出力、追加のソース変更は行っていません。 #252

  6. added
    review-pending実装フェーズ完了。orchestration (brake eval / review / merge / close) 待ち
    and removed
    in-progress着手中、実装または検証が進行中
    on Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能review-pending実装フェーズ完了。orchestration (brake eval / review / merge / close) 待ち

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions