idea_world_labDEV JOURNAL
2026年7月28日火曜日

2026-07-28 Source Flow Debugger 実際ソース検索報告書

目的

既存の記録には実際の Godot プロジェクトを 134 個のチャンクに分割して検索し、関連文書が上位結果に含まれていたとだけ書かれていた。この表現だけでは各チャンクで何が返されたのか、返された JSONL が SQLite に実際に存在するのか、より直接的な文書が SQLite にあるのに検索順位で埋もれたのかが分からなかった。

本報告では次の三つの質問を分けて記録する。

  1. Source Flow Debugger がチャンクごとにどの JSONL 候補を返したか?
  2. 返された候補がコミットされた SQLite の検証済み原文 JSONL と正確に同じか?
  3. SQLite 全体で確認した直接根拠が上位に来ているか、あるいは順位改善が必要か?

Qwen エンドポイントは停止中のため、今回は検索と SQLite 照合のみを実行した。Qwen の Godot バージョン分類と候補承認・却下結果は記録せず、検索候補が出たという事実を最終検証成功とはみなさない。

固定入力

  • リポジトリ: godotengine/godot-demo-projects
  • ライセンス: MIT
  • コミット: cae8dc567a56d3e7936f171bcb85f0ccb9634ad0
  • プロジェクト: 2d/hexagonal_map
  • 入力ファイル: project.godot, map.tscn, tileset.tres, tileset_edit.tscn, troll.gd, troll.tscn
  • 入力ファイル数: 6
  • 生成チャンク数: 134
  • AST チャンク: 3
  • 直接チャンク: 131

実行に使用した SQLite は outputs/godot-rag-sqlite/godot-rag.sqlite3 で、実行時に docs_chunks 2,265 件、api_mapping 1,133 件、 label_prototypes 2 件と embedding 3,399 件を含んでいた。

実行状態

段階 状態 今回の実行の意味
SQLite FTS5 + Okapi BM25 実行 134 個チャンクすべて検索した
embedding 未実行 クエリ embedding API キーを設定していない
reranker 未実行 provider API キーを設定していない
Qwen validator 未実行 Qwen エンドポイントが停止中

したがって以下の順位は全体 F 戦略の最終順位ではなく lexical/BM25 段階の結果である。

全体照合結果

項目 結果
チャンク 134
チャンクごとに返された BM25 候補 80
SQLite と照合した返却候補 10,720
重複を除いた候補 844
SQLite で見つからない候補 0
provenance が verified でない候補 0
返却 raw_json と SQLite 原文が異なる候補 0
docs_chunks 返却 10,713
api_mapping 返却 7
label_prototypes 返却 0

返却データの整合性は合っていた。Source Flow Debugger が示したテーブルと ID を SQLite で再検索したところ、10,720 件すべてが存在し、provenance が verified であり、返却されたレコードと保存された raw_json も同じだった。

しかし検索品質まで全部合っていたという意味ではない。134 個のチャンクがすべて候補上限の 80 件を埋めているため、lexical 候補が十分に絞り込まれない状態だ。またファイル名アンカー保護により BM25 スコアが低い文書が 1 位に昇格したチャンクが 9 件あった。

代表チャンク結果

よく検索された事例

チャンク 入力要約 返却結果 SQLite 照合
1 project.godot ファイル形式説明 Manually editing project.godot 1 位 同じ ID と原文を確認
13 TileMapLayer, tile_map_data, TileSet TileMapLayer 属性 1 位、メソッド 2 位、TileData 3 位 すべて検証済み docs_chunks
42 TileSetAtlasSource, texture region TileSetAtlasSource 1 位、TileSetSource 2 位 直接クラス根拠を確認
125 _physics_process, Input.get_axis, move_and_slide Physics process 1 位、2D movement 文書 5~7 位、CharacterBody2D 8 位 移動・物理関連文書が共に存在
130 CharacterBody2D ノード CharacterBody2D クラス 1 位 直接クラス根拠を確認

チャンク 1 の 1 位文書は BM25 スコアだけで 1 位になったのではなく、project.godot lexical アンカー保護により維持された。この場合ファイル形式説明と直接合致するため、保護が有効だった。

ランキング改善が必要なケース

チャンク 123: extends CharacterBody2D

  • 実際 1位: Collision exceptions
  • CharacterBody2D クラスドキュメント: 17位
  • KinematicBody2D -> CharacterBody2D マッピング: 6位

SQLite には正確な CharacterBody2D クラスドキュメントがあったが、広い衝突・移動 ドキュメントより後に配置された。データ欠如ではなくランキングの問題だ。短い宣言 チャンクでは完全に一致するクラス名と構造フィールドを一般的な文脈トークンよりも 強く扱う必要がある。

チャンク 124: tan(deg_to_rad(30))

  • 実際 1位: Setting up the spring arm and camera
  • Evaluating expressions: 2位と 3位

1位のドキュメントにも deg_to_rad の使用例があり全く無関係ではないが、呼び出し 自体を説明するドキュメントよりも 3D チュートリアルが先行した。直接 API 説明と 単純使用例を区別する再配置が必要である。

Qwen 再検証が必要な構造候補

チャンク 13: PackedByteArray が含まれる map.tscn

PackedByteArray -> byte[] マッピングが 48位に入った。保存された JSONL は C# コレクション マイグレーションを説明しているが、入力は GDScript シーンリソースだ。トークンは一致するが 言語と適用文脈が異なるため、検索段階で最終承認してはならない。

チャンク 130: 既に CharacterBody2D を使用しているノード

KinematicBody2D -> CharacterBody2D マッピングが 3位に入った。このマッピングは バージョン判別には関係があるが、現在のチャンクには以前の API である KinematicBody2D が 存在しない。マイグレーション警告として承認すべき候補ではなく、Qwen が JSONL と元のチャンクを 共に見て Godot 4 根拠または適用不要として分類すべきである。

両ケースの SQLite JSONL 原文は機械読取レポートの reviewCases にそのまま保存した。

label_prototypes が 0 件である理由

SQLite のプロトタイプは次の二件だけである。

  • enum PlaneSemanticLabel
  • class OpenXRSpatialComponentPlaneSemanticLabelList

hexagonal_map チャンクには二つの入力パターンがなかった。したがって今回の実行で label_prototypes が 0 件であるのは欠落ではなく、直接構造根拠フィルタが作動した結果と判断した。

現在の結論

  • 返却候補と SQLite 原文間のデータ整合性は確認された。
  • 代表的なプロジェクト設定、TileSet、TileMapLayer、移動関数検索は直接 関連ドキュメントを上位に含めた。
  • すべてのチャンクが候補上限 80 件を埋めているため、候補削減は十分でない。
  • 短いクラス宣言と単一関数呼び出しでは、より直接的なドキュメントが後方に押しやられる ケースが確認された。
  • 構造マッピングは関連トークンだけで候補に入る可能性があるため、Qwen が停止した 状態で承認可否を結論付けることはできない。

次回再実行基準

Qwen エンドポイントが再び利用可能になったら同じコミットと同じ 134 件のチャンクを使用し 次の項目を追加する。

  1. 各構造候補の Godot 3Godot 4関連なし根拠不足 分類
  2. PackedByteArray -> byte[] のような言語文脈不一致候補の却下可否
  3. 既に target API を使用しているチャンクでマイグレーション適用候補を却下するか
  4. 関連性のない negative control JSONL の却下可否
  5. embedding と reranker 適用前後の直接ドキュメント順位変化

成果物