目的
search に任意の path_prefix structured filter を追加し、既存リポジトリ内の専用ディレクトリを独立した文書検索母集合として扱えるようにする。Neuron Graph RAG との再現可能な検索性能比較で、通常文書を候補へ混入させず固定 Markdown コーパスだけを検索できることを直接の利用例とする。
前提
制約
- 初期契約では
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 一覧
目的
searchに任意のpath_prefixstructured filter を追加し、既存リポジトリ内の専用ディレクトリを独立した文書検索母集合として扱えるようにする。Neuron Graph RAG との再現可能な検索性能比較で、通常文書を候補へ混入させず固定 Markdown コーパスだけを検索できることを直接の利用例とする。前提
doc_pathは doc vector metadata と D1search_docs.doc_pathの両方へ既に格納されている。assignee_1は将来の pre-filter 用に保存されているだけで、現行の assignee filter は post-filter である。公式上限: https://developers.cloudflare.com/vectorize/platform/limits/$gte/$ltrange による prefix search を提供する。ただし対象 property の metadata index が必要で、index 作成前に upsert された vector は再 upsert しない限りその index に含まれない。公式仕様: https://developers.cloudflare.com/vectorize/reference/metadata-filtering/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 を拒否する。assignee_1index を削除してdoc_pathindex を作る。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 にして候補枯れを起こしてはならない。vector_ids) は既存どおり全 metadata filter を無視する。対象ファイル
src/mcp.ts: 入力契約、dense filter、各 mode への引き渡し、説明文src/path-prefix.ts: validation と共通の半開区間src/fts.ts: sparse prefix pre-filter と filter 不成立 probesrc/store.ts/src/scan.ts: scan prefix の store query pushdown と最終確認migrations/0007_doc_path_prefix.sql: repository / doc type / path range probe indexsrc/*.test.ts: 入力契約・search / scan 回帰mcp-server/server/tools.jsと bridge schema tests: static schema mirrordocs/0-requirements.md/docs/0-requirements.ja.md: structured filter の規範docs/installation.md/docs/installation.ja.md:doc_pathmetadata index と既存 vector の再 index 手順README.md/README.ja.md: tool parameter 一覧