Repository navigation
feat(index): prepare bounded full sparse document sources and backfill #284
Description
Codex Luna
目的
doc/wikiの全文を、通常検索でまだ使わない独立したsparse source owner/FTS indexへ、版とcoverageを確認して保存できるようにする。明示的なbounded backfillと統計を提供し、本番の行サイズ・失敗・coverageを観察してから #281 のmatched検索へ接続する。単独で出せる保存/運用機能として #281 の依存先とする。
前提
- main
1e3b320。通常FTSは8000-unit prefix(src/pipeline/embed-doc.ts/src/pipeline/hash.ts)。全文側は未実装。fix(index): let FTS write and delete failures retry on the next poll #282/PR#283でFTS更新/削除失敗時の再試行を修正済み。 - #281証跡 の固定11文書でfull sparse候補取得/原文対応は局所確認済み。実品質/production CPUの確認ではない。
- 設定6repoのmain Markdown414件、liplus-language.wiki HEAD
123cd56の148件のGit blob最大は164408 bytes。GitTrees snapshot/候補コストは enhancement(search): offer bounded matched context for long documents #281 に記録する。decoded本文、他repo wiki、実索引coverageとは区別する。
制約・契約
- 既存nat FTS corpus/IDF、8000-unit stored content、dense1資料1vector、通常検索/graphの応答を維持する。
doc_context入力やmatched検索はこのPRに入れない。 - doc/wiki専用の独立した1資料1行source ownerと全文FTS indexを追加。metadata正本はsearch_docs。vector_id/資料type/索引版を結び、prefix owner更新との整合性を持つ。同じ版の再実行でsource/FTS行やvectorが増えない。
DOC_SPARSE_CONTEXT_ENABLEDは省略時false。準備後の明示有効化時のみ通常doc/wiki ingestが全文側も維持する。既定falseでは全文生成/取得/追加SQLを実行しない。operator backfillは明示applyで有効化前にも準備できる。- full原文は
path + 2改行 + body、UTF8 256KiBまで。segmented全文512KiB、全文ownerの行予算1MiBまで。raw/source/body hash、版(doc blobSHA/wiki bodySHA256)、byte数、coverageと理由を持つ。source取得の版を検証し、変更済み行に古いsnapshotを上書きしない。 - 大きすぎる原文/segmented/行はprefix-onlyの「範囲外として処理済み」。coverageをfullとせず、同じ版で無限にFTS失敗再試行しない。次の版やoperator再準備で再判定できる。原文/hashを取得できていないものを取得済みと捏造しない。
- 同じruntimeのsegmenterで索引文字列を生成。保存raw/segmentedと版/hashをそろえ、後の enhancement(search): offer bounded matched context for long documents #281 がexact segmented equalityを検証できる所有にする。位置表は永続保存しない。
- 有効時は既存prefix更新と全文更新をD1 transaction/batchで整合させ、その成功後にstoreの版を進める。全文側のD1書込失敗を完了にしない。doc/wiki/push削除では全文owner/indexも除去し、#282のstore-last/ETag保持/再試行を壊さない。既存graphの意味や既定検索を変えない。
- migration/backfillを実行しない通常検索は現行のまま。operator enableはmigration後のみ。削除/更新後に孤児や古い全文FTS候補を残さない。
Operator backfill/statistics
- マスターの2026-10-13 23:14の指定により、全文管理経路も既存
GITHUB_TOKENヘッダ認証を使用する(配置済みの専用鍵認証からの変更は fix(admin): reuse existing GitHub token for sparse operations #286)。専用鍵は追加・生成・登録しない。GitHub取得用の既存secret値や他の管理経路の認証は変更しない。鍵はrepositoryやチャットに記載しない。repo・doc/wiki・1回の件数/bytesを限定し、planが既定、書くのはapply指定時のみ。無制限な全文取得/一括置換にしない。 - 既存prefix owner/storeの版からsourceを同じ版で取得する。unchanged/blob/hashやETagのskipを再embeddingせずに回避する。wiki本文hashから過去全文を取得できるとは仮定しない。確認できない版は競合/再取得候補として報告する。
- cursorと成功/範囲外/欠損/競合/再試行可能errorを返す。同じ入力の再実行、途中で止まった処理の再開、source更新/削除との競合を検証する。
- source数、coverage別件数、raw/segmented/行予算bytes、未準備/版不一致等の観察に必要な統計を出せる。数値は実行対象・版・取得時刻を併記し、repo tree全体やsource本体と混同しない。
- 本番へのapplyはPRマージ後。apply前にplanを読み、バックアップ/復元・影響範囲を確認する。完了報告はマージ/デプロイ/実際の本番plan・apply観測を区別する。
D1 limits の行/string/BLOB 2000000 bytesより低い予算だが、byte予算をCPU/heap安全の証明とはしない。default off、doc/wiki限定、有界operator処理から始める。
受け入れ条件
既存prefix検索/fetch/graph/vector数の契約維持、doc/wiki fullと範囲外coverage、row/byte境界、版競合、D1失敗の再試行、backfillの再実行/再開、全削除経路、hash/segmented文字列整合を意味のあるテストで確認する。統計/計画からcoverageとbytesを確認できる。source所有とoperator手順を同PRのdocs/要求仕様に固定し、bridge生成物等の同期契約を維持する。frozen corpus/登録bytes/WSLCは変更・再評価しない。
主な対象
D1 migration/独立source owner・FTS・backfill、src/pipeline/embed-doc.ts、src/fts.ts、src/poller.ts、src/webhook.ts、src/types.ts、operator route/CLI、対応テスト、wrangler設定/README/docs・要求仕様。通常検索のrankerをこのissueで変更しない。
関連: #281(この基盤の観察後にmatched検索を実装)、#282/PR#283(再試行)。
— Luna
Activity
lipluscodex commentedon Oct 13, 2026
Codex Luna
PR #285 を開き、head
84dd9a25001ebf12a25b8a1921116f4f37b0e5dfの CI と Workers Builds 完了を待っています。ローカルは 328 unit +115 Workers、bridge33、schema drift、tsc、Worker dry-run が成功。default-off の旧 schema 互換と push/doc/wiki 削除を実 D1 で確認しました。本番の migration/plan/apply と復元は実行していません。— Luna
lipluscodex commentedon Oct 13, 2026
Codex Luna
PR #285 の修正 head b1967d1 を push し、CI/Workers Builds の完了を待っています。既定 off 更新後の版修復と owner 保存を revision CAS の同一 D1 batch に結び、専用 sparse admin secret 認証も実装しました。local 328 unit +125 Workers/tsc/dry-run 緑。secret provision、migration、plan/apply、DB restore は実行していません。親が review/merge と operator 判断を保持します。
— Luna
lipluscodex commentedon Oct 13, 2026
Codex Luna
#284 本番 rollout Phase 1 の実測と引継ぎです。source backfill apply は実行していません。
dd03f86bd0f0aae12a1cd9b6fceef42b38d1062dに merge 済み。対象 commit のWorkers Builds: github-rag-mcp、CI、test は completed / success を確認しました。手動 source deploy は行っていません。0009_doc_sparse_sources.sqlだけで、新 owner table は未作成でした。fresh Time Travel bookmark をローカルの private artifact に控えてから、reviewed commit と同じ migration bytes を確認し、Wrangler 4.119.0 のd1 migrations apply DB_FTS --remoteを1回実行しました(exit 0)。ledger、追加列、owner/view/FTS/trigger を確認済みです。integrity-check, rank=1はすべて成功しました。FTS control command の D1 metadata は各 rows_written=1 と報告しますが、source backfill/本文挿入は行っていません。DOC_SPARSE_CONTEXT_ENABLEDは false、DOC_SPARSE_ADMIN_TOKENは未登録と確認しました。blocked by policyと拒否されました。追加の理由は提示されていません。call自体は実行されず、当該helper/token/secretの作成は行われていません。別経路の再試行はしていません。既存GITHUB_TOKENは変更・読取していません。Liplus-Project/neuron-graph-rag/doc/ limit 1 / max_bytes 1048576 のread-only plan確認が未完了です。admin endpointはまだ呼んでいません。apply判断はそのplan観測後に別途行います。復旧境界は採用済みのD1 Time Travelです。全文SQL exportはFTS/virtual table制限により失敗しており、完全SQL backupはありません。bookmark/token/account IDはこのコメントへ記載しません。restoreは未実行で、DO/Vectorizeを独立復元する保証もありません。local evidenceはworkspaceの
.artifacts/rag-abstention-275/operator-readiness/phase1-*.jsonに保存しています。issueはrollout未完了としてopenのままです。— Luna
lipluscodex commentedon Oct 13, 2026
Codex Luna
本番準備は管理鍵の手動登録待ちです。PR #285/main dd03f86 の CI/Workers Builds 成功、0009 適用と直後の prefix 件数維持・3 FTS integrity 成功は前コメントの実行記録にあります。後の再確認でも全文 owner は 0、機能 flag は false でした。鍵・authenticated plan・backfill apply は未実施です。
自動承認レビューが鍵生成・DPAPI保存・Worker登録の組合せ操作を “blocked by policy” で拒否したため、別経路で再実行していません。既存 GitHub credential は変更していません。
親が手動用 artifact をレビューしました。
D:/Users/hal/Codex_Luna/.artifacts/rag-abstention-275/operator-readiness/manual/のprovision-sparse-admin.ps1は既定 description-only、-Provision時だけ専用鍵を作り CurrentUser DPAPI と制限 ACL で保存して stdin で登録します。sparse-admin.ps1は既定 plan、stats と明示 apply は別操作です。両 script の静的構文検証と JSON sanitizer の試験だけを実施し、実際の鍵操作は実行していません。隔離 Wrangler 4.119.0 を private package/lock とともに用意済み。平文の鍵を表示・保存する工程や GitHub 鍵の参照はありません。マスターによる登録後に、unauthorized 401、authenticated stats、NGR doc の limit 1 plan を確認してから、小範囲の apply を判断します。全文検索の実装 #281 は引き続き別作業です。マージ済み worktree は clean を確認して通常 remove 済みで、手動 artifact はその worktree に依存しません。
— Luna
lipluscodex commentedon Oct 13, 2026
Codex Luna
23:25 引き継ぎ: マスターは Pullcept の Luna アカウント環境変数に既存 GITHUB_TOKEN を設定したと申告。現在の子シェルの Process/User/Machine には GITHUB_TOKEN が未表示(値は出さず presence のみ確認)。Pullcept source crates/account-env/src/lib.rs、src-tauri/src/session.rs:1353/1610 はアカウント env を席起動時に開いて child launch に渡す。マスターがセッション再起動を提案した。
PR #287 は squash 0e4246b として merge 済み。main の test/CI/Workers Builds は success。2管理APIは既存 GITHUB_TOKEN ヘッダ完全一致、専用key/Bearerは不要/非対応。#286 は本番認証確認が残るため reopen。#284 は準備が未完、#281 は matched retrieval の別作業。0009適用済み、以前のprefix件数維持/FTS integrity確認済み。全文ownerは直近0、defaultoff。再起動後は現時点の状態を確認する。
次: Process GITHUB_TOKEN presenceのみ確認、値を出さず既存環境変数をheaderに使用して固定origin https://github-rag-mcp.liplus.workers.dev のunauthorized401とauthenticated stats/planを確認する。最初は repo Liplus-Project/neuron-graph-rag type doc limit1 max_bytes1048576、applyしない。成功後に計画/bytes/coverage/競合を見て小範囲apply判断。環境変数欠如や401なら再入力/別鍵を推測せず報告。gh CLIは引き続きkeyringactorで利用し、GITHUB_TOKENをgh認証へ使わない(そのprocessのみ除外してCLI実行)。
operator-readiness/manual/sparse-admin.ps1 を Process GITHUB_TOKEN 利用に更新するtaskは /root/cloud_operator_readiness に依頼済み。実行前に現行README/helperを確認。以前の専用鍵provision scriptは無効化済み、ローカルimportは今回不要。マスターの秘密ファイルを探す/読む/公開しない。新しいsecret追加/登録/Worker設定変更/手動source deployはしない。
マージ済み #286 worktree はcleanを確認して親がremove済み。元の共有cloneは旧mainなので現在の実装判断はorigin/main/GitHub commitを読む。今のhelperはworktree依存なし。GitHub bodyはCodex Luna prefix、末尾 — Luna。通常のPullcept投稿は名前prefixなし。
— Luna
lipluscodex commentedon Oct 13, 2026
Codex Luna
保存/運用基盤の本番観察を完了しました。PR #285/dd03f86 と認証変更 PR #287/0e4246b の main CI/Workers Builds 成功、0009適用を確認済み。マスター指定の既存 GITHUB_TOKEN を Pullcept の Process 環境変数から使い、値の表示・保存や既存secret変更なしで401/200を確認しました。
小さな doc 1件、長い
docs/requirements.md1件、wikiDecision-Structure1件だけを、直前のplanとprivate Time Travel bookmarkを確認して apply しました。すべてfull成功で、同じcursor/limit1の再実行はunchanged/取得bytes0。全文ownerは0→1→2→3、再実行で増殖しません。版/revision/hash/bytes一致と独立FTS integrityを確認しました。NGR の prefix 件数は観察中 doc275/wiki89のまま。現在の準備範囲はdoc2 full/273 unprepared、wiki1 full/88 unpreparedです。他の資料・次cursor・他repoを取り込んだとは扱いません。準備した3件で競合/再試行エラー/範囲外/予算超過はなし。長文doc初回/repeatのclient wall1.924/.732秒、wiki1.076/.719秒はGit/D1/networkを含み、Cloud CPU/heapの測定ではありません。
DOC_SPARSE_CONTEXT_ENABLEDはfalseを維持。通常検索はまだ全文を使いません。再embedding/vector書込みを行う経路は使わず、物理的な全vector数の測定はしていません。restoreやWorker設定変更も実施していません。full SQL exportはFTS制約で失敗しており、Time Travel復旧自体の実行試験は未実施です。
証跡:
.artifacts/rag-abstention-275/operator-readiness/apply1-status.json、phase2-apply-status.json、phase2-apply-summary.jsonと各plan/apply/repeat/metadata/FTS結果。検索への接続・未準備資料の扱い・拡大rolloutは #281 で進めます。このissueの保存/運用機能と本番pilot観察は完了として閉じます。— Luna