Skip to content

test: Workers-pool D1/FTS5 integration tests (test-leg slice 2)#169

Merged
liplus-lin-lay merged 1 commit into
mainfrom
165-test-leg-slice2
Jun 21, 2026
Merged

test: Workers-pool D1/FTS5 integration tests (test-leg slice 2)#169
liplus-lin-lay merged 1 commit into
mainfrom
165-test-leg-slice2

Conversation

@liplus-lin-lay

Copy link
Copy Markdown
Member

概要

#165(テスト脚の復元)のスライス2。Master 選択の「Workers 実機寄り」harness で、@cloudflare/vitest-pool-workers が workerd 内でテストを実行し、実際のローカル D1(miniflare) に対して fts.ts の D1/FTS5 サーフェスを統合テストする。./migrations のマイグレーションは applyD1Migrations で適用。

カバレッジ(D1 統合 9 件)

  • bug(fts): D1 FTS5 upsert failures observed for diff rows across all repos #135 の面 — diff 行の FTS5 upsert: upsertFtsRow + queryFts(porter / trigram 両トークナイザ)、ON CONFLICT 再 upsert で FTS5 ミラーが再同期(stale ヒット無し・重複行無し)
  • deleteFtsRow が行と FTS ミラーを除去(orphan ヒット無し)
  • repo / type フィルタ、空クエリの短絡、topK
  • pure な escapeFtsQuery / tokenizerKindForType は node スイートに追加

構成メモ

  • vitest 設定2本: node(vitest.config.ts、スライス1の unit)+ workers pool(vitest.workers.config.ts)。npm test が両方を実行。
  • isolatedStorage off + テストごとに グローバルにユニークな vector_id: FTS5 external-content の vtab は per-test スナップショットでも cross-test の ON CONFLICT update でも壊れる(SQLITE_CORRUPT_VTAB)ため、共有 D1 + 衝突回避で安定化。
  • @cloudflare/workers-typesoverrides で worker コードが前提とするバージョンに固定。pool-workers ツールチェーンが新しい版を引き込むと AI バインディング型が厳格化し src/rerank.ts を壊すため(型のみ・実行時影響なし)。

影響範囲

  • src/ の Worker 本体コードは無変更(テスト + 設定 + 依存のみ)。npm 公開パッケージ(mcp-server/)は不変。
  • 挙動変更なし → patch 相当。本 PR では release しない(テスト基盤)。

残(#165 に残置)

  • DO(store.ts IssueStore、DO 内蔵 SQLite)は runInDurableObject harness で別途。
  • oauth フロー全体 / webhook ルーティングは SELF 統合スタイルで別途。
  • Vectorize / Workers AI 依存パスはローカル emulation が存在しないためローカル統合テスト不可(remote/コストが要るので Master 判断)。

Refs #165

Second slice of the CI test leg (#165), on the Workers-realistic harness:
@cloudflare/vitest-pool-workers runs tests inside workerd against a real local D1
(miniflare). Migrations from ./migrations are applied via applyD1Migrations.

Covers the fts.ts D1 surface, including the #135 regression class (diff-row FTS5
upsert re-sync):
- upsertFtsRow + queryFts across both tokenizers (porter / trigram)
- ON CONFLICT re-upsert re-syncs the FTS5 mirror (no stale hits, no duplicate rows)
- deleteFtsRow removes the row and its FTS mirror
- repo / type filters, empty-query short-circuit, topK
Plus pure escapeFtsQuery / tokenizerKindForType added to the node suite.

Config notes:
- two vitest configs: node (vitest.config.ts, slice-1 unit tests) + workers pool
  (vitest.workers.config.ts); `npm test` runs both.
- isolatedStorage off + globally-unique vector_ids per test: the FTS5 external-content
  vtab corrupts under per-test snapshots and under cross-test ON CONFLICT updates.
- @cloudflare/workers-types pinned via overrides to the version the worker is written
  against; the toolchain otherwise bumps it and breaks src/rerank.ts typing.

Workers バインディング非依存の次として、実機寄り harness で D1/FTS5(#135 の面)を
統合テストした。Vectorize/AI はローカル emulation が無いため対象外で #165 に残す。

Refs #165
@liplus-lin-lay liplus-lin-lay self-assigned this Jun 21, 2026
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
github-rag-mcp 1034293 Jun 21 2026, 01:07 AM

@liplus-lin-lay liplus-lin-lay left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI セルフレビュー (auto mode)

  • ✅ CI 全 green: test ジョブで node スイート 42 + workers pool スイート 9(workerd/miniflare の実 D1)+ schema-drift + tsc --noEmit + wrangler dry-run / Workers Builds。ローカルでも同一シーケンス + 3 回反復で D1 スイートの安定性を確認済み。
  • src/ Worker 本体コードは無変更。差分はテスト(fts.workers.test.ts / test-env.d.ts / fts.test.ts 追記)+ vitest 設定2本 + package(pool-workers 追加・workers-types 固定)。
  • #135 の回帰クラス(diff 行 FTS5 upsert 再同期)を実 D1 で pin。known-answer / 構造不変条件ベースで tautological ではない。
  • ⚠️ @cloudflare/workers-types を overrides で固定: pool-workers ツールチェーンが 4.20260404.14.20260620.1 に bump し、新 AI 型が src/rerank.ts の入力を厳格 reject するため。worker の型環境を main と同一に保つ最小 blast-radius の措置(型のみ・実行時影響なし・rerank.ts は無変更)。
  • リリース種別: 本体無変更で patch 相当。テスト基盤のため本 PR では release しない。

self-review pass。auto mode のため squash merge。#165 は残スコープ(DO / oauth フロー全体 / Vectorize・AI)のため open 継続。

@liplus-lin-lay liplus-lin-lay merged commit 49dd7c9 into main Jun 21, 2026
3 checks passed
@liplus-lin-lay liplus-lin-lay deleted the 165-test-leg-slice2 branch June 21, 2026 01:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant