Skip to content

feat(index): prepare bounded full sparse document sources and backfill #284

Closed

Description

@lipluscodex

Codex Luna

目的

doc/wikiの全文を、通常検索でまだ使わない独立したsparse source owner/FTS indexへ、版とcoverageを確認して保存できるようにする。明示的なbounded backfillと統計を提供し、本番の行サイズ・失敗・coverageを観察してから #281 のmatched検索へ接続する。単独で出せる保存/運用機能として #281 の依存先とする。

前提

制約・契約

  • 既存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

  1. self-assigned this
    on Oct 13, 2026
  2. added
    enhancement新機能・改善要望
    ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能
    on Oct 13, 2026
  3. added
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    and removed
    in-progress着手中、実装または検証が進行中
    on Oct 13, 2026
  4. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    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

  5. added
    review-pending実装フェーズ完了。orchestration (brake eval / review / merge / close) 待ち
    in-progress着手中、実装または検証が進行中
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    and removed
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    review-pending実装フェーズ完了。orchestration (brake eval / review / merge / close) 待ち
    in-progress着手中、実装または検証が進行中
    on Oct 13, 2026
  6. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    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

  7. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    Codex Luna

    #284 本番 rollout Phase 1 の実測と引継ぎです。source backfill apply は実行していません。

    • merge/CD: PR feat(index): add bounded full sparse doc sources and operator backfill #285 は main dd03f86bd0f0aae12a1cd9b6fceef42b38d1062d に merge 済み。対象 commit の Workers Builds: github-rag-mcp、CI、test は completed / success を確認しました。手動 source deploy は行っていません。
    • migration: 実行直前の remote ledger では pending は 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 を確認済みです。
    • migration 前後: prefix の type 別件数は同一(doc 469、wiki_doc 255、対象 NGR doc 274)。新 owner は0行。active nat/code と新 source FTS の integrity-check, rank=1 はすべて成功しました。FTS control command の D1 metadata は各 rows_written=1 と報告しますが、source backfill/本文挿入は行っていません。
    • 再開時の現在値: migration 0009 は引き続き適用済み、owner 0行、NGR doc prefix は275行(前回274からの変動原因は未確認)。再開時のSELECTは rows_written=0。migration を重ねて実行していません。現在の deployed Worker metadata は単一 version 100%、DOC_SPARSE_CONTEXT_ENABLED は false、DOC_SPARSE_ADMIN_TOKEN は未登録と確認しました。
    • secret/auth の未完了: 専用256-bit tokenをDPAPI CurrentUserで保管しstdin経由でsecret putするローカルhelper作成・実行のtool callが、自動承認レビューにより blocked by policy と拒否されました。追加の理由は提示されていません。call自体は実行されず、当該helper/token/secretの作成は行われていません。別経路の再試行はしていません。既存 GITHUB_TOKEN は変更・読取していません。
    • 残り: 専用secretのprovision、unauthorized 401、authenticated stats、および 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

  8. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    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

  9. added
    blockedhuman 入力待ち。stop 状態(issue comment に reason 必須)
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    and removed
    waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態
    blockedhuman 入力待ち。stop 状態(issue comment に reason 必須)
    on Oct 13, 2026
  10. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    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

  11. lipluscodex commented on Oct 13, 2026

    @lipluscodex
    MemberAuthor

    Codex Luna

    保存/運用基盤の本番観察を完了しました。PR #285/dd03f86 と認証変更 PR #287/0e4246b の main CI/Workers Builds 成功、0009適用を確認済み。マスター指定の既存 GITHUB_TOKEN を Pullcept の Process 環境変数から使い、値の表示・保存や既存secret変更なしで401/200を確認しました。

    小さな doc 1件、長い docs/requirements.md 1件、wiki Decision-Structure 1件だけを、直前のplanとprivate Time Travel bookmarkを確認して apply しました。すべてfull成功で、同じcursor/limit1の再実行はunchanged/取得bytes0。全文ownerは0→1→2→3、再実行で増殖しません。版/revision/hash/bytes一致と独立FTS integrityを確認しました。

    対象 raw bytes segmented bytes owner行bytes
    最初のdoc 4546 5170 10287
    docs/requirements.md 36293 41476 78340
    wiki Decision-Structure 12676 14663 27963

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能waiting外部依存待ち(CI / dependent issue / 環境)。pause 状態

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions