Skip to content

fix(db): ノート編集時に FTS 索引が旧テキストのまま残るバグを修正#33

Merged
hitalin merged 1 commit into
mainfrom
fix/fts-stale-on-note-edit
Jul 16, 2026
Merged

fix(db): ノート編集時に FTS 索引が旧テキストのまま残るバグを修正#33
hitalin merged 1 commit into
mainfrom
fix/fts-stale-on-note-edit

Conversation

@hitalin

@hitalin hitalin commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

なぜ

notedeck-dev/notedeck#783 の調査で発覚した既存バグ。notes_cache の upsert が text 列を更新せず、FTS に AFTER UPDATE トリガもないため、編集されたノートはローカル検索で旧テキストのままヒットし続け、新テキストでは取りこぼされる。

変更

  • upsert の DO UPDATE SETtext = excluded.text を追加
  • V4 migration: AFTER UPDATE OF text トリガを追加
    • FTS 側にエントリがない行(text が NULL だった行)への 'delete'database corrupt になるため、INSERT ... SELECT ... WHERE で条件付き実行にした単一トリガ(2 トリガ分割は発火順が未定義)
  • 既存 DB の text / note_json 乖離を migration 内で修復(トリガ経由で FTS も追随)

テスト

  • fts_search_reflects_note_edit: 編集後テキストでヒット・編集前テキストの索引が残らない
  • fts_search_reflects_edit_from_null_text: text NULL → テキスト付きへの再キャッシュ(corrupt 回帰の検出)

🤖 Generated with Claude Code

notes_cache の upsert が text 列を更新せず、FTS に AFTER UPDATE トリガも
なかったため、編集されたノートはローカル検索で取りこぼされていた
(notedeck-dev/notedeck#783 の調査で発覚)。

- upsert の DO UPDATE SET に text = excluded.text を追加
- V4 migration: AFTER UPDATE OF text トリガを追加。FTS 側にエントリが
  ない行への 'delete' は database corrupt になるため、INSERT ... SELECT
  ... WHERE で NULL text をガードした単一トリガにする(2 トリガ分割は
  発火順が未定義)
- 既存 DB の text / note_json 乖離を migration 内で修復(トリガ経由で
  FTS も追随)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hitalin hitalin self-assigned this Jul 16, 2026
@hitalin
hitalin merged commit d25d8fd into main Jul 16, 2026
1 check passed
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