GrooveSeek

Semantic search over a Markdown knowledge base, served over MCP.

View the Project on GitHub alphabet-h/grooveseek

28. 既存索引の docx は一度だけ読み直し、行ごとに決着させる

背景と課題

ADR-0027 は .docx の分け方を変えたが、 索引は parser を走らせる前に、content hash が一致するファイルを「変わっていない」と答える。 だから誰も編集しない .docx は、索引がある限り前の規則が切った chunk のまま残る。--force で 直るが、desktop アプリは --force を渡さず、その利用者は stderr を見ない。

問いは、既存の索引がどうやって 1 回で追いつくか — 変わっていない .docx を、最初の普通の run で — 正しく分かれている文書を再 embedding せず、読めない文書 1 本のせいで他の文書の追いつきが いつまでも終わらない、ということも無しに。

判断の軸

検討した選択肢

  1. 追いつきはいつ済むか。
    • #251 の frontmatter の点検と同じく、どの .docx も読めた時。却下: 読めない .docx が 1 本 (サイズ上限超過、parse 失敗) あると済まず、毎 run どの .docx も読み直す。 desktop には抜け出すための --force も stderr も無い。
    • 文書行ごとに「どの規則で分けたか」の列を持つ。正確だが、migration 付きの schema 変更、 変わっていない仕事を飛ばす経路も含めて全書き込み経路が埋める列、それ自体の記録が要る。
    • run の中で行ごとに決着させる: 書き直す / 読み直して一致を確かめる / 消す / どのファイルの hash とも一致しない content hash を書いて fast path に乗せない。 採用。schema 変更は要らず、 コストは、まだ読めない .docx 1 本につき run ごとの読み込み 1 回。
  2. 印。 index_meta.docx_heading_policy という独自の key を、#251 の frontmatter_policy と 共有せずに隣に置く: 2 つの pass は対象のファイルも仕事も済む条件も違い、共有すると片方の未完が もう片方を止める。

決定

結果と代償

参考