System Version: 1.3.1
- 2026-01-18: 追加:
/api/configの system_version をヘッダーに表示。 - 2026-01-19: 調整: heartbeat の送信判定を改善(ユーザー操作検出の強化・二重発火の抑制)。
- 2026-01-19: 更新: README を簡略化し、
docs/operations.mdに設定一覧/運用/FAQ を整理。 - 2026-01-19: 更新: README/AGENTS/CLAUDE の案内整合を調整し、運用ドキュメント参照を明確化。
- 2026-01-19: 追加: warmup/heartbeat のサーバ設定を config.json で指定可能に。
- 2026-01-16: 改善: 設定を config.json と .env に分離し、config.json を必須化。
CONFIG_PATHで config.json の位置を指定可能- env → config.json → 既定値の優先順位で読み込み
- config.json 不在時は案内メッセージを表示して起動停止(自動コピー廃止)
.envの空値VAR=を「未設定」として扱い、config.json で補完可能に
- 2026-01-16: 更新: README と UI の設定ガイドを config.json 前提に整理。
- 2026-01-16: 追加:
/api/configでフロント向け設定(ハートビート/履歴/描画バッチ/検索初期値)を返却し、UI側で取得して反映可能に。 - 2026-01-16: 修正:
/api/healthにキャッシュ無効化ヘッダーを追加。 - 2026-01-15: 改善: heartbeat 失敗時に health へ切り替えて復帰待ちし、復帰後に folders を再取得して heartbeat を再開する接続監視フローを追加。
- 接続状態をステータスチップで表示(接続中 / 復旧中 / 接続失敗)
- heartbeat の連続失敗・最終成功からの経過で切替判定
- 2026-01-15: 修正: health ポーリング停止後に再スケジュールされ続ける問題を解消。
- 2026-01-15: 調整: health 確認間隔を 5〜8 秒に短縮し、health リクエストにクエリ付与でキャッシュ回避。
- 2026-01-15: 修正: 検索履歴のフォルダ選択と範囲入力の復元挙動を整合化。
- 2026-01-16: 改善: 履歴復元の安定化(フォルダロード待機、無効ID除去、range復元の整理)。
- 2026-01-16: 修正: loadFolders() の並行呼び出しによるレース条件を解消(in-flight Promise 保持)。
- 2026-01-16: 改善: warmupモジュールをリファクタリングし、世代ロック方式を導入。
backend/warmup.pyを新規作成し、warmup関連ロジックを分離- startup/generation_switch: 世代ごとに1回だけ実行(
.warmup_<gen>.lockで制御) - keep-warm: idle/interval条件で定期的に実行(ページキャッシュ追い出し対策)
WARMUP_ENABLEDをデフォルトON(True)に変更- keep-warmループにアクティブクライアント数チェックを追加(処理中リクエスト時はスキップ)
- 環境変数:
WARMUP_ENABLED,WARMUP_IDLE_SEC,WARMUP_INTERVAL_SEC,WARMUP_MAX_FILES - time.monotonic() を使用しシステム時刻補正の影響を回避
- 2026-01-16: 改善: インデックス世代のウォームアップ/keep-warm/クエリ再生を追加し、メイン/管理プロセスのみで実行。
- 2026-01-15: リファクタリング: web_server.py (4147行) を廃止し、モジュール分割された backend/ 構成へ移行。
app.py: エントリポイントbackend/routes.py: APIルートとアプリケーション状態backend/search.py: 検索ロジックbackend/index_ops.py: インデックス操作backend/extractors.py: ファイル読み込み・テキスト抽出backend/text_utils.py: テキスト正規化backend/utils.py: ユーティリティ関数backend/config.py: 設定定数
- 2026-01-15: 整理: File Version コメントを全ファイルから削除(git で履歴管理するため不要)。
- 2026-01-15: 修正: PDFフォールバック抽出でページごとにファイル位置をリセットし、欠落リスクを低減。
- 2026-01-15: 改善: 抽出失敗時のログ出力を追加し、原因特定を容易化。
- 2026-01-15: 改善: file_id を12桁に拡張し、/api/detail のバリデーションを更新。
- 2026-01-15: 改善: process 非共有時の build_memory_pages を routes と整合させ、表示・正規化の差異を解消。
- 2026-01-15: 改善: scan_files の権限/OSエラー耐性を追加し、部分的に取得可能に。
- 2026-01-15: 修正: AppState の未定義フィールドが初期化エラーになる問題を修正。
- 2026-01-15: 修正: HTTPS 判定の証明書パス解決を BASE_DIR 基準に統一。
- 2026-01-14: 改善: インデックス構築時に対象フォルダが見つからない場合は warn ログを出力。
- 2026-01-14: 改善:
.envのSEARCH_FOLDERSを生読みし、WindowsのC:\...をそのまま記載可能に。
- 2026-01-13: 改善: 心拍の送信条件を「最終操作からの経過時間」で制御し、復帰時のみ即送信。
- 2026-01-13: 改善: アクティブクライアント数に上限を設定(
HEARTBEAT_MAX_CLIENTS、未指定時はワーカー予算に準拠)。
- 2026-01-12: 改善: アクティブクライアント数ベースで検索ワーカーを動的に割り当て(TTL 90秒)。
/api/heartbeatを追加し、クライアントの接続状態をハートビートで更新- 直近TTL内のクライアント数から
workers_per_requestを算出 - UIでハートビート送信(30〜45秒間隔 + 操作時即時)
- 2026-01-12: 改善: 検索レスポンスから detail を除外し、クリック時に detail を取得するように変更。
/api/searchの結果にdetail_key(file_id/page/hit_pos)を追加/api/detailを新設し、詳細本文を遅延取得- UIで詳細パネルを開いたタイミングで detail を取得してハイライトを維持
- CSV/JSONのエクスポートは従来どおり detail を含める
- キャッシュバージョンを更新して detail_key が必ず返るように調整
- 実測: 大量ヒット時のレスポンス生成が大幅に短縮(開発機で 2.6s → 0.7〜1.3s 程度)
- 2026-01-10: 改善: 表記ゆれの実効モードをレスポンスに含め、UIにフォールバックを通知。
normalize_modeを検索レスポンスに追加- UIで履歴保存に実効モードを反映
- フォールバック時に通知を表示
- System Version 表記を 1.1.6 に統一
- 2026-01-11: UI調整: フォールバック通知を非ブロッキング化し、空白モードの既定値と履歴表記を統一。
- 表記ゆれフォールバック通知を画面内の通知バーへ変更
- 空白除去の既定値を検索/履歴/CSVで統一
- 履歴の「表記ゆれ」表示をUI選択肢に合わせて調整
- 2026-01-11: CSV出力: 表記ゆれの表示をUI表記に合わせて統一。
- 2026-01-10: 仕様変更: 厳格検索を「最小整形」に変更。
- 改行/不可視のみ整える
norm_strictを追加 - 厳格は
norm_strict、ゆらぎ吸収はnorm_cfを使用 - UIの表記を「厳格(最小整形)」に更新
- System Version 表記を 1.1.5 に統一
- 改行/不可視のみ整える
- 2026-01-10: 仕様変更: 表記ゆれの既定を「ゆらぎ吸収」に変更。
normalize_modeのデフォルトをnormalizedに変更- UIの既定選択を「ゆらぎ吸収(推奨)」に変更
- 設定例で
QUERY_NORMALIZE=nfkc_casefoldを推奨 - System Version 表記を 1.1.4 に統一
- 2026-01-10: ドキュメント/表示調整: 表記ゆれの既定方針を明文化。
.env.example.txtの注記を「デフォルト方針」に変更- 履歴表示のフォールバックを「厳格」に統一
- 2026-01-10: 改善: 正規化モードは
INDEX_STORE_NORMALIZED=1の場合のみ有効化するように調整。- 無効時は
exactへフォールバックし、警告ログを出力
- 無効時は
- 2026-01-10: ドキュメント/仕様整理: 正規化設定の説明を追加し、normalize_mode の既定値を明確化。
- README に
QUERY_NORMALIZE/INDEX_STORE_NORMALIZEDを追記 normalize_modeのデフォルトをexactに統一
- README に
- 2026-01-10: UI文言: 表記ゆれの説明をユーザー向けに分かりやすく調整。
- UIのラベル/履歴表示を「表記ゆれ」に統一
- 手法(NFKC+casefold)は使い方に補足として明記
- 2026-01-10: 機能追加: あいまい検索オプション(NFKC + casefold 正規化)を追加(issue #6 対応)。
normalize_modeによる正規化検索(exact / normalized)をAPIに追加QUERY_NORMALIZEとINDEX_STORE_NORMALIZEDの設定を追加- 正規化済みテキストの保持に対応し、キャッシュキーにも正規化モードを反映
- UIに正規化モードの選択を追加(検索履歴/エクスポートにも反映)
- 2026-01-09: 機能追加: UI改善 - クエリ履歴機能を実装(issue #7 対応)。
- localStorage を使用した検索履歴の保存(上限50件)
- ピン留め機能により重要な検索を保存可能
- 履歴から1クリックで同条件の再検索が可能
- 検索条件(query, mode, range_limit, space_mode, folders)を完全に復元
- タイムスタンプ表示(相対時刻表示:○分前、○時間前など)
- 2026-01-09: 機能追加: エクスポート機能を実装(issue #7 対応)。
/api/exportエンドポイントを追加(CSV/JSON形式に対応)- 検索条件とindex_uuidをメタデータとして含めて再現性を担保
- CSV形式はExcel互換(UTF-8 BOM付き)
- UIにエクスポートボタンを追加(検索結果がある場合のみ表示)
- 2026-01-09: 機能追加: ファセット絞り込み情報を検索レスポンスに追加(issue #7 対応)。
- フォルダ別・拡張子別の集計情報(facets)を計算
- 検索結果レスポンスに
facetsフィールドを追加 - UI側でファセット表示パネルを実装(上位10件表示)
- フォルダとファイル形式別の件数を視覚化
- 2026-01-09: 機能追加: 結果内絞り込み(search-within-results)を実装(issue #7 対応)。
result_set_idによる結果セットの管理(TTL: 1時間、最大100件)- SearchRequestに
result_set_idパラメータを追加 - 検索レスポンスに
result_set_idを含めて次回の絞り込みに対応 - メモリ内で結果セットを保持し、期限切れのものを自動クリーンアップ
- 結果内検索専用の高速検索パス実装
- 連続的な絞り込み検索が可能(各絞り込みで新しいresult_set_idを生成)
- 2026-01-09: 機能追加: キャッシュ整合性の強化(issue #5 対応)。
- 固定キャッシュに
index_uuidとschema_versionを記録し、インデックス更新後の古いキャッシュを自動無効化 get_current_generation_manifest()関数を追加(現在の世代の manifest.json を取得)- キャッシュ取得時に整合性チェックを実施(不一致の場合はログ出力して無効化)
- 起動時にキャッシュ整合性検証を実施(
validate_cache_integrity()関数を追加) - 固定キャッシュ再構築時に現在の世代情報を記録
- インデックス更新後に古いキャッシュがヒットしない仕組みを確立
- 固定キャッシュに
- 2026-01-09: バグ修正: キャッシュ整合性検証の条件を修正(レビュー指摘対応)。
index_uuid/schema_versionが欠落している古いキャッシュも無効化対象に変更validate_cache_integrity()と_try_get_fixed_cache()の両方で条件を修正- 既存の固定キャッシュ(メタデータ欠落)が有効扱いで通る問題を解決
- 2026-01-09: バグ修正:
prune_cache_dir()がメタデータファイルを削除する問題を修正(レビュー指摘対応)。fixed_cache_index.jsonとquery_stats.jsonを削除対象から除外- メタデータファイルが保護され、整合性検証と統計が維持されるように修正
- キャッシュ整合性強化の意図を正しく実現
- 2026-01-09: 機能追加: インデックス失敗ファイルの常時ログ出力(レビュー指摘対応)。
build_index_for_folder()の最後で failures が非空なら件数を log_warn で表示- 詳細(ファイルパスと理由の先頭5件)は
SEARCH_DEBUG=1の時のみ表示 - 再インデックス対象が0件でも既存の失敗記録を把握可能に(運用性向上)
- 2026-01-12: 機能改善: 前回失敗ファイルを起動/スケジュール時に毎回再試行。
- 差分判定に関係なく失敗ファイルを再試行対象に追加
- 再試行成功は
log_noticeで通知 - 再試行失敗は従来通り
log_warnに出力 - 失敗履歴を
failures_*.jsonに保存し、再起動後も再試行対象に復元 failures_*.jsonが無い/読めない場合は再試行対象を拡張(保存/読み込み失敗時は警告ログ)failures_*.jsonはテンポラリ経由で原子的に保存し、破損を防止
- 2026-01-09: UI/検索改善: 結果内絞り込みの安定性を向上(レビュー指摘対応)。
- 結果セットIDを UUID 化して衝突を回避
- 絞り込み検索時はフォルダ未選択でも実行可能に
- 2026-01-09: バグ修正: 結果内絞り込み時のリクエスト検証を修正(レビュー指摘対応)。
result_set_idがある場合はフォルダ未選択を許容するようにバリデーションを変更
- 2026-01-09: 機能追加: 結果内フィルタ(フォルダ/形式/ワード)をUIに追加(ローカル絞り込み)。
- 検索結果パネルにフィルタボタンを追加
- フォルダ/拡張子/追加ワードでクライアント側の絞り込みを実装
- 表示件数を「絞り込み件数 / 総件数」で表示
- 2026-01-09: UI整理: 自動表示されるファセットパネルを削除。
- 2026-01-09: UI整理: 結果内フィルタのワード絞り込みと「結果内で絞り込む」を撤去。
- フィルタはフォルダ/形式のみ
- 検索は通常のサーバー検索に統一
- 2026-01-09: 仕様整理: 結果内検索(result_set_id)をサーバーから削除。
- SearchRequest から
result_set_idを削除 - 結果セット管理と関連APIレスポンスを廃止
- SearchRequest から
- 2026-01-09: 仕様整理: 未使用のファセット集計をサーバーから削除。
- 検索レスポンスから
facetsを削除 - 不要な集計処理を削除してレスポンスを軽量化
- 検索レスポンスから
- 2026-01-09: UI調整: 検索履歴の保存件数を30件に変更。
- 2026-01-08: 機能追加: 世代ディレクトリ方式のインデックス再構築を実装(無停止運用対応)。
indexes/gen_<uuid>/に世代ごとのインデックスを保存indexes/.build/gen_<uuid>/で新世代を構築後、原子的に切替indexes/current.txtで現在の世代を管理manifest.jsonで世代メタデータを記録
- 2026-01-08: 機能追加: インデックス世代の保持ポリシーを実装(無限増殖防止)。
INDEX_KEEP_GENERATIONS: 保持する世代数(デフォルト: 3)INDEX_KEEP_DAYS: 保持する日数(0=無制限)INDEX_MAX_BYTES: 最大容量(0=無制限)INDEX_CLEANUP_GRACE_SEC: 切替後の猶予期間(デフォルト: 300秒)
- 2026-01-08: ドキュメント: README.md にロールバック手順を追加。
- 2026-01-08: バグ修正: 差分更新ロジックの修正(前回の世代から既存キャッシュを読み込むように改善)。
- 2026-01-08: 機能追加: 既存のフラットなインデックスから世代ディレクトリへの自動移行処理を実装。
- 2026-01-08: リファクタリング: cleanup_old_generations のロジックを簡素化(可読性向上)。
- 2026-01-08: バグ修正: build_all_indexes のエラーハンドリング改善(失敗時にビルドディレクトリを確実に削除)。
- 2026-01-08: バグ修正: INDEX_MAX_BYTES が現在の世代を含むように修正(P2 Badge 指摘対応)。
- 全世代の合計ディスク使用量で判断するように変更
- ドキュメントに動作を明記
- 2026-01-08: バグ修正: INDEX_MAX_BYTES の計算に猶予期間中の世代も含むように修正。
- 猶予期間中の世代は削除されないが、サイズ計算には含まれる
- 「現在+猶予+保持世代」の実使用量で上限判定を行うように改善
- 2026-01-08: ドキュメント: .env.example.txt の INDEX_MAX_BYTES コメントを README と整合させた。
- 2026-01-08: バグ修正: current.txt 欠落時の復旧ロジックを追加。
- current.txt がない場合、最新の世代を自動選択して復旧
- 検索・差分更新の挙動が安定化
- 2026-01-08: バグ修正: list_generations のソート時に manifest がない世代を正しく扱うように修正。
- manifest がない場合、gen_name からタイムスタンプを抽出してフォールバック
- current.txt 自動復旧時に本当の最新世代を確実に選択
- 2026-01-08: リファクタリング: マジックナンバーを定数として抽出(検索表示、パフォーマンス、キャッシュ関連)。
- 2026-01-08: リファクタリング: 重複した検索ロジック関数を共通ヘルパー関数に統合(
_find_raw_hit_position,_build_search_result)。 - 2026-01-08: リファクタリング:
/api/searchエンドポイントのキャッシュ取得ロジックをヘルパー関数に抽出(_try_get_memory_cache,_try_get_fixed_cache)。 - 2026-01-08: 不要な静的ファイル
index - コピー.htmlを削除。 - 2026-01-08: 機能追加: 段階的ハッシングによる差分更新の精度向上(issue #4 対応)。
file_state.jsonlによる前回状態の保存・参照(DB不要)- 段階的な差分判定: stat(size + mtime_ns + inode/file_id) → fast fingerprint → full hash
DIFF_MODE設定:stat/stat+fastfp/stat+fastfp+fullhash(デフォルト:stat)- fast fingerprint: 先頭/末尾チャンクのハッシュ(
FAST_FP_BYTESで設定可能、デフォルト: 64KB) - full hash: 条件付きフルハッシュ(
FULL_HASH_ALGO,FULL_HASH_PATHS,FULL_HASH_EXTSで設定可能) - 削除検知の安全策: 2回連続で不在の場合のみ削除として扱う(瞬断対策)
- mtime保持・同サイズ更新などの見逃しを防止
- 2026-01-08: バグ修正: 段階的ハッシング設定のパースを安全化(レビュー指摘対応)。
FAST_FP_BYTESの不正値・非数値でもデフォルトにフォールバック(例外回避)FULL_HASH_ALGOの空文字もデフォルトにフォールバックfile_state.jsonlの部分破損に対応(行単位でスキップ、全体失敗を回避)
- 2026-01-08: バグ修正: 削除検知の安全策を修正(レビュー指摘対応)。
- valid_cache のフィルタ順序を変更し、削除候補が正しく機能するように修正
- 1回目の不在時にインデックスに残し、2回目の不在で削除する仕様を正しく実装
- ネットワーク瞬断での誤削除を防止
- 削除確定時のログを
log_warnに変更し、文言を「削除確定(インデックス除外)」に明確化 log_notice関数を追加(黄色表示)し、削除候補ログをlog_noticeに変更して視認性を向上
- 2026-01-07: README に LAN 内利用を前提としている旨の注意書きを追加。
- 2026-01-07: Claude Code 向けの
CLAUDE.mdを追加。 - 2025-01-06: インデックス構築、検索、UI、キャッシュ、スケジュール更新を統合した初版リリース。
- 2025-01-06: Linux/macOS 向けの簡易起動スクリプト
run.shを追加し、README に手順を追記。 - 2025-01-06: Windows の process モードのメモリ増加に関する注意書きを更新(共有 mmap の説明を追記)。