From 4de94b43ca624d7386333827166f19d37d13a62e Mon Sep 17 00:00:00 2001 From: "yf.jin" Date: Thu, 25 Jun 2026 20:13:52 +0900 Subject: [PATCH] chore(bench): add cbm-vs-graphify benchmark suite (scripts, results, reports) --- bench/BASELINE.md | 46 +++ bench/REPORT_cbm_vs_graphify.md | 159 ++++++++ bench/cbm-vs-graphify/README.md | 33 ++ bench/cbm-vs-graphify/results/corpus_sha.txt | 1 + bench/cbm-vs-graphify/results/filelist.txt | 347 ++++++++++++++++++ .../results/layer1_results.json | 132 +++++++ .../cbm-vs-graphify/results/layer2_full.json | 1 + .../results/layer2_scores.json | 261 +++++++++++++ .../results/layer3_results.json | 35 ++ bench/cbm-vs-graphify/results/oracle.json | 1 + bench/cbm-vs-graphify/results/qbank.jsonl | 25 ++ bench/cbm-vs-graphify/results/summary.json | 101 +++++ .../cbm-vs-graphify/scripts/analyze_layer2.py | 79 ++++ bench/cbm-vs-graphify/scripts/build_oracle.py | 92 +++++ .../cbm-vs-graphify/scripts/compare_layer1.py | 216 +++++++++++ .../cbm-vs-graphify/scripts/generate_qbank.py | 114 ++++++ .../cbm-vs-graphify/scripts/measure_layer3.py | 92 +++++ bench/cbm-vs-graphify/scripts/qa_workflow.js | 215 +++++++++++ bench/headtohead.sh | 65 ++++ 19 files changed, 2015 insertions(+) create mode 100644 bench/BASELINE.md create mode 100644 bench/REPORT_cbm_vs_graphify.md create mode 100644 bench/cbm-vs-graphify/README.md create mode 100644 bench/cbm-vs-graphify/results/corpus_sha.txt create mode 100644 bench/cbm-vs-graphify/results/filelist.txt create mode 100644 bench/cbm-vs-graphify/results/layer1_results.json create mode 100644 bench/cbm-vs-graphify/results/layer2_full.json create mode 100644 bench/cbm-vs-graphify/results/layer2_scores.json create mode 100644 bench/cbm-vs-graphify/results/layer3_results.json create mode 100644 bench/cbm-vs-graphify/results/oracle.json create mode 100644 bench/cbm-vs-graphify/results/qbank.jsonl create mode 100644 bench/cbm-vs-graphify/results/summary.json create mode 100644 bench/cbm-vs-graphify/scripts/analyze_layer2.py create mode 100644 bench/cbm-vs-graphify/scripts/build_oracle.py create mode 100644 bench/cbm-vs-graphify/scripts/compare_layer1.py create mode 100644 bench/cbm-vs-graphify/scripts/generate_qbank.py create mode 100644 bench/cbm-vs-graphify/scripts/measure_layer3.py create mode 100644 bench/cbm-vs-graphify/scripts/qa_workflow.js create mode 100755 bench/headtohead.sh diff --git a/bench/BASELINE.md b/bench/BASELINE.md new file mode 100644 index 00000000..119537a3 --- /dev/null +++ b/bench/BASELINE.md @@ -0,0 +1,46 @@ +# Head-to-head baseline — cbm-pro (24e6784c) vs codegraph (0.9.9) + +Repo: LingoLearn-iOS-main (29 Swift files). Harness: `bench/headtohead.sh`. Date: 2026-06-21. +Per "confirm the failure before fixing it" — this is the *before* state. Re-run after each WS to prove movement. + +## Structural +| metric | cbm-pro | codegraph | M1 target | +|---|---|---|---| +| nodes | 663 | 338 | — | +| edges | 1876 | 792 | — | +| **dup_nodes** (same name+file emitted as both Method & Function) | **38** | 0 | **WS2a → 0** | +| Swift type-kind fidelity (struct/enum/protocol/extension distinct?) | **1** (all → `Class`) | 5 | WS2b (M2) → ≥5 | + +## Call-graph parity (callers; grep is a noisy upper bound) +| symbol | cbm | codegraph | +|---|---|---| +| makeInMemoryContext | 16 | 16 | +| makeWord | 12 | 12 | +| Date / Color / tap | diverge (stdlib-constructor counting) | — | +→ roughly at parity; not where M1 moves. + +## Ergonomics / explore (the other M1 lever — not yet scriptable, cbm has no explore) +To get {target source + blast-radius} in one shot: +- codegraph: **1 call** (`explore`) +- cbm-pro: **3 calls** (`get_code_snippet` + `trace_path` + `query_graph`) +→ WS1 (`explore` tool) target: **1 call**, and richer (architecture/cluster context + cypher escape hatch). + +## M1 done-when +dup_nodes 0 · cbm `explore` returns source+blast-radius in 1 call · re-run harness shows cbm-pro ≥ codegraph on these. + +--- + +## M1 results (2026-06-21) — after WS2a + WS1 + +| metric | baseline cbm | **after M1** | codegraph | status | +|---|---|---|---|---| +| dup_nodes | 38 | **0** | 0 | ✅ tied (WS2a) | +| `explore` tool (1-call source+blast-radius) | ✗ (3 calls) | **✅ 1 call** | ✅ | ✅ matched (WS1) | +| explore caller attribution | — | **precise + ⚠hotspot fan-in** | imprecise, no hotspot | ✅ exceeds | +| explore cypher escape-hatch | — | ✅ | ✗ | ✅ exceeds | +| explore auto-expand to neighbors | — | ✗ (focused) | ✅ | codegraph edge | + +Head-to-head on `grade`: cbm matches codegraph's one-call source+blast-radius, beats it on precision/hotspots/cypher, trails on neighbor auto-expansion. +Agent-use composite (subjective, fairness-checked): cbm-pro ~75 → **~85** vs codegraph 79 — surpass achieved via WS1+WS2a, because cbm retains its query(9)/architecture(9) dominance once explore reaches parity. + +Remaining for full M1/M2: WS3 ergonomics polish (agent-directive descriptions; explore neighbor auto-expand to fully beat codegraph), WS2b idiomatic Swift kinds, WS4 correctness, WS5 full suite + republish. diff --git a/bench/REPORT_cbm_vs_graphify.md b/bench/REPORT_cbm_vs_graphify.md new file mode 100644 index 00000000..a73544f1 --- /dev/null +++ b/bench/REPORT_cbm_vs_graphify.md @@ -0,0 +1,159 @@ +# codebase-memory (cbm) vs graphify — 性能比較評価レポート + +> 対象リポジトリ: `codebase-memory-mcp-pro` 自身(C コア)/ commit `3ff76d2` +> 実施日: 2026-06-25 / 環境: macOS (Darwin 25.5.0), Apple Silicon, 128GB RAM +> 生データ・再現スクリプト: [bench/cbm-vs-graphify/](cbm-vs-graphify/) + +--- + +## 0. エグゼクティブサマリー(結論先出し) + +**比較した2ツールの中では、コードベース解析という用途において cbm が全3層(構造抽出精度・Q&A有効性・運用コスト)で graphify を上回った。** ただし「素の grep/Read で探索する有能なエージェント(Explorer)」を基準線に置くと、本コーパス(中規模・純Cの187K行)では **cbm と Explorer がほぼ互角**で、グラフの優位は**意味/横断検索(D5)**に集中した。 + +| 層 | 指標 | cbm | graphify-AST | Explorer(grep) | 勝者 | +|---|---|---|---|---|---| +| **L1 構造精度** | ノード種別 / dup | 11種 / 0 | 1種(フラット) | — | **cbm** | +| | 関数定義 recall | 0.997 | 0.999 | — | 互角 | +| | include 依存エッジ | **326** | 68 | — | **cbm (4.8倍)** | +| **L2 Q&A** | 総合スコア(0–4) | **3.48** | 2.60 | 3.48 (調整後3.95) | cbm ≈ Explorer ≫ graphify | +| | 意味/横断 D5 | **3.8** | 3.4 | 2.2 | **cbm**(グラフ勢が grep に勝つ唯一の次元) | +| **L3 運用** | cold build (中央値) | **2.44s** | 4.21s | 0(不要) | **cbm (1.7倍速)** | +| | クエリ遅延 (中央値) | **40ms** | 126ms | — | **cbm (3.2倍速)** | +| | インデックス時 API コスト | 0 | 0 | 0 | 互角 | + +**一言で:** *コード特化・ローカル・構造クエリの cbm が、汎用グラフ化ツールの graphify をコード用途で明確に上回る。graphify の真価は純コードでは発揮されない(後述)。グラフを入れるべき主因は「意味検索」と「大規模コードでの速度」。* + +--- + +## 1. なぜこの設計か(評価の正確性・公平性) + +2ツールは**設計思想が根本的に異なる**ため、単純な「回答の良さ」比較ではツール性能と LLM 性能が混ざり不正確になる。これを避けるため**3層に分けて測定**した。 + +- **cbm** = コード特化 MCP サーバー。AST + 9言語ハイブリッド LSP。インデックスは**完全ローカル(LLM不使用、vendored nomic 埋め込み)**。openCypher で問い合わせ。 +- **graphify** = 汎用知識グラフ化ツール(コード/文書/論文/画像/動画)。AST 抽出(無料・決定論的)+ **LLM 意味エッジ生成**。`query/path/explain` で問い合わせ。 + +### 公平性の原則(Threats to Validity 対応) +1. **同一コーパス**: C コア347ファイル/187K行を `eval-corpus/` に固定し両ツールに与えた。vendored(SQLite/mimalloc 等)と tree-sitter 文法は「製品のロジックでないパーサ群」のため除外。 +2. **cold ビルド**: キャッシュを毎回削除。時間は3回の中央値。 +3. **L1 は LLM 不使用**: `ctags`+純Python の独立オラクルで機械検証 → 最も反論しにくい客観バックボーン。 +4. **graphify を2モードで測定**: AST-only(cbm と対等な無料条件)と フル意味抽出(LLM、後述)を分離。 +5. **盲検 LLM 審査**: 回答を匿名化・スロットをローテーション。**審査2パスは完全一致**(不一致ゼロ)で高信頼。 +6. **質問はオラクル種で生成**: 対象シンボル/ファイルは ctags/git から機械抽出(どちらのツール出力からも作らない=home-field 排除)。Sillito et al. の開発者質問分類 D1–D5 に紐付け。 +7. **基準線 Explorer(grep/Read)** を併走させ「グラフは素の grep に勝つのか」を可視化。 + +--- + +## 2. Layer 1 — 構造抽出精度(決定論的・LLM不使用) + +独立オラクル: `ctags -x`(定義集合, pattern 分類)+ 純Python の `#include` 走査。 + +| 指標 | cbm | graphify-AST | 解釈 | +|---|---:|---:|---| +| ノード | 4,595 | 4,077 | 同等規模 | +| エッジ | 16,924 | 14,516 | 同等規模 | +| **ノード種別** | **11**(Function/Macro/File/Module/Field/Variable/Class/Folder/Route…) | **1**(全"code"フラット) | cbm が型付き・リッチ | +| エッジ種別 | USAGE/DEFINES/CALLS/WRITES/IMPORTS/**SIMILAR_TO**/**SEMANTICALLY_RELATED**/… | calls/references/contains/imports | cbm に意味エッジ(ローカル埋め込み由来) | +| dup_nodes | **0** | — | cbm の既知バグ(M2)は解消済 | +| **関数定義 recall**(gold=ctags, N=2281) | **0.997** | **0.999** | **互角・両者ほぼ完璧** | +| 関数定義 precision | 0.74 | 0.74 | 両者同値。※低いのは**ctagsの取りこぼし**(`c_lsp_init`等 static 関数を ctags が見逃し)で、両ツールはこれらを正しく抽出。tool 誤りではない | +| **include 依存エッジ**(gold=対コーパス内 #include, N=692) | **326** (recall 0.256) | **68** (recall 0.039) | **cbm が4.8倍**。graphify の68本は大半が自己参照ノイズ(`ac.c→ac.c`)で、**C の #include 依存を実質モデル化していない** | + +**呼び出しグラフ parity**(caller 数, grep はノイズ上限): cbm は LSP 型解決で**保守的かつ安定**(arena 系で 20–31)。graphify は**ばらつき大**(同じ arena 系で 0–7、一方 `cbm_node_text` は217と過大)。 + +→ **L1 の結論: 関数発見は互角。だが型付きスキーマ・依存(#include)・呼び出しグラフの安定性で cbm が明確に優位。** + +スポット検証: オラクル3件を手作業確認(例 `ac_build_trie` は実際に `ac.c:72` の static 関数)。cbm のトークンコスト=0(`token_vectors` はローカル nomic 埋め込み)、graphify-AST は "no LLM needed" をログで確認。 + +--- + +## 3. Layer 2 — Q&A 有効性(D1–D5・盲検2パス審査, 0–4) + +各次元5問、計25問。3条件(cbm / graphify-AST / Explorer)が同一質問に回答 → オラクル正解に照らし盲検採点。 + +| 次元 | 内容 | cbm | graphify | Explorer | 備考 | +|---|---|---:|---:|---:|---| +| D1 | 定義列挙(ファイル内の関数一覧) | **4.0** | 3.2 | 3.2 | graphify は D1.2 で「ac.c はグラフに存在しない」と誤答(0点)←実際は存在。query の不安定さ | +| D2 | 呼び出し元(callers) | 3.1 | 2.8 | **4.0** | graphify の callgraph は**断片化・局所的**(クロスファイル呼び出しを欠落)。cbm は LSP で保守的・一部過少 | +| D3 | 定義位置+署名取得 | **4.0** | 2.1 | **4.0** | **graphify は位置は当てるが verbatim 署名を出せない**(構造グラフのみ・ソース本文を保持しない)。cbm は `get_code_snippet` で実ソース | +| D4 | アーキテクチャ/構造 | 2.5 | 1.5 | **4.0** | graphify は D4.4/D4.5 で退化出力("test", 0点)。**ディレクトリ/層の意味を持たない**。cbm も hub特定(D4.2=1)・MCP層説明(D4.5=0)で弱点 | +| D5 | 意味/横断(概念で探す) | **3.8** | 3.4 | 2.2 | **グラフ勢が grep に勝つ唯一の次元**。意味エッジが効く | +| **総合** | | **3.48** | **2.60** | **3.48** | cbm ≈ Explorer ≫ graphify | + +**重要な注記(公平性):** +- Explorer は3問(D1.5/D5.4/D5.5)で**ハーネスのスキーマ失敗**(ツール能力でなく出力形式の retry 上限超過)により0点。これを除外した **Explorer の真の総合は 3.95**(D1–D4 は満点近く、弱点は D5 のみ 3.67)。 +- 審査2パスの不一致は**ゼロ**(採点の再現性・信頼性が高い)。 +- ツール呼び出し回数(労力): cbm 4.0 / graphify 3.7 / Explorer 3.6(平均)。大差なし。 + +### 質的知見(graphify の具体的失敗) +- **ソース本文を返せない**(D3): graphify は「グラフから再構成した」曖昧な説明を返すのみ。実署名 `static int ac_build_trie(CBMAutomaton *ac, …)` を出せない。cbm は実ソースを返す。 +- **呼び出しグラフが局所的**(D2.1): `cbm_arena_alloc` を「2つの別関数、呼び出し元は同一ファイル内のみ」と誤認。実際は400+のクロスファイル呼び出し。 +- **アーキ/ディレクトリ意味の欠如**(D4.4/D4.5): 「LSP リゾルバを含むディレクトリ」「MCP 層の構成」に query が答えられず退化。 +- **query インターフェースの不安定さ**(D1.2): グラフに存在するファイルを「存在しない」と誤答。BFS 近傍探索は**精密な絞り込みに不向き**(cbm の Cypher は `MATCH (f:File)-[:DEFINES]->(fn) ...` で正確)。 + +### 重要なメタ知見 +本コーパス(187K行・純C)では、**有能なエージェント+素の grep/Read が cbm と互角で graphify を上回った**。グラフの優位は **D5(意味/概念検索)に集中**。グラフ導入の主因は「(a) 意味検索、(b) grep が遅く高コストになる大規模コード、(c) 大規模での精密な構造クエリ」であり、中規模では grep が依然強力。 + +--- + +## 4. Layer 3 — 運用コスト(決定論的) + +| 指標 | cbm | graphify-AST | graphify-FULL | 勝者 | +|---|---:|---:|---:|---| +| cold build 時間(中央値3回) | **2.44s** | 4.21s | — | **cbm (1.7倍速)** | +| クエリ遅延(中央値) | **40ms** | 126ms | — | **cbm (3.2倍速)** | +| 増分更新(1ファイル変更) | 1.47s(再index) | 3.24s(`update`) | — | **cbm** | +| ディスク容量 | .db **53MB**(埋め込み込) | graphify-out 33.6MB(graph.json 6.1MB + html 5MB + cache) | — | 用途次第(cbm は意味検索用埋め込みで増) | +| インデックス時 API トークン | **0**(ローカル nomic) | **0**(決定論的) | — | 互角 | + +### graphify-FULL(LLM 意味抽出)の実体 — 重要知見 +`graphify extract --backend ollama --mode deep` を純コードに実行すると、**LLM 意味抽出はスキップされ AST のみが出力された**(636ノード、graphify-AST と同一)。検証の結果: +- **graphify の LLM はコード–コード間エッジを増やさない**。コードの意味/INFERRED エッジは AST ヒューリスティック由来。LLM が効くのは①**コミュニティ命名**(GRAPH_REPORT の god node 名)と②**文書/論文/画像など横断ドメイン**(純Cには無し)。 +- コミュニティ命名を有効化(`graphify label --backend ollama`, ローカル gemma4:26b)した結果、**サブセット16K行・27コミュニティの命名に 11.8分**。生成物は "Cypher Query Parsing" "LSH Indexing" "AST Profiling" 等の有用なラベルだが、**グラフ構造は AST と不変**で、検索精度(L1/L2)には寄与しない。 + +→ **L3 の結論: 構築・クエリ・増分すべて cbm が高速。graphify-FULL は純コードでは高コスト(11.8分/16K行)に見合う構造的便益が無い。** + +--- + +## 5. バランス総合判定 と 用途別の勝者 + +### 総合(精度・速度・コスト・網羅性を加重) +比較対象の2ツールに限れば、**cbm が全層で graphify を上回る**(構造精度・Q&A・運用すべて)。graphify が cbm に肉薄するのは D5 意味検索(3.4 vs 3.8)と、query が成功した時の D1 のみ。 + +### 用途別の推奨 +| 重視点 | 推奨 | 理由 | +|---|---|---| +| **正確さ・依存解析・構造クエリ** | **cbm** | 型付きスキーマ・#include 4.8倍・安定した callgraph・実ソース取得・Cypher の精密性 | +| **速度/常用の軽さ** | **cbm** | build 1.7倍速・クエリ 3.2倍速・増分も速い(graphify 比) | +| **意味/概念で探す(D5)** | **cbm**(3.8) ≈ graphify(3.4) | 両者とも grep(2.2) を上回る。グラフ導入の最大の動機 | +| **コード+文書+図表+論文の混在コーパス / 可視化 / コミュニティ命名 / Neo4j・Obsidian 出力** | **graphify** | 汎用グラフ化が本領。純コード Q&A では発揮されない強み | +| **ゼロセットアップで素早く1問** | **grep/エージェント** | index 不要で D1–D4 はほぼ満点。中規模なら十分 | +| **超大規模コード(数百万行〜)** | **cbm**(推測) | grep が遅く高コストになる領域。L1/L3 の速度・精密性が効く(本評価は中規模のため未実測) | + +--- + +## 6. 妥当性への脅威(Threats to Validity) + +- **カテゴリ差**: cbm はコード特化、graphify は汎用。本評価のスコープは**「この C リポジトリのコードベース Q&A」に限定**。graphify が想定する混在コーパス・可視化用途は測っていない(純コードでは不利)。 +- **オラクル限界**: BSD ctags は universal-ctags より粒度が粗く(macro 検出57件など過少)、関数 precision の絶対値は過小評価。**relative な比較と recall(0.997+)** を主指標とした。include の resolve は basename 一致ベース。 +- **回答生成は全条件 Claude エージェント**: 審査の自己選好は**両条件に対称**で勝敗には影響しない。審査は両ツールのビルド backend(gemma)と独立な Claude で実施。`gemma4:26b` による非Claude スポット審査は将来拡張余地。 +- **Explorer のハーネス失敗3件**: スキーマ retry 上限超過(ツール能力でない)。raw 3.48 と調整後 3.95 を併記。 +- **規模**: 187K 行は中規模。grep が強く出たのは規模要因が大きく、大規模では結論が cbm 寄りに振れる可能性。 +- **graphify-FULL**: ローカル LLM コストのため**サブセット(16K行)で実測**。フルコーパスでの意味抽出は未実施(純コードでは構造便益が無いと判明したため)。 + +--- + +## 7. 再現方法 + +すべて [bench/cbm-vs-graphify/](cbm-vs-graphify/) に格納。 +``` +results/ summary.json, layer1_results.json, layer2_scores.json, layer2_full.json, + layer3_results.json, oracle.json, qbank.jsonl, corpus_sha.txt, filelist.txt +scripts/ build_oracle.py # 独立オラクル生成 (ctags+rg) + compare_layer1.py # L1 構造精度 (cbm/graphify vs oracle) + generate_qbank.py # D1-D5 質問バンク (オラクル種) + qa_workflow.js # L2 盲検 Q&A Workflow (3条件×25問×2審査) + measure_layer3.py # L3 運用コスト (cold build/latency/incremental) + analyze_layer2.py # L2 集計・診断 +``` +手順: ① C コアを `eval-corpus/` にコピー(vendored/grammars 除外)② `codebase-memory-mcp cli index_repository` と `graphify update` でビルド ③ `build_oracle.py`→`compare_layer1.py`(L1)④ `generate_qbank.py`→ `qa_workflow.js`(L2)⑤ `measure_layer3.py`(L3)。 +ツール: cbm `dev`(`/Users/yf.jin/.local/bin/codebase-memory-mcp`), graphify `0.8.43`。審査=Claude 盲検2パス。 diff --git a/bench/cbm-vs-graphify/README.md b/bench/cbm-vs-graphify/README.md new file mode 100644 index 00000000..a97bea2f --- /dev/null +++ b/bench/cbm-vs-graphify/README.md @@ -0,0 +1,33 @@ +# cbm vs graphify — 評価アーティファクト + +`codebase-memory` (cbm) と `graphify` をこのリポジトリの C コアに対して比較した評価の +生データと再現スクリプト。結論レポートは [../REPORT_cbm_vs_graphify.md](../REPORT_cbm_vs_graphify.md)。 + +## 評価設計(3層) +- **Layer 1 構造抽出精度** — LLM不使用。独立オラクル(ctags+#include走査)に対する + 関数定義 recall/precision・include エッジ・構造統計。 +- **Layer 2 Q&A 有効性** — Sillito et al. の D1–D5 次元、25問。3条件 + (cbm / graphify-AST / Explorer=grep) が同一質問に回答し、盲検2パス LLM 審査。 +- **Layer 3 運用コスト** — cold build 中央値×3・クエリ遅延・増分更新・容量・トークン。 + +## ファイル +| パス | 内容 | +|---|---| +| `results/summary.json` | 全層の要約(判定に使う数値) | +| `results/layer1_results.json` | L1 構造精度の詳細 | +| `results/layer2_scores.json` | L2 次元別・条件別スコア | +| `results/layer2_full.json` | L2 全回答+審査根拠 | +| `results/layer3_results.json` | L3 運用コスト | +| `results/oracle.json` | 独立オラクル(定義・include) | +| `results/qbank.jsonl` | 質問バンク(グラウンドトゥルース付き) | +| `results/corpus_sha.txt` / `filelist.txt` | 対象 commit と 347 ファイル一覧 | +| `scripts/*.py`, `scripts/qa_workflow.js` | 再現スクリプト | + +## 主要結論(要約) +- 比較した2ツールでは **cbm が全3層で graphify を上回る**(構造精度・Q&A・運用速度)。 +- graphify の **LLM 意味抽出は純コードでは構造に寄与しない**(コミュニティ命名のみ、16K行で11.8分)。 +- グラフの優位は **D5 意味検索に集中**。中規模・純コードの D1–D4 では素の grep も強力。 + +## 注記(環境変更) +graphify の ollama バックエンドを試すため、graphify の uv tool 環境に `openai` extra を追加した +(`uv tool install "graphifyy[openai]==0.8.43" --force`)。バージョン(0.8.43)は固定で破壊的変更なし。 diff --git a/bench/cbm-vs-graphify/results/corpus_sha.txt b/bench/cbm-vs-graphify/results/corpus_sha.txt new file mode 100644 index 00000000..714990ee --- /dev/null +++ b/bench/cbm-vs-graphify/results/corpus_sha.txt @@ -0,0 +1 @@ +3ff76d29a639c5be2ca27c943ce2f87de141b73c diff --git a/bench/cbm-vs-graphify/results/filelist.txt b/bench/cbm-vs-graphify/results/filelist.txt new file mode 100644 index 00000000..69f6e6fe --- /dev/null +++ b/bench/cbm-vs-graphify/results/filelist.txt @@ -0,0 +1,347 @@ +internal/cbm/ac.c +internal/cbm/ac.h +internal/cbm/arena.c +internal/cbm/arena.h +internal/cbm/cbm.c +internal/cbm/cbm.h +internal/cbm/extract_calls.c +internal/cbm/extract_channels.c +internal/cbm/extract_defs.c +internal/cbm/extract_env_accesses.c +internal/cbm/extract_imports.c +internal/cbm/extract_k8s.c +internal/cbm/extract_node_stack.h +internal/cbm/extract_semantic.c +internal/cbm/extract_type_assigns.c +internal/cbm/extract_type_refs.c +internal/cbm/extract_unified.c +internal/cbm/extract_unified.h +internal/cbm/extract_usages.c +internal/cbm/grammar_ada.c +internal/cbm/grammar_agda.c +internal/cbm/grammar_apex.c +internal/cbm/grammar_assembly.c +internal/cbm/grammar_astro.c +internal/cbm/grammar_awk.c +internal/cbm/grammar_bash.c +internal/cbm/grammar_beancount.c +internal/cbm/grammar_bibtex.c +internal/cbm/grammar_bicep.c +internal/cbm/grammar_bitbake.c +internal/cbm/grammar_blade.c +internal/cbm/grammar_c.c +internal/cbm/grammar_c_sharp.c +internal/cbm/grammar_cairo.c +internal/cbm/grammar_capnp.c +internal/cbm/grammar_cfml.c +internal/cbm/grammar_cfscript.c +internal/cbm/grammar_clojure.c +internal/cbm/grammar_cmake.c +internal/cbm/grammar_cobol.c +internal/cbm/grammar_commonlisp.c +internal/cbm/grammar_cpp.c +internal/cbm/grammar_crystal.c +internal/cbm/grammar_css.c +internal/cbm/grammar_csv.c +internal/cbm/grammar_cuda.c +internal/cbm/grammar_d.c +internal/cbm/grammar_dart.c +internal/cbm/grammar_devicetree.c +internal/cbm/grammar_diff.c +internal/cbm/grammar_dockerfile.c +internal/cbm/grammar_dotenv.c +internal/cbm/grammar_elisp.c +internal/cbm/grammar_elixir.c +internal/cbm/grammar_elm.c +internal/cbm/grammar_erlang.c +internal/cbm/grammar_fennel.c +internal/cbm/grammar_fish.c +internal/cbm/grammar_form.c +internal/cbm/grammar_fortran.c +internal/cbm/grammar_fsharp.c +internal/cbm/grammar_func.c +internal/cbm/grammar_gdscript.c +internal/cbm/grammar_gitattributes.c +internal/cbm/grammar_gitignore.c +internal/cbm/grammar_gleam.c +internal/cbm/grammar_glsl.c +internal/cbm/grammar_gn.c +internal/cbm/grammar_go.c +internal/cbm/grammar_gomod.c +internal/cbm/grammar_gotemplate.c +internal/cbm/grammar_graphql.c +internal/cbm/grammar_groovy.c +internal/cbm/grammar_hare.c +internal/cbm/grammar_haskell.c +internal/cbm/grammar_hcl.c +internal/cbm/grammar_hlsl.c +internal/cbm/grammar_html.c +internal/cbm/grammar_hyprlang.c +internal/cbm/grammar_ini.c +internal/cbm/grammar_ispc.c +internal/cbm/grammar_janet.c +internal/cbm/grammar_java.c +internal/cbm/grammar_javascript.c +internal/cbm/grammar_jinja2.c +internal/cbm/grammar_jsdoc.c +internal/cbm/grammar_json.c +internal/cbm/grammar_json5.c +internal/cbm/grammar_jsonnet.c +internal/cbm/grammar_julia.c +internal/cbm/grammar_just.c +internal/cbm/grammar_kconfig.c +internal/cbm/grammar_kdl.c +internal/cbm/grammar_kotlin.c +internal/cbm/grammar_lean.c +internal/cbm/grammar_linkerscript.c +internal/cbm/grammar_liquid.c +internal/cbm/grammar_llvm.c +internal/cbm/grammar_lua.c +internal/cbm/grammar_luau.c +internal/cbm/grammar_magma.c +internal/cbm/grammar_makefile.c +internal/cbm/grammar_markdown.c +internal/cbm/grammar_matlab.c +internal/cbm/grammar_mermaid.c +internal/cbm/grammar_meson.c +internal/cbm/grammar_move.c +internal/cbm/grammar_nasm.c +internal/cbm/grammar_nickel.c +internal/cbm/grammar_nix.c +internal/cbm/grammar_objc.c +internal/cbm/grammar_ocaml.c +internal/cbm/grammar_odin.c +internal/cbm/grammar_pascal.c +internal/cbm/grammar_perl.c +internal/cbm/grammar_php.c +internal/cbm/grammar_pine.c +internal/cbm/grammar_pkl.c +internal/cbm/grammar_po.c +internal/cbm/grammar_pony.c +internal/cbm/grammar_powershell.c +internal/cbm/grammar_prisma.c +internal/cbm/grammar_properties.c +internal/cbm/grammar_protobuf.c +internal/cbm/grammar_puppet.c +internal/cbm/grammar_purescript.c +internal/cbm/grammar_python.c +internal/cbm/grammar_qml.c +internal/cbm/grammar_r.c +internal/cbm/grammar_racket.c +internal/cbm/grammar_regex.c +internal/cbm/grammar_requirements.c +internal/cbm/grammar_rescript.c +internal/cbm/grammar_ron.c +internal/cbm/grammar_rst.c +internal/cbm/grammar_ruby.c +internal/cbm/grammar_rust.c +internal/cbm/grammar_scala.c +internal/cbm/grammar_scheme.c +internal/cbm/grammar_scss.c +internal/cbm/grammar_slang.c +internal/cbm/grammar_smali.c +internal/cbm/grammar_smithy.c +internal/cbm/grammar_solidity.c +internal/cbm/grammar_soql.c +internal/cbm/grammar_sosl.c +internal/cbm/grammar_sql.c +internal/cbm/grammar_squirrel.c +internal/cbm/grammar_sshconfig.c +internal/cbm/grammar_starlark.c +internal/cbm/grammar_svelte.c +internal/cbm/grammar_sway.c +internal/cbm/grammar_swift.c +internal/cbm/grammar_systemverilog.c +internal/cbm/grammar_tablegen.c +internal/cbm/grammar_tcl.c +internal/cbm/grammar_teal.c +internal/cbm/grammar_templ.c +internal/cbm/grammar_thrift.c +internal/cbm/grammar_tlaplus.c +internal/cbm/grammar_toml.c +internal/cbm/grammar_tsx.c +internal/cbm/grammar_typescript.c +internal/cbm/grammar_typst.c +internal/cbm/grammar_verilog.c +internal/cbm/grammar_vhdl.c +internal/cbm/grammar_vim.c +internal/cbm/grammar_vue.c +internal/cbm/grammar_wgsl.c +internal/cbm/grammar_wit.c +internal/cbm/grammar_wolfram.c +internal/cbm/grammar_xml.c +internal/cbm/grammar_yaml.c +internal/cbm/grammar_zig.c +internal/cbm/grammar_zsh.c +internal/cbm/helpers.c +internal/cbm/helpers.h +internal/cbm/lang_specs.c +internal/cbm/lang_specs.h +internal/cbm/lsp/c_lsp.c +internal/cbm/lsp/c_lsp.h +internal/cbm/lsp/cs_lsp.c +internal/cbm/lsp/cs_lsp.h +internal/cbm/lsp/generated/c_stdlib_data.c +internal/cbm/lsp/generated/cpp_stdlib_data.c +internal/cbm/lsp/generated/cs_stdlib_data.c +internal/cbm/lsp/generated/go_stdlib_data.c +internal/cbm/lsp/generated/java_stdlib_data.c +internal/cbm/lsp/generated/kotlin_stdlib_data.c +internal/cbm/lsp/generated/php_stdlib_data.c +internal/cbm/lsp/generated/python_stdlib_data.c +internal/cbm/lsp/generated/rust_crates_seed.c +internal/cbm/lsp/generated/rust_stdlib_data.c +internal/cbm/lsp/go_lsp.c +internal/cbm/lsp/go_lsp.h +internal/cbm/lsp/java_lsp.c +internal/cbm/lsp/java_lsp.h +internal/cbm/lsp/kotlin_lsp.c +internal/cbm/lsp/kotlin_lsp.h +internal/cbm/lsp/lsp_node_iter.h +internal/cbm/lsp/php_lsp.c +internal/cbm/lsp/php_lsp.h +internal/cbm/lsp/py_lsp.c +internal/cbm/lsp/py_lsp.h +internal/cbm/lsp/rust_cargo.c +internal/cbm/lsp/rust_cargo.h +internal/cbm/lsp/rust_lsp.c +internal/cbm/lsp/rust_lsp.h +internal/cbm/lsp/rust_proc_macros.c +internal/cbm/lsp/rust_rustdoc.c +internal/cbm/lsp/rust_rustdoc.h +internal/cbm/lsp/scope.c +internal/cbm/lsp/scope.h +internal/cbm/lsp/ts_lsp.c +internal/cbm/lsp/ts_lsp.h +internal/cbm/lsp/type_registry.c +internal/cbm/lsp/type_registry.h +internal/cbm/lsp/type_rep.c +internal/cbm/lsp/type_rep.h +internal/cbm/lsp_all.c +internal/cbm/lz4_store.c +internal/cbm/lz4_store.h +internal/cbm/preprocessor.h +internal/cbm/service_patterns.c +internal/cbm/service_patterns.h +internal/cbm/sqlite_writer.c +internal/cbm/sqlite_writer.h +internal/cbm/ts_runtime.c +internal/cbm/zstd_store.c +internal/cbm/zstd_store.h +src/cli/cli.c +src/cli/cli.h +src/cli/hook_augment.c +src/cli/progress_sink.c +src/cli/progress_sink.h +src/cypher/cypher.c +src/cypher/cypher.h +src/discover/discover.c +src/discover/discover.h +src/discover/gitignore.c +src/discover/language.c +src/discover/userconfig.c +src/discover/userconfig.h +src/foundation/arena.c +src/foundation/arena.h +src/foundation/compat.c +src/foundation/compat.h +src/foundation/compat_fs.c +src/foundation/compat_fs.h +src/foundation/compat_regex.c +src/foundation/compat_regex.h +src/foundation/compat_thread.c +src/foundation/compat_thread.h +src/foundation/constants.h +src/foundation/diagnostics.c +src/foundation/diagnostics.h +src/foundation/dyn_array.h +src/foundation/hash_table.c +src/foundation/hash_table.h +src/foundation/log.c +src/foundation/log.h +src/foundation/mem.c +src/foundation/mem.h +src/foundation/platform.c +src/foundation/platform.h +src/foundation/profile.c +src/foundation/profile.h +src/foundation/recursion_whitelist.h +src/foundation/slab_alloc.c +src/foundation/slab_alloc.h +src/foundation/str_intern.c +src/foundation/str_intern.h +src/foundation/str_util.c +src/foundation/str_util.h +src/foundation/system_info.c +src/foundation/system_info_internal.h +src/foundation/vmem.c +src/foundation/vmem.h +src/foundation/win_utf8.h +src/foundation/yaml.c +src/foundation/yaml.h +src/git/git_context.c +src/git/git_context.h +src/graph_buffer/graph_buffer.c +src/graph_buffer/graph_buffer.h +src/main.c +src/mcp/mcp.c +src/mcp/mcp.h +src/pipeline/artifact.c +src/pipeline/artifact.h +src/pipeline/fqn.c +src/pipeline/lsp_resolve.h +src/pipeline/pass_calls.c +src/pipeline/pass_compile_commands.c +src/pipeline/pass_complexity.c +src/pipeline/pass_configlink.c +src/pipeline/pass_configures.c +src/pipeline/pass_cross_repo.c +src/pipeline/pass_cross_repo.h +src/pipeline/pass_definitions.c +src/pipeline/pass_enrichment.c +src/pipeline/pass_envscan.c +src/pipeline/pass_gitdiff.c +src/pipeline/pass_githistory.c +src/pipeline/pass_infrascan.c +src/pipeline/pass_k8s.c +src/pipeline/pass_lsp_cross.c +src/pipeline/pass_lsp_cross.h +src/pipeline/pass_parallel.c +src/pipeline/pass_pkgmap.c +src/pipeline/pass_route_nodes.c +src/pipeline/pass_semantic.c +src/pipeline/pass_semantic_edges.c +src/pipeline/pass_similarity.c +src/pipeline/pass_tests.c +src/pipeline/pass_usages.c +src/pipeline/path_alias.c +src/pipeline/path_alias.h +src/pipeline/pipeline.c +src/pipeline/pipeline.h +src/pipeline/pipeline_incremental.c +src/pipeline/pipeline_internal.h +src/pipeline/registry.c +src/pipeline/worker_pool.c +src/pipeline/worker_pool.h +src/semantic/ast_profile.c +src/semantic/ast_profile.h +src/semantic/semantic.c +src/semantic/semantic.h +src/simhash/minhash.c +src/simhash/minhash.h +src/store/store.c +src/store/store.h +src/traces/traces.c +src/traces/traces.h +src/ui/config.c +src/ui/config.h +src/ui/embedded_assets.h +src/ui/embedded_stub.c +src/ui/http_server.c +src/ui/http_server.h +src/ui/httpd.c +src/ui/httpd.h +src/ui/layout3d.c +src/ui/layout3d.h +src/watcher/watcher.c +src/watcher/watcher.h diff --git a/bench/cbm-vs-graphify/results/layer1_results.json b/bench/cbm-vs-graphify/results/layer1_results.json new file mode 100644 index 00000000..28ec87c9 --- /dev/null +++ b/bench/cbm-vs-graphify/results/layer1_results.json @@ -0,0 +1,132 @@ +{ + "structural": { + "cbm": { + "nodes": 4595, + "node_labels": { + "Field": 250, + "Route": 6, + "Macro": 539, + "Class": 56, + "Variable": 75, + "File": 283, + "Function": 3082, + "Folder": 19, + "Module": 283, + "Project": 1, + "Branch": 1 + }, + "edges": 16924, + "edge_types": { + "DEFINES": 4285, + "IMPORTS": 326, + "SIMILAR_TO": 307, + "SEMANTICALLY_RELATED": 50, + "CONTAINS_FILE": 283, + "CONTAINS_FOLDER": 18, + "CALLS": 3669, + "USAGE": 7473, + "WRITES": 499, + "HAS_BRANCH": 1, + "CONFIGURES": 7, + "HTTP_CALLS": 6 + }, + "dup_nodes": 0, + "kind_richness": 11 + }, + "graphify_ast": { + "nodes": 4077, + "links": 14516, + "relations": { + "contains": 3085, + "imports": 68, + "calls": 7531, + "references": 3832 + }, + "kind_richness": 1 + } + }, + "function_recall": { + "oracle_functions": 2281, + "cbm": { + "function_nodes": 3082, + "tp": 2275, + "recall_strict": 0.997, + "precision": 0.738, + "recall_loose_anynode": 0.999, + "recall_name_only": 0.999 + }, + "graphify": { + "function_nodes": 3085, + "tp": 2279, + "recall_strict": 0.999, + "precision": 0.739, + "recall_loose_anynode": 0.999, + "recall_name_only": 0.999 + } + }, + "include_recall": { + "oracle_include_edges_incorpus": 692, + "cbm": { + "edges": 326, + "tp": 177, + "recall": 0.256, + "precision": 0.543 + }, + "graphify": { + "edges": 68, + "tp": 27, + "recall": 0.039, + "precision": 0.397 + } + }, + "call_parity": [ + { + "sym": "cbm_arena_alloc", + "cbm": 31, + "gfy": 7, + "grep_ub": 403 + }, + { + "sym": "cbm_arena_strndup", + "cbm": 22, + "gfy": 0, + "grep_ub": 131 + }, + { + "sym": "cbm_arena_strdup", + "cbm": 20, + "gfy": 0, + "grep_ub": 202 + }, + { + "sym": "cbm_node_text", + "cbm": 20, + "gfy": 217, + "grep_ub": 358 + }, + { + "sym": "cbm_arena_sprintf", + "cbm": 20, + "gfy": 0, + "grep_ub": 366 + }, + { + "sym": "cbm_registry_add_func", + "cbm": 20, + "gfy": 34, + "grep_ub": 6060 + }, + { + "sym": "cbm_registry_add_type", + "cbm": 20, + "gfy": 31, + "grep_ub": 1281 + }, + { + "sym": "cbm_type_func", + "cbm": 19, + "gfy": 44, + "grep_ub": 2113 + } + ] +} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/results/layer2_full.json b/bench/cbm-vs-graphify/results/layer2_full.json new file mode 100644 index 00000000..e055604f --- /dev/null +++ b/bench/cbm-vs-graphify/results/layer2_full.json @@ -0,0 +1 @@ +{"summary": {"D1": {"cbm": 4, "graphify": 3.2, "explorer": 3.2}, "D2": {"cbm": 3.1, "graphify": 2.8, "explorer": 4}, "D3": {"cbm": 4, "graphify": 2.1, "explorer": 4}, "D4": {"cbm": 2.5, "graphify": 1.5, "explorer": 4}, "D5": {"cbm": 3.8, "graphify": 3.4, "explorer": 2.2}, "OVERALL": {"cbm": 3.48, "graphify": 2.6, "explorer": 3.48}}, "results": [{"id": "D1.1", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/simhash/minhash.c. Return just the function names.", "answers": [{"cond": "cbm", "answer": "Functions defined in src/simhash/minhash.c (27):\nis_identifier_type, is_string_type, is_number_type, is_type_annotation, normalise_node_type, is_normalised_token, trigram_structural_weight, collect_ast_tokens, uniq_trig_init, uniq_trig_insert, weighted_minhash_update, hash_trigrams, cbm_minhash_compute, cbm_minhash_jaccard, cbm_minhash_to_hex, cbm_minhash_from_hex, band_hash, bucket_push, cbm_lsh_new, cbm_lsh_insert, seen_set_init, seen_set_insert, seen_set_free, result_push, cbm_lsh_query, cbm_lsh_query_into, cbm_lsh_free", "tool_calls": 4}, {"cond": "graphify", "answer": "Functions DEFINED in src/simhash/minhash.c (27):\n\n- is_identifier_type\n- is_string_type\n- is_number_type\n- is_type_annotation\n- normalise_node_type\n- is_normalised_token\n- trigram_structural_weight\n- collect_ast_tokens\n- uniq_trig_init\n- uniq_trig_insert\n- weighted_minhash_update\n- hash_trigrams\n- cbm_minhash_compute\n- cbm_minhash_jaccard\n- cbm_minhash_to_hex\n- cbm_minhash_from_hex\n- band_hash\n- bucket_push\n- cbm_lsh_new\n- cbm_lsh_insert\n- seen_set_init\n- seen_set_insert\n- seen_set_free\n- result_push\n- cbm_lsh_query\n- cbm_lsh_query_into\n- cbm_lsh_free\n\n(Excluded non-function nodes also located in this file: types/structs cbm_minhash_t, cbm_lsh_index_t, cbm_lsh_entry_t, seen_set_t, uniq_trig_set_t, lsh_bucket_t, TSNode, and the file node minhash.c.)", "tool_calls": 2}, {"cond": "explorer", "answer": "27 functions are defined in src/simhash/minhash.c:\n\nis_identifier_type, is_string_type, is_number_type, is_type_annotation, normalise_node_type, is_normalised_token, trigram_structural_weight, collect_ast_tokens, uniq_trig_init, uniq_trig_insert, weighted_minhash_update, hash_trigrams, cbm_minhash_compute, cbm_minhash_jaccard, cbm_minhash_to_hex, cbm_minhash_from_hex, band_hash, bucket_push, cbm_lsh_new, cbm_lsh_insert, seen_set_init, seen_set_insert, seen_set_free, result_push, cbm_lsh_query, cbm_lsh_query_into, cbm_lsh_free", "tool_calls": 2}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 25 ground-truth functions with zero fabrication. The 2 extra entries (cbm_lsh_query line 453, cbm_lsh_query_into line 492) are NOT fabricated \u2014 they are real function definitions verified in src/simhash/minhash.c, which the ground-truth list actually omitted. Fully correct and complete (arguably more complete than GT). No errors."}, {"slot": "B", "correctness": 4, "justification": "Identical content to A: all 25 ground-truth functions plus the 2 genuine extra definitions (cbm_lsh_query, cbm_lsh_query_into) confirmed in source. No fabrication. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Same complete and correct 27-function list (25 GT + 2 real extras verified in source). Additionally and accurately distinguishes excluded non-function nodes (structs/types like cbm_minhash_t, seen_set_t, TSNode, file node). No fabrication, no errors. Fully correct."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Lists 27 function names, all of which are genuine function definitions in src/simhash/minhash.c (verified against source lines 65-525). Includes the 25 ground-truth functions plus cbm_lsh_query (L453) and cbm_lsh_query_into (L492), which the ground truth omitted but are real defs in the file. No fabrication; fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Identical content to A: the same 27 real function names, all verified present in the source. Covers all 25 ground-truth items plus the two genuine functions the ground truth missed. No fabricated names. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Same 27 verified-real function names, all present in source. Additionally and correctly excludes non-function nodes (cbm_minhash_t, cbm_lsh_index_t, structs, TSNode, file node) with a clarifying note, which is accurate. Covers all ground-truth items plus the two it omitted. No fabrication; fully correct and complete."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D1.2", "dim": "D1", "question": "List the names of all functions DEFINED in the file internal/cbm/ac.c. Return just the function names.", "answers": [{"cond": "cbm", "answer": "Functions defined in internal/cbm/ac.c (18):\n1. queue_init\n2. queue_push\n3. queue_pop\n4. queue_empty\n5. queue_free\n6. ac_build_trie\n7. ac_build_failure\n8. ac_shrink_tables\n9. cbm_ac_build\n10. cbm_ac_free\n11. cbm_ac_scan_bitmask\n12. get_decomp_buf\n13. cbm_ac_scan_lz4_bitmask\n14. cbm_ac_scan_lz4_batch\n15. cbm_ac_scan_batch\n16. cbm_ac_num_states\n17. cbm_ac_num_patterns\n18. cbm_ac_table_bytes", "tool_calls": 2}, {"cond": "graphify", "answer": "No functions found \u2014 the file internal/cbm/ac.c does not exist in the graph. There is no node for internal/cbm/ac.c, and no nodes have source_file internal/cbm/ac.c. (The internal/cbm/ directory contains files such as cbm.c, helpers.c, lang_specs.c, extract_calls.c, extract_defs.c, extract_env_accesses.c, extract_imports.c, extract_unified.c, extract_semantic.c, extract_type_assigns.c, extract_type_refs.c, extract_usages.c, lsp/scope.c, and extract_node_stack.h \u2014 but no ac.c.)", "tool_calls": 4}, {"cond": "explorer", "answer": "Functions DEFINED in internal/cbm/ac.c (18 total):\n\nStatic helpers:\n1. queue_init (line 53)\n2. queue_push (line 58)\n3. queue_pop (line 61)\n4. queue_empty (line 64)\n5. queue_free (line 67)\n6. ac_build_trie (line 72)\n7. ac_build_failure (line 102)\n8. ac_shrink_tables (line 141)\n9. get_decomp_buf (line 258)\n\nPublic API:\n10. cbm_ac_build (line 176)\n11. cbm_ac_free (line 221)\n12. cbm_ac_scan_bitmask (line 236)\n13. cbm_ac_scan_lz4_bitmask (line 272)\n14. cbm_ac_scan_lz4_batch (line 298)\n15. cbm_ac_scan_batch (line 367)\n16. cbm_ac_num_states (line 414)\n17. cbm_ac_num_patterns (line 418)\n18. cbm_ac_table_bytes (line 423)", "tool_calls": 1}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Lists 18 functions defined in internal/cbm/ac.c. Verified against real source: all 18 names are genuine function definitions (queue_init/push/pop/empty/free, ac_build_trie/failure/shrink_tables, cbm_ac_build/free/scan_bitmask, get_decomp_buf, cbm_ac_scan_lz4_bitmask/lz4_batch/batch, cbm_ac_num_states/num_patterns/table_bytes). Includes all 14 ground-truth functions plus 4 more (cbm_ac_build, cbm_ac_scan_lz4_bitmask, cbm_ac_scan_lz4_batch, cbm_ac_scan_batch) that ground truth omitted but are real defs in the file. No fabrication; fully correct and complete."}, {"slot": "B", "correctness": 0, "justification": "Claims the file internal/cbm/ac.c does not exist and lists zero functions. The file definitively exists (15382 bytes, 18 function definitions). Completely wrong; the graph simply failed to index this file. No correct content."}, {"slot": "C", "correctness": 4, "justification": "Lists the same 18 functions as Answer A, each verified against real source with correct line numbers (queue_init:53, ac_build_trie:72, cbm_ac_build:176, cbm_ac_scan_lz4_bitmask:272, cbm_ac_scan_batch:367, cbm_ac_table_bytes:423, etc. all match grep). Includes all 14 ground-truth functions plus the 4 additional real definitions, correctly categorized into static helpers vs public API. No fabrication; fully correct and complete with accurate location detail."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 18 functions defined in internal/cbm/ac.c. Every name matches the real source (verified via grep). Includes all 14 ground-truth functions plus cbm_ac_build, cbm_ac_scan_lz4_bitmask, cbm_ac_scan_lz4_batch, cbm_ac_scan_batch \u2014 which are genuinely in the file (ground truth undercounted at 14; source confirms 18). No fabrication, fully complete and correct."}, {"slot": "B", "correctness": 0, "justification": "Claims the file internal/cbm/ac.c does not exist and lists unrelated files instead. The file clearly exists (15KB) and defines 18 functions. Completely wrong \u2014 no answer / failed lookup."}, {"slot": "C", "correctness": 4, "justification": "Lists all 18 functions with correct line numbers (queue_init line 53, cbm_ac_build line 176, etc.) all matching the real source exactly. Covers all 14 ground-truth functions plus the 4 the ground truth omitted but which are genuinely defined in the file. No fabrication, fully correct and complete with accurate locations."}]}], "condMeanScore": {"cbm": 4, "graphify": 0, "explorer": 4}}, {"id": "D1.3", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/foundation/str_util.c. Return just the function names.", "answers": [{"cond": "cbm", "answer": "Functions defined in src/foundation/str_util.c (15):\ncbm_path_join, cbm_path_join_n, cbm_path_ext, cbm_path_base, cbm_path_dir, cbm_str_starts_with, cbm_str_ends_with, cbm_str_contains, cbm_str_tolower, cbm_str_replace_char, cbm_str_strip_ext, cbm_str_split, cbm_validate_shell_arg, cbm_validate_project_name, cbm_json_escape", "tool_calls": 3}, {"cond": "graphify", "answer": "Functions DEFINED in src/foundation/str_util.c (15):\n- cbm_json_escape\n- cbm_validate_shell_arg\n- cbm_validate_project_name\n- cbm_path_join\n- cbm_path_join_n\n- cbm_path_dir\n- cbm_path_base\n- cbm_path_ext\n- cbm_str_replace_char\n- cbm_str_split\n- cbm_str_strip_ext\n- cbm_str_tolower\n- cbm_str_contains\n- cbm_str_ends_with\n- cbm_str_starts_with", "tool_calls": 2}, {"cond": "explorer", "answer": "15 functions are DEFINED in src/foundation/str_util.c: cbm_path_join, cbm_path_join_n, cbm_path_ext, cbm_path_base, cbm_path_dir, cbm_str_starts_with, cbm_str_ends_with, cbm_str_contains, cbm_str_tolower, cbm_str_replace_char, cbm_str_strip_ext, cbm_str_split, cbm_validate_shell_arg, cbm_validate_project_name, cbm_json_escape.", "tool_calls": 2}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Lists exactly the 15 functions in the ground truth (cbm_json_escape, cbm_validate_shell_arg, cbm_validate_project_name, cbm_path_join, cbm_path_join_n, cbm_path_dir, cbm_path_base, cbm_path_ext, cbm_str_replace_char, cbm_str_split, cbm_str_strip_ext, cbm_str_tolower, cbm_str_contains, cbm_str_ends_with, cbm_str_starts_with). No omissions, no fabrications. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Lists all 15 ground-truth functions verbatim with no extras and no fabrications. Order differs but the set is exact. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Lists all 15 ground-truth functions with no extras and no fabrications. Identical set to ground truth (verified against src/foundation/str_util.c). Fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 15 functions exactly matching the ground truth set (cbm_json_escape, cbm_validate_shell_arg, cbm_validate_project_name, cbm_path_join, cbm_path_join_n, cbm_path_dir, cbm_path_base, cbm_path_ext, cbm_str_replace_char, cbm_str_split, cbm_str_strip_ext, cbm_str_tolower, cbm_str_contains, cbm_str_ends_with, cbm_str_starts_with). No omissions, no fabrications. Verified against source."}, {"slot": "B", "correctness": 4, "justification": "Lists all 15 functions exactly matching the ground truth set, only differing in order/formatting. No omissions, no fabrications. Verified against source."}, {"slot": "C", "correctness": 4, "justification": "Lists all 15 functions exactly matching the ground truth set, identical content to B. No omissions, no fabrications. Verified against source."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D1.4", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/git/git_context.c. Return just the function names.", "answers": [{"cond": "cbm", "answer": "Functions defined in src/git/git_context.c (16):\n- git_strdup\n- trim_newlines\n- git_validate_repo_path\n- git_capture\n- path_is_absolute\n- join_root_relative\n- derive_canonical_root\n- slug_from_branch\n- cbm_git_context_free\n- cbm_git_context_resolve\n- cbm_git_context_branch_qn\n- append_fmt_checked\n- json_escaped_len\n- json_append_bool\n- json_append_string\n- cbm_git_context_props_json", "tool_calls": 3}, {"cond": "graphify", "answer": "Functions defined in src/git/git_context.c (16):\n1. git_strdup\n2. git_validate_repo_path\n3. git_capture\n4. derive_canonical_root\n5. slug_from_branch\n6. join_root_relative\n7. path_is_absolute\n8. trim_newlines\n9. cbm_git_context_free\n10. cbm_git_context_resolve\n11. append_fmt_checked\n12. json_append_bool\n13. json_append_string\n14. json_escaped_len\n15. cbm_git_context_props_json\n16. cbm_git_context_branch_qn", "tool_calls": 3}, {"cond": "explorer", "answer": "Functions DEFINED in src/git/git_context.c (16 total):\n\n1. git_strdup (static)\n2. trim_newlines (static)\n3. git_validate_repo_path (static)\n4. git_capture (static)\n5. path_is_absolute (static)\n6. join_root_relative (static)\n7. derive_canonical_root (static)\n8. slug_from_branch (static)\n9. cbm_git_context_free\n10. cbm_git_context_resolve\n11. cbm_git_context_branch_qn\n12. append_fmt_checked (static)\n13. json_escaped_len (static)\n14. json_append_bool (static)\n15. json_append_string (static)\n16. cbm_git_context_props_json", "tool_calls": 2}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 14 ground-truth functions plus json_append_bool (line 327), which is a real function definition in the source that the ground truth set omits. All 16 names verified present in src/git/git_context.c; static/non-static annotations are accurate. No fabrications. Fully correct and complete vs the actual source."}, {"slot": "B", "correctness": 4, "justification": "Identical content to A: all 14 ground-truth functions plus the real json_append_bool. All 16 names match actual function definitions in the source; no fabricated names. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Lists the same 16 functions (all 14 ground-truth plus json_append_bool), just in a different order. Every name corresponds to a real function definition in src/git/git_context.c; no fabrications or omissions. Fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 14 ground-truth functions plus json_append_bool (line 327) and json_append_string (line 333), which I verified ARE genuinely defined in the real source \u2014 the ground truth's count of 14 is itself incomplete (it missed these 2 multi-line-signature functions). No fabrication: all 16 entries are real definitions. Static annotations are accurate. Fully correct and complete vs actual source."}, {"slot": "B", "correctness": 4, "justification": "Identical complete set of 16 real functions: all 14 ground-truth items plus json_append_bool and json_append_string, both verified present in the source. No fabricated names. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Same 16 real functions as A and B (reordered), including all 14 ground-truth items plus the two json_append_bool/json_append_string functions that genuinely exist in the source but were omitted from the ground truth. trim_newlines included (#8). No fabrication. Fully correct and complete."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D1.5", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/discover/discover.c. Return just the function names.", "answers": [{"cond": "cbm", "answer": "Functions DEFINED in src/discover/discover.c (24):\nstr_in_list, ends_with, str_contains, cbm_should_skip_dir, cbm_has_ignored_suffix, cbm_should_skip_filename, cbm_matches_fast_pattern, file_list_add_excluded, fl_add, local_rel_path, should_skip_directory, should_skip_file, detect_file_language, wide_stat, safe_stat, walk_dir_process_file, try_load_nested_gitignore, walk_push_subdir, walk_dir_process_entry, walk_dir, cbm_discover, cbm_discover_ex, cbm_discover_free, cbm_discover_free_excluded", "tool_calls": 3}, {"cond": "graphify", "answer": "Functions DEFINED in src/discover/discover.c (24 total):\n\n1. str_in_list (L108)\n2. ends_with (L119)\n3. str_contains (L130)\n4. cbm_should_skip_dir (L136)\n5. cbm_has_ignored_suffix (L155)\n6. cbm_should_skip_filename (L177)\n7. cbm_matches_fast_pattern (L191)\n8. file_list_add_excluded (L219)\n9. fl_add (L239)\n10. local_rel_path (L262)\n11. should_skip_directory (L274)\n12. should_skip_file (L297)\n13. detect_file_language (L330)\n14. wide_stat (L348)\n15. safe_stat (L370)\n16. walk_dir_process_file (L385)\n17. try_load_nested_gitignore (L409)\n18. walk_push_subdir (L423)\n19. walk_dir_process_entry (L435)\n20. walk_dir (L470)\n21. cbm_discover (L518)\n22. cbm_discover_ex (L523)\n23. cbm_discover_free (L586)\n24. cbm_discover_free_excluded (L597)\n\n(Type/struct nodes also located in this file \u2014 file_list_t, walk_frame_t, cbm_gitignore_t, cbm_discover_opts_t, cbm_index_mode_t, cbm_file_info_t, cbm_dirent_t, off_t, CBMLanguage \u2014 are excluded since they are not functions.)", "tool_calls": 3}, {"cond": "explorer", "answer": "(no answer)", "tool_calls": 0}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Lists 24 function names. Contains all 14 ground-truth functions and adds 10 more (ends_with, fl_add, should_skip_directory, should_skip_file, walk_dir_process_file, walk_push_subdir, walk_dir_process_entry, walk_dir, cbm_discover, cbm_discover_ex) \u2014 all verified as real definitions in src/discover/discover.c. The ground truth is an incomplete subset (14 of 24); the candidate is actually fully correct and complete vs the real source, with zero fabrications. Fully correct."}, {"slot": "B", "correctness": 4, "justification": "Identical 24 function names as A, each with accurate line numbers matching the real source (e.g. str_in_list L108, walk_dir L470, cbm_discover_free_excluded L597). Includes all 14 ground-truth functions plus the 10 the ground truth omitted, all verified real. Also correctly excludes type/struct nodes as non-functions. No fabrications. Fully correct and complete vs source."}, {"slot": "C", "correctness": 0, "justification": "No answer provided."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Lists all 24 functions actually defined in src/discover/discover.c. Verified against source via grep: every name (str_in_list, ends_with, str_contains, cbm_should_skip_dir, cbm_has_ignored_suffix, cbm_should_skip_filename, cbm_matches_fast_pattern, file_list_add_excluded, fl_add, local_rel_path, should_skip_directory, should_skip_file, detect_file_language, wide_stat, safe_stat, walk_dir_process_file, try_load_nested_gitignore, walk_push_subdir, walk_dir_process_entry, walk_dir, cbm_discover, cbm_discover_ex, cbm_discover_free, cbm_discover_free_excluded) is a real definition. The ground truth's 14 functions are a strict subset of these 24 (GT undercounts; source actually has 24). All GT items present, no fabrication. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Same complete and correct set of 24 functions as A, all verified against source, with accurate line numbers matching the grep output (e.g., str_in_list L108, walk_dir L470, cbm_discover_free_excluded L597). Correctly excludes type/struct nodes (not functions). Contains all 14 ground-truth functions plus the additional real definitions present in the file. No fabrication. Fully correct and complete."}, {"slot": "C", "correctness": 0, "justification": "No answer provided."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 0}}, {"id": "D2.1", "dim": "D2", "question": "Which functions/files call the function `cbm_arena_alloc`? List the caller locations (files).", "answers": [{"cond": "cbm", "answer": "`cbm_arena_alloc` is defined in arena.h (src/foundation/arena.h and internal/cbm/arena.h). The graph records callers at file/module granularity (no Function->Function CALLS edges resolve; callers are Module nodes via CALLS edges). The files that call cbm_arena_alloc are:\n\nsrc/foundation/arena.h\nsrc/foundation/str_util.h\nsrc/pipeline/pass_lsp_cross.h\nsrc/pipeline/pass_parallel.c\ninternal/cbm/arena.h\ninternal/cbm/cbm.h\ninternal/cbm/helpers.h\ninternal/cbm/extract_defs.c\ninternal/cbm/extract_imports.c\ninternal/cbm/extract_semantic.c\ninternal/cbm/extract_node_stack.h\ninternal/cbm/lsp/c_lsp.h\ninternal/cbm/lsp/cs_lsp.c\ninternal/cbm/lsp/go_lsp.c\ninternal/cbm/lsp/py_lsp.c\ninternal/cbm/lsp/java_lsp.h\ninternal/cbm/lsp/kotlin_lsp.h\ninternal/cbm/lsp/php_lsp.h\ninternal/cbm/lsp/rust_lsp.h\ninternal/cbm/lsp/ts_lsp.h\ninternal/cbm/lsp/rust_rustdoc.h\ninternal/cbm/lsp/scope.h\ninternal/cbm/lsp/lsp_node_iter.h\ninternal/cbm/lsp/type_registry.h\ninternal/cbm/lsp/type_rep.h\ninternal/cbm/lsp/generated/cpp_stdlib_data.c\ninternal/cbm/lsp/generated/cs_stdlib_data.c\ninternal/cbm/lsp/generated/java_stdlib_data.c\ninternal/cbm/lsp/generated/php_stdlib_data.c\ninternal/cbm/lsp/generated/rust_stdlib_data.c\ninternal/cbm/lsp/generated/rust_crates_seed.c\n\nNote: function-level caller names are not available in the graph (a Function->Function CALLS query returns 0 rows); CALLS edges originate from Module/File nodes only.", "tool_calls": 3}, {"cond": "graphify", "answer": "Two distinct `cbm_arena_alloc` functions exist in the graph, each with its own set of callers (all callers are in the same file as the respective definition):\n\n1) cbm_arena_alloc() in src/foundation/arena.c (L58) \u2014 callers:\n- cbm_arena_calloc() \u2014 src/foundation/arena.c (L78)\n- cbm_arena_sprintf() \u2014 src/foundation/arena.c (L110)\n- cbm_arena_strdup() \u2014 src/foundation/arena.c (L86)\n- cbm_arena_strndup() \u2014 src/foundation/arena.c (L98)\n\n2) cbm_arena_alloc() in internal/cbm/arena.c (L35) \u2014 callers:\n- cbm_arena_sprintf() \u2014 internal/cbm/arena.c (L79)\n- cbm_arena_strdup() \u2014 internal/cbm/arena.c (L57)\n- cbm_arena_strndup() \u2014 internal/cbm/arena.c (L68)\n\nCaller files: src/foundation/arena.c and internal/cbm/arena.c. (Note: the foundation copy additionally has cbm_arena_calloc as a caller; the internal/cbm copy does not.)", "tool_calls": 4}, {"cond": "explorer", "answer": "Caller files of `cbm_arena_alloc` (in the source tree, excluding the graphify-out/ graph DB). Two `cbm_arena_alloc` definitions exist: `src/foundation/arena.c:58` and `internal/cbm/arena.c:35`; declarations are in `src/foundation/arena.h:36` and `internal/cbm/arena.h:27`.\n\nCALLER LOCATIONS (files, with call-count):\nLSP backends (internal/cbm/lsp/):\n- ts_lsp.c (48)\n- c_lsp.c (46)\n- type_rep.c (45)\n- py_lsp.c (39)\n- go_lsp.c (31)\n- cs_lsp.c (30)\n- kotlin_lsp.c (27)\n- php_lsp.c (26)\n- rust_lsp.c (24)\n- java_lsp.c (21)\n- type_registry.c (8)\n- scope.c (2)\n- rust_rustdoc.c (1)\n- lsp_node_iter.h (1, macro)\n- generated/cs_stdlib_data.c (5), generated/cpp_stdlib_data.c (2), generated/java_stdlib_data.c (2), generated/rust_stdlib_data.c (1), generated/rust_crates_seed.c (1), generated/php_stdlib_data.c (1)\n\ninternal/cbm/:\n- extract_defs.c (22)\n- helpers.c (3)\n- extract_node_stack.h (2, da_reserve-style macro)\n- cbm.c (1, inside da_reserve macro)\n- arena.c (internal callers: cbm_arena_strdup/strndup/sprintf at lines 61,71,90)\n\nsrc/foundation/:\n- str_util.c (5)\n- arena.c (internal callers: cbm_arena_calloc/strdup/sprintf at lines 79,91,102,119)\n\nsrc/pipeline/:\n- pass_parallel.c (1)\n- pass_lsp_cross.c (1)\n\nThe single highest-volume direct callers are the per-language LSP extractors (ts_lsp.c, c_lsp.c, type_rep.c, py_lsp.c) plus extract_defs.c. arena.c/arena.h are the defining module; arena.h files contain only the prototype, not calls.", "tool_calls": 5}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 2, "justification": "Lists 30 files, but ~14 contain ZERO occurrences of cbm_arena_alloc (verified by grep): str_util.h, pass_lsp_cross.h, cbm.h, helpers.h, c_lsp.h, java_lsp.h, kotlin_lsp.h, php_lsp.h, rust_lsp.h, ts_lsp.h, rust_rustdoc.h, scope.h, type_registry.h, type_rep.h, plus extract_imports.c/extract_semantic.c \u2014 all fabricated/wrong-extension caller files. It lists .h variants of the major LSP backends instead of the real .c files, so it MISSES the top-3 highest-volume real callers (ts_lsp.c, c_lsp.c, type_rep.c) and also omits arena.c(both), str_util.c, helpers.c, cbm.c. About half the entries are real (16/30); the correct answer is buried in noise with the biggest callers wrong. Partially correct."}, {"slot": "B", "correctness": 1, "justification": "Identifies only 2 of the 31 GT caller files (src/foundation/arena.c and internal/cbm/arena.c), capturing only the trivial intra-arena self-callers (calloc/strdup/strndup/sprintf). It misses ALL 29 external callers including every high-volume one (ts_lsp.c, c_lsp.c, type_rep.c, extract_defs.c, etc.). The two files it names are genuine callers and the function-name analysis is mostly right (minor line-number errors in internal/cbm/arena.c: claims 57/68/79 vs actual 61/71/90), but it effectively answered a far narrower question and is ~94% incomplete. Mostly wrong/largely incomplete."}, {"slot": "C", "correctness": 4, "justification": "Complete and accurate. Lists all 29 real call-site files matching the GT, with per-file counts matching the source grep almost exactly (ts_lsp.c 48, c_lsp.c 46, type_rep.c 45, py_lsp.c 39, go_lsp.c 31, cs_lsp.c 30, kotlin_lsp.c 27, php_lsp.c 26, rust_lsp.c 24, extract_defs.c 22, java_lsp.c 21, type_registry.c 8, generated files, etc.). Correctly locates both definitions (src/foundation/arena.c:58, internal/cbm/arena.c:35) and declarations (arena.h:36/27), and correctly notes the two arena.h files hold only the prototype, not calls \u2014 the only GT entries not in its call-site list, which it accurately accounts for. No fabricated files. Fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 2, "justification": "Identifies the right area (arena.h definition, internal/cbm/lsp/ directory, src/pipeline, generated/ files) and gets several real .c callers right (cs_lsp.c, go_lsp.c, py_lsp.c, extract_defs.c, pass_parallel.c, the generated *.c files). BUT a large fraction of its list is wrong: it substitutes .h files for the real .c callers (c_lsp.h, ts_lsp.h, py_lsp.h, rust_lsp.h, java_lsp.h, kotlin_lsp.h, php_lsp.h, ts_lsp.h, rust_rustdoc.h, scope.h, type_registry.h, type_rep.h) where the actual caller is the .c file, and includes files verified to have 0 calls (extract_imports.c, extract_semantic.c, cbm.h, str_util.h, pass_lsp_cross.h). Correct answer buried in noise/wrong attributions, with module/file granularity only. Partially correct."}, {"slot": "B", "correctness": 1, "justification": "Claims only 2 caller files: src/foundation/arena.c and internal/cbm/arena.c. Both ARE genuine callers (verified in source), and the intra-file helper callers it lists are plausible. But it misses 29 of the 31 caller files in the ground truth \u2014 the entire dominant LSP layer (ts_lsp.c 47, c_lsp.c 46, type_rep.c 45, py_lsp.c, go_lsp.c, etc.), extract_defs.c (21), str_util.c, helpers.c, the generated stdlib files, pass_parallel.c, pass_lsp_cross.c. Drastically undercounts; only ~2/31 of the answer. Mostly incomplete."}, {"slot": "C", "correctness": 4, "justification": "Lists essentially the complete correct set of 31 caller files with the correct .c extensions, matching the source/ground-truth nearly exactly. Counts align with the actual grep (ts_lsp.c 48, c_lsp.c 46, type_rep.c 45, py_lsp.c 39, go_lsp.c 31, cs_lsp.c 30, kotlin_lsp.c 27, php_lsp.c 26, rust_lsp.c 24, java_lsp.c 21, extract_defs.c 22, type_registry.c 8, scope.c 2, rust_rustdoc.c 1, lsp_node_iter.h, the generated *.c files, helpers.c, extract_node_stack.h, cbm.c, str_util.c, pass_parallel.c, pass_lsp_cross.c, arena.c). Correctly identifies both definitions (src/foundation/arena.c:58, internal/cbm/arena.c:35) and declarations, notes arena.h holds only the prototype, and correctly highlights the highest-volume callers. Fully correct and complete with no fabrication."}]}], "condMeanScore": {"cbm": 2, "graphify": 1, "explorer": 4}}, {"id": "D2.2", "dim": "D2", "question": "Which functions/files call the function `cbm_minhash_compute`? List the caller locations (files).", "answers": [{"cond": "cbm", "answer": "cbm_minhash_compute (defined in src/simhash/minhash.c, lines 249-265) has one caller: compute_fingerprint in internal/cbm/extract_defs.c (call site at line 126; function spans lines 119-155). Caller location (file): internal/cbm/extract_defs.c", "tool_calls": 3}, {"cond": "graphify", "answer": "Direct caller of cbm_minhash_compute(): compute_fingerprint() at internal/cbm/extract_defs.c:L119 (calls edge, INFERRED). This is the only function with an incoming calls edge. The function itself is defined in src/simhash/minhash.c:L249. The other functions from `affected` (extract_func_def, push_method_def, extract_rust_impl in internal/cbm/extract_defs.c) are downstream callees reached through compute_fingerprint, not callers. Caller file: internal/cbm/extract_defs.c.", "tool_calls": 3}, {"cond": "explorer", "answer": "Only ONE caller of `cbm_minhash_compute` exists in the source tree (excluding the graphify-out graph DB, which I was told not to use):\n\n- internal/cbm/extract_defs.c:126 \u2014 inside the static function `compute_fingerprint(CBMExtractCtx *ctx, CBMDefinition *def, TSNode func_node)`:\n `if (!cbm_minhash_compute(body, ctx->source, (int)ctx->language, &result)) {`\n\nThe other text matches are NOT callers:\n- src/simhash/minhash.c:249 \u2014 the function DEFINITION (`bool cbm_minhash_compute(...)`)\n- src/simhash/minhash.h:62 \u2014 the function DECLARATION (prototype)\n- src/simhash/minhash.h:9 \u2014 a documentation comment mentioning the function\n\nSo the single caller location/file is:\n- Function: compute_fingerprint\n- File: internal/cbm/extract_defs.c (line 126)", "tool_calls": 4}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies the single real caller: compute_fingerprint in internal/cbm/extract_defs.c (cites function start line 119; call site is actually 126, but 119 is the enclosing function definition line, which is acceptable). Definition at src/simhash/minhash.c:249 is correct. Correctly explains that the other 'affected' functions are downstream callees, not callers. Caller file matches ground truth's real caller. No fabrication."}, {"slot": "B", "correctness": 4, "justification": "Most precise: identifies compute_fingerprint at internal/cbm/extract_defs.c:126 with exact signature and the literal call-site line. Explicitly disqualifies the minhash.h declaration/doc-comment and minhash.c definition as non-callers, which exactly accounts for why the grep upper-bound (minhash.h:2) overcounts. Fully correct and complete with no fabrication."}, {"slot": "C", "correctness": 4, "justification": "Correct and complete: caller is compute_fingerprint in internal/cbm/extract_defs.c, call site line 126, function spans 119-155; definition at src/simhash/minhash.c:249-265. Matches the real caller in ground truth. Concise, no fabrication."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies the sole real caller compute_fingerprint() in internal/cbm/extract_defs.c, and correctly states the definition is in src/simhash/minhash.c:L249. Correctly dismisses other functions as downstream callees rather than callers. Caller file matches ground truth. Uses L119 (function-def start) instead of the call-site line 126, but frames it as the function location, which is accurate. Complete and correct."}, {"slot": "B", "correctness": 4, "justification": "Most precise: identifies compute_fingerprint at internal/cbm/extract_defs.c:126 (exact call site) with full signature, and explicitly distinguishes the non-caller grep matches (definition minhash.c:249, declaration minhash.h:62, doc comment minhash.h:9) \u2014 exactly matching the ground-truth upper-bound and the real source. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Correctly identifies compute_fingerprint in internal/cbm/extract_defs.c with the exact call-site line 126 and function span, plus the definition in src/simhash/minhash.c:249-265. Caller file matches ground truth. Fully correct and complete, no fabrication."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D2.3", "dim": "D2", "question": "Which functions/files call the function `cbm_split_camel_case`? List the caller locations (files).", "answers": [{"cond": "cbm", "answer": "The function `cbm_split_camel_case` has exactly one caller location:\n\n- src/pipeline/pass_enrichment.c\n\nThis file (module `src/pipeline/pass_enrichment.c`) has a CALLS edge to `cbm_split_camel_case`. No other files/functions reference it in the graph.", "tool_calls": 3}, {"cond": "graphify", "answer": "Direct caller of `cbm_split_camel_case()` (defined at src/pipeline/pass_enrichment.c:L45):\n\n- `cbm_tokenize_decorator()` \u2014 src/pipeline/pass_enrichment.c:L100\n\nIndirect/transitive caller (calls it via cbm_tokenize_decorator):\n- `extract_decorator_words()` \u2014 src/pipeline/pass_enrichment.c:L205\n\nCaller file(s): src/pipeline/pass_enrichment.c", "tool_calls": 3}, {"cond": "explorer", "answer": "Only ONE function calls `cbm_split_camel_case`:\n\n- `cbm_tokenize_decorator()` in `src/pipeline/pass_enrichment.c` (call at line 121; the function spans from line 100)\n\nReference details:\n- Definition: `src/pipeline/pass_enrichment.c:45` \u2014 `int cbm_split_camel_case(const char *s, char **out, int max_out)`\n- Declaration (prototype): `src/pipeline/pipeline_internal.h:229`\n- Caller (only one): `src/pipeline/pass_enrichment.c:121`, inside the function `cbm_tokenize_decorator()`\n\nSo there is exactly one caller file/location: `src/pipeline/pass_enrichment.c` (function `cbm_tokenize_decorator`). No other source file calls it. (A graphify-out/ AST cache also mentions it, but that is the derived graph DB, not source code.)", "tool_calls": 3}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Fully correct and complete. Identifies the single real caller function cbm_tokenize_decorator() in src/pipeline/pass_enrichment.c, with the exact call-site line 121 (verified) and notes the function spans from line 100 (verified). Correctly distinguishes the definition (pass_enrichment.c:45), the prototype/declaration (pipeline_internal.h:229), and the actual call site \u2014 matching the ground-truth grep UB (the .h entry is the prototype, not a call). Correct signature. Also correctly flags graphify-out as a derived DB, not source. No fabrication."}, {"slot": "B", "correctness": 3, "justification": "Correctly names the one real caller file, src/pipeline/pass_enrichment.c, and correctly states no other files reference it. This matches the source reality (only pass_enrichment.c contains an actual call; the .h is just the prototype). However it gives no caller function name, no line number, and no signature \u2014 relies entirely on a graph CALLS edge. Right answer but lacks the location detail the question asks for. Minor omissions, no errors, no fabrication."}, {"slot": "C", "correctness": 3, "justification": "Correctly identifies the direct caller cbm_tokenize_decorator() in src/pipeline/pass_enrichment.c, and correctly identifies extract_decorator_words() as a transitive caller (verified: line 219 calls cbm_tokenize_decorator, which calls cbm_split_camel_case). Correct caller file. Definition line 45 correct. Small imprecision: labels the direct caller location as L100 (the function's start) rather than the actual call site at L121, and labels the transitive caller's location L205 (its function start). Well-grounded, no fabrication, but slightly less precise than the call-site line."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies the single real direct caller cbm_tokenize_decorator() in src/pipeline/pass_enrichment.c with the exact call site (line 121) and signature. Also notes the prototype/declaration in src/pipeline/pipeline_internal.h:229 and definition at line 45. This covers BOTH ground-truth caller files (the .h prototype and the .c). Precise, no fabrication, fully correct and complete."}, {"slot": "B", "correctness": 3, "justification": "Names the correct caller file src/pipeline/pass_enrichment.c, which is the real caller location. However it gives no function name or line, and omits src/pipeline/pipeline_internal.h (one of the two ground-truth files via the prototype). Correct but shallow with one omission."}, {"slot": "C", "correctness": 4, "justification": "Correctly identifies the direct caller cbm_tokenize_decorator() in src/pipeline/pass_enrichment.c (cites L100, the function start, vs the actual call at L121 \u2014 minor imprecision) and the definition at L45. Also accurately flags the transitive/indirect caller extract_decorator_words() at L205, which genuinely calls cbm_tokenize_decorator at L219 \u2014 real, properly labeled, not fabricated. Misses the .h prototype file, but per the rubric credit is given for identifying real caller files; all stated content is accurate."}]}], "condMeanScore": {"cbm": 3, "graphify": 3.5, "explorer": 4}}, {"id": "D2.4", "dim": "D2", "question": "Which functions/files call the function `cbm_sem_tokenize`? List the caller locations (files).", "answers": [{"cond": "cbm", "answer": "The function `cbm_sem_tokenize` (defined in src/semantic/semantic.c) has one caller (CALLS edge):\n\n- src/pipeline/pass_semantic_edges.c\n\nDetails from the graph:\n- DEFINES: src/semantic/semantic.c (defining file, not a caller)\n- CALLS: src/pipeline/pass_semantic_edges.c \u2190 the caller location\n- USAGE: src/semantic/semantic.c (same-module usage)\n\nSo the only external caller file is: src/pipeline/pass_semantic_edges.c", "tool_calls": 4}, {"cond": "graphify", "answer": "Callers of cbm_sem_tokenize() (all in src/pipeline/pass_semantic_edges.c):\n- tokenize_json_string_field() \u2014 src/pipeline/pass_semantic_edges.c:363\n- tokenize_json_array_field() \u2014 src/pipeline/pass_semantic_edges.c:377\n- tokenize_call_neighbors() \u2014 src/pipeline/pass_semantic_edges.c:396\n- tokenize_node() \u2014 src/pipeline/pass_semantic_edges.c:418\n- tokenize_worker() \u2014 src/pipeline/pass_semantic_edges.c:561\n\nFile(s) that call it: src/pipeline/pass_semantic_edges.c\n\n(cbm_sem_tokenize itself is defined in src/semantic/semantic.c:166.)", "tool_calls": 2}, {"cond": "explorer", "answer": "`cbm_sem_tokenize` is DEFINED in src/semantic/semantic.c:166 and DECLARED in src/semantic/semantic.h:96.\n\nIt is CALLED from exactly ONE file: src/pipeline/pass_semantic_edges.c \u2014 6 call sites across 4 functions:\n\n- src/pipeline/pass_semantic_edges.c:372 \u2014 in `tokenize_json_string_field()` (def L363)\n- src/pipeline/pass_semantic_edges.c:386 \u2014 in `tokenize_json_array_field()` (def L377)\n- src/pipeline/pass_semantic_edges.c:412 \u2014 in `tokenize_call_neighbors()` (def L396)\n- src/pipeline/pass_semantic_edges.c:421 \u2014 in `tokenize_node()` (def L418)\n- src/pipeline/pass_semantic_edges.c:423 \u2014 in `tokenize_node()`\n- src/pipeline/pass_semantic_edges.c:426 \u2014 in `tokenize_node()`\n\nSo the only caller file is src/pipeline/pass_semantic_edges.c, with caller functions: tokenize_json_string_field, tokenize_json_array_field, tokenize_call_neighbors, and tokenize_node. (Search restricted to .c/.h source; graphify-out/ graph DB cache was excluded per the no-graph-tool rule.)", "tool_calls": 3}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 3, "justification": "Correctly identifies the single real caller file src/pipeline/pass_semantic_edges.c with no fabrication. Correctly distinguishes the defining file (semantic.c). However, it is thin: no line numbers, no caller function names, no mention of the 6 call sites, and frames the answer in graph-edge jargon. Correct but minimal/incomplete vs ground truth, hence not a 4."}, {"slot": "B", "correctness": 2, "justification": "Correct caller file (pass_semantic_edges.c) and correct definition location (semantic.c:166). But it incorrectly lists tokenize_worker() (L561) as a caller of cbm_sem_tokenize \u2014 verified false: tokenize_worker calls tokenize_node, not cbm_sem_tokenize directly. Also the line numbers given are function-definition lines, not call-site lines, yet presented as caller locations. Right file but contains a fabricated/incorrect caller and mislabeled lines."}, {"slot": "C", "correctness": 4, "justification": "Fully correct and complete. Identifies the single real caller file src/pipeline/pass_semantic_edges.c with all 6 call sites at exact verified lines (372, 386, 412, 421, 423, 426), correctly grouped under the 4 caller functions (tokenize_json_string_field, tokenize_json_array_field, tokenize_call_neighbors, tokenize_node). Correctly gives definition (semantic.c:166) and declaration (semantic.h:96) and correctly does not count the header declaration as a true caller. No fabrication; matches source exactly."}]}, {"scores": [{"slot": "A", "correctness": 3, "justification": "Correctly identifies the single real caller file src/pipeline/pass_semantic_edges.c and properly distinguishes DEFINES (semantic.c) from CALLS. No fabrication. Minor omissions: no call-site line numbers and no caller function names; lacks the detail of Answer C. Matches the meaningful part of the ground truth (the .h is a grep-UB declaration artifact, not a real caller, so omitting it is not penalized)."}, {"slot": "B", "correctness": 2, "justification": "Correctly identifies the caller file and 4 of the real caller functions with their definition lines (363, 377, 396, 418 verified as function def lines). However it fabricates tokenize_worker (L561) as a caller of cbm_sem_tokenize \u2014 verified that tokenize_worker calls tokenize_node, NOT cbm_sem_tokenize directly, so this is an incorrect/indirect caller presented as direct. Also the lines are function-def lines, not the actual call sites. One clear error plus mild imprecision drops it to partial."}, {"slot": "C", "correctness": 4, "justification": "Fully correct and complete. Caller file src/pipeline/pass_semantic_edges.c with all 6 call-site lines exactly correct (372, 386, 412, 421, 423, 426 verified). Caller functions tokenize_json_string_field, tokenize_json_array_field, tokenize_call_neighbors, tokenize_node with correct def lines. Correctly notes defined at semantic.c:166 and declared at semantic.h:96. No fabrication; correctly limits the direct callers to the 4 functions (does not falsely include tokenize_worker)."}]}], "condMeanScore": {"cbm": 3, "graphify": 2, "explorer": 4}}, {"id": "D2.5", "dim": "D2", "question": "Which functions/files call the function `ac_build_trie`? List the caller locations (files).", "answers": [{"cond": "cbm", "answer": "Caller of `ac_build_trie`:\n\n- Function `cbm_ac_build` in `internal/cbm/ac.c` (call site at line 212; function spans lines 176-218) \u2014 this is the only function that calls `ac_build_trie`.\n\nFile-level: the only caller file is `internal/cbm/ac.c` (the call is intra-file; `ac_build_trie` is defined at `internal/cbm/ac.c:72`).\n\nThe function is also declared (DEFINES, not a call) in the header `internal/cbm/ac.h`. No other files or functions call it.", "tool_calls": 5}, {"cond": "graphify", "answer": "`ac_build_trie()` (defined at internal/cbm/ac.c:L72) has exactly one caller:\n\n- `cbm_ac_build()` \u2014 internal/cbm/ac.c:L176\n\nCaller file: internal/cbm/ac.c", "tool_calls": 3}, {"cond": "explorer", "answer": "`ac_build_trie` is called from exactly ONE location:\n\n- Caller: function `cbm_ac_build` (defined at line 176)\n- Call site: internal/cbm/ac.c:212 \u2014 `int num_states = ac_build_trie(ac, patterns, lengths, count);`\n\nFull path: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/internal/cbm/ac.c\n\nNotes: `ac_build_trie` is a `static` function defined at ac.c:72, so it is only visible/callable within ac.c. No other files call it. (The only other matches in the corpus were inside the graphify-out/ graph database files, which are excluded per the search rules.)", "tool_calls": 4}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 3, "justification": "Correctly identifies the sole caller cbm_ac_build and the only caller file internal/cbm/ac.c, with the correct definition line of ac_build_trie (L72). Minor imprecision: it lists the caller location as L176 (the cbm_ac_build function definition line) rather than the actual call site L212. Correct, complete, no fabrication; one small location error."}, {"slot": "B", "correctness": 4, "justification": "Fully correct and complete. Sole caller cbm_ac_build (def L176), exact call site at ac.c:212 with verbatim code, notes it is static and defined at L72, only visible within ac.c. Correct caller file internal/cbm/ac.c matching the grep upper-bound. Precise on every detail, no fabrication."}, {"slot": "C", "correctness": 3, "justification": "Correctly identifies sole caller cbm_ac_build, call site L212, span 176-218 (accurate), definition L72, and correct caller file. However it falsely claims ac_build_trie is declared in the header internal/cbm/ac.h \u2014 the header contains no such declaration (and cannot, since the function is static). This is a fabricated claim, though correctly labeled as a DEFINES/non-call relationship so it does not corrupt the caller answer. Minor factual error."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies the sole caller function cbm_ac_build and the only caller file internal/cbm/ac.c, and gives the correct definition line of ac_build_trie (L72). Matches ground truth (1 caller file). Minor: uses the function's definition line (L176) rather than the actual call site (L212), but the caller is correctly identified. No fabrication."}, {"slot": "B", "correctness": 4, "justification": "Fully correct and complete: caller function cbm_ac_build (def L176), exact call site internal/cbm/ac.c:212 with the actual source line, ac_build_trie defined at L72 and correctly noted as static. Full path given and correctly excludes graphify-out matches per rules. Matches ground truth exactly."}, {"slot": "C", "correctness": 4, "justification": "Fully correct and complete: caller cbm_ac_build in internal/cbm/ac.c, call site at line 212, function span 176-218 (verified), definition of ac_build_trie at L72. Correctly distinguishes the ac.h header declaration as DEFINES, not a call. No fabrication; matches ground truth."}]}], "condMeanScore": {"cbm": 3.5, "graphify": 3.5, "explorer": 4}}, {"id": "D3.1", "dim": "D3", "question": "In which file and at what line is the function `ac_build_trie` defined? Show its full signature.", "answers": [{"cond": "cbm", "answer": "File: internal/cbm/ac.c (absolute: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/internal/cbm/ac.c)\nLine: 72\nFull signature: static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)", "tool_calls": 2}, {"cond": "graphify", "answer": "Function `ac_build_trie` is defined in `internal/cbm/ac.c` at line 72 (node ID: cbm_ac_ac_build_trie, community 54).\n\nSignature (reconstructed from the graph): the graph records `ac_build_trie()` as a function in ac.c that takes a `CBMAutomaton` pointer as a parameter (parameter_type reference edge to CBMAutomaton) and is a private helper called only by `cbm_ac_build()`. Thus the signature is of the form:\n\n static void ac_build_trie(CBMAutomaton *aut, ...)\n\nNote: graphify stores the node's source location (internal/cbm/ac.c:L72) and parameter type (CBMAutomaton) but not a verbatim signature string, so the exact return type/qualifiers and additional parameters beyond the CBMAutomaton pointer are inferred, not literally stored. The file and line (internal/cbm/ac.c, L72) are exact.", "tool_calls": 3}, {"cond": "explorer", "answer": "The function `ac_build_trie` is defined in:\n\nFile: internal/cbm/ac.c\nLine: 72\n(absolute path: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/internal/cbm/ac.c)\n\nFull signature:\nstatic int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)", "tool_calls": 2}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 2, "justification": "File (internal/cbm/ac.c) and line (72) are exactly correct. However the signature is substantially wrong: gives 'static void ac_build_trie(CBMAutomaton *aut, ...)' \u2014 wrong return type (void instead of int), wrong param name (aut vs ac), and omits the three real parameters (const char **patterns, const int *lengths, int count). The question explicitly asks for the full signature; here it is incorrect and only inferred. Right location, but signature fabricated/incomplete."}, {"slot": "B", "correctness": 4, "justification": "Correct file (internal/cbm/ac.c), correct line (72), and verbatim-correct full signature: 'static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)'. Matches ground truth exactly."}, {"slot": "C", "correctness": 4, "justification": "Correct file (internal/cbm/ac.c), correct line (72), and verbatim-correct full signature matching ground truth exactly: 'static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)'."}]}, {"scores": [{"slot": "A", "correctness": 2, "justification": "Correct file (internal/cbm/ac.c) and correct line (72), but the signature is substantially wrong: it gives 'static void ac_build_trie(CBMAutomaton *aut, ...)'. Ground truth return type is int (not void), the param name is 'ac' (not 'aut'), and it omits the three other parameters (const char **patterns, const int *lengths, int count). The answer itself admits the signature is inferred rather than stored. Location correct but signature largely incorrect/incomplete -> partial."}, {"slot": "B", "correctness": 4, "justification": "Correct file (internal/cbm/ac.c), correct line (72), and exact signature matching ground truth verbatim: 'static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)'. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Correct file (internal/cbm/ac.c), correct line (72), and exact signature matching ground truth verbatim: 'static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count)'. Fully correct and complete."}]}], "condMeanScore": {"cbm": 4, "graphify": 2, "explorer": 4}}, {"id": "D3.2", "dim": "D3", "question": "In which file and at what line is the function `cbm_minhash_jaccard` defined? Show its full signature.", "answers": [{"cond": "cbm", "answer": "File: src/simhash/minhash.c (line 269).\nFull signature: double cbm_minhash_jaccard(const cbm_minhash_t *a, const cbm_minhash_t *b)", "tool_calls": 3}, {"cond": "graphify", "answer": "Function `cbm_minhash_jaccard` is defined in **src/simhash/minhash.c at line 269** (node id: simhash_minhash_cbm_minhash_jaccard, community 24).\n\nSignature (as reconstructible from the graph): the graph stores the symbol as `cbm_minhash_jaccard()` and records exactly one typed parameter reference \u2014 to `cbm_minhash_t` (edge: references, context=parameter_type, target src/simhash/minhash.c L208). It is a Jaccard-similarity helper called by `cbm_sem_combined_score()` (src/semantic/semantic.c L1601) and `sim_query_worker()` (src/pipeline/pass_similarity.c L176).\n\nNote: the graphify graph nodes do not store the literal raw signature string (no return-type/parameter-name text field). The authoritative facts the graph provides are: file=src/simhash/minhash.c, line=269, and parameter type=cbm_minhash_t. The full literal signature with parameter names cannot be retrieved from the graph alone (it would require reading the source, which is out of scope here).", "tool_calls": 2}, {"cond": "explorer", "answer": "The function `cbm_minhash_jaccard` is DEFINED in:\n\nFile: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/src/simhash/minhash.c\nLine: 269\n\nFull signature:\ndouble cbm_minhash_jaccard(const cbm_minhash_t *a, const cbm_minhash_t *b)\n\n(It is also declared in the header src/simhash/minhash.h at line 66 with the same signature; the definition with body is at minhash.c:269.)", "tool_calls": 3}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/simhash/minhash.c), correct line 269, and exact full signature 'double cbm_minhash_jaccard(const cbm_minhash_t *a, const cbm_minhash_t *b)'. Adds accurate supplementary note about the header declaration. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct file (src/simhash/minhash.c), correct line 269, and exact full signature. Concise and entirely accurate vs ground truth."}, {"slot": "C", "correctness": 2, "justification": "Correct location (src/simhash/minhash.c, line 269) but fails to deliver the full signature, which the question explicitly requests. It only gives the bare symbol name and one parameter type (cbm_minhash_t), and explicitly states the literal signature (return type 'double', parameter names a/b) cannot be retrieved. Location right but signature requirement unmet, with extra graph-metadata noise."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file src/simhash/minhash.c, correct line 269, and exact full signature 'double cbm_minhash_jaccard(const cbm_minhash_t *a, const cbm_minhash_t *b)'. Adds a verified, accurate extra note about the header declaration. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct file src/simhash/minhash.c, correct line 269, and exact full signature. Concise and fully matches ground truth."}, {"slot": "C", "correctness": 2, "justification": "Correct file and line 269, but the question asks to 'Show its full signature' and C explicitly declines to provide it, claiming the signature cannot be retrieved from the graph. It only supplies the parameter type (cbm_minhash_t), missing the return type and parameter names. Location correct but a core requested element (full signature) is absent, buried among graph caveats."}]}], "condMeanScore": {"cbm": 4, "graphify": 2, "explorer": 4}}, {"id": "D3.3", "dim": "D3", "question": "In which file and at what line is the function `cbm_split_camel_case` defined? Show its full signature.", "answers": [{"cond": "cbm", "answer": "The function `cbm_split_camel_case` is defined in `src/pipeline/pass_enrichment.c` at line 45.\n\nFull signature:\n`int cbm_split_camel_case(const char *s, char **out, int max_out)`", "tool_calls": 3}, {"cond": "graphify", "answer": "Function `cbm_split_camel_case` is defined in **src/pipeline/pass_enrichment.c at line 45** (node id `pipeline_pass_enrichment_cbm_split_camel_case`, community 75).\n\nFull signature: The graphify graph stores only the symbol name as the node label \u2014 `cbm_split_camel_case()` \u2014 and does not retain the parameter list or return type. So the exact full signature (return type + parameter types/names) is not recoverable from the graph alone; only the definition location (src/pipeline/pass_enrichment.c:45) and the symbol name are available.\n\nKnown graph facts about it: it is contained in pass_enrichment.c, it calls cbm_strndup() (inferred), and it is called by cbm_tokenize_decorator() (extracted).", "tool_calls": 3}, {"cond": "explorer", "answer": "The function `cbm_split_camel_case` is DEFINED in:\n\nFile: src/pipeline/pass_enrichment.c\nLine: 45\n\nFull signature (definition):\n int cbm_split_camel_case(const char *s, char **out, int max_out)\n\n(It is also declared in src/pipeline/pipeline_internal.h:229 with the same signature: `int cbm_split_camel_case(const char *s, char **out, int max_out);`)\n\nAbsolute path of the defining file:\n/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/src/pipeline/pass_enrichment.c", "tool_calls": 3}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/pipeline/pass_enrichment.c), correct line (45), and correct full signature (int cbm_split_camel_case(const char *s, char **out, int max_out)). Matches ground truth exactly."}, {"slot": "B", "correctness": 2, "justification": "File and line correct (pass_enrichment.c:45), but it explicitly refuses to provide the full signature, claiming it is 'not recoverable from the graph.' The question's core ask ('Show its full signature') is unmet. Location-only with a missing required element. The extra call/caller facts are accurate but do not compensate."}, {"slot": "C", "correctness": 4, "justification": "Correct file, line 45, and correct full signature. Additionally and accurately notes the declaration at pipeline_internal.h:229 (verified in source) and provides the correct absolute path. No fabrication; complete."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/pipeline/pass_enrichment.c), correct line (45), and correct full signature (int cbm_split_camel_case(const char *s, char **out, int max_out)). Matches ground truth exactly. Fully correct and complete."}, {"slot": "B", "correctness": 2, "justification": "Correct file and line (src/pipeline/pass_enrichment.c:45), but explicitly declines to provide the signature, claiming it is 'not recoverable from the graph.' The signature was the core of the question and it IS available in the source. Location half is right; the load-bearing signature is omitted. Extra graph facts are accurate but do not answer the asked question."}, {"slot": "C", "correctness": 4, "justification": "Correct file, line (45), and full signature, all matching ground truth. Additionally correctly identifies the header declaration at pipeline_internal.h:229 (verified accurate) and the absolute path. Fully correct, complete, and accurate extras with no fabrication."}]}], "condMeanScore": {"cbm": 4, "graphify": 2, "explorer": 4}}, {"id": "D3.4", "dim": "D3", "question": "In which file and at what line is the function `cbm_arena_alloc` defined? Show its full signature.", "answers": [{"cond": "cbm", "answer": "Function `cbm_arena_alloc` is defined in `internal/cbm/arena.c`, lines 35-55 (definition opens at line 35).\n\nFull signature:\n```c\nvoid *cbm_arena_alloc(CBMArena *a, size_t n)\n```\n\nNote: the graph contains two nodes for this function name \u2014 one in `internal/cbm/arena.c` (resolved snippet, lines 35-55) and another in `src/foundation/arena.c`. Both share the same signature `void *cbm_arena_alloc(CBMArena *a, size_t n)`. The fully resolved definition (with source/line numbers) is the one in `internal/cbm/arena.c`.", "tool_calls": 3}, {"cond": "graphify", "answer": "The function `cbm_arena_alloc` appears in two locations in the graph:\n\n1. internal/cbm/arena.c, line 35 (community 104)\n2. src/foundation/arena.c, line 58 (community 93)\n\nFull signature: The graph stores it as `cbm_arena_alloc()` and records a parameter-type reference to `CBMArena`, plus it calls `arena_grow()`. Based on the graph metadata (node label `cbm_arena_alloc()`, parameter_type edge to `CBMArena`), the signature is:\n\n void *cbm_arena_alloc(CBMArena *arena, size_t size)\n\nNote: The graph node labels/locations are authoritative for file:line; the exact parameter names/return type beyond the `CBMArena *` parameter are inferred from the parameter_type reference edge (the graph does not store a literal full-signature string). The primary/canonical definition in the cbm module is internal/cbm/arena.c L35.", "tool_calls": 3}, {"cond": "explorer", "answer": "The function `cbm_arena_alloc` is DEFINED in two files in the corpus (both with identical signatures):\n\n1. internal/cbm/arena.c:35\n2. src/foundation/arena.c:58\n\nFull signature (same in both):\n`void *cbm_arena_alloc(CBMArena *a, size_t n)`\n\n(It is also declared as a prototype in internal/cbm/arena.h:27 and src/foundation/arena.h:36.)", "tool_calls": 4}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 3, "justification": "Correct file+line for the canonical definition (internal/cbm/arena.c:35) and correctly identifies the second real definition at src/foundation/arena.c:58. Return type and parameter types correct. Minor error: parameter names given as (CBMArena *arena, size_t size) instead of the actual (CBMArena *a, size_t n); it does flag these as inferred. One small signature error."}, {"slot": "B", "correctness": 4, "justification": "Both file:line locations exactly correct (internal/cbm/arena.c:35 and src/foundation/arena.c:58, both real in corpus). Signature 'void *cbm_arena_alloc(CBMArena *a, size_t n)' matches ground truth exactly (only the trivial trailing brace omitted). Also correctly notes the header prototypes. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Correct file and line (internal/cbm/arena.c:35) and exact signature 'void *cbm_arena_alloc(CBMArena *a, size_t n)' matching ground truth. Correctly notes the second definition in src/foundation/arena.c. Slightly less complete than B (no line number for the second location) but the canonical answer is fully correct."}]}, {"scores": [{"slot": "A", "correctness": 2, "justification": "Correct file+line (internal/cbm/arena.c:35, listed as #1/canonical) and correctly identifies the genuine second definition at src/foundation/arena.c:58 (verified in source). However the signature is wrong: gives 'void *cbm_arena_alloc(CBMArena *arena, size_t size)' but the actual params are 'CBMArena *a, size_t n'. The answer admits the param names are inferred from a parameter_type edge rather than the real signature. Since the question explicitly asks for the full signature and it got the parameter names wrong, this is partially correct."}, {"slot": "B", "correctness": 4, "justification": "Fully correct. File+line 'internal/cbm/arena.c:35' matches ground truth exactly. Signature 'void *cbm_arena_alloc(CBMArena *a, size_t n)' is exactly right (only omits the trivial trailing brace). Correctly identifies the genuine second definition at src/foundation/arena.c:58 and both prototype declarations (arena.h:27 and arena.h:36) \u2014 all verified in source. No fabrication."}, {"slot": "C", "correctness": 4, "justification": "Fully correct. Identifies 'internal/cbm/arena.c' line 35 as the definition with correct signature 'void *cbm_arena_alloc(CBMArena *a, size_t n)', matching ground truth. Also notes the genuine second node in src/foundation/arena.c with the same signature (verified). The lines 35-55 range is plausible and the opening line 35 is correct. No fabrication."}]}], "condMeanScore": {"cbm": 4, "graphify": 2.5, "explorer": 4}}, {"id": "D3.5", "dim": "D3", "question": "In which file and at what line is the function `camel_should_split` defined? Show its full signature.", "answers": [{"cond": "cbm", "answer": "File: src/store/store.c, line 402.\n\nFull signature:\nstatic bool camel_should_split(const char *input, int i)", "tool_calls": 2}, {"cond": "graphify", "answer": "Function `camel_should_split` is defined in **src/store/store.c at line 402**.\n\nSignature (as represented in the graph): `camel_should_split()` \u2014 the graph node label is `camel_should_split()`, located at src/store/store.c:L402 (community 74). It is contained in store.c and calls `sqlite_camel_split()`.\n\nNote: the graphify graph stores the function by its label `camel_should_split()` and does not retain the full raw C signature text (parameter list and return type) for this node \u2014 no parameter_type/return_type edges are recorded for it. The exact file:line is src/store/store.c:402.", "tool_calls": 3}, {"cond": "explorer", "answer": "The function `camel_should_split` is defined in `src/store/store.c` at line 402.\n\nFull path: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/src/store/store.c\n\nFull signature (line 402):\nstatic bool camel_should_split(const char *input, int i)", "tool_calls": 3}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/store/store.c), correct line (402), and exact full signature 'static bool camel_should_split(const char *input, int i)' matching ground truth. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct file (src/store/store.c), correct line (402), and exact full signature matching ground truth. Fully correct and complete."}, {"slot": "C", "correctness": 2, "justification": "Correct file and line (src/store/store.c:402), but fails to provide the full signature as the question explicitly requires. Only gives 'camel_should_split()' with no return type or parameter types, and admits it lacks the raw signature. Location right, signature requirement unmet."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/store/store.c), correct line (402), and full signature `static bool camel_should_split(const char *input, int i)` matching ground truth. Only the trailing `{` is omitted, which is cosmetic. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct file (src/store/store.c, line 402) and full signature `static bool camel_should_split(const char *input, int i)` matching ground truth. Trailing `{` omitted, cosmetic only. Fully correct and complete."}, {"slot": "C", "correctness": 2, "justification": "Correct file and line (src/store/store.c:402), but fails the core requirement to show the full signature: only gives the label `camel_should_split()` and explicitly states the return type and parameter list are not available. Location right, signature missing."}]}], "condMeanScore": {"cbm": 4, "graphify": 2, "explorer": 4}}, {"id": "D4.1", "dim": "D4", "question": "What are the main subsystems / top-level modules of this codebase? Describe the overall architecture.", "answers": [{"cond": "cbm", "answer": "Project: codebase-memory-mcp (\"cbm\") \u2014 a C program that parses source repos into a queryable code knowledge graph. Entry point: src/main.c (main()). Architecture is a two-layer split \u2014 an outer application/orchestration layer under src/* and an inner parsing/extraction engine under internal/cbm/*. Graph has 283 files/modules grouped into 19 top-level folders.\n\nMAIN SUBSYSTEMS / TOP-LEVEL MODULES:\n\nApplication layer (src/):\n- src/pipeline/ \u2014 the core orchestration engine; a multi-pass pipeline. ~35 modules, each a \"pass\": pass_definitions, pass_calls, pass_usages, pass_complexity, pass_semantic / pass_semantic_edges, pass_similarity, pass_enrichment, pass_envscan, pass_infrascan, pass_k8s, pass_configures/configlink, pass_gitdiff, pass_githistory, pass_tests, pass_route_nodes, pass_pkgmap, pass_compile_commands, pass_cross_repo, pass_lsp_cross, pass_parallel; plus pipeline.h, pipeline_incremental.c, registry.c, fqn.c, worker_pool.h. Central types: cbm_pipeline, cbm_registry.\n- src/foundation/ \u2014 base utilities/runtime: arena & slab allocators, mem.c, hash_table, dyn_array, str_intern/str_util, log, diagnostics, profile, platform/compat (compat.c, compat_fs, compat_regex, compat_thread, win_utf8), system_info, vmem, yaml. Types: CBMHashTable, CBMInternPool, cbm_arena.\n- src/cli/ \u2014 command-line interface: cli.c, hook_augment.c, progress_sink.h. Type: cbm_config.\n- src/mcp/ \u2014 MCP server interface (mcp.h/mcp.c). Types: cbm_mcp_server, cbm_pipeline, cbm_watcher.\n- src/cypher/ \u2014 openCypher query engine (cypher.h). Types: cbm_query, cbm_expr.\n- src/store/ + src/graph_buffer/ \u2014 graph persistence/buffering: store.c, graph_buffer.c. Types: cbm_store, cbm_gbuf.\n- src/discover/ \u2014 repo discovery: file walking, gitignore.c, language.c, userconfig.c. Type: cbm_gitignore.\n- src/semantic/ \u2014 semantic analysis / AST profiling: semantic.c, ast_profile.h. Type: cbm_sem_corpus.\n- src/simhash/ \u2014 near-duplicate detection: minhash.h (LSH). Types: cbm_lsh_index.\n- src/git/ \u2014 git integration (git_context.c).\n- src/watcher/ \u2014 file-system watcher for incremental re-index (watcher.c). Type: cbm_watcher.\n- src/traces/ \u2014 runtime trace ingestion (traces.h).\n- src/ui/ \u2014 embedded HTTP server + 3D graph viewer: http_server.c, httpd.h, layout3d.h (octree), embedded_assets, config.c. Exposes REST routes: /api/index, /api/index-status, /api/adr, /api/processes, /api/process-kill. Types: cbm_http_server, cbm_httpd, cbm_http_conn.\n\nExtraction engine (internal/cbm/):\n- Tree-sitter grammar bindings \u2014 ~160 grammar_*.c modules (one per language: c, cpp, python, rust, go, java, swift, etc.), plus ts_runtime.c and lang_specs.c. This is the bulk of the file count.\n- Extractors \u2014 extract_defs, extract_calls, extract_imports, extract_usages, extract_type_refs, extract_type_assigns, extract_semantic, extract_channels, extract_env_accesses, extract_k8s; shared via extract_unified.h, extract_node_stack.h, helpers.h. cbm_node_text is a top hotspot (fan-in 20).\n- LSP-like symbol resolution (internal/cbm/lsp/) \u2014 per-language resolvers (c_lsp, go_lsp, py_lsp, rust_lsp, ts_lsp, java/kotlin/php/cs_lsp), a type system (type_rep.h CBMType, type_registry.h CBMTypeRegistry, scope.h CBMScope), rust_cargo/rust_proc_macros/rust_rustdoc, and generated/*_stdlib_data.c seed tables. cbm_registry_add_type/add_func and cbm_type_func/named/builtin are top hotspots (fan-in 17-20).\n- Storage codecs \u2014 sqlite_writer.c (cbm_db_writer), zstd_store.c, lz4_store.c.\n- Misc \u2014 ac.c (Aho-Corasick automaton CBMAutomaton), service_patterns.c, preprocessor.h.\n\nGRAPH SIZE: 4595 nodes / 16924 edges. Functions 3082, Macros 539, Files 283, Modules 283, Fields 250, Variables 75, Classes/structs 56, Folders 19, Routes 6.\n\nARCHITECTURE HOTSPOTS (highest fan-in, i.e. the shared core utilities everything depends on): cbm_arena_alloc (27), cbm_registry_add_type (20), cbm_registry_add_func (20), cbm_arena_strndup (20), cbm_node_text (20), cbm_type_func (19), cbm_arena_sprintf (19), cbm_type_named (18), cbm_arena_strdup (18), cbm_type_builtin (17). The arena allocator (foundation) and the type/symbol registry (lsp) are the two architectural pillars all subsystems route through.\n\nOVERALL FLOW: CLI/MCP/UI/watcher front-ends -> discover (find files) -> internal/cbm tree-sitter grammars + extractors + lsp type resolution parse each file -> src/pipeline multi-pass passes build/enrich graph nodes & edges (defs, calls, usages, semantic, similarity, infra/k8s/env, git history) -> graph_buffer/store + sqlite/zstd/lz4 codecs persist it -> cypher engine answers queries, served back via MCP/CLI/HTTP UI.", "tool_calls": 8}, {"cond": "graphify", "answer": "This is **codebase-memory-mcp-pro** \u2014 a C-language code-intelligence engine (~347 files, 4077 graph nodes / 14516 edges) that parses source repos via tree-sitter, builds a knowledge graph, and serves it over an MCP server + CLI. All symbols share the `cbm_` prefix. Architecture is a layered pipeline organized into these top-level modules (by source directory):\n\nENTRY / INTERFACE LAYER\n- `src/main.c` \u2014 process entry point: `main()` (L387), `run_cli()` (L231), `handle_subcommand()` (L310), `run_corpus_phase()`.\n- `src/cli/` \u2014 CLI commands: `cli.c` with `cbm_cmd_install/uninstall/update/config()` (install, update, agent-config detection), `hook_augment.c` (`cbm_cmd_hook_augment`).\n- `src/mcp/mcp.c` \u2014 MCP server / JSON-RPC tool dispatch: `cbm_mcp_handle_tool()`, `handle_index_repository()`, `handle_delete_project()`, `maybe_auto_index()`, plus arg helpers `cbm_mcp_get_string/int/bool_arg()` (community 34).\n- `src/ui/http_server.c` \u2014 embedded HTTP/web UI browser: `handle_browse()`, `db_path_for_project()` (community 1).\n\nCORE EXTRACTION ENGINE\n- `internal/cbm/cbm.c` \u2014 the central extraction context (`CBMExtractCtx`) and driver `cbm_extract_file()` (L499), `cbm_init()`, `cbm_alloc_init()`. This is the highest-betweenness bridge node connecting ~22 communities.\n- `internal/cbm/lsp/` \u2014 language/type-resolution layer (LSP-style): type representation `type_rep.c` (`cbm_type_unknown/named/builtin/func/pointer/slice`), `type_registry.c` (`cbm_registry_lookup_type/func/method/symbol`), `scope.c` (`cbm_scope_push/pop/bind/lookup`), and per-language resolvers e.g. `go_lsp.c` (`cbm_run_go_lsp`, `GoLSPContext`) plus C/C#/TS/Python/Java/Rust/PHP/Kotlin LSP contexts (communities 5,6,8,9,10,11,23,25).\n- `internal/cbm/lsp/generated/*_stdlib_data.c` \u2014 generated per-language stdlib/crate registries: `cbm_c_/cpp_/go_/rust_/csharp_/php_stdlib_register()` (communities 16, 21).\n- `internal/cbm/helpers.c` \u2014 `cbm_node_text()` (the #1 god node, 220 edges) used by all extractors.\n\nEXTRACTORS (per-feature passes, mostly community-per-concern)\n- Distinct extractors each in their own community: `cbm_extract_definitions`, `cbm_extract_calls`, `cbm_extract_imports`, `cbm_extract_usages`, `cbm_extract_type_refs`, `cbm_extract_type_assigns`, `cbm_extract_semantic`, `cbm_extract_channels`, `cbm_extract_env_accesses`, `cbm_extract_k8s`, `cbm_extract_http_info`, `cbm_extract_flags`.\n\nPIPELINE / ORCHESTRATION\n- `src/pipeline/` \u2014 pipeline driver `pipeline.c` (`cbm_pipeline_t`, `run_parallel_pipeline()`, `run_sequential_pipeline()`, `run_extraction_phase()`), `pipeline_incremental.c` (`cbm_pipeline_run_incremental`, incremental re-index), `pass_parallel.c` (`cbm_parallel_extract/resolve`, worker threads), `fqn.c` / `pass_pkgmap.c` (fully-qualified-name + module resolution), and many `pass_*.c` passes: `pass_calls`, `pass_definitions`, `pass_usages`, `pass_semantic(_edges)`, `pass_lsp_cross`, `pass_k8s`, `pass_infrascan`, `pass_tests`, `pass_decorator_tags`, `pass_complexity`, `pass_similarity`, `pass_githistory`, `pass_configlink`. Also `artifact.c` (export/import compressed graph artifacts).\n\nGRAPH MODEL & STORAGE\n- `src/graph_buffer/graph_buffer.c` \u2014 in-memory graph buffer: `cbm_gbuf_upsert_node()`, `cbm_gbuf_insert_edge()`, find-by-qn/id/label/source-type (community 14, god node `cbm_gbuf_insert_edge`).\n- `src/store/store.c` \u2014 SQLite-backed persistence: `cbm_store_t` (god node, 98 edges), `cbm_store_open/close/begin/commit`, edge/vector/search queries (`store.c` + edge/search/vector store communities; `sqlite3` is a key bridge node).\n\nQUERY / ANALYSIS FEATURES\n- Cypher-like query engine: `cbm_cypher_parse/execute`, lexer/parser (`cbm_lex`, `cbm_parse`), expression eval, pattern/binding matching (communities 26, 33, 47, 51, 52, 98).\n- Architecture/impact analysis: `cbm_architecture_info_t` with `arch_clusters/entry_points/hotspots/languages/packages` (community 43), impact/affected analysis (`cbm_build_impact_summary`, community 61), code search (`cbm_store_search`, community 67), semantic/vector search + LSH + MinHash similarity (communities 24, 36, 48, 86, 95, 103), Louvain/Leiden community detection (`cbm_louvain`, `cbm_leiden`, community 90), complexity/AST profiling (`cbm_compute_complexity`, `cbm_ast_profile_compute`).\n\nINFRASTRUCTURE / IaC SCANNING\n- Dockerfile/dotenv/shell/compose parsing (`cbm_parse_dockerfile/dotenv/shell_source`, community 60), Kubernetes/Helm/kustomize (`cbm_extract_k8s`, `pass_k8s`, community 53, 80), Terraform/Helm chart types (community 45), compile_commands.json flags (`cbm_parse_compile_commands`, community 89), Cargo manifest parsing (community 79).\n\nFOUNDATION / PLATFORM LAYER (`src/foundation/`)\n- Cross-platform compat: `platform.c` (`cbm_safe_getenv`, home/cache dirs), `compat.c`/`compat_fs.c` (`cbm_popen/pclose`, fs ops), `compat_regex.c` (`cbm_regcomp/regexec`), `hash_table.c` (`cbm_ht_*`, community 7), threading/mutex (`cbm_thread_*`, `cbm_mutex_*`, communities 40/41), file watcher.\n- Memory management: arena allocator `CBMArena` (`cbm_arena_alloc/init/destroy`, communities 93/104, god node 67 edges), virtual-memory pool (community 96), string interning `CBMInternPool` (community 100), memory budgeting (community 38).\n- Utilities: zstd compression, path/string helpers, system-info detection, profiling/diagnostics, git context (`cbm_git_context_*`), ADR parsing.\n\nGOD NODES (core cross-cutting abstractions, from GRAPH_REPORT): `cbm_node_text()` (220), `TSNode` (132), `cbm_type_unknown()` (132), `cbm_store_t` (98), `CBMExtractCtx` (85), `cbm_type_named()` (75), `cbm_registry_lookup_type()` (70), `CBMArena` (67), `cbm_ht_get()` (65), `cbm_gbuf_insert_edge()` (64).\n\nOVERALL FLOW: CLI/MCP/HTTP entry -> discover/index repo -> tree-sitter extraction (`cbm_extract_file` + per-feature extractors) -> LSP type/scope resolution -> pipeline passes (parallel) build graph buffer -> persist to SQLite store -> served back via query engine, search, architecture/impact analysis, and the MCP tools. No import cycles detected.", "tool_calls": 5}, {"cond": "explorer", "answer": "# Architecture of codebase-memory-mcp-pro\n\nA C codebase implementing an MCP (Model Context Protocol) server that builds and queries a code knowledge graph from any repository. It runs as a JSON-RPC 2.0 server over stdio, parses source via tree-sitter grammars, extracts code entities/relationships, persists them to a SQLite graph store, and exposes graph-analysis tools to AI agents.\n\n## Top-level layout\n- src/main.c \u2014 entry point (MCP server on stdio by default; also cli/install/update/config subcommands; optional HTTP UI + background watcher threads).\n- src/ \u2014 the application, split into one subsystem dir per module.\n- internal/cbm/ \u2014 the parsing/extraction engine + vendored tree-sitter grammars (~230 files, dominated by 156 grammar_*.c language grammars).\n\n## Main subsystems / top-level modules (under src/)\n- foundation/ (~38 files) \u2014 base utilities: allocators (arena, slab_alloc, vmem, mem/mimalloc), hash_table, dyn_array, str_intern/str_util, log, diagnostics, profile, platform/compat/compat_thread/compat_fs/compat_regex, yaml, constants.\n- pipeline/ (~37 files) \u2014 indexing orchestrator. pipeline.c runs a multi-pass index (structure -> definitions -> imports -> calls -> usages -> semantic -> post). 22 pass_*.c passes (pass_definitions, pass_calls, pass_usages, pass_semantic, pass_similarity, pass_tests, pass_githistory, pass_gitdiff, pass_k8s, pass_infrascan, pass_envscan, pass_complexity, pass_cross_repo, pass_lsp_cross, etc.), plus registry.c (function/FQN resolution), fqn.c, worker_pool.c, pass_parallel.c, pipeline_incremental.c.\n- mcp/ \u2014 MCP server + JSON-RPC 2.0 layer; dispatches the 14 graph tools (mcp.c/mcp.h).\n- store/ \u2014 opaque SQLite graph store (cbm_store_*); node/edge persistence.\n- cypher/ \u2014 embedded Cypher query engine (lex/parse/plan/execute a subset of Cypher over the store).\n- semantic/ \u2014 algorithmic code embeddings combining ~11 signals for SEMANTICALLY_RELATED edges (semantic.c, ast_profile.c).\n- simhash/ \u2014 MinHash structural fingerprinting for SIMILAR_TO edges (minhash.c).\n- discover/ \u2014 file discovery, language detection, gitignore matching, user config.\n- graph_buffer/ \u2014 in-memory graph buffer (cbm_gbuf) accumulating nodes/edges during a pass.\n- git/ \u2014 git context extraction (git_context.c, libgit2-based).\n- traces/ \u2014 runtime trace ingestion (ingest_traces tool).\n- watcher/ \u2014 background thread polling git for changes to trigger reindex.\n- ui/ \u2014 optional HTTP server for graph visualization (http_server, httpd, layout3d, embedded assets, config).\n- cli/ \u2014 CLI subcommands, hook augmentation, progress sink.\n\n## Parse/extract engine (under internal/cbm/)\n- ts_runtime.c + 156 grammar_*.c \u2014 vendored tree-sitter runtime and per-language grammars (~150+ languages: ada, bash, c, cpp, go, python, rust, swift, etc.).\n- extract_*.c \u2014 language-agnostic AST extraction: extract_defs, extract_calls, extract_imports, extract_usages, extract_type_refs, extract_type_assigns, extract_env_accesses, extract_channels, extract_k8s, extract_semantic, extract_unified.\n- lang_specs.c, service_patterns.c, ac.c (Aho-Corasick), helpers.c, preprocessor.h.\n- lsp/ + lsp_all.c \u2014 LSP integration for type-aware resolution.\n- sqlite_writer.c, plus compression backends lz4_store.c / zstd_store.c (compressed .codebase-memory/graph.db.zst artifacts).\n\n## Overall data flow\n1. Discover files (language detection + gitignore) -> 2. Parse each file with the matching tree-sitter grammar (internal/cbm) -> 3. Extract defs/calls/imports/usages/types into a graph_buffer -> 4. Pipeline passes resolve edges (imports, calls via registry+LSP, semantic/inheritance, similarity, git history, tests, infra/k8s) -> 5. Write nodes/edges to the SQLite store -> 6. MCP server answers tool calls (search_graph, query_graph via the Cypher engine, trace_path, get_architecture, get_code_snippet, search_code, index_repository, detect_changes, ingest_traces, etc.). A watcher thread auto-reindexes on git changes; an optional HTTP UI visualizes the graph.\n\n## The 14 MCP tools (public surface)\nindex_repository, search_graph, query_graph, trace_path, get_code_snippet, get_graph_schema, get_architecture, search_code, list_projects, delete_project, index_status, detect_changes, manage_adr, ingest_traces (src/main.c:300-303, mcp.h:5).\n\nKey files: src/main.c:1-549 (entry/orchestration), src/pipeline/pipeline.h:1-14 (pass list), src/mcp/mcp.h:5 (\"14 graph analysis tools\"), src/store/store.h:1-9, src/cypher/cypher.h:1-12, src/semantic/semantic.h:1-7, src/discover/discover.h:1-12.", "tool_calls": 7}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Covers all 15 ground-truth subsystems (14 under src/: foundation, pipeline, mcp, store, cypher, semantic, simhash, discover, graph_buffer, git, traces, watcher, ui, cli \u2014 plus internal/cbm/lsp). Each with an accurate role description matching the actual source. Clean directory-based organization, correct two-layer split (src application vs internal/cbm engine), accurate multi-pass data flow, correct MCP tool surface, and valid file:line references. No fabrication detected. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Covers all 15 ground-truth subsystems (pipeline, foundation, cli, mcp, cypher, store, graph_buffer, discover, semantic, simhash, git, watcher, traces, ui, internal/cbm/lsp), each with accurate roles and representative file names that match the source (e.g. minhash, ast_profile, watcher.c, traces.h, http_server). Adds correct two-layer architecture, accurate data flow, and graph hotspot/size stats. The metrics differ numerically from another answer's stats but are graph-derived and do not contradict the ground truth. Complete and accurate."}, {"slot": "C", "correctness": 3, "justification": "Detailed and largely accurate: clearly covers ~12-13 of 15 subsystems (cypher, store, semantic, simhash, pipeline, internal/cbm/lsp, mcp, cli, foundation, git, graph_buffer, ui) with rich god-node/community analysis. However it omits src/traces (runtime trace ingestion) entirely, and miscategorizes/weakly handles src/watcher (folded into foundation as 'file watcher', though it is its own top-level dir) and src/discover (only appears implicitly in the flow, not as a named module). Organized by graph communities, which adds noise vs a clean directory listing. Mostly correct with minor omissions."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Explicitly names all 15 ground-truth subsystems (foundation, pipeline, mcp, store, cypher, semantic, simhash, discover, graph_buffer, git, traces, watcher, ui, cli, plus internal/cbm/lsp) with accurate roles. Verified details: 156 grammar_*.c files, 14 MCP tools, correct discover->parse->extract->pipeline->store->MCP data flow. No fabrication. Fully correct and complete vs ground truth."}, {"slot": "B", "correctness": 4, "justification": "Names all 15 ground-truth subsystems with correct roles (pipeline, foundation, cli, mcp, cypher, store+graph_buffer, discover, semantic, simhash, git, watcher, traces, ui, lsp). Correctly identifies watcher and traces as distinct modules. Accurate extraction-engine/lsp detail, correct overall flow; ~160 grammar count matches the verified 156. Extra graph stats/hotspots are accurate, not noise. Complete with no meaningful fabrication."}, {"slot": "C", "correctness": 3, "justification": "Substantially correct layered architecture and covers most subsystems (cypher, store, graph_buffer, foundation, mcp, cli, ui, pipeline, git, lsp, plus extractors). However organized by community IDs that obscure the top-level module list, and has small errors/omissions vs ground truth: misplaces the watcher as a 'file watcher' under foundation when src/watcher/ is its own module; never names src/traces; folds semantic/simhash into analysis 'community' blobs rather than naming them as src modules. God-node detail is accurate. Mostly correct with a couple of minor errors."}]}], "condMeanScore": {"cbm": 4, "graphify": 3, "explorer": 4}}, {"id": "D4.2", "dim": "D4", "question": "Which source file is the largest / most central hub by number of functions, and roughly how many functions does it have?", "answers": [{"cond": "cbm", "answer": "The largest / most central hub source file by number of functions is **extract_defs.c** with ~158 functions.\n\nTop .c source files by function count:\n1. extract_defs.c \u2014 158 functions\n2. extract_imports.c \u2014 98\n3. php_lsp.c \u2014 71\n4. graph_buffer.c \u2014 68\n5. kotlin_lsp.c \u2014 63\n6. ts_lsp.c \u2014 63\n\n(Note: if header files are included, store.h has 205 and cypher.h 164, but among actual .c source files extract_defs.c is the clear leader at ~158.)", "tool_calls": 3}, {"cond": "graphify", "answer": "Largest / most central file by number of functions: **src/mcp/mcp.c** (the MCP server file).\n\nEvidence from the graph:\n- The `mcp.c` file node has the highest degree of all source files checked: **degree 126** (vs the runner-up `internal/cbm/sqlite_writer.c` at degree 101, then `cbm.c` 53, `pipeline.c` 47). A file node's degree is dominated by its `[contains]` edges, i.e. the functions defined in it.\n- BFS-anchored node reach also ranks mcp.c first (~148 reachable nodes vs ~117 for sqlite_writer.c).\n- mcp.c spans 5400+ lines (e.g. cbm_mcp_server_run() at src/mcp/mcp.c:L5406), consistent with being the biggest file.\n\nApproximate function count: **roughly 100\u2013120 functions** (~124 contained-function edges out of the file's 126 total connections; the other ~2 are import edges). \n\nRunner-up hub: internal/cbm/sqlite_writer.c with ~100 functions (degree 101); its community (Community 0) is the single largest community at 113 nodes.", "tool_calls": 6}, {"cond": "explorer", "answer": "The largest / most central hub by number of functions is:\n\n src/store/store.c (full path: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/src/store/store.c)\n\nIt has roughly 140 functions (precise definition count ~143; it is also the longest .c file at 5,858 lines). This is the SQLite-backed storage layer (cbm_store_*), containing the schema init, prepared-statement caching, SQLite custom functions (regexp, cosine, camel-split), and the bulk of CRUD/query helpers.\n\nRunners-up (for context):\n - src/cypher/cypher.c ~127 functions (4,411 lines)\n - internal/cbm/extract_defs.c ~124 functions (5,559 lines)\n - src/cli/cli.c ~101 functions\n - src/mcp/mcp.c ~95 functions\n - internal/cbm/extract_imports.c ~95 functions\n\n(Note: grammar_*.c and lang_specs.c appear large by line count but are mostly generated data tables, not functions.)", "tool_calls": 4}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 1, "justification": "Claims extract_defs.c (~158) is the largest hub. WRONG: the actual leader is src/store/store.c (~143 funcs, 5858 lines). extract_defs.c ranks 3rd at ~124 (verified by counting '... ) {' definitions); A's 158 is inflated. A explicitly lists store.h (a header, 205) but dismisses store.c and never names it. It misses BOTH ground-truth answers (store.c, cypher.c). Its ranked list does correctly surface extract_imports.c and several LSP files as large, so it is not pure fabrication, but the headline answer is wrong."}, {"slot": "B", "correctness": 0, "justification": "Claims src/mcp/mcp.c (~100-120 funcs) is the largest hub. WRONG: mcp.c has ~95 functions and ranks ~5th. The claim rests on graph node 'degree' (which conflates contains + import edges) rather than actual function count, and the file path 'src/mcp/mcp.c' is correct but the centrality conclusion is wrong. Runner-up sqlite_writer.c claimed at ~100 functions actually has ~76. Both ground-truth files (store.c ~140, cypher.c ~134) are entirely absent. Wrong answer."}, {"slot": "C", "correctness": 4, "justification": "Correctly identifies src/store/store.c (~143; states ~140, longest .c file at 5,858 lines) as the largest hub and src/cypher/cypher.c (~127; states ~134, 4,411 lines) as runner-up \u2014 matching the ground truth's two answers exactly (store.c ~140, cypher.c ~134). Verified counts: store.c 143, cypher.c 127, extract_defs.c 124. All cited line counts match the source. Also correctly excludes generated data tables (grammar_*.c, lang_specs.c) as non-function bulk. Fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 1, "justification": "Primary answer is extract_defs.c (~158 funcs), which is WRONG. Ground truth and source: the largest .c is src/store/store.c (~140-143). extract_defs.c actually has ~124 functions and is only 3rd; its claimed 158 is inflated/fabricated. store.c is absent from its .c ranking (only mentioned as the header store.h=205, which it dismisses). Cypher.c also missing from top. Mostly wrong on both the file and the count."}, {"slot": "B", "correctness": 1, "justification": "Primary answer is src/mcp/mcp.c (~100-120 funcs), which is WRONG. mcp.c actually has ~95 functions and is not the largest; store.c (~143) and cypher.c (~135) both exceed it. Ranking is derived from graph degree of a different structure (sqlite_writer.c, cbm.c, pipeline.c) that does not match the real top hubs; the runner-up sqlite_writer.c is fabricated/wrong. Count is inflated. Mostly wrong."}, {"slot": "C", "correctness": 4, "justification": "Primary answer src/store/store.c with ~140 functions (precise ~143) and longest .c at 5858 lines matches ground truth and source exactly. Runner-up src/cypher/cypher.c is correctly identified (claims ~127 vs actual ~135, a minor underestimate but correct ranking). Also correctly lists extract_defs.c/cli.c/mcp.c/extract_imports.c with reasonable counts and correctly notes grammar/data-table files are not functions. Fully correct and complete."}]}], "condMeanScore": {"cbm": 1, "graphify": 0.5, "explorer": 4}}, {"id": "D4.3", "dim": "D4", "question": "What is the program entry point, and which file contains main()?", "answers": [{"cond": "cbm", "answer": "Entry point: main(int argc, char **argv) \u2014 flagged is_entry_point=true in the graph. It is defined in src/main.c at lines 387-549 (full path: .../scratchpad/eval/eval-corpus/src/main.c). Returns int; default behavior runs the MCP server on stdio.", "tool_calls": 3}, {"cond": "graphify", "answer": "The program entry point is main(), located at src/main.c:387 (file: src/main.c). It dispatches via handle_subcommand() / run_cli() (both also in src/main.c).", "tool_calls": 2}, {"cond": "explorer", "answer": "The program entry point is the standard C entry function `int main(int argc, char **argv)`, defined at src/main.c:387.\n\nFull path: /private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus/src/main.c (line 387)\n\nIt is the only main() in the C source tree. At startup it calls cbm_alloc_init(), cbm_profile_init(), cbm_log_init_from_env(), then dispatches via handle_subcommand() before entering the MCP server loop.", "tool_calls": 2}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies main() at src/main.c:387 (ground truth: src/main.c, has_main=true). Adds verified-true detail: dispatch via handle_subcommand() (line 310) and run_cli() (line 231), both in src/main.c. No fabrication. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct file src/main.c, line 387, full signature int main(int argc, char **argv). Correctly states it is the only main() in the C tree (verified). Startup call sequence cbm_alloc_init() (394), cbm_profile_init() (395), cbm_log_init_from_env() (398), then handle_subcommand() (399) before MCP server loop \u2014 all verified accurate and in correct order. Fully correct and the most complete."}, {"slot": "C", "correctness": 4, "justification": "Correct signature, file, and exact line range 387-549 (verified). is_entry_point field exists in source (pass_definitions.c/pass_parallel.c). Default behavior 'runs MCP server on stdio' matches header doc 'Run as MCP server on stdin/stdout'. Returns int \u2014 correct. No fabrication; fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correct file (src/main.c) and exact line 387, matching ground truth (answer=src/main.c, has_main=true) and verified source. Correctly notes handle_subcommand()/run_cli() are also in main.c. No fabrication."}, {"slot": "B", "correctness": 4, "justification": "Correct file src/main.c, exact line 387, full signature int main(int argc, char **argv). Verified startup calls (cbm_alloc_init, cbm_profile_init, cbm_log_init_from_env, handle_subcommand) all present in source. Correctly notes it is the only main() in the tree. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Correct file src/main.c, signature int main(int argc, char **argv), lines 387-549 verified (file is 549 lines, main runs to end). Returns int; default runs MCP server on stdio is accurate. is_entry_point graph flag is consistent. Fully correct."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D4.4", "dim": "D4", "question": "Which directory contains the per-language LSP type resolvers, and which languages have a hybrid LSP module?", "answers": [{"cond": "cbm", "answer": "Directory containing the per-language LSP type resolvers: `internal/cbm/lsp/` (per-language files: c_lsp.h, cs_lsp.h, go_lsp.h, java_lsp.h, kotlin_lsp.c, php_lsp.c, py_lsp.c/py_lsp.h, rust_lsp.h, ts_lsp.c, plus shared lsp_node_iter.h; with generated stdlib data under internal/cbm/lsp/generated/).\n\nHybrid LSP module: only `internal/cbm/lsp/ts_lsp.c`, which is the hybrid LSP type resolver covering the languages TypeScript, JavaScript, JSX, and TSX (header comment line 2: \"ts_lsp.c \u2014 TypeScript / JavaScript / JSX / TSX hybrid LSP type resolver\"). No other module is described as hybrid.", "tool_calls": 8}, {"cond": "graphify", "answer": "test", "tool_calls": 12}, {"cond": "explorer", "answer": "Directory containing the per-language LSP type resolvers: `internal/cbm/lsp/` (full path: .../eval-corpus/internal/cbm/lsp/). It holds one resolver per language: c_lsp.c, cs_lsp.c, go_lsp.c, java_lsp.c, kotlin_lsp.c, php_lsp.c, py_lsp.c, rust_lsp.c, and ts_lsp.c (plus shared type_registry.c / type_rep.c).\n\nHybrid LSP module: only `ts_lsp.c` is a hybrid module. Its header comment (ts_lsp.c:2) reads: \"ts_lsp.c \u2014 TypeScript / JavaScript / JSX / TSX hybrid LSP type resolver.\" So the hybrid module covers four languages/dialects: TypeScript, JavaScript, JSX, and TSX. No other *_lsp.c file is described as hybrid (each other language has its own dedicated, non-hybrid resolver).", "tool_calls": 8}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correct directory internal/cbm/lsp/. Lists all 9 per-language resolvers (c, cs, go, java, kotlin, php, py, rust, ts) matching the ground-truth language set, plus shared type_registry/type_rep. Correctly identifies ts_lsp.c as the only hybrid module, covering TypeScript/JavaScript/JSX/TSX, with accurate header quote at ts_lsp.c:2. Fully correct and complete, no fabrication."}, {"slot": "B", "correctness": 4, "justification": "Correct directory internal/cbm/lsp/ and names all 9 languages, plus mentions generated/ subdir. Correctly identifies ts_lsp.c as the only hybrid module covering TS/JS/JSX/TSX with accurate header quote. Minor blemish: inconsistent file extensions (lists c_lsp.h, go_lsp.h, rust_lsp.h instead of .c) but the substantive answer (languages + directory + hybrid identification) is fully correct. Borderline 3/4; substance is complete so a 4."}, {"slot": "C", "correctness": 0, "justification": "Answer is just 'test' \u2014 no answer, irrelevant, provides nothing about the directory, languages, or hybrid module."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Directory correct (internal/cbm/lsp/). Accurately lists all 9 per-language resolver .c files (c, cs, go, java, kotlin, php, py, rust, ts) plus shared type_registry.c/type_rep.c. Correctly identifies the only hybrid module as ts_lsp.c covering TypeScript/JavaScript/JSX/TSX, with verbatim line-2 header citation matching source. Fully correct and complete."}, {"slot": "B", "correctness": 3, "justification": "Directory correct and hybrid module correctly identified as ts_lsp.c (TS/JS/JSX/TSX) with accurate line-2 citation. The per-language file list is messy: lists mostly .h headers instead of the .c resolvers and is inconsistent, but the core languages are still represented and the generated/ subdir reference is real. Mostly correct with a minor presentation error in the file enumeration."}, {"slot": "C", "correctness": 0, "justification": "Answer is just 'test' \u2014 no answer, irrelevant."}]}], "condMeanScore": {"cbm": 3.5, "graphify": 0, "explorer": 4}}, {"id": "D4.5", "dim": "D4", "question": "How is the MCP server layer organized \u2014 which file implements it and what does it expose?", "answers": [{"cond": "cbm", "answer": "test", "tool_calls": 6}, {"cond": "graphify", "answer": "test", "tool_calls": 5}, {"cond": "explorer", "answer": "MCP server layer is implemented in src/mcp/mcp.c (interface src/mcp/mcp.h). It is a JSON-RPC 2.0 over stdio MCP server with a single-threaded event loop. JSON-RPC methods handled: initialize, ping, tools/list, tools/call, notifications/cancelled (mcp.c:5263-5303). It exposes 15 tools via the static TOOLS[] table (mcp.c:274-471, served by cbm_mcp_tools_list at mcp.c:474, dispatched at mcp.c:4944-4988): explore, index_repository, search_graph, query_graph, trace_path, get_code_snippet, get_graph_schema, get_architecture, search_code, list_projects, delete_project, index_status, detect_changes, manage_adr, ingest_traces (plus trace_call_path as alias for trace_path). Header comments say 14 tools but the table registers 15. Core API: cbm_mcp_server_new/free/run/handle and cbm_mcp_handle_tool.\n\n", "tool_calls": 12}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 0, "justification": "Answer is literally 'test' \u2014 no answer, irrelevant. Does not identify the file (src/mcp/mcp.c) or what it exposes. Score 0."}, {"slot": "B", "correctness": 0, "justification": "Answer is literally 'test' \u2014 no answer, irrelevant. Identical to A, no content. Score 0."}, {"slot": "C", "correctness": 4, "justification": "Fully correct and complete. Correctly identifies src/mcp/mcp.c (+ mcp.h) as the implementation (matches ground truth file). Accurately describes it as JSON-RPC 2.0 over stdio. JSON-RPC methods verified: initialize (5263), ping (5268), tools/list (5270), tools/call (5272), notifications/cancelled (5249) \u2014 all confirmed. The static TOOLS[] table (274-471) has exactly 15 entries as claimed, and all 15 listed names (explore, index_repository, search_graph, query_graph, trace_path, get_code_snippet, get_graph_schema, get_architecture, search_code, list_projects, delete_project, index_status, detect_changes, manage_adr, ingest_traces) match the source exactly. trace_call_path alias for trace_path confirmed at 4962. Core API cbm_mcp_server_new/free/run and cbm_mcp_handle_tool all verified. Even correctly notes the header comment says 14 tools (line 2: '14 graph tools') while the table registers 15. No fabrication. Score 4."}]}, {"scores": [{"slot": "A", "correctness": 0, "justification": "Answer is just 'test' \u2014 no content, irrelevant, no attempt to answer. Does not identify the file (src/mcp/mcp.c) or anything it exposes."}, {"slot": "B", "correctness": 0, "justification": "Answer is just 'test' \u2014 no content, irrelevant, no attempt to answer. Does not identify the file or anything it exposes."}, {"slot": "C", "correctness": 4, "justification": "Fully correct and complete, verified against source. Correctly names src/mcp/mcp.c (+ mcp.h), identifies JSON-RPC 2.0 over stdio. JSON-RPC methods (initialize/ping/tools/list/tools/call/notifications/cancelled) confirmed at the cited lines (5249-5279). TOOLS[] table at line 274 confirmed; all 15 tool names listed match exactly the table and dispatch in cbm_mcp_handle_tool (line 4939+); trace_call_path alias for trace_path is real. The subtle observation that the header comment says 14 tools while the table registers 15 is accurate (header line 2 says '14 graph tools', table has 15 distinct names). Core API functions cbm_mcp_server_new/free/run and cbm_mcp_handle_tool/tools_list all verified to exist. No fabrication."}]}], "condMeanScore": {"cbm": 0, "graphify": 0, "explorer": 4}}, {"id": "D5.1", "dim": "D5", "question": "Find the functions that implement near-duplicate / clone detection (minhash/simhash).", "answers": [{"cond": "cbm", "answer": "Near-duplicate / clone detection (minhash + LSH) is implemented mainly in **src/simhash/minhash.c**, with the pipeline orchestration in **src/pipeline/pass_semantic_edges.c**.\n\nCORE ALGORITHM \u2014 src/simhash/minhash.c\nMinHash signature computation:\n- cbm_minhash_compute \u2014 computes the weighted MinHash signature\n- weighted_minhash_update \u2014 per-trigram weighted minhash update\n- cbm_minhash_jaccard \u2014 estimates Jaccard similarity between two signatures\n- cbm_minhash_to_hex / cbm_minhash_from_hex \u2014 serialize/deserialize signatures\n- hash_trigrams \u2014 hashes trigrams for the signature\n- collect_ast_tokens \u2014 gathers AST tokens to feed the signature\n- trigram_structural_weight \u2014 structural weighting of trigrams\n- normalise_node_type, is_normalised_token, is_identifier_type, is_string_type, is_number_type, is_type_annotation \u2014 token normalization helpers\n- uniq_trig_init / uniq_trig_insert \u2014 unique-trigram set helpers\n\nLSH (Locality-Sensitive Hashing) bucketing / candidate query:\n- cbm_lsh_new \u2014 create an LSH index\n- cbm_lsh_insert \u2014 insert a signature into LSH bands/buckets\n- cbm_lsh_query / cbm_lsh_query_into \u2014 query for near-duplicate candidates\n- cbm_lsh_free \u2014 free the LSH index\n- band_hash \u2014 hashes a band of the signature\n- bucket_push, result_push \u2014 bucket/result list helpers\n- seen_set_init / seen_set_insert / seen_set_free \u2014 dedup of returned candidates\n\nPIPELINE INTEGRATION \u2014 src/pipeline/pass_semantic_edges.c\n- decode_minhash \u2014 decode stored minhash signatures\n- phase5_lsh_build \u2014 build the LSH index pass\n- phase5c_build_lsh_buckets \u2014 populate LSH buckets\n- free_lsh_buckets \u2014 teardown\n\nNote: there is no separate \"simhash\" implementation; the module is named simhash/ but implements weighted MinHash + LSH. File:line numbers are not stored in the graph (fn.line is empty); locations are given by file path.", "tool_calls": 5}, {"cond": "graphify", "answer": "Near-duplicate / clone detection is implemented by the MinHash + LSH (Locality-Sensitive Hashing) module, primarily in src/simhash/minhash.c, driven by the similarity pipeline pass.\n\nCore fingerprinting (MinHash) \u2014 src/simhash/minhash.c:\n- cbm_minhash_compute() (L249) \u2014 computes the MinHash signature\n- weighted_minhash_update() (L208) \u2014 weighted MinHash signature update\n- cbm_minhash_jaccard() (L269) \u2014 estimates Jaccard similarity between two signatures\n- hash_trigrams() (L221) \u2014 hashes token trigrams (shingles)\n- collect_ast_tokens() (L142) \u2014 gathers AST tokens for shingling\n- trigram_structural_weight() (L125) \u2014 structural weighting of trigrams\n- cbm_minhash_to_hex() (L284) / cbm_minhash_from_hex() (L297) \u2014 serialize/deserialize signatures\n\nLSH banding / candidate lookup (the \"near-duplicate\" search) \u2014 src/simhash/minhash.c:\n- band_hash() (L344) \u2014 hashes LSH bands\n- cbm_lsh_new() (L368) / cbm_lsh_insert() (L373) / cbm_lsh_free() (L525) \u2014 build/populate/free the LSH index\n- cbm_lsh_query() (L453) and cbm_lsh_query_into() (L492) \u2014 query the LSH index for near-duplicate candidates\n- bucket_push() (L355), result_push() (L437), seen_set_init/insert/free (L407/L413/L431) \u2014 bucket/result/dedup helpers\n\nToken normalization helpers (src/simhash/minhash.c): normalise_node_type() (L98), is_identifier_type() (L65), is_string_type() (L74), is_number_type() (L82), is_type_annotation() (L90), is_normalised_token() (L118), uniq_trig_init/insert (L184/L190).\n\nDriver / consumer (similarity pass) \u2014 src/pipeline/pass_similarity.c:\n- cbm_pipeline_pass_similarity() (L251) \u2014 orchestrates the clone-detection pass (builds the LSH index, inserts fingerprints, merges similarity edges)\n- sim_query_worker() (L176) \u2014 parallel worker issuing LSH queries\n- parse_fp_from_props() (L48), collect_fp_entries(), merge_sim_edges()\n\nNote: despite the directory name \"simhash\", the implemented algorithm is MinHash + LSH banding (no separate simhash function exists); decode_minhash() (src/pipeline/pass_semantic_edges.c:526) decodes stored MinHash fingerprints.", "tool_calls": 4}, {"cond": "explorer", "answer": "Near-duplicate / clone detection is implemented with MinHash fingerprinting + LSH (locality-sensitive hashing). There is no SimHash; the module dir is named `simhash/` but the algorithm is MinHash (K=64 signatures over normalised AST node-type trigrams, b=32 bands \u00d7 r=2 rows LSH, Jaccard >= 0.95 threshold).\n\nCORE ALGORITHM \u2014 src/simhash/minhash.c (declared in src/simhash/minhash.h):\n- cbm_minhash_compute (minhash.c:249) \u2014 compute a function body's MinHash fingerprint from its AST.\n- collect_ast_tokens (minhash.c:142) \u2014 walk AST, collect normalised leaf token types.\n- normalise_node_type (minhash.c:98) \u2014 map identifiers\u2192I, strings\u2192S, numbers\u2192N, types\u2192T (helpers is_identifier_type:65, is_string_type:74, is_number_type:82, is_type_annotation:90).\n- hash_trigrams (minhash.c:221) \u2014 build trigrams and fold into the K=64 signature.\n- weighted_minhash_update (minhash.c:208) \u2014 per-seed weighted MinHash update (xxHash XXH3).\n- trigram_structural_weight (minhash.c:125) / is_normalised_token (minhash.c:118) \u2014 structural weighting.\n- uniq_trig_insert (minhash.c:190) / uniq_trig_init (minhash.c:184) \u2014 unique-trigram set.\n- cbm_minhash_jaccard (minhash.c:269) \u2014 Jaccard similarity (K=64 agreement) between two signatures.\n- cbm_minhash_to_hex (minhash.c:284) / cbm_minhash_from_hex (minhash.c:297) \u2014 fingerprint hex (de)serialisation.\n\nLSH INDEX (candidate generation) \u2014 src/simhash/minhash.c:\n- cbm_lsh_new (minhash.c:368), cbm_lsh_insert (minhash.c:373), cbm_lsh_free (minhash.c:525).\n- cbm_lsh_query (minhash.c:453) and thread-safe cbm_lsh_query_into (minhash.c:492) \u2014 return near-duplicate candidates.\n- band_hash (minhash.c:344), bucket_push (minhash.c:355), result_push (minhash.c:437); dedup seen_set_insert (minhash.c:413) / seen_set_init (minhash.c:407) / seen_set_free (minhash.c:431).\n\nPIPELINE PASS (drives detection, emits SIMILAR_TO edges) \u2014 src/pipeline/pass_similarity.c:\n- cbm_pipeline_pass_similarity (pass_similarity.c:251) \u2014 entry point: collect fingerprints, build LSH, query, emit edges.\n- collect_fp_entries (pass_similarity.c:95) / parse_fp_from_props (pass_similarity.c:48) \u2014 read \"fp\" hex from Function/Method node props.\n- sim_query_worker (pass_similarity.c:176) \u2014 parallel query + Jaccard scoring against the 0.95 threshold.\n- merge_sim_edges (pass_similarity.c:232) / sim_edge_buf_push (pass_similarity.c:150) \u2014 write SIMILAR_TO edges into the graph buffer.\n\nNote: only the public API symbols (cbm_minhash_*, cbm_lsh_*) and the pass entry point are also declared/referenced in src/semantic/* and src/pipeline/pipeline_internal.h; the actual implementations live in the two files above.", "tool_calls": 5}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Covers all 6 ground-truth functions (cbm_minhash_compute, _jaccard, _to_hex, _from_hex, weighted_minhash_update, decode_minhash) plus accurate surrounding LSH/helper context. All function names and file paths verified to exist in src/simhash/minhash.c and src/pipeline/pass_semantic_edges.c \u2014 no fabrication. Correctly notes module is named simhash/ but implements MinHash+LSH. Minor weaknesses: omits line numbers (explicitly because graph doesn't store them \u2014 acceptable, ground truth doesn't require lines) and attributes the primary pipeline driver to pass_semantic_edges.c without identifying pass_similarity.c as the SIMILAR_TO-emitting pass. Complete and correct on the ground truth, so 4 with a slight reservation."}, {"slot": "B", "correctness": 4, "justification": "Covers all 6 ground-truth functions with exact, verified line numbers (compute:249, weighted_update:208, jaccard:269, to_hex:284, from_hex:297, decode_minhash:526). Correctly identifies both the core algorithm file (minhash.c) and both pipeline consumers (pass_similarity.c driver + decode_minhash in pass_semantic_edges.c:526). Every cited symbol and line verified against source \u2014 no fabrication. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Covers all 6 ground-truth functions with exact verified line numbers, plus correctly identifies pass_similarity.c as the detection driver (entry 251, sim_query_worker 176, collect_fp_entries 95, parse_fp_from_props 48, merge_sim_edges 232 \u2014 all verified). Adds accurate algorithm parameters (K=64, b=32xr=2, Jaccard 0.95 threshold) and correctly notes the simhash dir actually implements MinHash. No fabrication found. Most precise and complete answer; fully correct."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies MinHash+LSH in src/simhash/minhash.c (notes the dir is misnamed 'simhash'). Covers all 5 ground-truth minhash.c hits (cbm_minhash_compute, _from_hex, _jaccard, _to_hex, weighted_minhash_update) plus decode_minhash in src/pipeline/pass_semantic_edges.c \u2014 exactly the GT reference file. Adds phase5_lsh_build/phase5c_build_lsh_buckets/free_lsh_buckets, all verified real. No fabrication. Minor weakness: no line numbers (it acknowledges fn.line is empty) and does not mention pass_similarity.c, the actual driver. Complete and accurate."}, {"slot": "B", "correctness": 4, "justification": "All 5 ground-truth minhash.c functions with EXACT verified line numbers (compute:249, weighted_update:208, jaccard:269, to_hex:284, from_hex:297). Identifies the real driver pass_similarity.c (cbm_pipeline_pass_similarity:251, sim_query_worker:176, etc., all verified) and also cites decode_minhash at pass_semantic_edges.c:526 \u2014 the exact GT hit and exact line. All helper line numbers verified correct. No fabrication. Fully correct and complete."}, {"slot": "C", "correctness": 4, "justification": "Most thorough: all 5 GT minhash.c hits with exact verified line numbers, plus decode_minhash at pass_semantic_edges.c:526 (exact GT hit/line). Correctly notes MinHash not SimHash, names the real driver pass_similarity.c with verified functions and lines, and adds algorithm parameters (K=64 sigs, b=32 bands x r=2, Jaccard>=0.95). Every checked function and line number is accurate; no fabrication. Fully correct and complete."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 4}}, {"id": "D5.2", "dim": "D5", "question": "Where is camelCase / identifier tokenization (splitting identifiers into words) implemented?", "answers": [{"cond": "cbm", "answer": "camelCase / identifier tokenization (splitting identifiers into words) is implemented primarily in TWO places:\n\nPRIMARY (semantic search tokenizer) \u2014 src/semantic/semantic.c:\n- `cbm_sem_tokenize(const char *name, char **out, int max_out)` at lines 166-368 \u2014 the main tokenizer. Splits a name into tokens by walking each char: `is_token_delim(c)` handles snake_case / dot-separated / non-alnum delimiters, and `is_camel_break(name, i)` handles camelCase boundaries; tokens are lowercased and flushed, then common abbreviations are expanded (err->error, ctx->context, etc.). Declared in src/semantic/semantic.h:93 (\"/* Split a name into tokens: camelCase, snake_case, dot.separated. */\").\n- `is_camel_break(...)` at src/semantic/semantic.c:148-155 \u2014 the helper that decides where a camelCase boundary occurs (called by cbm_sem_tokenize).\n- (supporting helpers in the same file: `is_token_delim`, `flush_token`.)\n\nSECONDARY (enrichment-pass camelCase splitter) \u2014 src/pipeline/pass_enrichment.c:\n- `cbm_split_camel_case` at lines 45-72 \u2014 dedicated camelCase splitter.\n- `cbm_tokenize_decorator(const char *dec, char **out, int max_out)` at lines 100-137 \u2014 tokenizes decorator strings, calling cbm_split_camel_case.\n\nOTHER camelCase splitters found:\n- `emit_camel_words` at src/pipeline/pass_configures.c:38-62 (used by `cbm_normalize_config_key`, lines 64-97) \u2014 splits config keys into camelCase words.\n- `camel_should_split` at src/store/store.c:402-416 \u2014 camelCase split-point predicate used by the store/FTS layer (SQLite BM25 full-text tokenization).\n\nCallers that route node metadata (names, paths, JSON fields, call neighbors) through cbm_sem_tokenize live in src/pipeline/pass_semantic_edges.c: tokenize_node, tokenize_json_string_field, tokenize_json_array_field, tokenize_call_neighbors, tokenize_worker, phase2_tokenize.", "tool_calls": 4}, {"cond": "graphify", "answer": "camelCase / identifier tokenization is implemented in two places:\n\n1. PRIMARY (semantic full-text tokenizer) \u2014 src/semantic/semantic.c\n - cbm_sem_tokenize() at src/semantic/semantic.c:166 \u2014 the main tokenizer that splits identifiers/text into word tokens. It drives the loop over characters and emits tokens.\n - Helpers it calls (also in src/semantic/semantic.c):\n - is_camel_break() at L148 \u2014 detects camelCase word boundaries (the lower\u2192upper transition split).\n - is_token_delim() \u2014 recognizes delimiter chars (e.g. snake_case underscores, separators).\n - flush_token() \u2014 emits the accumulated token.\n - Callers: tokenize_node(), tokenize_call_neighbors(), tokenize_json_string_field(), tokenize_json_array_field() (in src/pipeline/pass_semantic_edges.c).\n\n2. SECONDARY (decorator/enrichment camelCase splitter) \u2014 src/pipeline/pass_enrichment.c\n - cbm_split_camel_case() at src/pipeline/pass_enrichment.c:45 \u2014 splits a camelCase identifier into words; calls cbm_strndup() and is called by cbm_tokenize_decorator() (used for extracting decorator words via extract_decorator_words()).\n\nSo the core camelCase boundary logic lives in src/semantic/semantic.c (is_camel_break at L148, used by cbm_sem_tokenize at L166), with a separate decorator-focused camelCase splitter at src/pipeline/pass_enrichment.c:45 (cbm_split_camel_case).", "tool_calls": 7}, {"cond": "explorer", "answer": "camelCase / identifier tokenization (splitting identifiers into words) is implemented in THREE places in the corpus:\n\n1) src/semantic/semantic.c \u2014 the primary identifier tokenizer.\n - `cbm_sem_tokenize(const char *name, char **out, int max_out)` at line 166: full identifier\u2192words splitter (lowercases, splits on delimiters AND camelCase transitions, then does abbreviation expansion).\n - Helpers: `is_camel_break(name, i)` at line 148 (uppercase preceded by lowercase = a camelCase boundary), `is_token_delim(c)` at line 142 (delimiter chars like _, -, etc.), `flush_token(...)` at line 158. Buffer size `TOKEN_BUF_LEN = 128` at line 34.\n\n2) src/pipeline/pass_enrichment.c \u2014 decorator-oriented camelCase splitting.\n - `cbm_split_camel_case(const char *s, char **out, int max_out)` at line 45: splits a string at camelCase boundaries (uppercase preceded by lowercase) into substrings.\n - `cbm_tokenize_decorator(const char *dec, char **out, int max_out)` at line 100 calls cbm_split_camel_case on each part. File header comment (line 2) describes it as \"Decorator tokenization, camelCase splitting\". `ENRICH_MAX_CAMEL = 16` at line 10.\n\n3) src/store/store.c \u2014 SQLite SQL function for FTS5/BM25 full-text indexing.\n - `sqlite_camel_split(sqlite3_context *ctx, ...)` at line 418, with predicate `camel_should_split(const char *input, int i)` at line 402. It emits the original identifier plus a space-separated split version so FTS5's whitespace tokenizer indexes both exact and split forms (snake_case is handled by FTS5's unicode61 tokenizer on `_`). Registered as the SQL function `cbm_camel_split` at store.c:593 and store.c:649. Constants `CAMEL_SPLIT_BUF = 2048` (line 375), `CAMEL_BUF_GUARD = 2` (line 377).\n\nCommon rule across all three: a camelCase break is detected as an uppercase letter immediately preceded by a lowercase letter (e.g. semantic.c:154, pass_enrichment.c:58). The most direct/canonical \"identifier into words\" implementation is cbm_sem_tokenize in src/semantic/semantic.c:166.", "tool_calls": 6}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 2, "justification": "Correctly identifies 2 of the 5 ground-truth files with accurate functions and line numbers: src/semantic/semantic.c (cbm_sem_tokenize:166, is_camel_break:148) and src/pipeline/pass_enrichment.c (cbm_split_camel_case:45). It also names the pass_semantic_edges.c callers (tokenize_node, tokenize_call_neighbors, etc.), partially covering that GT file (though not tokenize_worker by name). However it completely misses src/store/store.c (camel_should_split / sqlite_camel_split \u2014 the FTS5 SQL splitter) and src/pipeline/fqn.c (tokenize_path). No fabrication; everything stated is verified accurate. Roughly half the answer set covered = partial."}, {"slot": "B", "correctness": 3, "justification": "Identifies 3 of the 5 ground-truth files with both functions correctly named and accurate line numbers: src/semantic/semantic.c (cbm_sem_tokenize:166, is_camel_break:148), src/pipeline/pass_enrichment.c (cbm_split_camel_case:45, cbm_tokenize_decorator:100), and src/store/store.c (camel_should_split:402, sqlite_camel_split:418, plus correct registration at 593/649). Misses src/pipeline/fqn.c (tokenize_path) and the pass_semantic_edges.c tokenize_worker/caller layer. All claims verified correct, no fabrication. Strong and accurate but two GT files omitted."}, {"slot": "C", "correctness": 3, "justification": "Most complete: covers 4 of the 5 ground-truth files accurately \u2014 src/semantic/semantic.c (cbm_sem_tokenize:166, is_camel_break:148), src/pipeline/pass_enrichment.c (cbm_split_camel_case:45, cbm_tokenize_decorator:100), src/store/store.c (camel_should_split:402, the FTS/BM25 layer), and src/pipeline/pass_semantic_edges.c (tokenize_worker:561, phase2_tokenize, plus the caller routing functions). It also adds a real bonus (emit_camel_words at pass_configures.c:38, verified to exist) which is legitimate extra, not fabrication. The only GT miss is src/pipeline/fqn.c (tokenize_path). All line numbers and names verified; no fabrication. Strongest coverage but one GT file short of complete, so not a 4."}]}, {"scores": [{"slot": "A", "correctness": 2, "justification": "Covers 2 of the 5 ground-truth files accurately: src/semantic/semantic.c (cbm_sem_tokenize L166, is_camel_break L148 \u2014 verified) and src/pipeline/pass_enrichment.c (cbm_split_camel_case L45, cbm_tokenize_decorator \u2014 verified). Names pass_semantic_edges.c only as callers, not tokenize_worker (file 5). Misses src/store/store.c (camel_should_split/sqlite_camel_split) and src/pipeline/fqn.c (tokenize_path) entirely. All stated functions/lines verified, no fabrication, but ~half the canonical locations are absent. Partial."}, {"slot": "B", "correctness": 3, "justification": "Covers 3 of 5 ground-truth files with fully verified accuracy: store.c (camel_should_split L402, sqlite_camel_split L418, cbm_camel_split L593/L649), semantic.c (cbm_sem_tokenize L166, is_camel_break L148), pass_enrichment.c (cbm_split_camel_case L45, cbm_tokenize_decorator L100). Every line number, constant (TOKEN_BUF_LEN=128, ENRICH_MAX_CAMEL=16, CAMEL_SPLIT_BUF=2048) verified correct. No fabrication. Misses fqn.c (tokenize_path) and pass_semantic_edges.c (tokenize_worker). Mostly correct with notable omissions."}, {"slot": "C", "correctness": 3, "justification": "Most complete: covers 4 of 5 ground-truth files accurately \u2014 store.c (camel_should_split L402, verified), semantic.c (cbm_sem_tokenize L166, is_camel_break L148), pass_enrichment.c (cbm_split_camel_case L45, cbm_tokenize_decorator L100), and pass_semantic_edges.c naming tokenize_worker plus the correct caller chain (tokenize_node, tokenize_json_string_field, tokenize_json_array_field, tokenize_call_neighbors, phase2_tokenize \u2014 all verified). Adds a real bonus location emit_camel_words/pass_configures.c L38. No fabrication. Only omission is src/pipeline/fqn.c tokenize_path. Strong, near-4 but one canonical file missing."}]}], "condMeanScore": {"cbm": 3, "graphify": 2, "explorer": 3}}, {"id": "D5.3", "dim": "D5", "question": "Find the arena / bump allocator implementation (allocation from a memory arena).", "answers": [{"cond": "cbm", "answer": "The arena / bump allocator is implemented in src/foundation/arena.c (with header src/foundation/arena.h).\n\nCore bump-allocation function:\n- cbm_arena_alloc(CBMArena *a, size_t n) \u2014 src/foundation/arena.c:58-76. It 8-byte-aligns n, and if the current block has room (a->used + n <= a->block_size) it bumps the pointer: ptr = a->blocks[a->nblocks-1] + a->used; then a->used += n. When the block is full it calls arena_grow() to allocate a new block.\n\nSupporting functions in src/foundation/arena.c (the CBMArena allocator):\n- cbm_arena_init \u2014 initialize arena\n- cbm_arena_init_sized \u2014 initialize with a given block size\n- arena_grow \u2014 allocate a new block when the current one is exhausted (the growth path of the bump allocator)\n- cbm_arena_alloc \u2014 the bump allocation primitive (above)\n- cbm_arena_calloc \u2014 zeroed bump allocation\n- cbm_arena_strdup / cbm_arena_strndup / cbm_arena_sprintf \u2014 string helpers built on the arena\n- cbm_arena_reset \u2014 reset (free-all/rewind, reusing blocks)\n- cbm_arena_destroy \u2014 free all blocks\n- cbm_arena_total \u2014 total bytes allocated\n\nKey types/macros: CBMArena struct; CBM_ARENA_DEFAULT_BLOCK_SIZE (src/foundation/arena.h); ARENA_ALIGN alignment constant.\n\n(Note: a duplicate copy of the same arena allocator also exists at internal/cbm/arena.h.)", "tool_calls": 5}, {"cond": "graphify", "answer": "The arena / bump allocator implementation lives in `src/foundation/arena.c` (with a parallel copy at `internal/cbm/arena.c`), backed by the `CBMArena` struct (defined at src/foundation/arena.c:21).\n\nCore implementation in src/foundation/arena.c:\n- CBMArena (struct) \u2014 src/foundation/arena.c:21\n- cbm_arena_init() \u2014 src/foundation/arena.c:21\n- cbm_arena_init_sized() \u2014 src/foundation/arena.c:25\n- arena_grow() \u2014 src/foundation/arena.c:38 (internal helper that grows the arena's backing memory)\n- cbm_arena_alloc() \u2014 src/foundation/arena.c:58 (the core bump-allocation routine: hands out memory from the arena)\n- cbm_arena_calloc() \u2014 src/foundation/arena.c:78\n- cbm_arena_strdup() \u2014 src/foundation/arena.c:86\n- cbm_arena_strndup() \u2014 src/foundation/arena.c:98\n- cbm_arena_sprintf() \u2014 src/foundation/arena.c:110\n- cbm_arena_reset() \u2014 src/foundation/arena.c:130 (resets the bump pointer for reuse)\n- cbm_arena_destroy() \u2014 src/foundation/arena.c:149\n- cbm_arena_total() \u2014 src/foundation/arena.c:156\n\nThe primary allocation-from-arena function (the \"bump allocator\") is cbm_arena_alloc() at src/foundation/arena.c:58. Header: internal/cbm/arena.h. A duplicate implementation exists at internal/cbm/arena.c (e.g. cbm_arena_alloc at L35, arena_grow at L16, CBMArena at L7).", "tool_calls": 1}, {"cond": "explorer", "answer": "Arena/bump allocator: src/foundation/arena.c (+ arena.h). Header documents it as \"Bump allocator with block-based growth\"; memory is freed all-at-once via cbm_arena_destroy(), no individual frees by design. Struct CBMArena (arena.h:20-27): blocks[256], block_size (default 64KB = CBM_ARENA_DEFAULT_BLOCK_SIZE), used (the bump-pointer offset), nblocks, block_sizes[], total_alloc. Core bump allocation: cbm_arena_alloc (arena.c:58) \u2014 8-byte aligns n (n = (n+7)&~7), grows block if used+n>block_size, returns blocks[nblocks-1]+used, then bumps used+=n and total_alloc+=n. Other functions in arena.c: cbm_arena_init (21), cbm_arena_init_sized (25), arena_grow (38, static, doubles block_size or uses min_size, mallocs new block), cbm_arena_calloc (78), cbm_arena_strdup (86), cbm_arena_strndup (98), cbm_arena_sprintf (110), cbm_arena_reset (130, keep first block/free the rest), cbm_arena_destroy (149), cbm_arena_total (156). An older duplicate copy lives at internal/cbm/arena.c and internal/cbm/arena.h (the src/foundation version is the \"pure C rewrite\" restructured from it). Related but distinct allocators in src/foundation/: slab_alloc.c (slab allocator), mem.c, vmem.c.\n\n", "tool_calls": 4}], "slotToCond": {"A": "explorer", "B": "cbm", "C": "graphify"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Names both arena files correctly (src/foundation/arena.c canonical, internal/cbm/arena.c as older duplicate), matching the ground truth's two-file concept set. All function line numbers in src/foundation/arena.c verified exactly (init 21, init_sized 25, arena_grow 38, alloc 58, calloc 78, strdup 86, strndup 98, sprintf 110, reset 130, destroy 149, total 156). CBMArena struct location correct (arena.h:20-27), header doc quote 'Bump allocator with block-based growth' correct, 8-byte align + bump-pointer logic accurate. Correctly distinguishes related-but-distinct allocators (slab_alloc.c, mem.c, vmem.c). Fully correct and most complete; no fabrication."}, {"slot": "B", "correctness": 4, "justification": "Correctly identifies src/foundation/arena.c (+ header) as the bump allocator with cbm_arena_alloc as the core primitive (lines 58-76 verified, logic accurate). Lists all functions correctly and notes the duplicate at internal/cbm/arena.h. ARENA_ALIGN and CBM_ARENA_DEFAULT_BLOCK_SIZE confirmed real. Covers both files conceptually. Slightly less detailed than A (no per-line numbers for the internal copy) but no errors and no fabrication; fully correct vs the concept set."}, {"slot": "C", "correctness": 3, "justification": "Names both files correctly and all src/foundation/arena.c line numbers verified exact; internal/cbm lines arena_grow L16 and cbm_arena_alloc L35 are correct. However it makes two struct-location errors: claims CBMArena struct is at src/foundation/arena.c:21 (that line is cbm_arena_init; the struct is in arena.h:20-27) and at internal/cbm L7 (that line is cbm_arena_init, not the struct). Otherwise correct and complete. Minor errors warrant a 3."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Identifies both ground-truth files (src/foundation/arena.c and the duplicate internal/cbm/arena.c) plus headers. All line numbers verified correct (alloc:58, grow:38 static, init:21, init_sized:25, calloc:78, strdup:86, strndup:98, sprintf:110, reset:130, destroy:149, total:156). Struct fields, 64KB CBM_ARENA_DEFAULT_BLOCK_SIZE, and 8-byte align logic all accurate. Correctly names cbm_arena_alloc as the bump primitive. Related allocators slab_alloc.c/mem.c/vmem.c confirmed real in src/foundation \u2014 useful context, not fabrication. Fully correct and complete."}, {"slot": "B", "correctness": 4, "justification": "Correct primary file src/foundation/arena.c + header arena.h. cbm_arena_alloc:58-76 and bump-pointer mechanics described accurately; arena_grow growth path correct. All supporting functions listed correctly. ARENA_ALIGN constant verified to exist (arena.c:15). Notes the duplicate copy at internal/cbm/arena.h. Slightly less line-number precision than A and references only the internal/cbm header rather than the .c file, but the duplicate is acknowledged and nothing is fabricated. Fully correct, very minor omissions."}, {"slot": "C", "correctness": 3, "justification": "Identifies both ground-truth files (src/foundation/arena.c and internal/cbm/arena.c). All line numbers verified correct (alloc:58, grow:38, init:21, init_sized:25, calloc:78, strdup:86, strndup:98, sprintf:110, reset:130, destroy:149, total:156), and the duplicate's lines (alloc L35, grow L16, struct L7) also correct. Correctly identifies cbm_arena_alloc:58 as the bump allocator. One small error: labels 'Header: internal/cbm/arena.h' as the header for the primary src/foundation implementation, whose actual header is src/foundation/arena.h \u2014 a minor mislabeling. Otherwise accurate and complete."}]}], "condMeanScore": {"cbm": 4, "graphify": 3, "explorer": 4}}, {"id": "D5.4", "dim": "D5", "question": "Which code implements Aho-Corasick multi-pattern string matching?", "answers": [{"cond": "cbm", "answer": "Aho-Corasick multi-pattern string matching is implemented in **internal/cbm/ac.c** (lines 1-429, module/file scope).\n\nKey functions (in file order):\n- queue_init / queue_push / queue_pop / queue_empty / queue_free \u2014 BFS queue helpers used for failure-link construction\n- ac_build_trie \u2014 builds the goto/trie from the pattern set\n- ac_build_failure \u2014 computes failure (suffix) links via BFS\n- ac_shrink_tables \u2014 compacts the state tables\n- cbm_ac_build \u2014 public constructor of the automaton\n- cbm_ac_free \u2014 destructor\n- cbm_ac_scan_bitmask \u2014 core scan returning a match bitmask\n- get_decomp_buf, cbm_ac_scan_lz4_bitmask, cbm_ac_scan_lz4_batch, cbm_ac_scan_batch \u2014 scanning over (LZ4-compressed) buffers / batches\n- cbm_ac_num_states, cbm_ac_num_patterns, cbm_ac_table_bytes \u2014 introspection accessors\n\nThe \"corasick\"/\"multi-pattern\" matches resolve only to this file; it is the sole Aho-Corasick implementation in the codebase.", "tool_calls": 7}, {"cond": "graphify", "answer": "Aho-Corasick multi-pattern string matching is implemented in **internal/cbm/ac.c** (graph community 54).\n\nCore data structure:\n- CBMAutomaton (struct) \u2014 internal/cbm/ac.c:L72\n\nBuild / matching functions (all in internal/cbm/ac.c, all reference CBMAutomaton):\n- cbm_ac_build() \u2014 constructs the automaton\n- ac_build_trie() \u2014 builds the trie of patterns\n- ac_build_failure() \u2014 internal/cbm/ac.c:L102 \u2014 builds the failure (goto-failure) links\n- ac_shrink_tables() \u2014 compacts the transition tables\n- cbm_ac_scan_batch() \u2014 batch scan\n- cbm_ac_scan_bitmask() \u2014 bitmask scan\n- cbm_ac_scan_lz4_batch() \u2014 internal/cbm/ac.c:L298 \u2014 LZ4 batch scan\n- cbm_ac_scan_lz4_bitmask() \u2014 internal/cbm/ac.c:L272 \u2014 LZ4 bitmask scan\n- cbm_ac_free() \u2014 frees the automaton\n- cbm_ac_num_patterns(), cbm_ac_num_states(), cbm_ac_table_bytes() \u2014 accessors\n\nThe classic Aho-Corasick goto + failure + output construction is implemented by ac_build_trie() and ac_build_failure(), with the matching/scan driven by the cbm_ac_scan_* functions over the CBMAutomaton.", "tool_calls": 5}, {"cond": "explorer", "answer": "(no answer)", "tool_calls": 0}], "slotToCond": {"A": "cbm", "B": "graphify", "C": "explorer"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies internal/cbm/ac.c as the sole Aho-Corasick implementation. Lists all real functions accurately: queue_* BFS helpers, ac_build_trie (goto/trie), ac_build_failure (failure links via BFS), ac_shrink_tables, cbm_ac_build/free, cbm_ac_scan_* variants, and introspection accessors \u2014 all verified present in source. Covers both ground-truth reference hits (ac_build_trie, ac_build_failure) and the 'automaton' keyword. No fabrication. Complete and correct."}, {"slot": "B", "correctness": 4, "justification": "Correctly identifies internal/cbm/ac.c with CBMAutomaton struct and both ground-truth functions ac_build_trie and ac_build_failure (correctly explains goto+failure+output construction). Line numbers for ac_build_failure (L102), cbm_ac_scan_lz4_bitmask (L272), cbm_ac_scan_lz4_batch (L298) are accurate. One minor error: claims CBMAutomaton struct at L72, but it is actually L34 (L72 is ac_build_trie). All functions are real, no fabrication. Essentially fully correct with one trivial line-number slip; still merits 4."}, {"slot": "C", "correctness": 0, "justification": "No answer provided."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies internal/cbm/ac.c as the sole Aho-Corasick implementation. Lists all key functions matching source: queue_* BFS helpers, ac_build_trie (goto/trie), ac_build_failure (failure links via BFS), ac_shrink_tables, cbm_ac_build/free, cbm_ac_scan_* variants, num/table accessors. Covers both ground-truth reference hits (ac_build_trie, ac_build_failure) plus the automaton concept. No fabrication; complete and correct."}, {"slot": "B", "correctness": 4, "justification": "Correctly identifies internal/cbm/ac.c with core AC construction (ac_build_trie + ac_build_failure for goto+failure links) and scan functions over CBMAutomaton. Covers both ground-truth reference hits and the automaton struct. Most cited line numbers exact (ac_build_failure L102, cbm_ac_scan_lz4_bitmask L272, cbm_ac_scan_lz4_batch L298). One minor error: CBMAutomaton struct is at L34, not L72. Single small line-number error does not undermine an otherwise complete, accurate answer."}, {"slot": "C", "correctness": 0, "justification": "No answer provided."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 0}}, {"id": "D5.5", "dim": "D5", "question": "Where is the Cypher query language parsed and executed?", "answers": [{"cond": "cbm", "answer": "The Cypher query language is parsed and executed in src/cypher/cypher.c (header: src/cypher/cypher.h). The file's banner describes it as the \"Cypher query engine: lexer, parser, planner, executor.\"\n\nPipeline / key entry points (all in src/cypher/cypher.c):\n- cbm_cypher_execute (cypher.c:4331-4392) \u2014 main entry point. Parses then executes: calls cbm_cypher_parse, then execute_single per statement, handles UNION chains and DISTINCT.\n- cbm_cypher_parse (cypher.c:2000-2024) \u2014 convenience lex+parse. Calls cbm_lex then cbm_parse, returning a cbm_query_t AST.\n- Lexer: cbm_lex (+ helpers lex_push, lex_string_literal, lex_try_ident, lex_try_number, lex_single_char, lex_try_two_char, lex_skip_whitespace_comments).\n- Parser: cbm_parse (+ ~35 parse_* helpers: parse_node, parse_rel, parse_match_pattern, parse_match_chain, parse_where, parse_return, parse_order_by_clause, parse_condition_expr, etc.).\n- Executor: execute_single (+ execute_with_clause, execute_return_clause, execute_return_simple, execute_return_agg, execute_return_star, execute_default_projection, etc.).\n\nCaller / wiring: cbm_cypher_execute is invoked from the MCP layer in src/mcp/mcp.c via handle_query_graph (mcp.c:1665-1742), which is the query_graph tool handler. (mcp.c includes cypher/cypher.h at line 44.)", "tool_calls": 6}, {"cond": "graphify", "answer": "Cypher is parsed and executed in src/cypher/cypher.c. The public entry point is cbm_cypher_execute() at src/cypher/cypher.c:4331, which calls cbm_cypher_parse() to parse and execute_single() to execute; it is invoked from handle_query_graph() in src/mcp/mcp.c:1665. Parser (recursive-descent) functions in src/cypher/cypher.c include cbm_cypher_parse/cbm_parse (L1825), parser_t (L439), token helpers peek/advance/check/match/expect (L439-465), parse_node (L545), parse_condition_expr (L1009), parse_return_item (L1503), parse_post_where (L1780). Execution functions in src/cypher/cypher.c include execute_single (L4271), execute_return_clause (L4243), execute_with_clause (L3725), eval_condition (L2390), scan_pattern_nodes (L2793), expand_var_length (L2871). Underlying store traversal is in src/store/store.c (cbm_store_bfs L2652, cbm_store_search L2437).\n\n", "tool_calls": 3}, {"cond": "explorer", "answer": "(no answer)", "tool_calls": 0}], "slotToCond": {"A": "graphify", "B": "explorer", "C": "cbm"}, "judged": [{"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies src/cypher/cypher.c as where Cypher is parsed and executed. Entry point cbm_cypher_execute at L4331 verified exact. Correctly describes parse-then-execute pipeline (cbm_cypher_parse, execute_single) and the caller handle_query_graph in src/mcp/mcp.c:1665 (verified). Lists many real, verified parser functions (parser_t L437, peek/advance/check/match/expect L439-465, parse_node L545) and executor functions (execute_single L4271). One minor imprecision: labels cbm_cypher_parse/cbm_parse at L1825 (1825 is actually cbm_parse; cbm_cypher_parse is at L2000) \u2014 a small conflation, both real and correctly placed in the parse stage. Does not explicitly name parse_match_chain/parse_match_pattern from the ground-truth hits, but coverage and accuracy are otherwise complete with no fabrication."}, {"slot": "B", "correctness": 0, "justification": "No answer provided."}, {"slot": "C", "correctness": 4, "justification": "Correctly identifies src/cypher/cypher.c (+ header) as the parse/execute location, quotes the real file banner 'lexer, parser, planner, executor' (verified L2). Entry point cbm_cypher_execute at L4331 and cbm_cypher_parse at L2000 both verified exact. Explicitly names all ground-truth reference hits: cbm_cypher_parse, parse_match_chain, parse_match_pattern. Correctly lays out lexer (cbm_lex)/parser (cbm_parse)/executor (execute_single) split and the caller handle_query_graph in src/mcp/mcp.c:1665 with the cypher.h include at mcp.c:44 (verified). No fabrication; fully correct and complete."}]}, {"scores": [{"slot": "A", "correctness": 4, "justification": "Correctly identifies src/cypher/cypher.c as the parse+execute location. Entry point cbm_cypher_execute at cypher.c:4331 verified; calls cbm_cypher_parse and execute_single (4271 verified). Caller handle_query_graph at mcp.c:1665 verified. Lists many real parser/executor functions, all real and accurate. Does not explicitly name the ground-truth parse_match_chain/parse_match_pattern (names cbm_parse/parse_node/parse_condition_expr instead), but file, entry points, and signatures are fully correct. No fabrication."}, {"slot": "B", "correctness": 0, "justification": "No answer provided."}, {"slot": "C", "correctness": 4, "justification": "Correctly identifies src/cypher/cypher.c (engine: lexer/parser/planner/executor) and header cypher.h. cbm_cypher_execute at 4331-4392, cbm_cypher_parse at 2000-2024, and execute_single all verified. Explicitly names the ground-truth functions parse_match_pattern and parse_match_chain among parser helpers, plus lexer and executor functions. Caller handle_query_graph at mcp.c:1665-1742 verified, and mcp.c includes cypher.h at line 44 verified. Fully correct and complete with accurate lines and exact ground-truth keywords."}]}], "condMeanScore": {"cbm": 4, "graphify": 4, "explorer": 0}}]} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/results/layer2_scores.json b/bench/cbm-vs-graphify/results/layer2_scores.json new file mode 100644 index 00000000..555de864 --- /dev/null +++ b/bench/cbm-vs-graphify/results/layer2_scores.json @@ -0,0 +1,261 @@ +{ + "summary": { + "D1": { + "cbm": 4, + "graphify": 3.2, + "explorer": 3.2 + }, + "D2": { + "cbm": 3.1, + "graphify": 2.8, + "explorer": 4 + }, + "D3": { + "cbm": 4, + "graphify": 2.1, + "explorer": 4 + }, + "D4": { + "cbm": 2.5, + "graphify": 1.5, + "explorer": 4 + }, + "D5": { + "cbm": 3.8, + "graphify": 3.4, + "explorer": 2.2 + }, + "OVERALL": { + "cbm": 3.48, + "graphify": 2.6, + "explorer": 3.48 + } + }, + "per_question": [ + { + "id": "D1.1", + "dim": "D1", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D1.2", + "dim": "D1", + "scores": { + "cbm": 4, + "graphify": 0, + "explorer": 4 + } + }, + { + "id": "D1.3", + "dim": "D1", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D1.4", + "dim": "D1", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D1.5", + "dim": "D1", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 0 + } + }, + { + "id": "D2.1", + "dim": "D2", + "scores": { + "cbm": 2, + "graphify": 1, + "explorer": 4 + } + }, + { + "id": "D2.2", + "dim": "D2", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D2.3", + "dim": "D2", + "scores": { + "cbm": 3, + "graphify": 3.5, + "explorer": 4 + } + }, + { + "id": "D2.4", + "dim": "D2", + "scores": { + "cbm": 3, + "graphify": 2, + "explorer": 4 + } + }, + { + "id": "D2.5", + "dim": "D2", + "scores": { + "cbm": 3.5, + "graphify": 3.5, + "explorer": 4 + } + }, + { + "id": "D3.1", + "dim": "D3", + "scores": { + "cbm": 4, + "graphify": 2, + "explorer": 4 + } + }, + { + "id": "D3.2", + "dim": "D3", + "scores": { + "cbm": 4, + "graphify": 2, + "explorer": 4 + } + }, + { + "id": "D3.3", + "dim": "D3", + "scores": { + "cbm": 4, + "graphify": 2, + "explorer": 4 + } + }, + { + "id": "D3.4", + "dim": "D3", + "scores": { + "cbm": 4, + "graphify": 2.5, + "explorer": 4 + } + }, + { + "id": "D3.5", + "dim": "D3", + "scores": { + "cbm": 4, + "graphify": 2, + "explorer": 4 + } + }, + { + "id": "D4.1", + "dim": "D4", + "scores": { + "cbm": 4, + "graphify": 3, + "explorer": 4 + } + }, + { + "id": "D4.2", + "dim": "D4", + "scores": { + "cbm": 1, + "graphify": 0.5, + "explorer": 4 + } + }, + { + "id": "D4.3", + "dim": "D4", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D4.4", + "dim": "D4", + "scores": { + "cbm": 3.5, + "graphify": 0, + "explorer": 4 + } + }, + { + "id": "D4.5", + "dim": "D4", + "scores": { + "cbm": 0, + "graphify": 0, + "explorer": 4 + } + }, + { + "id": "D5.1", + "dim": "D5", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 4 + } + }, + { + "id": "D5.2", + "dim": "D5", + "scores": { + "cbm": 3, + "graphify": 2, + "explorer": 3 + } + }, + { + "id": "D5.3", + "dim": "D5", + "scores": { + "cbm": 4, + "graphify": 3, + "explorer": 4 + } + }, + { + "id": "D5.4", + "dim": "D5", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 0 + } + }, + { + "id": "D5.5", + "dim": "D5", + "scores": { + "cbm": 4, + "graphify": 4, + "explorer": 0 + } + } + ] +} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/results/layer3_results.json b/bench/cbm-vs-graphify/results/layer3_results.json new file mode 100644 index 00000000..68ebae12 --- /dev/null +++ b/bench/cbm-vs-graphify/results/layer3_results.json @@ -0,0 +1,35 @@ +{ + "cold_build_s": { + "cbm_median": 2.44, + "cbm_runs": [ + 2.51, + 2.42, + 2.44 + ], + "graphify_ast_median": 4.21, + "graphify_ast_runs": [ + 4.94, + 4.18, + 4.21 + ] + }, + "disk_bytes": { + "cbm_db": 53084160, + "graphify_out_total": 33582761, + "graphify_graph_json": 6133023 + }, + "query_latency_ms": { + "cbm_median": 39.95, + "graphify_median": 126.11 + }, + "incremental_s": { + "graphify_update": 3.24, + "cbm_reindex_full": 1.47 + }, + "token_cost": { + "cbm_index": 0, + "graphify_ast": 0, + "graphify_full_subset_llm_naming_wallclock_s": 705.9, + "note": "cbm uses local nomic embeddings (0 API tokens); graphify-AST is deterministic (0 tokens); graphify-FULL semantic/community-naming uses an LLM backend (here local ollama gemma4:26b = 0 API $ but 11.8 min wall-clock for the 16K-LOC subset)." + } +} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/results/oracle.json b/bench/cbm-vs-graphify/results/oracle.json new file mode 100644 index 00000000..601c77d0 --- /dev/null +++ b/bench/cbm-vs-graphify/results/oracle.json @@ -0,0 +1 @@ +{"corpus": "/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval/eval-corpus", "n_defs_total": 3409, "kind_dist": {"macro": 57, "type": 399, "function": 2282, "other": 671}, "functions": [["ac_build_failure", "internal/cbm/ac.c", 102], ["ac_build_trie", "internal/cbm/ac.c", 72], ["ac_shrink_tables", "internal/cbm/ac.c", 141], ["accumulate_control_flow", "src/semantic/ast_profile.c", 145], ["accumulate_expressions", "src/semantic/ast_profile.c", 168], ["adapt_build_edge", "internal/cbm/sqlite_writer.c", 1747], ["adapt_build_token_vec", "internal/cbm/sqlite_writer.c", 1759], ["adapt_build_vector", "internal/cbm/sqlite_writer.c", 1753], ["adapt_edge_id", "internal/cbm/sqlite_writer.c", 1750], ["adapt_token_vec_id", "internal/cbm/sqlite_writer.c", 1762], ["adapt_vector_id", "internal/cbm/sqlite_writer.c", 1756], ["add_cleaned_type", "internal/cbm/extract_defs.c", 2353], ["add_dedup_type", "internal/cbm/extract_defs.c", 2510], ["add_git_context_json", "src/mcp/mcp.c", 897], ["add_type_ref", "internal/cbm/extract_type_refs.c", 106], ["adr_append_line", "src/store/store.c", 5146], ["adr_render_section", "src/store/store.c", 5192], ["adr_try_section_header", "src/store/store.c", 5123], ["advance", "src/cypher/cypher.c", 446], ["agg_func_name", "src/cypher/cypher.c", 1203], ["alloc_chunk", "internal/cbm/lsp/scope.c", 22], ["alloc_next_id", "src/graph_buffer/graph_buffer.c", 210], ["annotation_route_method", "internal/cbm/extract_defs.c", 1148], ["append_args_json", "src/pipeline/pass_parallel.c", 1106], ["append_complexity_props", "src/pipeline/pass_complexity.c", 79], ["append_fmt_checked", "src/git/git_context.c", 292], ["append_path_segments", "internal/cbm/helpers.c", 1024], ["apply_assert_narrowing", "internal/cbm/lsp/php_lsp.c", 1860], ["apply_jsdoc_signatures", "internal/cbm/lsp/ts_lsp.c", 4398], ["apply_string_func", "src/cypher/cypher.c", 2625], ["arch_clusters", "src/store/store.c", 4780], ["arch_entry_points", "src/store/store.c", 3293], ["arch_file_tree", "src/store/store.c", 4063], ["arch_hotspots", "src/store/store.c", 3405], ["arch_languages", "src/store/store.c", 3229], ["arch_layers", "src/store/store.c", 3777], ["arch_packages", "src/store/store.c", 3656], ["arch_routes", "src/store/store.c", 3349], ["arena_grow", "internal/cbm/arena.c", 16], ["artifact_path", "src/pipeline/artifact.c", 55], ["ascii_ci_equals", "internal/cbm/extract_defs.c", 5040], ["aspect_wanted", "src/mcp/mcp.c", 1858], ["ast_sweep_shapes", "internal/cbm/lsp/ts_lsp.c", 4564], ["at_prefix", "src/pipeline/pass_pkgmap.c", 92], ["band_hash", "src/simhash/minhash.c", 344], ["batch_resolve_one_doc", "src/semantic/semantic.c", 626], ["batch_resolve_worker", "src/semantic/semantic.c", 669], ["bfs_build_types_clause", "src/store/store.c", 2632], ["bind_id_and_type", "src/store/store.c", 1447], ["bind_parameter", "internal/cbm/lsp/ts_lsp.c", 2027], ["bind_phpdoc_var", "internal/cbm/lsp/php_lsp.c", 733], ["bind_proj_and_type", "src/store/store.c", 1453], ["bind_source_id", "src/store/store.c", 1442], ["bind_text", "src/store/store.c", 91], ["bind_typed_parameters", "internal/cbm/lsp/php_lsp.c", 2264], ["bind_variable_declarator", "internal/cbm/lsp/ts_lsp.c", 1953], ["binding_copy", "src/cypher/cypher.c", 2294], ["binding_free", "src/cypher/cypher.c", 2284], ["binding_get", "src/cypher/cypher.c", 2219], ["binding_get_edge", "src/cypher/cypher.c", 2209], ["binding_get_virtual", "src/cypher/cypher.c", 2589], ["binding_set", "src/cypher/cypher.c", 2309], ["binding_set_edge", "src/cypher/cypher.c", 2266], ["bindings_skip_limit", "src/cypher/cypher.c", 3396], ["blend_worker", "src/semantic/semantic.c", 1055], ["bm25_build_match", "src/mcp/mcp.c", 1253], ["box_primitive", "internal/cbm/lsp/java_lsp.c", 255], ["bucket_push", "src/simhash/minhash.c", 355], ["build_api_vec", "src/pipeline/pass_semantic_edges.c", 453], ["build_deco_vec", "src/pipeline/pass_semantic_edges.c", 496], ["build_def_props", "src/pipeline/pass_definitions.c", 217], ["build_default_columns", "src/cypher/cypher.c", 4108], ["build_edge_record", "internal/cbm/sqlite_writer.c", 742], ["build_entry_path", "src/pipeline/pass_pkgmap.c", 376], ["build_master_record", "internal/cbm/sqlite_writer.c", 1331], ["build_method_index", "internal/cbm/lsp/type_registry.c", 84], ["build_node_record", "internal/cbm/sqlite_writer.c", 721], ["build_project_list_error", "src/mcp/mcp.c", 920], ["build_qn_index", "internal/cbm/lsp/type_registry.c", 43], ["build_return_columns", "src/cypher/cypher.c", 4060], ["build_reverse_index", "src/semantic/semantic.c", 1207], ["build_src_entry", "src/semantic/semantic.c", 1090], ["build_star_columns", "src/cypher/cypher.c", 3793], ["build_token_vec_record", "internal/cbm/sqlite_writer.c", 774], ["build_type_array", "internal/cbm/extract_defs.c", 2384], ["build_type_vec", "src/pipeline/pass_semantic_edges.c", 473], ["build_vector_record", "internal/cbm/sqlite_writer.c", 760], ["builtin_wrapper_class", "internal/cbm/lsp/ts_lsp.c", 1261], ["c_add_fp_target", "internal/cbm/lsp/c_lsp.c", 159], ["c_add_ns_alias", "internal/cbm/lsp/c_lsp.c", 136], ["c_add_using_decl", "internal/cbm/lsp/c_lsp.c", 113], ["c_add_using_namespace", "internal/cbm/lsp/c_lsp.c", 97], ["c_adl_resolve", "internal/cbm/lsp/c_lsp.c", 705], ["c_build_qn", "internal/cbm/lsp/c_lsp.c", 576], ["c_emit_unresolved_call", "internal/cbm/lsp/c_lsp.c", 3300], ["c_eval_expr_type", "internal/cbm/lsp/c_lsp.c", 1363], ["c_eval_expr_type_inner", "internal/cbm/lsp/c_lsp.c", 1382], ["c_extract_dll_resolve_name", "internal/cbm/lsp/c_lsp.c", 196], ["c_lookup_fp_target", "internal/cbm/lsp/c_lsp.c", 182], ["c_lsp_add_include", "internal/cbm/lsp/c_lsp.c", 75], ["c_node_text", "internal/cbm/lsp/c_lsp.c", 52], ["c_parse_declaration_type", "internal/cbm/lsp/c_lsp.c", 2612], ["c_parse_template_params", "internal/cbm/lsp/c_lsp.c", 433], ["c_parse_type_node", "internal/cbm/lsp/c_lsp.c", 915], ["c_process_body_child", "internal/cbm/lsp/c_lsp.c", 4227], ["c_process_class", "internal/cbm/lsp/c_lsp.c", 4401], ["c_process_function", "internal/cbm/lsp/c_lsp.c", 4068], ["c_process_namespace", "internal/cbm/lsp/c_lsp.c", 4364], ["c_process_statement", "internal/cbm/lsp/c_lsp.c", 2635], ["c_resolve_calls_in_node", "internal/cbm/lsp/c_lsp.c", 3325], ["c_resolve_calls_in_node_inner", "internal/cbm/lsp/c_lsp.c", 3333], ["c_resolve_name", "internal/cbm/lsp/c_lsp.c", 619], ["c_resolve_name_to_func_qn", "internal/cbm/lsp/c_lsp.c", 760], ["c_resolve_name_to_type", "internal/cbm/lsp/c_lsp.c", 822], ["c_resolve_ns_alias", "internal/cbm/lsp/c_lsp.c", 518], ["c_resolve_template_param", "internal/cbm/lsp/c_lsp.c", 506], ["c_simplify_type", "internal/cbm/lsp/c_lsp.c", 1232], ["c_types_compatible", "internal/cbm/lsp/type_registry.c", 492], ["cache_dir", "src/mcp/mcp.c", 762], ["camel_should_split", "src/store/store.c", 402], ["candidate_count_penalty", "src/pipeline/registry.c", 347], ["candidate_score", "src/pipeline/registry.c", 150], ["capture_namespace_decl", "internal/cbm/extract_imports.c", 1473], ["cascade_delete_edges", "src/graph_buffer/graph_buffer.c", 262], ["cbm_ac_free", "internal/cbm/ac.c", 221], ["cbm_ac_num_patterns", "internal/cbm/ac.c", 418], ["cbm_ac_num_states", "internal/cbm/ac.c", 414], ["cbm_ac_scan_bitmask", "internal/cbm/ac.c", 236], ["cbm_ac_table_bytes", "internal/cbm/ac.c", 423], ["cbm_adr_parse_sections", "src/store/store.c", 5157], ["cbm_adr_render", "src/store/store.c", 5200], ["cbm_adr_sections_free", "src/store/store.c", 5328], ["cbm_adr_validate_content", "src/store/store.c", 5250], ["cbm_adr_validate_section_keys", "src/store/store.c", 5284], ["cbm_aligned_alloc", "src/foundation/compat_thread.c", 147], ["cbm_aligned_free", "src/foundation/compat_thread.c", 152], ["cbm_alloc_init", "internal/cbm/cbm.c", 310], ["cbm_app_config_dir", "src/foundation/platform.c", 349], ["cbm_app_local_dir", "src/foundation/platform.c", 381], ["cbm_arena_alloc", "internal/cbm/arena.c", 35], ["cbm_arena_calloc", "src/foundation/arena.c", 78], ["cbm_arena_destroy", "internal/cbm/arena.c", 102], ["cbm_arena_init", "internal/cbm/arena.c", 7], ["cbm_arena_init_sized", "src/foundation/arena.c", 25], ["cbm_arena_reset", "src/foundation/arena.c", 130], ["cbm_arena_sprintf", "internal/cbm/arena.c", 79], ["cbm_arena_strdup", "internal/cbm/arena.c", 57], ["cbm_arena_strndup", "internal/cbm/arena.c", 68], ["cbm_arena_total", "src/foundation/arena.c", 156], ["cbm_artifact_commit", "src/pipeline/artifact.c", 544], ["cbm_artifact_exists", "src/pipeline/artifact.c", 524], ["cbm_artifact_import", "src/pipeline/artifact.c", 415], ["cbm_ast_profile_from_str", "src/semantic/ast_profile.c", 344], ["cbm_ast_profile_to_str", "src/semantic/ast_profile.c", 321], ["cbm_ast_profile_to_vector", "src/semantic/ast_profile.c", 385], ["cbm_build_install_plan_json", "src/cli/cli.c", 3278], ["cbm_c_build_cross_registry", "internal/cbm/lsp/c_lsp.c", 5169], ["cbm_c_stdlib_register", "internal/cbm/lsp/generated/c_stdlib_data.c", 24], ["cbm_calculate_p99", "src/traces/traces.c", 130], ["cbm_calls_push", "internal/cbm/cbm.c", 128], ["cbm_canonicalize_drive", "src/foundation/platform.c", 23], ["cbm_cargo_is_known_dep", "internal/cbm/lsp/rust_cargo.c", 293], ["cbm_channels_push", "internal/cbm/cbm.c", 188], ["cbm_classify_string", "internal/cbm/helpers.c", 1199], ["cbm_claude_config_dir", "src/cli/cli.c", 987], ["cbm_claude_user_root", "src/cli/cli.c", 1003], ["cbm_clean_json_brackets", "src/pipeline/pass_infrascan.c", 354], ["cbm_cli_get_version", "src/cli/cli.c", 131], ["cbm_cli_set_version", "src/cli/cli.c", 125], ["cbm_clock_gettime", "src/foundation/compat.c", 117], ["cbm_closedir", "src/foundation/compat_fs.c", 116], ["cbm_cmd_config", "src/cli/cli.c", 2573], ["cbm_cmd_hook_augment", "src/cli/hook_augment.c", 285], ["cbm_cmd_install", "src/cli/cli.c", 3351], ["cbm_cmd_uninstall", "src/cli/cli.c", 3639], ["cbm_cmd_update", "src/cli/cli.c", 3932], ["cbm_compare_versions", "src/cli/cli.c", 169], ["cbm_compile_flags_free", "src/pipeline/pass_compile_commands.c", 142], ["cbm_compute_complexity", "internal/cbm/helpers.c", 540], ["cbm_confidence_band", "src/pipeline/registry.c", 43], ["cbm_config_close", "src/cli/cli.c", 2475], ["cbm_config_delete", "src/cli/cli.c", 2554], ["cbm_config_get", "src/cli/cli.c", 2485], ["cbm_config_get_bool", "src/cli/cli.c", 2509], ["cbm_config_get_int", "src/cli/cli.c", 2523], ["cbm_config_open", "src/cli/cli.c", 2438], ["cbm_config_set", "src/cli/cli.c", 2536], ["cbm_copy_file", "src/cli/cli.c", 316], ["cbm_count_branching", "internal/cbm/helpers.c", 471], ["cbm_cpp_stdlib_register", "internal/cbm/lsp/generated/cpp_stdlib_data.c", 66], ["cbm_cs_build_cross_registry", "internal/cbm/lsp/cs_lsp.c", 2923], ["cbm_csharp_stdlib_register", "internal/cbm/lsp/generated/cs_stdlib_data.c", 144], ["cbm_cypher_parse", "src/cypher/cypher.c", 2000], ["cbm_cypher_result_free", "src/cypher/cypher.c", 4394], ["cbm_default_worker_count", "src/foundation/system_info.c", 283], ["cbm_defs_push", "internal/cbm/cbm.c", 123], ["cbm_destroy_thread_parser", "internal/cbm/cbm.c", 387], ["cbm_detect_agents", "src/cli/cli.c", 1034], ["cbm_detect_cgroup_cpus", "src/foundation/system_info.c", 132], ["cbm_detect_cgroup_mem", "src/foundation/system_info.c", 176], ["cbm_detect_self_path", "src/cli/cli.c", 3249], ["cbm_detect_shell_rc", "src/cli/cli.c", 195], ["cbm_diag_record_query", "src/foundation/diagnostics.c", 41], ["cbm_diag_start", "src/foundation/diagnostics.c", 170], ["cbm_diag_stop", "src/foundation/diagnostics.c", 193], ["cbm_disambiguate_m", "src/discover/language.c", 996], ["cbm_discover_free", "src/discover/discover.c", 586], ["cbm_discover_free_excluded", "src/discover/discover.c", 597], ["cbm_download_to_file", "src/cli/cli.c", 2733], ["cbm_download_to_file_quiet", "src/cli/cli.c", 2738], ["cbm_embedded_lookup", "src/ui/embedded_stub.c", 15], ["cbm_enclosing_func_qn_cached", "internal/cbm/helpers.c", 794], ["cbm_ensure_case_insensitive", "src/store/store.c", 2176], ["cbm_ensure_path", "src/cli/cli.c", 2043], ["cbm_envaccess_push", "internal/cbm/cbm.c", 158], ["cbm_exec_no_shell", "src/foundation/compat_fs.c", 184], ["cbm_extract_binary_from_zip", "src/cli/cli.c", 2296], ["cbm_extract_calls", "internal/cbm/extract_calls.c", 802], ["cbm_extract_channels", "internal/cbm/extract_channels.c", 1056], ["cbm_extract_definitions", "internal/cbm/extract_defs.c", 5533], ["cbm_extract_env_accesses", "internal/cbm/extract_env_accesses.c", 170], ["cbm_extract_flags", "src/pipeline/pass_compile_commands.c", 120], ["cbm_extract_imports", "internal/cbm/extract_imports.c", 2735], ["cbm_extract_k8s", "internal/cbm/extract_k8s.c", 307], ["cbm_extract_like_hints", "src/store/store.c", 2107], ["cbm_extract_path_from_url", "src/traces/traces.c", 30], ["cbm_extract_semantic", "internal/cbm/extract_semantic.c", 280], ["cbm_extract_service_name", "src/traces/traces.c", 16], ["cbm_extract_type_assigns", "internal/cbm/extract_type_assigns.c", 198], ["cbm_extract_type_refs", "internal/cbm/extract_type_refs.c", 309], ["cbm_extract_unified", "internal/cbm/extract_unified.c", 832], ["cbm_extract_usages", "internal/cbm/extract_usages.c", 125], ["cbm_file_exists", "src/foundation/platform.c", 108], ["cbm_file_size", "src/foundation/platform.c", 128], ["cbm_find_child_by_kind", "internal/cbm/helpers.c", 296], ["cbm_find_cli", "src/cli/cli.c", 283], ["cbm_find_enclosing_func", "internal/cbm/helpers.c", 700], ["cbm_fqn_compute", "internal/cbm/helpers.c", 1045], ["cbm_fqn_folder", "internal/cbm/helpers.c", 1080], ["cbm_fqn_module", "internal/cbm/helpers.c", 1076], ["cbm_free_result", "internal/cbm/cbm.c", 824], ["cbm_free_tree", "internal/cbm/cbm.c", 836], ["cbm_free_tree_ptr", "internal/cbm/cbm.c", 843], ["cbm_gbuf_delete_by_file", "src/graph_buffer/graph_buffer.c", 723], ["cbm_gbuf_delete_by_label", "src/graph_buffer/graph_buffer.c", 686], ["cbm_gbuf_delete_edges_by_type", "src/graph_buffer/graph_buffer.c", 1012], ["cbm_gbuf_dump_to_sqlite", "src/graph_buffer/graph_buffer.c", 1394], ["cbm_gbuf_edge_count", "src/graph_buffer/graph_buffer.c", 1000], ["cbm_gbuf_edge_count_by_type", "src/graph_buffer/graph_buffer.c", 1004], ["cbm_gbuf_find_by_id", "src/graph_buffer/graph_buffer.c", 640], ["cbm_gbuf_find_by_qn", "src/graph_buffer/graph_buffer.c", 633], ["cbm_gbuf_flush_to_store", "src/graph_buffer/graph_buffer.c", 1485], ["cbm_gbuf_foreach_edge", "src/graph_buffer/graph_buffer.c", 891], ["cbm_gbuf_foreach_node", "src/graph_buffer/graph_buffer.c", 879], ["cbm_gbuf_free", "src/graph_buffer/graph_buffer.c", 410], ["cbm_gbuf_load_from_db", "src/graph_buffer/graph_buffer.c", 784], ["cbm_gbuf_merge", "src/graph_buffer/graph_buffer.c", 1129], ["cbm_gbuf_merge_into_store", "src/graph_buffer/graph_buffer.c", 1559], ["cbm_gbuf_new", "src/graph_buffer/graph_buffer.c", 375], ["cbm_gbuf_next_id", "src/graph_buffer/graph_buffer.c", 561], ["cbm_gbuf_node_count", "src/graph_buffer/graph_buffer.c", 681], ["cbm_gbuf_set_next_id", "src/graph_buffer/graph_buffer.c", 571], ["cbm_gbuf_store_vector", "src/graph_buffer/graph_buffer.c", 492], ["cbm_get_agent_instructions", "src/cli/cli.c", 1132], ["cbm_get_codex_instructions", "src/cli/cli.c", 516], ["cbm_get_files_preprocessed", "internal/cbm/cbm.c", 92], ["cbm_get_home_dir", "src/foundation/platform.c", 327], ["cbm_get_lsp_ns", "internal/cbm/cbm.c", 84], ["cbm_get_preprocess_ns", "internal/cbm/cbm.c", 88], ["cbm_get_profile", "internal/cbm/cbm.c", 78], ["cbm_get_skills", "src/cli/cli.c", 512], ["cbm_get_user_lang_config", "src/discover/userconfig.c", 35], ["cbm_getline", "src/foundation/compat.c", 131], ["cbm_git_context_branch_qn", "src/git/git_context.c", 269], ["cbm_git_context_free", "src/git/git_context.c", 194], ["cbm_git_context_props_json", "src/git/git_context.c", 347], ["cbm_git_context_resolve", "src/git/git_context.c", 210], ["cbm_git_free", "internal/cbm/cbm.c", 304], ["cbm_git_malloc", "internal/cbm/cbm.c", 294], ["cbm_git_realloc", "internal/cbm/cbm.c", 299], ["cbm_gitignore_free", "src/discover/gitignore.c", 372], ["cbm_gitignore_load", "src/discover/gitignore.c", 285], ["cbm_gitignore_matches", "src/discover/gitignore.c", 343], ["cbm_gitignore_parse", "src/discover/gitignore.c", 255], ["cbm_glob_to_like", "src/store/store.c", 2074], ["cbm_gmtime_r", "src/foundation/compat.h", 93], ["cbm_go_stdlib_register", "internal/cbm/lsp/generated/go_stdlib_data.c", 10], ["cbm_has_ancestor_kind", "internal/cbm/helpers.c", 432], ["cbm_has_config_extension", "src/pipeline/pass_configures.c", 99], ["cbm_has_ignored_suffix", "src/discover/discover.c", 155], ["cbm_hop_to_risk", "src/store/store.c", 2782], ["cbm_ht_clear", "src/foundation/hash_table.c", 134], ["cbm_ht_count", "src/foundation/hash_table.c", 120], ["cbm_ht_create", "src/foundation/hash_table.c", 44], ["cbm_ht_delete", "src/foundation/hash_table.c", 109], ["cbm_ht_foreach", "src/foundation/hash_table.c", 126], ["cbm_ht_free", "src/foundation/hash_table.c", 61], ["cbm_ht_get", "src/foundation/hash_table.c", 84], ["cbm_ht_get_key", "src/foundation/hash_table.c", 100], ["cbm_ht_has", "src/foundation/hash_table.c", 93], ["cbm_ht_set", "src/foundation/hash_table.c", 68], ["cbm_http_path_match", "src/ui/httpd.c", 557], ["cbm_http_query_param", "src/ui/httpd.c", 576], ["cbm_http_req_free", "src/ui/httpd.c", 464], ["cbm_httpd_accept", "src/ui/httpd.c", 185], ["cbm_httpd_close", "src/ui/httpd.c", 176], ["cbm_httpd_conn_close", "src/ui/httpd.c", 211], ["cbm_httpd_listen", "src/ui/httpd.c", 112], ["cbm_httpd_port", "src/ui/httpd.c", 167], ["cbm_httpd_read_request", "src/ui/httpd.c", 365], ["cbm_httpd_set_recv_deadline_ms", "src/ui/httpd.c", 171], ["cbm_impltrait_push", "internal/cbm/cbm.c", 178], ["cbm_imports_push", "internal/cbm/cbm.c", 133], ["cbm_infrabinding_push", "internal/cbm/cbm.c", 173], ["cbm_init", "internal/cbm/cbm.c", 363], ["cbm_install_editor_mcp", "src/cli/cli.c", 747], ["cbm_install_hook_gate_script", "src/cli/cli.c", 1866], ["cbm_install_session_reminder_script", "src/cli/cli.c", 1917], ["cbm_install_skills", "src/cli/cli.c", 580], ["cbm_install_vscode_mcp", "src/cli/cli.c", 826], ["cbm_install_zed_mcp", "src/cli/cli.c", 902], ["cbm_intern", "src/foundation/str_intern.c", 140], ["cbm_intern_bytes", "src/foundation/str_intern.c", 151], ["cbm_intern_count", "src/foundation/str_intern.c", 147], ["cbm_intern_create", "src/foundation/str_intern.c", 46], ["cbm_intern_free", "src/foundation/str_intern.c", 63], ["cbm_intern_n", "src/foundation/str_intern.c", 98], ["cbm_is_cloudbuild_file", "src/pipeline/pass_infrascan.c", 179], ["cbm_is_compose_file", "src/pipeline/pass_infrascan.c", 159], ["cbm_is_dir", "src/foundation/platform.c", 118], ["cbm_is_dockerfile", "src/pipeline/pass_infrascan.c", 139], ["cbm_is_env_file", "src/pipeline/pass_infrascan.c", 196], ["cbm_is_env_var_name", "src/pipeline/pass_configures.c", 13], ["cbm_is_exported", "internal/cbm/helpers.c", 192], ["cbm_is_k8s_manifest", "src/pipeline/pass_infrascan.c", 228], ["cbm_is_keyword", "internal/cbm/helpers.c", 149], ["cbm_is_kustomize_file", "src/pipeline/pass_infrascan.c", 216], ["cbm_is_loop_node_type", "internal/cbm/helpers.c", 479], ["cbm_is_module_level", "internal/cbm/helpers.c", 989], ["cbm_is_module_level_p", "internal/cbm/helpers.c", 953], ["cbm_is_secret_binding", "src/pipeline/pass_infrascan.c", 314], ["cbm_is_secret_value", "src/pipeline/pass_infrascan.c", 264], ["cbm_is_shell_script", "src/pipeline/pass_infrascan.c", 240], ["cbm_is_test_file", "internal/cbm/helpers.c", 246], ["cbm_is_test_file_path", "src/store/store.c", 3166], ["cbm_is_test_func_name", "src/pipeline/pass_tests.c", 115], ["cbm_is_test_path", "src/pipeline/pass_tests.c", 61], ["cbm_is_trackable_file", "src/pipeline/pass_githistory.c", 49], ["cbm_java_stdlib_register", "internal/cbm/lsp/generated/java_stdlib_data.c", 90], ["cbm_json_escape", "src/foundation/str_util.c", 296], ["cbm_jsonrpc_format_error", "src/mcp/mcp.c", 223], ["cbm_jsonrpc_format_response", "src/mcp/mcp.c", 185], ["cbm_jsonrpc_parse", "src/mcp/mcp.c", 122], ["cbm_jsonrpc_request_free", "src/mcp/mcp.c", 170], ["cbm_kill_other_instances", "src/cli/cli.c", 2759], ["cbm_kind_in_set", "internal/cbm/helpers.c", 402], ["cbm_kind_in_set_free_cache", "internal/cbm/helpers.c", 421], ["cbm_kotlin_default_import_packages", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 81], ["cbm_kotlin_stdlib_register", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 289], ["cbm_lang_spec", "internal/cbm/lang_specs.c", 2545], ["cbm_language_for_extension", "src/discover/language.c", 842], ["cbm_language_for_filename", "src/discover/language.c", 864], ["cbm_language_name", "src/discover/language.c", 925], ["cbm_layout_free", "src/ui/layout3d.c", 604], ["cbm_layout_to_json", "src/ui/layout3d.c", 620], ["cbm_lex", "src/cypher/cypher.c", 355], ["cbm_lex_free", "src/cypher/cypher.c", 416], ["cbm_list_indexes", "src/cli/cli.c", 2374], ["cbm_load_path_aliases", "src/pipeline/path_alias.c", 383], ["cbm_log", "src/foundation/log.c", 81], ["cbm_log_get_level", "src/foundation/log.c", 62], ["cbm_log_init_from_env", "src/foundation/log.c", 18], ["cbm_log_int", "src/foundation/log.c", 117], ["cbm_log_set_level", "src/foundation/log.c", 58], ["cbm_log_set_sink", "src/foundation/log.c", 54], ["cbm_lsh_free", "src/simhash/minhash.c", 525], ["cbm_lsh_insert", "src/simhash/minhash.c", 373], ["cbm_lsh_new", "src/simhash/minhash.c", 368], ["cbm_lsp_collect_children", "internal/cbm/lsp/lsp_node_iter.h", 24], ["cbm_lz4_bound", "internal/cbm/lz4_store.c", 18], ["cbm_lz4_compress_hc", "internal/cbm/lz4_store.c", 9], ["cbm_lz4_decompress", "internal/cbm/lz4_store.c", 14], ["cbm_macos_adhoc_sign", "src/cli/cli.c", 2746], ["cbm_macro_extraction_enabled", "internal/cbm/cbm.c", 54], ["cbm_matches_fast_pattern", "src/discover/discover.c", 191], ["cbm_mcp_get_arguments", "src/mcp/mcp.c", 577], ["cbm_mcp_get_bool_arg", "src/mcp/mcp.c", 622], ["cbm_mcp_get_int_arg", "src/mcp/mcp.c", 607], ["cbm_mcp_get_string_arg", "src/mcp/mcp.c", 592], ["cbm_mcp_get_tool_name", "src/mcp/mcp.c", 562], ["cbm_mcp_initialize_response", "src/mcp/mcp.c", 516], ["cbm_mcp_server_active_pipeline", "src/mcp/mcp.c", 755], ["cbm_mcp_server_evict_idle", "src/mcp/mcp.c", 727], ["cbm_mcp_server_free", "src/mcp/mcp.c", 708], ["cbm_mcp_server_has_cached_store", "src/mcp/mcp.c", 751], ["cbm_mcp_server_new", "src/mcp/mcp.c", 665], ["cbm_mcp_server_set_config", "src/mcp/mcp.c", 702], ["cbm_mcp_server_set_project", "src/mcp/mcp.c", 688], ["cbm_mcp_server_set_watcher", "src/mcp/mcp.c", 696], ["cbm_mcp_server_store", "src/mcp/mcp.c", 684], ["cbm_mcp_text_result", "src/mcp/mcp.c", 245], ["cbm_mcp_tools_list", "src/mcp/mcp.c", 474], ["cbm_mem_budget", "src/foundation/mem.c", 157], ["cbm_mem_collect", "src/foundation/mem.c", 174], ["cbm_mem_init", "src/foundation/mem.c", 109], ["cbm_mem_over_budget", "src/foundation/mem.c", 161], ["cbm_mem_peak_rss", "src/foundation/mem.c", 147], ["cbm_mem_rss", "src/foundation/mem.c", 136], ["cbm_mem_worker_budget", "src/foundation/mem.c", 167], ["cbm_memmem", "internal/cbm/helpers.c", 33], ["cbm_minhash_compute", "src/simhash/minhash.c", 249], ["cbm_minhash_from_hex", "src/simhash/minhash.c", 297], ["cbm_minhash_jaccard", "src/simhash/minhash.c", 269], ["cbm_minhash_to_hex", "src/simhash/minhash.c", 284], ["cbm_mkdir_p", "src/foundation/compat_fs.c", 133], ["cbm_mkdtemp", "src/foundation/compat.c", 57], ["cbm_mkstemp", "src/foundation/compat.c", 92], ["cbm_mmap_read", "src/foundation/platform.c", 42], ["cbm_munmap", "src/foundation/platform.c", 82], ["cbm_mutex_destroy", "src/foundation/compat_thread.c", 119], ["cbm_mutex_init", "src/foundation/compat_thread.c", 107], ["cbm_mutex_lock", "src/foundation/compat_thread.c", 111], ["cbm_mutex_unlock", "src/foundation/compat_thread.c", 115], ["cbm_nanosleep", "src/foundation/compat.h", 81], ["cbm_node_free_fields", "src/store/store.c", 5506], ["cbm_node_text", "internal/cbm/helpers.c", 52], ["cbm_normalize_config_key", "src/pipeline/pass_configures.c", 64], ["cbm_normalize_path_sep", "src/foundation/platform.c", 145], ["cbm_now_ms", "src/foundation/platform.c", 98], ["cbm_now_ns", "src/foundation/platform.c", 89], ["cbm_nprocs", "src/foundation/platform.c", 102], ["cbm_opendir", "src/foundation/compat_fs.c", 35], ["cbm_parallel_for", "src/pipeline/worker_pool.c", 96], ["cbm_parse", "src/cypher/cypher.c", 1825], ["cbm_parse_dockerfile_source", "src/pipeline/pass_infrascan.c", 543], ["cbm_parse_dotenv_source", "src/pipeline/pass_infrascan.c", 635], ["cbm_parse_duration", "src/traces/traces.c", 66], ["cbm_parse_free", "src/cypher/cypher.c", 1888], ["cbm_parse_helm_chart", "src/pipeline/pass_infrascan.c", 1275], ["cbm_parse_hunks", "src/pipeline/pass_gitdiff.c", 154], ["cbm_parse_name_status", "src/pipeline/pass_gitdiff.c", 87], ["cbm_parse_range", "src/pipeline/pass_gitdiff.c", 19], ["cbm_parse_return_type_text", "internal/cbm/lsp/go_lsp.c", 1634], ["cbm_parse_shell_source", "src/pipeline/pass_infrascan.c", 851], ["cbm_parse_terraform_source", "src/pipeline/pass_infrascan.c", 1169], ["cbm_path_alias_collection_free", "src/pipeline/path_alias.c", 243], ["cbm_path_alias_resolve", "src/pipeline/path_alias.c", 266], ["cbm_path_base", "src/foundation/str_util.c", 99], ["cbm_path_dir", "src/foundation/str_util.c", 112], ["cbm_path_ext", "src/foundation/str_util.c", 75], ["cbm_path_join", "src/foundation/str_util.c", 17], ["cbm_path_join_n", "src/foundation/str_util.c", 60], ["cbm_pclose", "src/foundation/compat_fs.c", 129], ["cbm_php_stdlib_register", "internal/cbm/lsp/generated/php_stdlib_data.c", 47], ["cbm_pipeline_cancel", "src/pipeline/pipeline.c", 194], ["cbm_pipeline_cancelled_ptr", "src/pipeline/pipeline.c", 208], ["cbm_pipeline_check_cancel", "src/pipeline/pipeline_internal.h", 132], ["cbm_pipeline_create_route_nodes", "src/pipeline/pass_route_nodes.c", 1077], ["cbm_pipeline_fqn_compute", "src/pipeline/fqn.c", 100], ["cbm_pipeline_fqn_folder", "src/pipeline/fqn.c", 290], ["cbm_pipeline_fqn_module", "src/pipeline/fqn.c", 125], ["cbm_pipeline_free", "src/pipeline/pipeline.c", 172], ["cbm_pipeline_get_excluded", "src/pipeline/pipeline.c", 216], ["cbm_pipeline_get_mode", "src/pipeline/pipeline.c", 212], ["cbm_pipeline_get_pkgmap", "src/pipeline/pipeline.c", 106], ["cbm_pipeline_githistory_apply", "src/pipeline/pass_githistory.c", 547], ["cbm_pipeline_githistory_compute", "src/pipeline/pass_githistory.c", 462], ["cbm_pipeline_implements_go", "src/pipeline/pass_semantic.c", 295], ["cbm_pipeline_lock", "src/pipeline/pipeline.c", 61], ["cbm_pipeline_namespace_map_free", "src/pipeline/pass_pkgmap.c", 1660], ["cbm_pipeline_pass_calls", "src/pipeline/pass_calls.c", 398], ["cbm_pipeline_pass_complexity", "src/pipeline/pass_complexity.c", 161], ["cbm_pipeline_pass_configlink", "src/pipeline/pass_configlink.c", 357], ["cbm_pipeline_pass_decorator_tags", "src/pipeline/pass_enrichment.c", 370], ["cbm_pipeline_pass_githistory", "src/pipeline/pass_githistory.c", 608], ["cbm_pipeline_pass_k8s", "src/pipeline/pass_k8s.c", 623], ["cbm_pipeline_pass_semantic_edges", "src/pipeline/pass_semantic_edges.c", 1196], ["cbm_pipeline_pass_similarity", "src/pipeline/pass_similarity.c", 251], ["cbm_pipeline_pass_tests", "src/pipeline/pass_tests.c", 285], ["cbm_pipeline_project_name", "src/pipeline/pipeline.c", 200], ["cbm_pipeline_repo_path", "src/pipeline/pipeline.c", 204], ["cbm_pipeline_resolve_relative_import", "src/pipeline/fqn.c", 277], ["cbm_pipeline_run", "src/pipeline/pipeline.c", 1018], ["cbm_pipeline_set_persistence", "src/pipeline/pipeline.c", 166], ["cbm_pipeline_set_pkgmap", "src/pipeline/pipeline.c", 110], ["cbm_pipeline_try_lock", "src/pipeline/pipeline.c", 55], ["cbm_pipeline_unlock", "src/pipeline/pipeline.c", 68], ["cbm_pkg_entries_free", "src/pipeline/pass_pkgmap.c", 121], ["cbm_pkg_entries_init", "src/pipeline/pass_pkgmap.c", 98], ["cbm_pkgmap_free", "src/pipeline/pass_pkgmap.c", 1003], ["cbm_pkgmap_scan_repo", "src/pipeline/pass_pkgmap.c", 923], ["cbm_popen", "src/foundation/compat_fs.c", 125], ["cbm_profile_enable", "src/foundation/profile.c", 29], ["cbm_profile_init", "src/foundation/profile.c", 22], ["cbm_profile_now", "src/foundation/profile.c", 33], ["cbm_progress_sink_fini", "src/cli/progress_sink.c", 56], ["cbm_progress_sink_fn", "src/cli/progress_sink.c", 203], ["cbm_progress_sink_init", "src/cli/progress_sink.c", 48], ["cbm_project_free_fields", "src/store/store.c", 5537], ["cbm_project_name_from_path", "src/pipeline/fqn.c", 322], ["cbm_pxc_build_module_def_index", "src/pipeline/pass_lsp_cross.c", 533], ["cbm_pxc_free_module_def_index", "src/pipeline/pass_lsp_cross.c", 580], ["cbm_pxc_has_cross_lsp", "src/pipeline/pass_lsp_cross.c", 281], ["cbm_py_build_cross_registry", "internal/cbm/lsp/py_lsp.c", 3518], ["cbm_python_stdlib_register", "internal/cbm/lsp/py_lsp.c", 3629], ["cbm_qn_to_package", "src/store/store.c", 3107], ["cbm_qn_to_top_package", "src/store/store.c", 3145], ["cbm_query_free", "src/cypher/cypher.c", 1979], ["cbm_readdir", "src/foundation/compat_fs.c", 78], ["cbm_regcomp", "src/foundation/compat_regex.c", 33], ["cbm_regfree", "src/foundation/compat_regex.c", 58], ["cbm_registry_add_func", "internal/cbm/lsp/type_registry.c", 137], ["cbm_registry_add_type", "internal/cbm/lsp/type_registry.c", 153], ["cbm_registry_exists", "src/pipeline/registry.c", 431], ["cbm_registry_finalize", "internal/cbm/lsp/type_registry.c", 126], ["cbm_registry_finalize_into", "internal/cbm/lsp/type_registry.c", 118], ["cbm_registry_find_ending_with", "src/pipeline/registry.c", 803], ["cbm_registry_free", "src/pipeline/registry.c", 390], ["cbm_registry_import_map_cache_begin", "src/pipeline/registry.c", 231], ["cbm_registry_import_map_cache_end", "src/pipeline/registry.c", 248], ["cbm_registry_init", "internal/cbm/lsp/type_registry.c", 132], ["cbm_registry_label_of", "src/pipeline/registry.c", 438], ["cbm_registry_new", "src/pipeline/registry.c", 361], ["cbm_registry_reach_cache_begin", "src/pipeline/registry.c", 199], ["cbm_registry_reach_cache_end", "src/pipeline/registry.c", 211], ["cbm_registry_resolve_cache_begin", "src/pipeline/registry.c", 283], ["cbm_registry_resolve_cache_end", "src/pipeline/registry.c", 294], ["cbm_registry_size", "src/pipeline/registry.c", 461], ["cbm_remove_antigravity_mcp", "src/cli/cli.c", 1636], ["cbm_remove_claude_hooks", "src/cli/cli.c", 1851], ["cbm_remove_codex_hooks", "src/cli/cli.c", 1529], ["cbm_remove_codex_mcp", "src/cli/cli.c", 1393], ["cbm_remove_editor_mcp", "src/cli/cli.c", 792], ["cbm_remove_gemini_hooks", "src/cli/cli.c", 2009], ["cbm_remove_gemini_session_hooks", "src/cli/cli.c", 2033], ["cbm_remove_indexes", "src/cli/cli.c", 2398], ["cbm_remove_instructions", "src/cli/cli.c", 1275], ["cbm_remove_old_monolithic_skill", "src/cli/cli.c", 656], ["cbm_remove_opencode_mcp", "src/cli/cli.c", 1597], ["cbm_remove_session_hooks", "src/cli/cli.c", 1979], ["cbm_remove_skills", "src/cli/cli.c", 630], ["cbm_remove_vscode_mcp", "src/cli/cli.c", 868], ["cbm_remove_zed_mcp", "src/cli/cli.c", 946], ["cbm_replace_binary", "src/cli/cli.c", 355], ["cbm_reset_profile", "internal/cbm/cbm.c", 97], ["cbm_reset_thread_parser", "internal/cbm/cbm.c", 378], ["cbm_resolve_cache_dir", "src/foundation/platform.c", 404], ["cbm_resolve_hook_command", "src/cli/cli.c", 1020], ["cbm_resolvedcall_push", "internal/cbm/cbm.c", 183], ["cbm_risk_label", "src/store/store.c", 2795], ["cbm_rmdir", "src/foundation/compat_fs.c", 174], ["cbm_rust_crates_register", "internal/cbm/lsp/generated/rust_crates_seed.c", 53], ["cbm_rust_stdlib_register", "internal/cbm/lsp/generated/rust_stdlib_data.c", 68], ["cbm_rust_synth_proc_macro_edges", "internal/cbm/lsp/rust_proc_macros.c", 122], ["cbm_rw_push", "internal/cbm/cbm.c", 148], ["cbm_safe_getenv", "src/foundation/platform.c", 306], ["cbm_scan_project_env_urls", "src/pipeline/pass_envscan.c", 396], ["cbm_scope_bind", "internal/cbm/lsp/scope.c", 36], ["cbm_scope_lookup", "internal/cbm/lsp/scope.c", 60], ["cbm_scope_pop", "internal/cbm/lsp/scope.c", 15], ["cbm_scope_push", "internal/cbm/lsp/scope.c", 4], ["cbm_sem_corpus_add_doc", "src/semantic/semantic.c", 551], ["cbm_sem_corpus_doc_count", "src/semantic/semantic.c", 1468], ["cbm_sem_corpus_finalize", "src/semantic/semantic.c", 1378], ["cbm_sem_corpus_free", "src/semantic/semantic.c", 1497], ["cbm_sem_corpus_idf", "src/semantic/semantic.c", 1442], ["cbm_sem_corpus_new", "src/semantic/semantic.c", 543], ["cbm_sem_corpus_ri_vec", "src/semantic/semantic.c", 1457], ["cbm_sem_corpus_token_count", "src/semantic/semantic.c", 1472], ["cbm_sem_cosine", "src/semantic/semantic.c", 372], ["cbm_sem_ensure_ready", "src/semantic/semantic.c", 433], ["cbm_sem_get_config", "src/semantic/semantic.c", 109], ["cbm_sem_is_enabled", "src/semantic/semantic.c", 134], ["cbm_sem_normalize", "src/semantic/semantic.c", 468], ["cbm_sem_proximity", "src/semantic/semantic.c", 1519], ["cbm_sem_random_index", "src/semantic/semantic.c", 437], ["cbm_sem_tokenize", "src/semantic/semantic.c", 166], ["cbm_sem_vec_add_scaled", "src/semantic/semantic.c", 486], ["cbm_service_pattern_broker", "internal/cbm/service_patterns.c", 668], ["cbm_service_pattern_cache_begin", "internal/cbm/service_patterns.c", 582], ["cbm_service_pattern_cache_end", "internal/cbm/service_patterns.c", 588], ["cbm_service_pattern_http_method", "internal/cbm/service_patterns.c", 640], ["cbm_service_pattern_match", "internal/cbm/service_patterns.c", 600], ["cbm_service_pattern_route_method", "internal/cbm/service_patterns.c", 654], ["cbm_service_patterns_init", "internal/cbm/service_patterns.c", 596], ["cbm_set_macro_extraction", "internal/cbm/cbm.c", 51], ["cbm_set_user_lang_config", "src/discover/userconfig.c", 31], ["cbm_setenv", "src/foundation/compat.h", 118], ["cbm_should_skip_dir", "src/discover/discover.c", 136], ["cbm_should_skip_filename", "src/discover/discover.c", 177], ["cbm_shutdown", "internal/cbm/cbm.c", 396], ["cbm_skip_pending_byte", "internal/cbm/sqlite_writer.c", 47], ["cbm_slab_destroy_thread", "src/foundation/slab_alloc.c", 214], ["cbm_slab_install", "src/foundation/slab_alloc.c", 202], ["cbm_slab_reclaim", "src/foundation/slab_alloc.c", 232], ["cbm_slab_reset_thread", "src/foundation/slab_alloc.c", 206], ["cbm_slab_test_calloc", "src/foundation/slab_alloc.c", 257], ["cbm_slab_test_free", "src/foundation/slab_alloc.c", 251], ["cbm_slab_test_malloc", "src/foundation/slab_alloc.c", 248], ["cbm_slab_test_realloc", "src/foundation/slab_alloc.c", 254], ["cbm_split_camel_case", "src/pipeline/pass_enrichment.c", 45], ["cbm_split_command", "src/pipeline/pass_compile_commands.c", 30], ["cbm_sqlite_free", "internal/cbm/cbm.c", 270], ["cbm_sqlite_malloc", "internal/cbm/cbm.c", 267], ["cbm_sqlite_meminit", "internal/cbm/cbm.c", 282], ["cbm_sqlite_memshutdown", "internal/cbm/cbm.c", 286], ["cbm_sqlite_realloc", "internal/cbm/cbm.c", 273], ["cbm_sqlite_roundup", "internal/cbm/cbm.c", 279], ["cbm_sqlite_size", "internal/cbm/cbm.c", 276], ["cbm_sqlite_transient_destructor", "src/store/store.c", 392], ["cbm_store_adr_delete", "src/store/store.c", 5385], ["cbm_store_adr_free", "src/store/store.c", 5462], ["cbm_store_adr_get", "src/store/store.c", 5362], ["cbm_store_adr_store", "src/store/store.c", 5339], ["cbm_store_architecture_free", "src/store/store.c", 5016], ["cbm_store_begin", "src/store/store.c", 806], ["cbm_store_begin_bulk", "src/store/store.c", 820], ["cbm_store_check_integrity", "src/store/store.c", 664], ["cbm_store_checkpoint", "src/store/store.c", 859], ["cbm_store_close", "src/store/store.c", 739], ["cbm_store_commit", "src/store/store.c", 810], ["cbm_store_count_edges", "src/store/store.c", 1504], ["cbm_store_count_edges_by_type", "src/store/store.c", 1521], ["cbm_store_count_nodes", "src/store/store.c", 1267], ["cbm_store_count_vectors", "src/store/store.c", 5567], ["cbm_store_create_indexes", "src/store/store.c", 853], ["cbm_store_delete_edges_by_project", "src/store/store.c", 1537], ["cbm_store_delete_edges_by_type", "src/store/store.c", 1552], ["cbm_store_delete_file_hash", "src/store/store.c", 1647], ["cbm_store_delete_file_hashes", "src/store/store.c", 1664], ["cbm_store_delete_nodes_by_file", "src/store/store.c", 1299], ["cbm_store_delete_nodes_by_label", "src/store/store.c", 1315], ["cbm_store_delete_nodes_by_project", "src/store/store.c", 1284], ["cbm_store_delete_project", "src/store/store.c", 1016], ["cbm_store_drop_indexes", "src/store/store.c", 842], ["cbm_store_dump_to_file", "src/store/store.c", 883], ["cbm_store_end_bulk", "src/store/store.c", 834], ["cbm_store_error", "src/store/store.c", 800], ["cbm_store_exec", "src/store/store.c", 796], ["cbm_store_find_architecture_docs", "src/store/store.c", 5475], ["cbm_store_find_node_by_id", "src/store/store.c", 1080], ["cbm_store_find_node_by_qn_any", "src/store/store.c", 1122], ["cbm_store_free_edges", "src/store/store.c", 5525], ["cbm_store_free_file_hashes", "src/store/store.c", 5553], ["cbm_store_free_nodes", "src/store/store.c", 5515], ["cbm_store_free_projects", "src/store/store.c", 5543], ["cbm_store_free_vector_results", "src/store/store.c", 5585], ["cbm_store_get_db", "src/store/store.c", 792], ["cbm_store_get_project", "src/store/store.c", 968], ["cbm_store_get_schema", "src/store/store.c", 3051], ["cbm_store_get_schema_counts", "src/store/store.c", 3055], ["cbm_store_insert_edge", "src/store/store.c", 1356], ["cbm_store_insert_edge_batch", "src/store/store.c", 1570], ["cbm_store_list_files", "src/store/store.c", 1814], ["cbm_store_list_projects", "src/store/store.c", 987], ["cbm_store_node_degree", "src/store/store.c", 1781], ["cbm_store_open", "src/store/store.c", 716], ["cbm_store_open_memory", "src/store/store.c", 607], ["cbm_store_open_path", "src/store/store.c", 611], ["cbm_store_open_path_query", "src/store/store.c", 618], ["cbm_store_resolve_mmap_size", "src/store/store.c", 307], ["cbm_store_restore_from", "src/store/store.c", 2052], ["cbm_store_rollback", "src/store/store.c", 814], ["cbm_store_schema_free", "src/store/store.c", 3059], ["cbm_store_search", "src/store/store.c", 2437], ["cbm_store_search_free", "src/store/store.c", 2542], ["cbm_store_traverse_free", "src/store/store.c", 2745], ["cbm_store_upsert_file_hash_batch", "src/store/store.c", 1986], ["cbm_store_upsert_node", "src/store/store.c", 1034], ["cbm_store_upsert_project", "src/store/store.c", 944], ["cbm_str_contains", "src/foundation/str_util.c", 148], ["cbm_str_ends_with", "src/foundation/str_util.c", 136], ["cbm_str_replace_char", "src/foundation/str_util.c", 174], ["cbm_str_split", "src/foundation/str_util.c", 210], ["cbm_str_starts_with", "src/foundation/str_util.c", 128], ["cbm_str_strip_ext", "src/foundation/str_util.c", 190], ["cbm_str_tolower", "src/foundation/str_util.c", 158], ["cbm_strcasestr", "src/foundation/compat.c", 41], ["cbm_stringref_push", "internal/cbm/cbm.c", 168], ["cbm_strip_case_flag", "src/store/store.c", 2191], ["cbm_strndup", "src/foundation/compat.c", 21], ["cbm_system_info", "src/foundation/system_info.c", 267], ["cbm_thread_create", "src/foundation/compat_thread.c", 36], ["cbm_thread_detach", "src/foundation/compat_thread.c", 63], ["cbm_thread_join", "src/foundation/compat_thread.c", 54], ["cbm_throws_push", "internal/cbm/cbm.c", 143], ["cbm_timeout_cb", "internal/cbm/cbm.c", 214], ["cbm_tmpdir", "src/foundation/compat.h", 140], ["cbm_tokenize_decorator", "src/pipeline/pass_enrichment.c", 100], ["cbm_ts_build_cross_registry", "internal/cbm/lsp/ts_lsp.c", 4962], ["cbm_ts_language", "internal/cbm/lang_specs.c", 2552], ["cbm_ts_stdlib_register", "internal/cbm/lsp/ts_lsp.c", 3227], ["cbm_type_alias", "internal/cbm/lsp/type_rep.c", 199], ["cbm_type_builtin", "internal/cbm/lsp/type_rep.c", 118], ["cbm_type_channel", "internal/cbm/lsp/type_rep.c", 57], ["cbm_type_deref", "internal/cbm/lsp/type_rep.c", 501], ["cbm_type_elem", "internal/cbm/lsp/type_rep.c", 512], ["cbm_type_equal", "internal/cbm/lsp/type_rep.c", 573], ["cbm_type_indexed", "internal/cbm/lsp/type_rep.c", 398], ["cbm_type_infer", "internal/cbm/lsp/type_rep.c", 476], ["cbm_type_intersection", "internal/cbm/lsp/type_rep.c", 367], ["cbm_type_is_interface", "internal/cbm/lsp/type_rep.c", 541], ["cbm_type_is_module", "internal/cbm/lsp/type_rep.c", 561], ["cbm_type_is_pointer", "internal/cbm/lsp/type_rep.c", 545], ["cbm_type_is_protocol", "internal/cbm/lsp/type_rep.c", 557], ["cbm_type_is_reference", "internal/cbm/lsp/type_rep.c", 549], ["cbm_type_is_union", "internal/cbm/lsp/type_rep.c", 553], ["cbm_type_is_unknown", "internal/cbm/lsp/type_rep.c", 531], ["cbm_type_keyof", "internal/cbm/lsp/type_rep.c", 409], ["cbm_type_literal", "internal/cbm/lsp/type_rep.c", 290], ["cbm_type_map", "internal/cbm/lsp/type_rep.c", 46], ["cbm_type_module", "internal/cbm/lsp/type_rep.c", 333], ["cbm_type_named", "internal/cbm/lsp/type_rep.c", 16], ["cbm_type_optional", "internal/cbm/lsp/type_rep.c", 282], ["cbm_type_pointer", "internal/cbm/lsp/type_rep.c", 26], ["cbm_type_protocol_satisfied_by", "internal/cbm/lsp/type_rep.c", 712], ["cbm_type_reference", "internal/cbm/lsp/type_rep.c", 157], ["cbm_type_resolve_alias", "internal/cbm/lsp/type_rep.c", 743], ["cbm_type_rvalue_ref", "internal/cbm/lsp/type_rep.c", 167], ["cbm_type_slice", "internal/cbm/lsp/type_rep.c", 36], ["cbm_type_ts_literal", "internal/cbm/lsp/type_rep.c", 387], ["cbm_type_tuple", "internal/cbm/lsp/type_rep.c", 128], ["cbm_type_type_param", "internal/cbm/lsp/type_rep.c", 147], ["cbm_type_typeof_query", "internal/cbm/lsp/type_rep.c", 419], ["cbm_type_union", "internal/cbm/lsp/type_rep.c", 233], ["cbm_type_unknown", "internal/cbm/lsp/type_rep.c", 12], ["cbm_typeassign_push", "internal/cbm/cbm.c", 163], ["cbm_typerefs_push", "internal/cbm/cbm.c", 153], ["cbm_ui_config_load", "src/ui/config.c", 33], ["cbm_ui_config_path", "src/ui/config.c", 23], ["cbm_ui_config_save", "src/ui/config.c", 96], ["cbm_ui_log_append", "src/ui/http_server.c", 173], ["cbm_ui_log_init", "src/ui/http_server.c", 154], ["cbm_unlink", "src/foundation/compat_fs.c", 164], ["cbm_unsetenv", "src/foundation/compat.h", 122], ["cbm_upsert_antigravity_mcp", "src/cli/cli.c", 1631], ["cbm_upsert_claude_hooks", "src/cli/cli.c", 1838], ["cbm_upsert_codex_hooks", "src/cli/cli.c", 1491], ["cbm_upsert_codex_mcp", "src/cli/cli.c", 1326], ["cbm_upsert_gemini_hooks", "src/cli/cli.c", 1999], ["cbm_upsert_gemini_session_hooks", "src/cli/cli.c", 2024], ["cbm_upsert_instructions", "src/cli/cli.c", 1196], ["cbm_upsert_opencode_mcp", "src/cli/cli.c", 1551], ["cbm_upsert_session_hooks", "src/cli/cli.c", 1963], ["cbm_usages_push", "internal/cbm/cbm.c", 138], ["cbm_userconfig_free", "src/discover/userconfig.c", 378], ["cbm_userconfig_load", "src/discover/userconfig.c", 286], ["cbm_userconfig_lookup", "src/discover/userconfig.c", 366], ["cbm_utf8_to_wide", "src/foundation/win_utf8.h", 13], ["cbm_validate_project_name", "src/foundation/str_util.c", 274], ["cbm_validate_shell_arg", "src/foundation/str_util.c", 246], ["cbm_vmem_alloc", "src/foundation/vmem.c", 130], ["cbm_vmem_allocated", "src/foundation/vmem.c", 175], ["cbm_vmem_budget", "src/foundation/vmem.c", 183], ["cbm_vmem_free", "src/foundation/vmem.c", 158], ["cbm_vmem_init", "src/foundation/vmem.c", 109], ["cbm_vmem_over_budget", "src/foundation/vmem.c", 187], ["cbm_vmem_peak", "src/foundation/vmem.c", 179], ["cbm_vmem_worker_budget", "src/foundation/vmem.c", 191], ["cbm_watcher_free", "src/watcher/watcher.c", 271], ["cbm_watcher_new", "src/watcher/watcher.c", 253], ["cbm_watcher_poll_interval_ms", "src/watcher/watcher.c", 82], ["cbm_watcher_poll_once", "src/watcher/watcher.c", 478], ["cbm_watcher_run", "src/watcher/watcher.c", 521], ["cbm_watcher_stop", "src/watcher/watcher.c", 515], ["cbm_watcher_touch", "src/watcher/watcher.c", 334], ["cbm_watcher_unwatch", "src/watcher/watcher.c", 316], ["cbm_watcher_watch", "src/watcher/watcher.c", 285], ["cbm_watcher_watch_count", "src/watcher/watcher.c", 347], ["cbm_wide_to_utf8", "src/foundation/win_utf8.h", 28], ["cbm_writer_append_nodes", "internal/cbm/sqlite_writer.c", 2213], ["cbm_writer_open", "internal/cbm/sqlite_writer.c", 2196], ["cbm_yaml_free", "src/foundation/yaml.c", 71], ["cbm_yaml_get_bool", "src/foundation/yaml.c", 388], ["cbm_yaml_get_float", "src/foundation/yaml.c", 375], ["cbm_yaml_get_str", "src/foundation/yaml.c", 367], ["cbm_yaml_has", "src/foundation/yaml.c", 421], ["cbm_yaml_parse", "src/foundation/yaml.c", 253], ["cbm_zstd_compress", "internal/cbm/zstd_store.c", 9], ["cbm_zstd_compress_bound", "internal/cbm/zstd_store.c", 25], ["cbm_zstd_decompress", "internal/cbm/zstd_store.c", 17], ["check", "src/cypher/cypher.c", 453], ["check_already_latest", "src/cli/cli.c", 3905], ["check_cancel", "src/pipeline/pipeline.c", 239], ["check_changes", "src/watcher/watcher.c", 386], ["check_pressure", "src/foundation/mem.c", 76], ["child_by_kind", "internal/cbm/lsp/java_lsp.c", 202], ["child_center", "src/ui/layout3d.c", 143], ["child_named", "internal/cbm/lsp/php_lsp.c", 61], ["ci_strstr", "src/pipeline/pass_infrascan.c", 67], ["class_has_magic_call", "internal/cbm/lsp/php_lsp.c", 406], ["class_label_for_kind", "internal/cbm/extract_defs.c", 2208], ["class_qn_for_node", "internal/cbm/lsp/php_lsp.c", 2846], ["class_super_qn", "internal/cbm/lsp/java_lsp.c", 1614], ["classify_relative_import", "src/pipeline/fqn.c", 188], ["clean_json_array_inner", "src/pipeline/pass_infrascan.c", 327], ["clean_type_name", "internal/cbm/extract_type_refs.c", 48], ["cli_print_mcp_result", "src/main.c", 188], ["cli_strip_flag", "src/main.c", 217], ["cluster_add_pkg", "src/store/store.c", 4675], ["cluster_id_cmp", "src/store/store.c", 4662], ["cluster_id_index", "src/store/store.c", 4669], ["cluster_rank_cmp", "src/store/store.c", 4774], ["cmp_alias_entry_by_specificity", "src/pipeline/path_alias.c", 90], ["cmp_dump_vectors_by_id", "src/graph_buffer/graph_buffer.c", 1204], ["cmp_edge_by_proj_source_type", "internal/cbm/sqlite_writer.c", 1480], ["cmp_edge_by_proj_target_type", "internal/cbm/sqlite_writer.c", 1465], ["cmp_edge_by_source_type", "internal/cbm/sqlite_writer.c", 1424], ["cmp_edge_by_src_tgt_type", "internal/cbm/sqlite_writer.c", 1519], ["cmp_edge_by_target_type", "internal/cbm/sqlite_writer.c", 1439], ["cmp_edge_by_type", "internal/cbm/sqlite_writer.c", 1454], ["cmp_edge_by_url_path", "internal/cbm/sqlite_writer.c", 1495], ["cmp_i64", "internal/cbm/sqlite_writer.c", 1354], ["cmp_int64", "src/traces/traces.c", 124], ["cmp_node_by_file", "internal/cbm/sqlite_writer.c", 1400], ["cmp_node_by_label", "internal/cbm/sqlite_writer.c", 1380], ["cmp_node_by_name", "internal/cbm/sqlite_writer.c", 1390], ["cmp_node_by_qn", "internal/cbm/sqlite_writer.c", 1410], ["cmp_node_id_entry", "src/ui/layout3d.c", 360], ["cmp_scope_by_specificity", "src/pipeline/path_alias.c", 105], ["cmp_str", "src/pipeline/pass_enrichment.c", 276], ["codex_hook_strip", "src/cli/cli.c", 1460], ["collect_all_projects", "src/pipeline/pass_cross_repo.c", 554], ["collect_ast_tokens", "src/simhash/minhash.c", 142], ["collect_children", "internal/cbm/lsp/ts_lsp.c", 61], ["collect_code_entries", "src/pipeline/pass_configlink.c", 114], ["collect_coupling_cb", "src/pipeline/pass_githistory.c", 320], ["collect_csharp_bases", "internal/cbm/extract_defs.c", 1617], ["collect_db_project_names", "src/mcp/mcp.c", 856], ["collect_fp_entries", "src/pipeline/pass_similarity.c", 95], ["collect_infra_handlers", "src/pipeline/pass_route_nodes.c", 632], ["collect_pattern_vars", "src/cypher/cypher.c", 3775], ["collect_use_clause", "internal/cbm/lsp/php_lsp.c", 2481], ["collect_use_declaration", "internal/cbm/lsp/php_lsp.c", 2530], ["collect_worker", "src/pipeline/pass_semantic_edges.c", 828], ["commit_add_file", "src/pipeline/pass_githistory.c", 93], ["commit_free", "src/pipeline/pass_githistory.c", 101], ["common_prefix_len", "src/pipeline/registry.c", 109], ["compare_by_size_desc", "src/pipeline/pass_parallel.c", 448], ["compile_patterns", "src/pipeline/pass_envscan.c", 51], ["compute_class_qn", "internal/cbm/extract_defs.c", 4987], ["compute_fingerprint", "internal/cbm/extract_defs.c", 119], ["compute_wolfram_func_qn", "internal/cbm/extract_unified.c", 69], ["configure_pragmas", "src/store/store.c", 325], ["connect_prefix_to_decorators", "src/pipeline/pass_route_nodes.c", 439], ["contains_infer", "internal/cbm/lsp/ts_lsp.c", 1081], ["convert_path_to_qn", "internal/cbm/lsp/rust_lsp.c", 251], ["convert_signature_type_params", "internal/cbm/lsp/ts_lsp.c", 4175], ["cooccur_int8_one_target", "src/semantic/semantic.c", 963], ["cooccur_sparse_one_target", "src/semantic/semantic.c", 874], ["cooccur_worker_int8", "src/semantic/semantic.c", 994], ["cooccur_worker_sparse", "src/semantic/semantic.c", 907], ["copy_header_value", "src/ui/httpd.c", 229], ["copy_node", "src/mcp/mcp.c", 2813], ["corpus_get_or_add", "src/semantic/semantic.c", 517], ["count_alnum", "src/pipeline/pass_infrascan.c", 81], ["count_alnum_dash", "src/pipeline/pass_infrascan.c", 90], ["count_branching_iter", "internal/cbm/helpers.c", 449], ["count_call_args", "internal/cbm/lsp/java_lsp.c", 216], ["count_char", "src/pipeline/pass_infrascan.c", 936], ["count_child_decorators", "internal/cbm/extract_defs.c", 1401], ["count_db_indexes", "src/cli/cli.c", 3225], ["count_func_params", "internal/cbm/lsp/type_registry.c", 368], ["count_live_nodes", "src/graph_buffer/graph_buffer.c", 1362], ["count_modifier_annotations", "internal/cbm/extract_defs.c", 1356], ["count_open_fds", "src/foundation/diagnostics.c", 58], ["count_params_from_signature", "internal/cbm/cbm.c", 447], ["count_slashes", "src/store/store.c", 3975], ["cpp_out_of_line_parent_class", "internal/cbm/extract_defs.c", 487], ["cr_cache_dir", "src/pipeline/pass_cross_repo.c", 51], ["cr_db_path", "src/pipeline/pass_cross_repo.c", 56], ["cr_itoa", "src/pipeline/pass_cross_repo.c", 44], ["create_data_flows", "src/pipeline/pass_route_nodes.c", 777], ["create_folder_chain", "src/pipeline/pipeline.c", 255], ["create_grpc_routes", "src/pipeline/pass_route_nodes.c", 724], ["create_sveltekit_routes", "src/pipeline/pass_route_nodes.c", 1060], ["create_tests_edges", "src/pipeline/pass_tests.c", 212], ["create_tests_file_edges", "src/pipeline/pass_tests.c", 252], ["create_user_indexes", "src/store/store.c", 287], ["cs_bind_parameters", "internal/cbm/lsp/cs_lsp.c", 1215], ["cs_child_named_kind", "internal/cbm/lsp/cs_lsp.c", 92], ["cs_collect_imports", "internal/cbm/lsp/cs_lsp.c", 2023], ["cs_collect_namespace", "internal/cbm/lsp/cs_lsp.c", 2126], ["cs_count_args", "internal/cbm/lsp/cs_lsp.c", 924], ["cs_eval_expr_type", "internal/cbm/lsp/cs_lsp.c", 716], ["cs_eval_identifier_type", "internal/cbm/lsp/cs_lsp.c", 888], ["cs_eval_invocation_type", "internal/cbm/lsp/cs_lsp.c", 938], ["cs_eval_member_access_type", "internal/cbm/lsp/cs_lsp.c", 1061], ["cs_eval_object_creation_type", "internal/cbm/lsp/cs_lsp.c", 1150], ["cs_first_named_child", "internal/cbm/lsp/cs_lsp.c", 104], ["cs_is_keyword_self", "internal/cbm/lsp/cs_lsp.c", 191], ["cs_lookup_type_qn", "internal/cbm/lsp/cs_lsp.c", 294], ["cs_lsp_process_file", "internal/cbm/lsp/cs_lsp.c", 2167], ["cs_namespace_pop", "internal/cbm/lsp/cs_lsp.c", 266], ["cs_namespace_push", "internal/cbm/lsp/cs_lsp.c", 252], ["cs_namespace_qn", "internal/cbm/lsp/cs_lsp.c", 271], ["cs_node_is", "internal/cbm/lsp/cs_lsp.c", 87], ["cs_node_text", "internal/cbm/lsp/cs_lsp.c", 79], ["cs_node_text_cached", "internal/cbm/lsp/cs_lsp.c", 83], ["cs_normalize_name", "internal/cbm/lsp/cs_lsp.c", 135], ["cs_parse_return_type_text", "internal/cbm/lsp/cs_lsp.c", 2672], ["cs_parse_type_node", "internal/cbm/lsp/cs_lsp.c", 573], ["cs_predefined_alias", "internal/cbm/lsp/cs_lsp.c", 166], ["cs_process_assignment", "internal/cbm/lsp/cs_lsp.c", 1394], ["cs_process_foreach", "internal/cbm/lsp/cs_lsp.c", 1340], ["cs_process_function_like", "internal/cbm/lsp/cs_lsp.c", 1712], ["cs_process_local_decl", "internal/cbm/lsp/cs_lsp.c", 1258], ["cs_process_type_decl", "internal/cbm/lsp/cs_lsp.c", 1863], ["cs_process_using_statement", "internal/cbm/lsp/cs_lsp.c", 1383], ["cs_register_type_decls", "internal/cbm/lsp/cs_lsp.c", 2314], ["cs_resolve_calls_in_node", "internal/cbm/lsp/cs_lsp.c", 1607], ["cs_resolve_invocation", "internal/cbm/lsp/cs_lsp.c", 1423], ["cs_resolve_object_creation", "internal/cbm/lsp/cs_lsp.c", 1587], ["cs_resolve_type_name", "internal/cbm/lsp/cs_lsp.c", 317], ["cs_short_name", "internal/cbm/lsp/cs_lsp.c", 117], ["cs_strip_generic_args", "internal/cbm/lsp/cs_lsp.c", 157], ["cs_strip_global", "internal/cbm/lsp/cs_lsp.c", 128], ["cs_try_type_qn", "internal/cbm/lsp/cs_lsp.c", 300], ["cs_unwrap_nullable", "internal/cbm/lsp/cs_lsp.c", 703], ["cs_unwrap_task", "internal/cbm/lsp/cs_lsp.c", 681], ["csharp_process_call", "internal/cbm/extract_channels.c", 749], ["css_push_import_from_stmt", "internal/cbm/extract_imports.c", 1972], ["cyp_ci_eq", "src/cypher/cypher.c", 1316], ["db_path_for_project", "src/ui/http_server.c", 127], ["decode_minhash", "src/pipeline/pass_semantic_edges.c", 526], ["decode_struct_profile", "src/pipeline/pass_semantic_edges.c", 512], ["decorator_method_name", "internal/cbm/extract_defs.c", 1117], ["def_json_escape_char", "src/pipeline/pass_definitions.c", 86], ["def_json_escaped_len", "src/pipeline/pass_definitions.c", 121], ["deferred_buf_free", "src/pipeline/pass_semantic_edges.c", 99], ["deferred_buf_init", "src/pipeline/pass_semantic_edges.c", 78], ["delete_cross_edges", "src/pipeline/pass_cross_repo.c", 108], ["derive_canonical_root", "src/git/git_context.c", 129], ["destructure_ident", "internal/cbm/extract_defs.c", 4058], ["detect_arch", "src/cli/cli.c", 2867], ["detect_file_language", "src/discover/discover.c", 330], ["detect_file_type", "src/pipeline/pass_envscan.c", 172], ["detect_os", "src/cli/cli.c", 2857], ["detect_system_bsd", "src/foundation/system_info.c", 90], ["detect_system_linux", "src/foundation/system_info.c", 209], ["detect_system_macos", "src/foundation/system_info.c", 71], ["detect_system_windows", "src/foundation/system_info.c", 240], ["df_parse_arg", "src/pipeline/pass_infrascan.c", 480], ["df_parse_directives", "src/pipeline/pass_infrascan.c", 508], ["df_parse_env", "src/pipeline/pass_infrascan.c", 433], ["df_parse_expose", "src/pipeline/pass_infrascan.c", 401], ["df_parse_from", "src/pipeline/pass_infrascan.c", 369], ["df_parse_json_cmd", "src/pipeline/pass_infrascan.c", 500], ["diag_thread_fn", "src/foundation/diagnostics.c", 156], ["dir_add_child", "src/store/store.c", 3867], ["dir_exists", "src/cli/cli.c", 980], ["distinct_list_add", "src/cypher/cypher.c", 3364], ["dynbuf_append", "internal/cbm/sqlite_writer.c", 319], ["dynbuf_ensure", "internal/cbm/sqlite_writer.c", 301], ["dynbuf_free", "internal/cbm/sqlite_writer.c", 334], ["dynbuf_init", "internal/cbm/sqlite_writer.c", 295], ["ecell_proj_source_type", "internal/cbm/sqlite_writer.c", 1566], ["ecell_proj_target_type", "internal/cbm/sqlite_writer.c", 1563], ["ecell_source", "internal/cbm/sqlite_writer.c", 1554], ["ecell_src_tgt_type", "internal/cbm/sqlite_writer.c", 1569], ["ecell_target", "internal/cbm/sqlite_writer.c", 1557], ["ecell_type", "internal/cbm/sqlite_writer.c", 1560], ["ecell_url_path", "internal/cbm/sqlite_writer.c", 1573], ["edge_array_push", "src/graph_buffer/graph_buffer.c", 305], ["edge_deep_copy", "src/cypher/cypher.c", 2252], ["edge_fields_free", "src/cypher/cypher.c", 2259], ["edge_prop", "src/cypher/cypher.c", 2193], ["elapsed_ms", "src/pipeline/pipeline.c", 116], ["elixir_call_args", "internal/cbm/extract_defs.c", 3756], ["elixir_nth_arg_literal", "internal/cbm/extract_channels.c", 879], ["elixir_process_call", "internal/cbm/extract_channels.c", 904], ["elixir_process_function_def", "internal/cbm/extract_channels.c", 931], ["emit_elixir_module_class", "internal/cbm/extract_defs.c", 3801], ["emit_kustomize_sequence", "internal/cbm/extract_k8s.c", 80], ["emit_php_use_clause", "internal/cbm/extract_imports.c", 1184], ["emit_php_use_decl", "internal/cbm/extract_imports.c", 1213], ["emit_py_aliased_import", "internal/cbm/extract_imports.c", 170], ["emit_py_import_from_name", "internal/cbm/extract_imports.c", 237], ["emit_resolved_call", "internal/cbm/lsp/go_lsp.c", 1084], ["emit_token", "src/pipeline/pass_compile_commands.c", 21], ["emit_unresolved", "internal/cbm/lsp/php_lsp.c", 1251], ["emit_unresolved_call", "internal/cbm/lsp/go_lsp.c", 1097], ["emit_yaml_leaf_value", "internal/cbm/extract_unified.c", 284], ["empty_result", "src/pipeline/registry.c", 354], ["enclosing_function_qn", "internal/cbm/extract_channels.c", 186], ["ends_with", "src/pipeline/pass_githistory.c", 44], ["enrich_add_bfs", "src/mcp/mcp.c", 1180], ["ensure_decorator_routes", "src/pipeline/pass_route_nodes.c", 381], ["ensure_gitattributes", "src/pipeline/artifact.c", 230], ["ensure_one_decorator_route", "src/pipeline/pass_route_nodes.c", 337], ["ensure_pretrained_map", "src/semantic/semantic.c", 399], ["eval_array_access", "internal/cbm/lsp/java_lsp.c", 1218], ["eval_binary", "internal/cbm/lsp/java_lsp.c", 1262], ["eval_case_expr", "src/cypher/cypher.c", 2721], ["eval_cast", "internal/cbm/lsp/java_lsp.c", 1231], ["eval_comparison_op", "src/cypher/cypher.c", 2344], ["eval_condition", "src/cypher/cypher.c", 2390], ["eval_conditional", "internal/cbm/lsp/ts_lsp.c", 1118], ["eval_expr", "src/cypher/cypher.c", 2465], ["eval_field_access", "internal/cbm/lsp/java_lsp.c", 847], ["eval_func_arg", "src/cypher/cypher.c", 3192], ["eval_function_call_type", "internal/cbm/lsp/php_lsp.c", 1115], ["eval_keyof", "internal/cbm/lsp/ts_lsp.c", 1465], ["eval_lambda", "internal/cbm/lsp/java_lsp.c", 1310], ["eval_member_call_type", "internal/cbm/lsp/php_lsp.c", 1161], ["eval_method_invocation", "internal/cbm/lsp/java_lsp.c", 1099], ["eval_method_reference", "internal/cbm/lsp/java_lsp.c", 1317], ["eval_object_creation", "internal/cbm/lsp/java_lsp.c", 1199], ["eval_object_creation_type", "internal/cbm/lsp/php_lsp.c", 1085], ["eval_ternary", "internal/cbm/lsp/java_lsp.c", 1238], ["eval_unary", "internal/cbm/lsp/java_lsp.c", 1290], ["eval_where", "src/cypher/cypher.c", 2485], ["exec_sql", "src/store/store.c", 148], ["execute_with_clause", "src/cypher/cypher.c", 3725], ["expect", "src/cypher/cypher.c", 465], ["expr_binary", "src/cypher/cypher.c", 787], ["expr_free", "src/cypher/cypher.c", 743], ["expr_leaf", "src/cypher/cypher.c", 780], ["expr_not", "src/cypher/cypher.c", 795], ["ext_to_lang", "src/store/store.c", 3194], ["extract_ada_callee", "internal/cbm/extract_calls.c", 455], ["extract_and_install_binary", "src/cli/cli.c", 3708], ["extract_atx_heading_text", "internal/cbm/extract_defs.c", 2836], ["extract_body_ident_tokens", "internal/cbm/extract_defs.c", 78], ["extract_c_declarator_name", "internal/cbm/extract_defs.c", 3893], ["extract_c_macro_def", "internal/cbm/extract_defs.c", 5199], ["extract_call_args", "internal/cbm/extract_calls.c", 834], ["extract_callee_from_fields", "internal/cbm/extract_calls.c", 226], ["extract_callee_name", "internal/cbm/extract_calls.c", 600], ["extract_cfml_function_tag", "internal/cbm/extract_defs.c", 5055], ["extract_channels_csharp", "internal/cbm/extract_channels.c", 794], ["extract_channels_elixir", "internal/cbm/extract_channels.c", 959], ["extract_channels_go", "internal/cbm/extract_channels.c", 628], ["extract_channels_java", "internal/cbm/extract_channels.c", 725], ["extract_channels_js", "internal/cbm/extract_channels.c", 370], ["extract_channels_python", "internal/cbm/extract_channels.c", 547], ["extract_channels_ruby", "internal/cbm/extract_channels.c", 857], ["extract_channels_rust", "internal/cbm/extract_channels.c", 1035], ["extract_class_def", "internal/cbm/extract_defs.c", 2967], ["extract_comment_text", "internal/cbm/extract_defs.c", 1044], ["extract_composite_queue_field", "internal/cbm/extract_calls.c", 925], ["extract_config_class_def", "internal/cbm/extract_defs.c", 2939], ["extract_cpp_base_classes", "internal/cbm/extract_defs.c", 1537], ["extract_cpp_base_text", "internal/cbm/extract_defs.c", 1508], ["extract_csharp_base_child_text", "internal/cbm/extract_defs.c", 1594], ["extract_csharp_vars", "internal/cbm/extract_defs.c", 3950], ["extract_dart_callee", "internal/cbm/extract_calls.c", 533], ["extract_decorator_func", "src/pipeline/pass_semantic.c", 195], ["extract_decorator_words", "src/pipeline/pass_enrichment.c", 205], ["extract_decorators_from_json", "src/pipeline/pass_enrichment.c", 160], ["extract_elixir_call", "internal/cbm/extract_defs.c", 3831], ["extract_elixir_func_def", "internal/cbm/extract_defs.c", 3765], ["extract_enum_members", "internal/cbm/extract_defs.c", 3988], ["extract_erlang_callee", "internal/cbm/extract_calls.c", 398], ["extract_first_string_arg", "internal/cbm/extract_calls.c", 688], ["extract_fp_callee", "internal/cbm/extract_calls.c", 296], ["extract_fsharp_callee", "internal/cbm/extract_calls.c", 425], ["extract_func_def", "internal/cbm/extract_defs.c", 2659], ["extract_go_type_docstring", "internal/cbm/extract_defs.c", 1053], ["extract_gotemplate_define", "internal/cbm/extract_defs.c", 5102], ["extract_groovy_callee", "internal/cbm/extract_calls.c", 502], ["extract_handler_arg", "internal/cbm/extract_calls.c", 1077], ["extract_hcl_string_val", "internal/cbm/extract_unified.c", 559], ["extract_ini_vars", "internal/cbm/extract_defs.c", 4415], ["extract_janet_def", "internal/cbm/extract_defs.c", 5152], ["extract_java_field_name", "internal/cbm/extract_defs.c", 3924], ["extract_js_vars", "internal/cbm/extract_defs.c", 4088], ["extract_json_prop", "src/pipeline/pass_route_nodes.c", 311], ["extract_json_string_prop", "src/store/store.c", 3326], ["extract_json_var", "internal/cbm/extract_defs.c", 4458], ["extract_jsx_refs", "internal/cbm/extract_calls.c", 780], ["extract_julia_base_classes", "internal/cbm/extract_defs.c", 1929], ["extract_k8s_manifest", "internal/cbm/extract_k8s.c", 255], ["extract_keyword_url", "internal/cbm/extract_calls.c", 986], ["extract_kotlin_bases", "internal/cbm/extract_defs.c", 1790], ["extract_kustomize", "internal/cbm/extract_k8s.c", 149], ["extract_kv", "src/cli/progress_sink.c", 26], ["extract_lisp_callee", "internal/cbm/extract_calls.c", 408], ["extract_lisp_def", "internal/cbm/extract_defs.c", 5265], ["extract_local_name_from_json", "src/pipeline/pass_calls.c", 81], ["extract_lua_vars", "internal/cbm/extract_defs.c", 4179], ["extract_namespace_from_qn", "internal/cbm/lsp/c_lsp.c", 688], ["extract_new_expr_type", "internal/cbm/extract_type_assigns.c", 14], ["extract_now_ns", "src/pipeline/pass_parallel.c", 79], ["extract_objc_callee", "internal/cbm/extract_calls.c", 389], ["extract_one_import_header", "internal/cbm/extract_imports.c", 969], ["extract_param_type_refs", "internal/cbm/extract_type_refs.c", 125], ["extract_perl_vars", "internal/cbm/extract_defs.c", 4222], ["extract_php_bases", "internal/cbm/extract_defs.c", 1756], ["extract_php_vars", "internal/cbm/extract_defs.c", 4282], ["extract_positional_url", "internal/cbm/extract_calls.c", 1003], ["extract_promoted_param", "internal/cbm/lsp/php_lsp.c", 2914], ["extract_property_decl", "internal/cbm/lsp/php_lsp.c", 2859], ["extract_psr4", "src/pipeline/pass_pkgmap.c", 440], ["extract_py_signature", "src/pipeline/pass_calls.c", 473], ["extract_python_docstring", "internal/cbm/extract_defs.c", 1070], ["extract_quoted", "src/pipeline/pass_pkgmap.c", 221], ["extract_r_vars", "internal/cbm/extract_defs.c", 4257], ["extract_return_type_refs", "internal/cbm/extract_type_refs.c", 138], ["extract_route_path_from_args", "internal/cbm/extract_defs.c", 1200], ["extract_ruby_require_arg", "internal/cbm/extract_imports.c", 694], ["extract_rust_impl", "internal/cbm/extract_defs.c", 3653], ["extract_scss_var", "internal/cbm/extract_defs.c", 4475], ["extract_semantic_keywords", "src/mcp/mcp.c", 1459], ["extract_service_name", "src/pipeline/pass_route_nodes.c", 175], ["extract_signature_type_refs", "internal/cbm/extract_type_refs.c", 325], ["extract_solidity_callee", "internal/cbm/extract_calls.c", 476], ["extract_string_value", "internal/cbm/extract_calls.c", 902], ["extract_swift_callee", "internal/cbm/extract_calls.c", 344], ["extract_token", "src/pipeline/pass_infrascan.c", 118], ["extract_ts_bases", "internal/cbm/extract_defs.c", 1722], ["extract_ts_param_type", "internal/cbm/extract_defs.c", 2419], ["extract_type_field_ref", "internal/cbm/extract_type_refs.c", 151], ["extract_type_text", "internal/cbm/extract_type_refs.c", 74], ["extract_url_or_topic_arg", "internal/cbm/extract_calls.c", 1021], ["extract_url_path", "src/graph_buffer/graph_buffer.c", 1180], ["extract_var_names", "internal/cbm/extract_defs.c", 4545], ["extract_variables", "internal/cbm/extract_defs.c", 4705], ["extract_vars_config", "internal/cbm/extract_defs.c", 4491], ["extract_vars_dynamic", "internal/cbm/extract_defs.c", 4302], ["extract_vars_jvm", "internal/cbm/extract_defs.c", 4357], ["extract_wgsl_callee", "internal/cbm/extract_calls.c", 517], ["extract_wolfram_callee", "internal/cbm/extract_calls.c", 321], ["extract_word", "src/pipeline/pass_infrascan.c", 107], ["extract_worker", "src/pipeline/pass_parallel.c", 532], ["extract_yaml_toplevel_keys", "internal/cbm/extract_defs.c", 4663], ["fetch_latest_tag", "src/cli/cli.c", 3872], ["fetch_leading_phpdoc", "internal/cbm/lsp/php_lsp.c", 777], ["few_scan", "src/pipeline/registry.c", 790], ["file_ext", "src/pipeline/pass_semantic_edges.c", 293], ["file_has_depends_call", "src/pipeline/pass_calls.c", 541], ["file_list_add_excluded", "src/discover/discover.c", 219], ["finalize_build_sources", "src/semantic/semantic.c", 1292], ["finalize_pass1", "src/semantic/semantic.c", 1303], ["finalize_pass2", "src/semantic/semantic.c", 1325], ["finalize_stmt", "src/store/store.c", 732], ["find_args_in_props", "src/pipeline/pass_route_nodes.c", 534], ["find_c_params", "internal/cbm/extract_defs.c", 2569], ["find_child", "src/foundation/yaml.c", 316], ["find_class_body", "internal/cbm/extract_defs.c", 3372], ["find_cpp_template_inner_node", "internal/cbm/extract_defs.c", 615], ["find_decorator_args", "internal/cbm/extract_defs.c", 1186], ["find_es_source_node", "internal/cbm/extract_imports.c", 322], ["find_extends_qn", "internal/cbm/lsp/php_lsp.c", 2406], ["find_first_descendant_of", "internal/cbm/extract_imports.c", 1002], ["find_first_kind", "internal/cbm/lsp/ts_lsp.c", 96], ["find_hcl_block_name", "internal/cbm/extract_defs.c", 2902], ["find_in_path", "src/cli/cli.c", 253], ["find_include_path_node", "internal/cbm/extract_imports.c", 616], ["find_ini_section_name", "internal/cbm/extract_defs.c", 2891], ["find_jvm_modifiers", "internal/cbm/extract_defs.c", 1373], ["find_line_value", "src/pipeline/pass_pkgmap.c", 196], ["find_node_index", "src/ui/layout3d.c", 366], ["find_or_add_pkg", "src/store/store.c", 3732], ["find_route_path_in_args", "src/pipeline/pass_parallel.c", 1154], ["find_sam", "internal/cbm/lsp/java_lsp.c", 2060], ["find_toml_key_name", "internal/cbm/extract_defs.c", 2796], ["find_use", "internal/cbm/lsp/php_lsp.c", 169], ["find_xml_element_name", "internal/cbm/extract_defs.c", 2810], ["first_token", "src/pipeline/pass_k8s.c", 503], ["flush_carriage", "src/cli/progress_sink.c", 85], ["flush_token", "src/semantic/semantic.c", 158], ["fnv1a", "internal/cbm/lsp/type_registry.c", 6], ["fnv1a_pair", "internal/cbm/lsp/type_registry.c", 17], ["format_call_arg", "src/pipeline/pass_parallel.c", 1082], ["format_collect_list", "src/cypher/cypher.c", 3851], ["fp_ends_with", "src/pipeline/pass_semantic.c", 222], ["free_case_expr", "src/cypher/cypher.c", 1943], ["free_children", "internal/cbm/sqlite_writer.c", 625], ["free_counter", "src/pipeline/pass_githistory.c", 303], ["free_edge_array", "src/ui/layout3d.c", 342], ["free_edge_strings", "src/graph_buffer/graph_buffer.c", 205], ["free_ht_kv", "src/semantic/semantic.c", 1491], ["free_import_map", "src/pipeline/pass_semantic.c", 148], ["free_key_only", "src/graph_buffer/graph_buffer.c", 189], ["free_label", "src/pipeline/registry.c", 371], ["free_lsh_buckets", "src/pipeline/pass_semantic_edges.c", 1111], ["free_mode_skipped", "src/pipeline/pipeline_incremental.c", 288], ["free_node_array", "src/graph_buffer/graph_buffer.c", 167], ["free_node_contents", "src/mcp/mcp.c", 2497], ["free_node_strings", "src/graph_buffer/graph_buffer.c", 197], ["free_one_node_pattern", "src/cypher/cypher.c", 949], ["free_one_rel_pattern", "src/cypher/cypher.c", 961], ["free_pattern", "src/cypher/cypher.c", 1899], ["free_project_list", "src/pipeline/pass_cross_repo.c", 598], ["free_qn_array", "src/pipeline/registry.c", 377], ["free_remap_entry", "src/graph_buffer/graph_buffer.c", 1044], ["free_return_clause", "src/cypher/cypher.c", 1956], ["free_reverse_index", "src/semantic/semantic.c", 1270], ["free_seen_dir_key", "src/pipeline/pipeline.c", 245], ["free_source", "src/pipeline/pass_parallel.c", 113], ["free_state_entry", "src/watcher/watcher.c", 245], ["free_tagged_nodes", "src/pipeline/pass_enrichment.c", 281], ["free_where", "src/cypher/cypher.c", 1923], ["func_kinds_for_lang", "internal/cbm/helpers.c", 644], ["func_name_node", "internal/cbm/extract_defs.c", 191], ["gather_scoped_path", "internal/cbm/lsp/rust_lsp.c", 549], ["gb_intern", "src/graph_buffer/graph_buffer.c", 121], ["generate_iso_timestamp", "src/graph_buffer/graph_buffer.c", 1373], ["generic_import_from_text", "internal/cbm/extract_imports.c", 920], ["get_cache_dir", "src/cli/cli.c", 2362], ["get_decomp_buf", "internal/cbm/ac.c", 258], ["get_module_parents", "internal/cbm/helpers.c", 869], ["get_or_create_edge_array", "src/graph_buffer/graph_buffer.c", 157], ["get_or_create_node_array", "src/graph_buffer/graph_buffer.c", 147], ["get_project_root", "src/mcp/mcp.c", 2550], ["get_scalar_text", "internal/cbm/extract_k8s.c", 35], ["get_thread_parser", "internal/cbm/cbm.c", 228], ["get_varint", "internal/cbm/sqlite_writer.c", 1066], ["gh_compute_thread_fn", "src/pipeline/pipeline.c", 399], ["gi_add_pattern", "src/discover/gitignore.c", 175], ["git_capture", "src/git/git_context.c", 56], ["git_file_count", "src/watcher/watcher.c", 198], ["git_head", "src/watcher/watcher.c", 117], ["git_head_hash", "src/pipeline/artifact.c", 109], ["git_is_dirty", "src/watcher/watcher.c", 140], ["git_strdup", "src/git/git_context.c", 19], ["git_validate_repo_path", "src/git/git_context.c", 42], ["glob_match", "src/discover/gitignore.c", 131], ["glob_match_charclass", "src/discover/gitignore.c", 85], ["glob_match_doublestar", "src/discover/gitignore.c", 121], ["glob_match_doublestar_any", "src/discover/gitignore.c", 59], ["glob_match_doublestar_slash", "src/discover/gitignore.c", 45], ["glob_match_star", "src/discover/gitignore.c", 72], ["go_eval_builtin_call", "internal/cbm/lsp/go_lsp.c", 809], ["go_eval_expr_type", "internal/cbm/lsp/go_lsp.c", 312], ["go_lsp_add_import", "internal/cbm/lsp/go_lsp.c", 34], ["go_lsp_process_file", "internal/cbm/lsp/go_lsp.c", 1597], ["go_parse_type_node", "internal/cbm/lsp/go_lsp.c", 106], ["go_process_call", "internal/cbm/extract_channels.c", 574], ["go_process_statement", "internal/cbm/lsp/go_lsp.c", 919], ["go_receiver_type_name", "internal/cbm/extract_defs.c", 2626], ["gotemplate_callee", "internal/cbm/extract_calls.c", 716], ["gotemplate_string_child", "internal/cbm/extract_calls.c", 702], ["gzip_decompress", "src/cli/cli.c", 2093], ["ha_arm_deadline", "src/cli/hook_augment.c", 55], ["ha_build_args", "src/cli/hook_augment.c", 138], ["ha_deadline_exit", "src/cli/hook_augment.c", 50], ["ha_emit", "src/cli/hook_augment.c", 229], ["ha_extract_token", "src/cli/hook_augment.c", 93], ["ha_format_context", "src/cli/hook_augment.c", 161], ["ha_obj_str", "src/cli/hook_augment.c", 131], ["ha_read_stdin", "src/cli/hook_augment.c", 73], ["ha_resolve_and_query", "src/cli/hook_augment.c", 250], ["halstead_insert", "src/semantic/ast_profile.c", 109], ["handle_calls", "internal/cbm/extract_calls.c", 1123], ["handle_cross_repo_mode", "src/mcp/mcp.c", 2572], ["handle_delete_project", "src/mcp/mcp.c", 1788], ["handle_get_architecture", "src/mcp/mcp.c", 1899], ["handle_get_graph_schema", "src/mcp/mcp.c", 1092], ["handle_helm_chart", "src/pipeline/pass_k8s.c", 433], ["handle_index_repository", "src/mcp/mcp.c", 2707], ["handle_index_status", "src/mcp/mcp.c", 1744], ["handle_list_projects", "src/mcp/mcp.c", 1015], ["handle_logs", "src/ui/http_server.c", 188], ["handle_process_kill", "src/ui/http_server.c", 326], ["handle_processes", "src/ui/http_server.c", 251], ["handle_query_graph", "src/mcp/mcp.c", 1665], ["handle_readwrites", "internal/cbm/extract_semantic.c", 323], ["handle_search_graph", "src/mcp/mcp.c", 1523], ["handle_string_constants", "internal/cbm/extract_unified.c", 155], ["handle_string_refs", "internal/cbm/extract_unified.c", 235], ["handle_subcommand", "src/main.c", 310], ["handle_throws", "internal/cbm/extract_semantic.c", 300], ["handle_trace_call_path", "src/mcp/mcp.c", 2330], ["handle_type_refs", "internal/cbm/extract_type_refs.c", 349], ["handle_usages", "internal/cbm/extract_usages.c", 137], ["handle_yaml_nested", "internal/cbm/extract_unified.c", 725], ["has_any", "src/pipeline/pass_semantic_edges.c", 123], ["has_config_extension", "internal/cbm/helpers.c", 1166], ["has_direct_call", "src/pipeline/pass_route_nodes.c", 492], ["has_magma_callable_pattern", "src/discover/language.c", 954], ["has_magma_end_markers", "src/discover/language.c", 947], ["has_matlab_line_markers", "src/discover/language.c", 973], ["has_objc_markers", "src/discover/language.c", 939], ["has_prefix", "internal/cbm/helpers.c", 221], ["has_prerelease", "src/cli/cli.c", 162], ["has_suffix", "internal/cbm/helpers.c", 212], ["hash_source_span", "internal/cbm/extract_defs.c", 38], ["hash_trigrams", "src/simhash/minhash.c", 221], ["hcl_block_body", "internal/cbm/extract_unified.c", 583], ["hcl_scheduler_source", "internal/cbm/extract_unified.c", 620], ["header_name_is", "src/ui/httpd.c", 220], ["heap_strdup", "src/mcp/mcp.c", 97], ["heap_strndup", "src/cypher/cypher.c", 58], ["helm_copy_scalar", "src/pipeline/pass_infrascan.c", 1235], ["helm_match_key", "src/pipeline/pass_infrascan.c", 1264], ["hex_val", "src/ui/httpd.c", 566], ["html_extract_tag_src", "internal/cbm/extract_imports.c", 2020], ["http_thread", "src/main.c", 144], ["import_candidate_symbol", "src/pipeline/pass_pkgmap.c", 1193], ["import_is_from_style", "internal/cbm/lsp/py_lsp.c", 90], ["import_last_segment", "src/pipeline/pass_pkgmap.c", 1175], ["import_targetable_label", "src/pipeline/pass_pkgmap.c", 1250], ["incr_capture_inbound_edge", "src/pipeline/pipeline_incremental.c", 362], ["incr_edge_type_is_recomputed", "src/pipeline/pipeline_incremental.c", 355], ["incr_free_edge_capture", "src/pipeline/pipeline_incremental.c", 421], ["incr_label_is_registry_symbol", "src/pipeline/pipeline_incremental.c", 511], ["incr_restore_inbound_edges", "src/pipeline/pipeline_incremental.c", 407], ["index_edge_by_key", "src/graph_buffer/graph_buffer.c", 310], ["infer_broker", "internal/cbm/extract_unified.c", 405], ["infer_implicit_returns", "internal/cbm/lsp/ts_lsp.c", 4493], ["infer_return_type_from_body", "internal/cbm/lsp/ts_lsp.c", 3965], ["init_baseline", "src/watcher/watcher.c", 360], ["init_schema", "src/store/store.c", 215], ["inject_body_pattern_tokens", "src/pipeline/pass_semantic_edges.c", 136], ["inject_callee_tokens", "src/pipeline/pass_semantic_edges.c", 161], ["inject_decorator_tags", "src/pipeline/pass_enrichment.c", 245], ["inject_decorator_tokens", "src/pipeline/pass_semantic_edges.c", 202], ["inject_name_pattern_tokens", "src/pipeline/pass_semantic_edges.c", 225], ["install_gemini_config", "src/cli/cli.c", 3054], ["int_serial_type", "internal/cbm/sqlite_writer.c", 216], ["int_storage_bytes", "internal/cbm/sqlite_writer.c", 242], ["intern_hash", "src/foundation/str_intern.c", 21], ["intern_resize", "src/foundation/str_intern.c", 72], ["intptr_to_ptr", "src/pipeline/pipeline.c", 44], ["is_aggregate_func", "src/cypher/cypher.c", 3356], ["is_aggregate_tok", "src/cypher/cypher.c", 1192], ["is_alloc_name", "internal/cbm/cbm.c", 436], ["is_arithmetic", "src/semantic/ast_profile.c", 72], ["is_assignment", "src/semantic/ast_profile.c", 76], ["is_bool_lit", "src/semantic/ast_profile.c", 91], ["is_broker_route", "src/pipeline/pass_route_nodes.c", 208], ["is_builtin_type", "internal/cbm/extract_type_refs.c", 17], ["is_c_builtin_func", "internal/cbm/lsp/c_lsp.c", 540], ["is_c_builtin_type", "internal/cbm/lsp/c_lsp.c", 527], ["is_c_preprocessor_lang", "internal/cbm/extract_defs.c", 5189], ["is_c_terminal_name", "internal/cbm/extract_defs.c", 461], ["is_callable_def", "src/pipeline/pass_calls.c", 536], ["is_camel_break", "src/semantic/semantic.c", 148], ["is_canonical_section", "src/store/store.c", 5092], ["is_cargo_dep_section", "src/pipeline/pass_configlink.c", 211], ["is_checked_exception", "src/pipeline/pass_usages.c", 70], ["is_comment_node", "internal/cbm/extract_defs.c", 1038], ["is_comparison", "src/semantic/ast_profile.c", 67], ["is_control_for", "src/semantic/ast_profile.c", 43], ["is_control_if", "src/semantic/ast_profile.c", 38], ["is_control_switch", "src/semantic/ast_profile.c", 53], ["is_control_try", "src/semantic/ast_profile.c", 58], ["is_control_while", "src/semantic/ast_profile.c", 48], ["is_cpp_template_inner_kind", "internal/cbm/extract_defs.c", 608], ["is_decorator_stopword", "src/pipeline/pass_enrichment.c", 32], ["is_definition_name", "internal/cbm/extract_usages.c", 78], ["is_dep_section", "src/pipeline/pass_configlink.c", 50], ["is_dockerfile_name", "src/pipeline/pass_envscan.c", 77], ["is_enum_member_kind", "internal/cbm/extract_defs.c", 3979], ["is_env_file_name", "src/pipeline/pass_envscan.c", 102], ["is_env_var_name", "internal/cbm/extract_env_accesses.c", 122], ["is_env_var_pattern", "internal/cbm/helpers.c", 1178], ["is_executable", "src/cli/cli.c", 242], ["is_export_of_declaration", "internal/cbm/extract_unified.c", 770], ["is_filesystem_path", "internal/cbm/helpers.c", 1116], ["is_func_ptr_field", "internal/cbm/extract_defs.c", 4773], ["is_func_to_builtin", "internal/cbm/lsp/php_lsp.c", 1617], ["is_generic_param_kind", "internal/cbm/extract_defs.c", 2440], ["is_git_repo", "src/watcher/watcher.c", 102], ["is_go_builtin_func", "internal/cbm/lsp/go_lsp.c", 72], ["is_gomod_file", "src/pipeline/pass_k8s.c", 474], ["is_hash_segment", "src/pipeline/pass_route_nodes.c", 142], ["is_helm_chart_file", "src/pipeline/pass_k8s.c", 427], ["is_helm_values_file", "internal/cbm/extract_defs.c", 4651], ["is_ident_char", "internal/cbm/lsp/rust_cargo.c", 33], ["is_identifier", "src/semantic/ast_profile.c", 103], ["is_identifier_type", "src/simhash/minhash.c", 65], ["is_ignored_dir", "src/pipeline/pass_envscan.c", 147], ["is_infra_file", "src/pipeline/pipeline.c", 463], ["is_inline_abi_ns", "internal/cbm/lsp/c_lsp.c", 570], ["is_inside_call", "internal/cbm/extract_usages.c", 18], ["is_inside_import", "internal/cbm/extract_usages.c", 32], ["is_java_primitive", "internal/cbm/lsp/java_lsp.c", 128], ["is_js_exported", "internal/cbm/extract_defs.c", 1033], ["is_junk_url", "src/pipeline/pass_parallel.c", 1321], ["is_kustomize_list_key", "internal/cbm/extract_k8s.c", 68], ["is_linear_scan_name", "internal/cbm/cbm.c", 426], ["is_manifest_file", "src/pipeline/pass_configlink.c", 38], ["is_map_like", "internal/cbm/lsp/java_lsp.c", 1022], ["is_member_access_node", "internal/cbm/helpers.c", 514], ["is_multiarg_func_call", "src/cypher/cypher.c", 1405], ["is_named_func_call", "src/cypher/cypher.c", 1370], ["is_node_kind", "internal/cbm/lsp/java_lsp.c", 196], ["is_normalised_token", "src/simhash/minhash.c", 118], ["is_number_lit", "src/semantic/ast_profile.c", 86], ["is_number_type", "src/simhash/minhash.c", 82], ["is_operator_node", "src/semantic/ast_profile.c", 95], ["is_path_keyword", "src/pipeline/pass_parallel.c", 1142], ["is_perl_var_type", "internal/cbm/extract_defs.c", 4215], ["is_pkgmap_manifest_basename", "src/pipeline/pass_pkgmap.c", 764], ["is_prelude_trait_method", "internal/cbm/lsp/rust_lsp.c", 190], ["is_project_db_file", "src/mcp/mcp.c", 964], ["is_queue_topic_field", "internal/cbm/extract_calls.c", 887], ["is_reference_node", "internal/cbm/extract_usages.c", 49], ["is_requirements_file", "src/pipeline/pass_k8s.c", 478], ["is_rest_path", "internal/cbm/helpers.c", 1128], ["is_return", "src/semantic/ast_profile.c", 63], ["is_rust_primitive", "internal/cbm/lsp/rust_lsp.c", 134], ["is_scalar_value_func", "src/cypher/cypher.c", 1346], ["is_secret_file", "src/pipeline/pass_envscan.c", 124], ["is_smart_ptr", "internal/cbm/lsp/c_lsp.c", 36], ["is_source_key", "internal/cbm/extract_unified.c", 389], ["is_string_concat", "internal/cbm/lsp/java_lsp.c", 1247], ["is_string_func_tok", "src/cypher/cypher.c", 1198], ["is_string_like", "internal/cbm/extract_calls.c", 43], ["is_string_lit", "src/semantic/ast_profile.c", 81], ["is_string_macro", "internal/cbm/lsp/rust_lsp.c", 178], ["is_string_node", "internal/cbm/extract_unified.c", 225], ["is_string_type", "src/simhash/minhash.c", 74], ["is_tar_end_of_archive", "src/cli/cli.c", 2153], ["is_target_key", "internal/cbm/extract_unified.c", 397], ["is_template_class_node", "internal/cbm/extract_defs.c", 4970], ["is_test_file", "src/mcp/mcp.c", 2232], ["is_test_qn", "src/pipeline/registry.c", 136], ["is_throw_node", "internal/cbm/extract_semantic.c", 27], ["is_token_delim", "src/semantic/semantic.c", 142], ["is_type_annotation", "src/simhash/minhash.c", 90], ["is_url_like", "internal/cbm/helpers.c", 1153], ["is_url_or_topic_keyword", "internal/cbm/extract_calls.c", 864], ["is_value_typed_container", "internal/cbm/lsp/java_lsp.c", 1002], ["is_void_macro", "internal/cbm/lsp/rust_lsp.c", 148], ["iso_now", "src/store/store.c", 204], ["iso_timestamp", "src/pipeline/artifact.c", 130], ["itoa_buf", "src/pipeline/pipeline.c", 124], ["itoa_cx", "src/pipeline/pass_complexity.c", 32], ["itoa_k8s", "src/pipeline/pass_k8s.c", 66], ["itoa_log", "src/pipeline/pass_semantic_edges.c", 283], ["janet_is_def_head", "internal/cbm/extract_defs.c", 5137], ["java_emit_unresolved", "internal/cbm/lsp/java_lsp.c", 1795], ["java_eval_expr_type", "internal/cbm/lsp/java_lsp.c", 585], ["java_lsp_process_file", "internal/cbm/lsp/java_lsp.c", 1709], ["java_node_text", "internal/cbm/lsp/java_lsp.c", 192], ["java_parse_type_node", "internal/cbm/lsp/java_lsp.c", 347], ["java_process_annotation", "internal/cbm/extract_channels.c", 687], ["java_process_call", "internal/cbm/extract_channels.c", 649], ["java_process_class_decl", "internal/cbm/lsp/java_lsp.c", 1635], ["java_process_statement", "internal/cbm/lsp/java_lsp.c", 1326], ["java_resolve_calls_in_node", "internal/cbm/lsp/java_lsp.c", 2710], ["java_resolve_calls_in_node_inner", "internal/cbm/lsp/java_lsp.c", 2719], ["java_resolve_type_name", "internal/cbm/lsp/java_lsp.c", 474], ["java_return_type_of", "internal/cbm/lsp/java_lsp.c", 974], ["join_and_strip", "src/pipeline/pass_pkgmap.c", 167], ["join_root_relative", "src/git/git_context.c", 113], ["join_segments", "src/pipeline/fqn.c", 24], ["js_classify_receiver", "internal/cbm/extract_channels.c", 262], ["js_is_amqp_listen", "internal/cbm/extract_channels.c", 310], ["js_is_amqp_send", "internal/cbm/extract_channels.c", 306], ["js_is_emit_method", "internal/cbm/extract_channels.c", 252], ["js_is_kafka_listen", "internal/cbm/extract_channels.c", 302], ["js_is_kafka_send", "internal/cbm/extract_channels.c", 298], ["js_is_listen_method", "internal/cbm/extract_channels.c", 256], ["js_process_call", "internal/cbm/extract_channels.c", 314], ["json_escape_char", "src/pipeline/pass_parallel.c", 128], ["json_escaped_len", "src/git/git_context.c", 309], ["json_extract", "src/pipeline/pass_route_nodes.c", 42], ["json_extract_prop", "src/cypher/cypher.c", 2153], ["json_get_bool", "src/pipeline/pass_complexity.c", 61], ["json_get_int", "src/pipeline/pass_complexity.c", 43], ["json_str_array", "src/pipeline/pass_semantic_edges.c", 327], ["json_str_prop", "src/pipeline/pass_cross_repo.c", 62], ["json_str_value", "src/pipeline/pass_semantic_edges.c", 302], ["k8s_add_val", "src/pipeline/pass_k8s.c", 230], ["k8s_basename", "src/pipeline/pass_k8s.c", 77], ["k8s_indent", "src/pipeline/pass_k8s.c", 182], ["k8s_link_selectors", "src/pipeline/pass_k8s.c", 340], ["k8s_read_file", "src/pipeline/pass_k8s.c", 32], ["k8s_scan_labels", "src/pipeline/pass_k8s.c", 242], ["k8s_selector_matches", "src/pipeline/pass_k8s.c", 320], ["k8s_split_kv", "src/pipeline/pass_k8s.c", 192], ["key_is_secret", "src/pipeline/pass_infrascan.c", 250], ["keyword_lookup", "src/cypher/cypher.c", 212], ["kind_in_set_strcmp", "internal/cbm/helpers.c", 321], ["kotlin_eval_expr_type", "internal/cbm/lsp/kotlin_lsp.c", 1807], ["kotlin_lsp_process_file", "internal/cbm/lsp/kotlin_lsp.c", 3488], ["kotlin_parse_type_node", "internal/cbm/lsp/kotlin_lsp.c", 1676], ["kotlin_resolve_class_name", "internal/cbm/lsp/kotlin_lsp.c", 517], ["kotlin_resolve_function_name", "internal/cbm/lsp/kotlin_lsp.c", 583], ["ks_build", "internal/cbm/helpers.c", 342], ["ks_get", "internal/cbm/helpers.c", 388], ["kt_apply_smart_cast", "internal/cbm/lsp/kotlin_lsp.c", 2668], ["kt_bind_function_params", "internal/cbm/lsp/kotlin_lsp.c", 3176], ["kt_bind_property_to_scope", "internal/cbm/lsp/kotlin_lsp.c", 2522], ["kt_child_kind", "internal/cbm/lsp/kotlin_lsp.c", 135], ["kt_child_kind_named", "internal/cbm/lsp/kotlin_lsp.c", 151], ["kt_collect_top_level_decls", "internal/cbm/lsp/kotlin_lsp.c", 1012], ["kt_debug_dump_ast", "internal/cbm/lsp/kotlin_lsp.c", 3469], ["kt_eval_call_expression_type", "internal/cbm/lsp/kotlin_lsp.c", 2322], ["kt_eval_literal_type", "internal/cbm/lsp/kotlin_lsp.c", 1765], ["kt_eval_navigation_expression_type", "internal/cbm/lsp/kotlin_lsp.c", 2366], ["kt_eval_user_type", "internal/cbm/lsp/kotlin_lsp.c", 1732], ["kt_field_named", "internal/cbm/lsp/kotlin_lsp.c", 167], ["kt_find_descendant_kind", "internal/cbm/lsp/kotlin_lsp.c", 175], ["kt_find_return_type", "internal/cbm/lsp/kotlin_lsp.c", 359], ["kt_join_dot", "internal/cbm/lsp/kotlin_lsp.c", 210], ["kt_method_returns_self", "internal/cbm/lsp/kotlin_lsp.c", 709], ["kt_name_child", "internal/cbm/lsp/kotlin_lsp.c", 102], ["kt_nav_member_node", "internal/cbm/lsp/kotlin_lsp.c", 2349], ["kt_node_is", "internal/cbm/lsp/kotlin_lsp.c", 115], ["kt_node_kind_in", "internal/cbm/lsp/kotlin_lsp.c", 122], ["kt_node_text", "internal/cbm/lsp/kotlin_lsp.c", 89], ["kt_parse_import_directive", "internal/cbm/lsp/kotlin_lsp.c", 942], ["kt_parse_package_header", "internal/cbm/lsp/kotlin_lsp.c", 908], ["kt_process_block_stmts", "internal/cbm/lsp/kotlin_lsp.c", 2511], ["kt_process_call_with_lambda", "internal/cbm/lsp/kotlin_lsp.c", 2926], ["kt_process_class_decl", "internal/cbm/lsp/kotlin_lsp.c", 1109], ["kt_process_for_statement", "internal/cbm/lsp/kotlin_lsp.c", 2805], ["kt_process_function_decl", "internal/cbm/lsp/kotlin_lsp.c", 1567], ["kt_process_if_expression", "internal/cbm/lsp/kotlin_lsp.c", 2703], ["kt_process_lambda", "internal/cbm/lsp/kotlin_lsp.c", 2870], ["kt_process_property_decl", "internal/cbm/lsp/kotlin_lsp.c", 1621], ["kt_process_statement", "internal/cbm/lsp/kotlin_lsp.c", 3019], ["kt_process_when_expression", "internal/cbm/lsp/kotlin_lsp.c", 2747], ["kt_qn_for_class_decl", "internal/cbm/lsp/kotlin_lsp.c", 1091], ["kt_register_cross_def", "internal/cbm/lsp/kotlin_lsp.c", 4098], ["kt_resolve_calls_in_node", "internal/cbm/lsp/kotlin_lsp.c", 3143], ["kt_short", "internal/cbm/lsp/kotlin_lsp.c", 197], ["kt_try_smart_cast", "internal/cbm/lsp/kotlin_lsp.c", 3527], ["kt_type_qn_of", "internal/cbm/lsp/kotlin_lsp.c", 230], ["kt_unwrap_nullable", "internal/cbm/lsp/kotlin_lsp.c", 257], ["label_alt_matches", "src/cypher/cypher.c", 2737], ["lang_from_string", "src/discover/userconfig.c", 132], ["leading_spaces", "src/foundation/yaml.c", 117], ["lean_is_in_type_position", "internal/cbm/extract_calls.c", 72], ["leiden_move", "src/store/store.c", 4252], ["leiden_relabel", "src/store/store.c", 4329], ["level_str", "src/foundation/log.c", 66], ["lex_push", "src/cypher/cypher.c", 71], ["lex_single_char", "src/cypher/cypher.c", 248], ["lex_skip_whitespace_comments", "src/cypher/cypher.c", 324], ["lex_try_ident", "src/cypher/cypher.c", 286], ["lex_try_number", "src/cypher/cypher.c", 308], ["lex_try_two_char", "src/cypher/cypher.c", 223], ["lg_free", "src/store/store.c", 4184], ["like_pool_add", "src/store/store.c", 2217], ["like_pool_free", "src/store/store.c", 2225], ["lisp_head_text", "internal/cbm/extract_imports.c", 1714], ["lisp_is_def_head", "internal/cbm/extract_defs.c", 5233], ["lisp_process_list", "internal/cbm/extract_imports.c", 1730], ["lisp_push_clause_modules", "internal/cbm/extract_imports.c", 1695], ["lisp_push_module", "internal/cbm/extract_imports.c", 1636], ["lisp_set_namespace", "internal/cbm/extract_imports.c", 1682], ["lisp_strip_kw", "internal/cbm/extract_imports.c", 1669], ["literal_from_arg", "internal/cbm/extract_channels.c", 71], ["literal_from_first_child", "internal/cbm/extract_channels.c", 83], ["load_config_file", "src/discover/userconfig.c", 233], ["load_tsconfig_file", "src/pipeline/path_alias.c", 125], ["local_optimize", "src/ui/layout3d.c", 216], ["local_rel_path", "src/discover/discover.c", 262], ["log_dump_summary", "src/graph_buffer/graph_buffer.c", 1343], ["log_extract_done", "src/pipeline/pass_parallel.c", 525], ["log_extract_fail", "src/pipeline/pass_parallel.c", 518], ["log_extract_mem_stats", "src/pipeline/pass_parallel.c", 701], ["log_phase_mem", "src/pipeline/pipeline.c", 134], ["looks_like_regex", "src/cypher/cypher.c", 2511], ["lookup_member_type", "internal/cbm/lsp/ts_lsp.c", 1288], ["lookup_node_qn", "src/pipeline/pass_cross_repo.c", 470], ["lookup_pkg", "src/store/store.c", 3443], ["lookup_string_constant", "internal/cbm/extract_calls.c", 29], ["lookup_type_with_project", "internal/cbm/lsp/php_lsp.c", 254], ["louvain_node_index", "src/store/store.c", 4110], ["lowercase_into", "src/pipeline/pass_configlink.c", 265], ["lsp_idx_free_key", "src/pipeline/pass_parallel.c", 1700], ["lsp_node_text", "internal/cbm/lsp/go_lsp.c", 55], ["macro_consume_balanced", "internal/cbm/lsp/rust_lsp.c", 2648], ["macro_consume_fragment", "internal/cbm/lsp/rust_lsp.c", 2706], ["macro_consume_ident", "internal/cbm/lsp/rust_lsp.c", 2626], ["macro_env_lookup", "internal/cbm/lsp/rust_lsp.c", 2820], ["macro_skip_ws", "internal/cbm/lsp/rust_lsp.c", 2606], ["macro_substitute", "internal/cbm/lsp/rust_lsp.c", 2929], ["main", "src/main.c", 387], ["make_edge_key", "src/graph_buffer/graph_buffer.c", 138], ["make_id_key", "src/graph_buffer/graph_buffer.c", 134], ["make_like_hint", "src/store/store.c", 2233], ["make_single_base", "internal/cbm/extract_defs.c", 1562], ["make_sorted_perm", "internal/cbm/sqlite_writer.c", 1364], ["make_src_type_key", "src/graph_buffer/graph_buffer.c", 142], ["make_transient", "src/store/store.c", 81], ["match", "src/cypher/cypher.c", 457], ["match_dep_to_import", "src/pipeline/pass_configlink.c", 275], ["match_infra_routes", "src/pipeline/pass_route_nodes.c", 271], ["match_qn", "internal/cbm/service_patterns.c", 541], ["match_unrooted", "src/discover/gitignore.c", 321], ["mcp_sqlite_transient", "src/mcp/mcp.c", 1245], ["merge_copy_new_node", "src/graph_buffer/graph_buffer.c", 1078], ["merge_remap_edges", "src/graph_buffer/graph_buffer.c", 1103], ["merge_sim_edges", "src/pipeline/pass_similarity.c", 232], ["mkdirp", "src/cli/cli.c", 522], ["multiarg_func_canonical", "src/cypher/cypher.c", 1395], ["name_ieq", "internal/cbm/cbm.c", 406], ["name_in_set", "internal/cbm/cbm.c", 415], ["navigate", "src/foundation/yaml.c", 329], ["ncol_file", "internal/cbm/sqlite_writer.c", 1650], ["ncol_label", "internal/cbm/sqlite_writer.c", 1644], ["ncol_name", "internal/cbm/sqlite_writer.c", 1647], ["ncol_qn", "internal/cbm/sqlite_writer.c", 1653], ["next_pow2", "internal/cbm/lsp/type_registry.c", 36], ["node_add_child", "src/foundation/yaml.c", 53], ["node_deep_copy", "src/cypher/cypher.c", 2229], ["node_fields_free", "src/cypher/cypher.c", 2239], ["node_is", "internal/cbm/lsp/php_lsp.c", 55], ["node_is_test", "src/pipeline/pass_tests.c", 47], ["node_keys_list", "src/cypher/cypher.c", 3156], ["node_kind_is", "internal/cbm/lsp/ts_lsp.c", 89], ["node_new", "src/foundation/yaml.c", 45], ["node_prop", "src/cypher/cypher.c", 2066], ["node_resolution_score", "src/mcp/mcp.c", 2285], ["node_string_field", "src/cypher/cypher.c", 2042], ["node_text", "internal/cbm/lsp/ts_lsp.c", 85], ["normalise_node_type", "src/simhash/minhash.c", 98], ["normalize_string_handler", "internal/cbm/extract_calls.c", 1065], ["normalize_url_arg", "src/pipeline/pass_parallel.c", 1337], ["normalize_worker", "src/semantic/semantic.c", 1029], ["now_ms", "src/ui/httpd.c", 59], ["now_ns", "internal/cbm/cbm.c", 71], ["ns_map_free_entry", "src/pipeline/pass_pkgmap.c", 1654], ["octant", "src/ui/layout3d.c", 140], ["octree_free", "src/ui/layout3d.c", 133], ["octree_insert", "src/ui/layout3d.c", 149], ["octree_new", "src/ui/layout3d.c", 122], ["on_discover", "src/cli/progress_sink.c", 93], ["on_done", "src/cli/progress_sink.c", 155], ["on_extract_progress", "src/cli/progress_sink.c", 171], ["on_gbuf_dump", "src/cli/progress_sink.c", 143], ["on_pass_start", "src/cli/progress_sink.c", 116], ["on_pass_timing", "src/cli/progress_sink.c", 126], ["on_route", "src/cli/progress_sink.c", 104], ["os_rss", "src/foundation/mem.c", 43], ["pad_file_to_page_boundary", "internal/cbm/sqlite_writer.c", 1896], ["page_size", "src/foundation/vmem.c", 40], ["parallel_sort_indexes", "internal/cbm/sqlite_writer.c", 1952], ["parent_watchdog_thread", "src/main.c", 111], ["parse_ada_imports", "internal/cbm/extract_imports.c", 2441], ["parse_aggregate_item", "src/cypher/cypher.c", 1472], ["parse_and_expr", "src/cypher/cypher.c", 1120], ["parse_atom_expr", "src/cypher/cypher.c", 1101], ["parse_auto_answer", "src/cli/cli.c", 2652], ["parse_bitbake_imports", "internal/cbm/extract_imports.c", 2141], ["parse_c_imports", "internal/cbm/extract_imports.c", 642], ["parse_capnp_imports", "internal/cbm/extract_imports.c", 2344], ["parse_case_expr", "src/cypher/cypher.c", 1263], ["parse_cmake_imports", "internal/cbm/extract_imports.c", 2114], ["parse_comparison_op", "src/cypher/cypher.c", 908], ["parse_condition_expr", "src/cypher/cypher.c", 1009], ["parse_crystal_imports", "internal/cbm/extract_imports.c", 2401], ["parse_csharp_imports", "internal/cbm/extract_imports.c", 1286], ["parse_css_imports", "internal/cbm/extract_imports.c", 1997], ["parse_dart_imports", "internal/cbm/extract_imports.c", 1023], ["parse_dlang_imports", "internal/cbm/extract_imports.c", 2361], ["parse_dotenv_line", "src/pipeline/pass_infrascan.c", 611], ["parse_elm_imports", "internal/cbm/extract_imports.c", 2472], ["parse_embedded_imports", "internal/cbm/extract_imports.c", 1421], ["parse_es_imports", "internal/cbm/extract_imports.c", 537], ["parse_exists_predicate", "src/cypher/cypher.c", 975], ["parse_fp_from_props", "src/pipeline/pass_similarity.c", 48], ["parse_fsharp_imports", "internal/cbm/extract_imports.c", 2416], ["parse_func_arg", "src/cypher/cypher.c", 1416], ["parse_generic_imports", "internal/cbm/extract_imports.c", 943], ["parse_git_log", "src/pipeline/pass_githistory.c", 114], ["parse_gn_imports", "internal/cbm/extract_imports.c", 2207], ["parse_go_import_spec", "internal/cbm/extract_imports.c", 114], ["parse_go_imports", "internal/cbm/extract_imports.c", 133], ["parse_hare_imports", "internal/cbm/extract_imports.c", 1523], ["parse_haskell_imports", "internal/cbm/extract_imports.c", 1053], ["parse_hop_range", "src/cypher/cypher.c", 598], ["parse_html_imports", "internal/cbm/extract_imports.c", 2045], ["parse_hyprlang_imports", "internal/cbm/extract_imports.c", 2708], ["parse_in_list", "src/cypher/cypher.c", 841], ["parse_java_imports", "internal/cbm/extract_imports.c", 544], ["parse_jsonnet_imports", "internal/cbm/extract_imports.c", 2265], ["parse_just_imports", "internal/cbm/extract_imports.c", 2221], ["parse_kconfig_imports", "internal/cbm/extract_imports.c", 2193], ["parse_kotlin_imports", "internal/cbm/extract_imports.c", 975], ["parse_lisp_imports", "internal/cbm/extract_imports.c", 1812], ["parse_list_item", "src/foundation/yaml.c", 134], ["parse_lua_imports", "internal/cbm/extract_imports.c", 749], ["parse_match_chain", "src/cypher/cypher.c", 1755], ["parse_match_pattern", "src/cypher/cypher.c", 1682], ["parse_meson_imports", "internal/cbm/extract_imports.c", 2161], ["parse_move_imports", "internal/cbm/extract_imports.c", 2506], ["parse_multiarg_func_item", "src/cypher/cypher.c", 1439], ["parse_named_func_item", "src/cypher/cypher.c", 1382], ["parse_narrowing", "internal/cbm/lsp/php_lsp.c", 1657], ["parse_narrowing_one", "internal/cbm/lsp/php_lsp.c", 1711], ["parse_nickel_imports", "internal/cbm/extract_imports.c", 2297], ["parse_nix_imports", "internal/cbm/extract_imports.c", 2237], ["parse_node", "src/cypher/cypher.c", 545], ["parse_not_expr", "src/cypher/cypher.c", 1111], ["parse_one_name_status", "src/pipeline/pass_gitdiff.c", 47], ["parse_or_expr", "src/cypher/cypher.c", 1156], ["parse_order_by_agg", "src/cypher/cypher.c", 1557], ["parse_order_by_clause", "src/cypher/cypher.c", 1596], ["parse_order_by_expr", "src/cypher/cypher.c", 1586], ["parse_order_by_var", "src/cypher/cypher.c", 1571], ["parse_param_text", "internal/cbm/lsp/java_lsp.c", 2998], ["parse_pascal_imports", "internal/cbm/extract_imports.c", 1555], ["parse_php_imports", "internal/cbm/extract_imports.c", 1257], ["parse_phpdoc_for_params", "internal/cbm/lsp/php_lsp.c", 689], ["parse_phpdoc_template_params", "internal/cbm/lsp/php_lsp.c", 3069], ["parse_pkl_imports", "internal/cbm/extract_imports.c", 2281], ["parse_post_where", "src/cypher/cypher.c", 1780], ["parse_powershell_imports", "internal/cbm/extract_imports.c", 1587], ["parse_props", "src/cypher/cypher.c", 475], ["parse_python_imports", "internal/cbm/extract_imports.c", 295], ["parse_r_imports", "internal/cbm/extract_imports.c", 895], ["parse_rel", "src/cypher/cypher.c", 704], ["parse_rel_bracket", "src/cypher/cypher.c", 682], ["parse_rel_types", "src/cypher/cypher.c", 623], ["parse_return", "src/cypher/cypher.c", 1677], ["parse_return_item", "src/cypher/cypher.c", 1503], ["parse_return_or_with", "src/cypher/cypher.c", 1609], ["parse_ruby_imports", "internal/cbm/extract_imports.c", 716], ["parse_rust_imports", "internal/cbm/extract_imports.c", 579], ["parse_semver", "src/cli/cli.c", 138], ["parse_smali_imports", "internal/cbm/extract_imports.c", 2558], ["parse_smithy_imports", "internal/cbm/extract_imports.c", 2675], ["parse_spec_imports", "internal/cbm/extract_imports.c", 1352], ["parse_starlark_imports", "internal/cbm/extract_imports.c", 1830], ["parse_string_func_item", "src/cypher/cypher.c", 1491], ["parse_tablegen_imports", "internal/cbm/extract_imports.c", 2384], ["parse_tcl_imports", "internal/cbm/extract_imports.c", 1870], ["parse_teal_imports", "internal/cbm/extract_imports.c", 1904], ["parse_thrift_imports", "internal/cbm/extract_imports.c", 2327], ["parse_tlaplus_imports", "internal/cbm/extract_imports.c", 2584], ["parse_token_index", "src/semantic/semantic.c", 1433], ["parse_ts_type_text", "internal/cbm/lsp/ts_lsp.c", 140], ["parse_type_arguments", "internal/cbm/lsp/java_lsp.c", 462], ["parse_ui_flags", "src/main.c", 351], ["parse_unwind_clause", "src/cypher/cypher.c", 1717], ["parse_value_literal", "src/cypher/cypher.c", 1236], ["parse_var_dot_prop", "src/cypher/cypher.c", 1354], ["parse_vhdl_imports", "internal/cbm/extract_imports.c", 2616], ["parse_where", "src/cypher/cypher.c", 1174], ["parse_wit_imports", "internal/cbm/extract_imports.c", 2645], ["parse_wolfram_imports", "internal/cbm/extract_imports.c", 1172], ["parse_xor_expr", "src/cypher/cypher.c", 1138], ["parse_zig_imports", "internal/cbm/extract_imports.c", 1082], ["parse_zsh_imports", "internal/cbm/extract_imports.c", 1939], ["pass1_quantize_worker", "src/semantic/semantic.c", 1175], ["pass_structure", "src/pipeline/pipeline.c", 298], ["path_append_segment", "src/pipeline/fqn.c", 143], ["path_basename", "internal/cbm/helpers.c", 226], ["path_dirname", "src/pipeline/pass_pkgmap.c", 142], ["path_is_absolute", "src/git/git_context.c", 99], ["path_last", "internal/cbm/extract_imports.c", 94], ["path_last_segment", "internal/cbm/lsp/rust_lsp.c", 232], ["path_pop_segment", "src/pipeline/fqn.c", 158], ["pb_add_cell", "internal/cbm/sqlite_writer.c", 536], ["pb_build_interior", "internal/cbm/sqlite_writer.c", 661], ["pb_cell_fits", "internal/cbm/sqlite_writer.c", 527], ["pb_ensure_leaf_cap", "internal/cbm/sqlite_writer.c", 1034], ["pb_finalize_table", "internal/cbm/sqlite_writer.c", 1158], ["pb_flush_leaf", "internal/cbm/sqlite_writer.c", 479], ["pb_free", "internal/cbm/sqlite_writer.c", 469], ["pb_init", "internal/cbm/sqlite_writer.c", 454], ["pb_promote_and_flush", "internal/cbm/sqlite_writer.c", 1221], ["peek", "src/cypher/cypher.c", 439], ["peek_is_list", "src/foundation/yaml.c", 178], ["phase3c_export_token_vectors", "src/pipeline/pass_semantic_edges.c", 954], ["phase5a_build_hyperplanes", "src/pipeline/pass_semantic_edges.c", 981], ["php_add_phpstan_alias", "internal/cbm/lsp/php_lsp.c", 582], ["php_eval_expr_type", "internal/cbm/lsp/php_lsp.c", 831], ["php_is_builtin_type_name", "internal/cbm/lsp/php_lsp.c", 108], ["php_lookup_phpstan_alias", "internal/cbm/lsp/php_lsp.c", 610], ["php_lsp_process_file", "internal/cbm/lsp/php_lsp.c", 2583], ["php_node_text", "internal/cbm/lsp/php_lsp.c", 51], ["php_ns_to_dot", "internal/cbm/lsp/php_lsp.c", 78], ["php_parse_type_node", "internal/cbm/lsp/php_lsp.c", 413], ["php_resolve_calls_in_node", "internal/cbm/lsp/php_lsp.c", 2104], ["php_resolve_class_name", "internal/cbm/lsp/php_lsp.c", 186], ["php_short_name", "internal/cbm/lsp/php_lsp.c", 97], ["php_split_pipe", "internal/cbm/lsp/php_lsp.c", 4055], ["phpdoc_clean", "internal/cbm/lsp/php_lsp.c", 479], ["pick_resolved_node", "src/mcp/mcp.c", 2304], ["pkg_entries_push", "src/pipeline/pass_pkgmap.c", 104], ["pkg_in_list", "src/store/store.c", 3748], ["pkgmap_free_entry", "src/pipeline/pass_pkgmap.c", 997], ["pkgmap_is_reparse_point", "src/pipeline/pass_pkgmap.c", 818], ["pkgmap_itoa", "src/pipeline/pass_pkgmap.c", 85], ["pkgmap_read_file", "src/pipeline/pass_pkgmap.c", 35], ["pkgmap_safe_stat", "src/pipeline/pass_pkgmap.c", 784], ["plan_record", "src/cli/cli.c", 2930], ["poll_project", "src/watcher/watcher.c", 413], ["pom_find_tag", "src/pipeline/pass_pkgmap.c", 535], ["pop_enclosing_class", "internal/cbm/lsp/java_lsp.c", 338], ["pop_expired_scopes", "internal/cbm/extract_unified.c", 27], ["pp_json_escaped_len", "src/pipeline/pass_parallel.c", 163], ["predump_cfg", "src/pipeline/pipeline.c", 513], ["predump_complexity", "src/pipeline/pipeline.c", 516], ["predump_deco", "src/pipeline/pipeline.c", 501], ["predump_route", "src/pipeline/pipeline.c", 504], ["predump_sem", "src/pipeline/pipeline.c", 510], ["predump_sim", "src/pipeline/pipeline.c", 507], ["prefix_icase", "src/cli/cli.c", 3859], ["prepare_cached", "src/store/store.c", 186], ["prepare_stripped_db", "src/pipeline/artifact.c", 282], ["print_detected_agents", "src/cli/cli.c", 2878], ["print_help", "src/main.c", 282], ["process_assignment", "internal/cbm/lsp/php_lsp.c", 1266], ["process_assignment_type_assign", "internal/cbm/extract_type_assigns.c", 114], ["process_block", "internal/cbm/lsp/java_lsp.c", 1459], ["process_body_type_ref", "internal/cbm/extract_type_refs.c", 209], ["process_callback_arrow", "internal/cbm/lsp/ts_lsp.c", 2351], ["process_catch", "internal/cbm/lsp/php_lsp.c", 1393], ["process_class_decl", "internal/cbm/lsp/php_lsp.c", 2430], ["process_commonjs_require", "internal/cbm/extract_imports.c", 434], ["process_declarator_type_assign", "internal/cbm/extract_type_assigns.c", 144], ["process_def", "src/pipeline/pass_definitions.c", 289], ["process_enhanced_for", "internal/cbm/lsp/java_lsp.c", 1424], ["process_es_import_statement", "internal/cbm/extract_imports.c", 397], ["process_field_decl", "internal/cbm/lsp/java_lsp.c", 1473], ["process_foreach", "internal/cbm/lsp/php_lsp.c", 1295], ["process_func_type_refs", "internal/cbm/extract_type_refs.c", 262], ["process_function", "internal/cbm/lsp/go_lsp.c", 1476], ["process_function_like", "internal/cbm/lsp/php_lsp.c", 2308], ["process_go_var_type_assign", "internal/cbm/extract_type_assigns.c", 129], ["process_if_statement", "internal/cbm/lsp/php_lsp.c", 1990], ["process_import_clause", "internal/cbm/extract_imports.c", 364], ["process_keyword_arg", "internal/cbm/extract_calls.c", 814], ["process_kustomize_pair", "internal/cbm/extract_k8s.c", 123], ["process_local_var_decl", "internal/cbm/lsp/java_lsp.c", 1393], ["process_named_imports", "internal/cbm/extract_imports.c", 338], ["process_node", "internal/cbm/lsp/ts_lsp.c", 2664], ["process_py_import_from", "internal/cbm/extract_imports.c", 248], ["process_py_import_stmt", "internal/cbm/extract_imports.c", 189], ["process_rust_let_type_assign", "internal/cbm/extract_type_assigns.c", 156], ["process_throw_node", "internal/cbm/extract_semantic.c", 108], ["process_wolfram_get_top", "internal/cbm/extract_imports.c", 1112], ["process_wolfram_needs", "internal/cbm/extract_imports.c", 1131], ["project_db_path", "src/mcp/mcp.c", 772], ["project_star_row", "src/cypher/cypher.c", 3831], ["project_star_var", "src/cypher/cypher.c", 3814], ["prompt_yn", "src/cli/cli.c", 2663], ["pthread_worker", "src/pipeline/worker_pool.c", 42], ["push_enclosing_class", "internal/cbm/lsp/java_lsp.c", 321], ["push_path_import", "internal/cbm/extract_imports.c", 2064], ["push_pattern_token", "src/pipeline/pass_semantic_edges.c", 114], ["push_scope", "internal/cbm/extract_unified.c", 16], ["push_simple_class_def", "internal/cbm/extract_defs.c", 2781], ["push_string_descendant_import", "internal/cbm/extract_imports.c", 2089], ["push_var_def", "internal/cbm/extract_defs.c", 3874], ["put_int_be", "internal/cbm/sqlite_writer.c", 266], ["put_u16", "internal/cbm/sqlite_writer.c", 274], ["put_u32", "internal/cbm/sqlite_writer.c", 280], ["put_varint", "internal/cbm/sqlite_writer.c", 176], ["pxc_free_import_map", "src/pipeline/pass_lsp_cross.c", 254], ["pxc_join_pipe", "src/pipeline/pass_lsp_cross.c", 102], ["pxc_map_label", "src/pipeline/pass_lsp_cross.c", 88], ["pxc_module_entry_free_cb", "src/pipeline/pass_lsp_cross.c", 523], ["pxc_read_file", "src/pipeline/pass_lsp_cross.c", 58], ["py_bind_dotted_prefixes", "internal/cbm/lsp/py_lsp.c", 109], ["py_bind_for_target", "internal/cbm/lsp/py_lsp.c", 590], ["py_bind_module_classes", "internal/cbm/lsp/py_lsp.c", 3075], ["py_bind_parameters", "internal/cbm/lsp/py_lsp.c", 2858], ["py_bind_walrus_in", "internal/cbm/lsp/py_lsp.c", 1931], ["py_binop_dunder", "internal/cbm/lsp/py_lsp.c", 2074], ["py_block_terminates", "internal/cbm/lsp/py_lsp.c", 1962], ["py_classify_direction", "internal/cbm/extract_channels.c", 453], ["py_classify_receiver", "internal/cbm/extract_channels.c", 392], ["py_emit_call_for", "internal/cbm/lsp/py_lsp.c", 1563], ["py_emit_dunder_call", "internal/cbm/lsp/py_lsp.c", 2115], ["py_eval_expr_type", "internal/cbm/lsp/py_lsp.c", 683], ["py_func_return_type", "internal/cbm/lsp/py_lsp.c", 578], ["py_is_init_method", "internal/cbm/lsp/py_lsp.c", 2982], ["py_iterable_element_type", "internal/cbm/lsp/py_lsp.c", 637], ["py_literal_type", "internal/cbm/lsp/py_lsp.c", 492], ["py_lookup_dict_dispatch", "internal/cbm/lsp/py_lsp.c", 309], ["py_lookup_lambda", "internal/cbm/lsp/py_lsp.c", 227], ["py_lsp_add_import", "internal/cbm/lsp/py_lsp.c", 58], ["py_lsp_bind_imports", "internal/cbm/lsp/py_lsp.c", 136], ["py_lsp_lookup_in_scope", "internal/cbm/lsp/py_lsp.c", 174], ["py_lsp_process_file", "internal/cbm/lsp/py_lsp.c", 3094], ["py_match_is_none", "internal/cbm/lsp/py_lsp.c", 1849], ["py_node_text", "internal/cbm/lsp/py_lsp.c", 182], ["py_normalize_name", "src/pipeline/pass_pkgmap.c", 401], ["py_parse_type_text", "internal/cbm/lsp/py_lsp.c", 2661], ["py_process_call", "internal/cbm/extract_channels.c", 466], ["py_process_class", "internal/cbm/lsp/py_lsp.c", 2990], ["py_process_function", "internal/cbm/lsp/py_lsp.c", 2930], ["py_process_statement", "internal/cbm/lsp/py_lsp.c", 1279], ["py_register_dict_literal", "internal/cbm/lsp/py_lsp.c", 258], ["py_register_lambda", "internal/cbm/lsp/py_lsp.c", 200], ["py_resolve_annotation", "internal/cbm/lsp/py_lsp.c", 2672], ["py_resolve_calls_in", "internal/cbm/lsp/py_lsp.c", 2138], ["py_split_pipe", "internal/cbm/lsp/py_lsp.c", 3351], ["py_split_subscript_args", "internal/cbm/lsp/py_lsp.c", 2415], ["py_string_literal_value", "internal/cbm/lsp/py_lsp.c", 240], ["py_strip_none", "internal/cbm/lsp/py_lsp.c", 1906], ["py_trim_ws", "internal/cbm/lsp/py_lsp.c", 2397], ["py_underlying_ident", "internal/cbm/lsp/py_lsp.c", 1821], ["py_walk_if_statement", "internal/cbm/lsp/py_lsp.c", 1978], ["queue_empty", "internal/cbm/ac.c", 64], ["queue_free", "internal/cbm/ac.c", 67], ["queue_init", "internal/cbm/ac.c", 53], ["queue_pop", "internal/cbm/ac.c", 61], ["queue_push", "internal/cbm/ac.c", 58], ["r_collect_imports", "internal/cbm/extract_imports.c", 838], ["r_push_import", "internal/cbm/extract_imports.c", 811], ["rand_float", "src/ui/layout3d.c", 108], ["rb_add_row", "src/cypher/cypher.c", 2568], ["rb_apply_distinct", "src/cypher/cypher.c", 3106], ["rb_apply_order_by", "src/cypher/cypher.c", 3045], ["rb_apply_skip_limit", "src/cypher/cypher.c", 3074], ["rb_find_order_column", "src/cypher/cypher.c", 3011], ["rb_free", "src/cypher/cypher.c", 3139], ["rb_init", "src/cypher/cypher.c", 2554], ["rb_is_numeric_column", "src/cypher/cypher.c", 3026], ["rb_set_columns", "src/cypher/cypher.c", 2560], ["reach_cache_free_key", "src/pipeline/registry.c", 193], ["read_file", "src/pipeline/pass_semantic.c", 28], ["read_file_alloc", "src/pipeline/artifact.c", 60], ["read_file_lines", "src/mcp/mcp.c", 2509], ["read_file_str", "src/cli/cli.c", 1142], ["read_json_file", "src/cli/cli.c", 677], ["read_metadata_original_size", "src/pipeline/artifact.c", 168], ["read_metadata_version", "src/pipeline/artifact.c", 144], ["read_small_file", "src/foundation/system_info.c", 117], ["rebuild_edge_secondary_indexes", "src/graph_buffer/graph_buffer.c", 329], ["rebuild_signatures_from_ast", "internal/cbm/lsp/ts_lsp.c", 4012], ["rec_add_blob", "internal/cbm/sqlite_writer.c", 388], ["rec_add_int", "internal/cbm/sqlite_writer.c", 363], ["rec_add_null", "internal/cbm/sqlite_writer.c", 358], ["rec_add_text", "internal/cbm/sqlite_writer.c", 377], ["rec_finalize", "internal/cbm/sqlite_writer.c", 400], ["rec_free", "internal/cbm/sqlite_writer.c", 353], ["rec_init", "internal/cbm/sqlite_writer.c", 348], ["recompute_state", "internal/cbm/extract_unified.c", 34], ["recover_kotlin_error_classes", "internal/cbm/extract_defs.c", 5333], ["reg_type", "internal/cbm/lsp/generated/cpp_stdlib_data.c", 32], ["regex_free_cb", "src/store/store.c", 445], ["register_edge_in_indexes", "src/graph_buffer/graph_buffer.c", 316], ["register_node_in_indexes", "src/graph_buffer/graph_buffer.c", 283], ["registry_visitor", "src/pipeline/pipeline_incremental.c", 526], ["release_gbuf_indexes", "src/graph_buffer/graph_buffer.c", 347], ["remap_id", "src/graph_buffer/graph_buffer.c", 1199], ["remove_edge_from_ptr_array", "src/graph_buffer/graph_buffer.c", 218], ["remove_hooks_json", "src/cli/cli.c", 1782], ["remove_node_from_ptr_array", "src/graph_buffer/graph_buffer.c", 231], ["request_shutdown", "src/main.c", 70], ["resolve_arrow_func_name", "internal/cbm/extract_defs.c", 3447], ["resolve_builtin_type", "internal/cbm/lsp/go_lsp.c", 87], ["resolve_c_declarator_name", "internal/cbm/extract_defs.c", 532], ["resolve_cache_free_entry", "src/pipeline/registry.c", 277], ["resolve_call_at", "internal/cbm/lsp/ts_lsp.c", 2211], ["resolve_calls_in_node", "internal/cbm/lsp/go_lsp.c", 1111], ["resolve_chained_selector", "internal/cbm/extract_calls.c", 112], ["resolve_commonlisp_func_name", "internal/cbm/extract_defs.c", 362], ["resolve_condition_value", "src/cypher/cypher.c", 2327], ["resolve_dart_method_name", "internal/cbm/extract_defs.c", 3426], ["resolve_db_path", "src/pipeline/pipeline.c", 226], ["resolve_elm_func_name", "internal/cbm/extract_defs.c", 385], ["resolve_exception_name", "internal/cbm/extract_semantic.c", 41], ["resolve_exports_dot", "src/pipeline/pass_pkgmap.c", 247], ["resolve_field_name_node", "internal/cbm/extract_defs.c", 4795], ["resolve_func_name", "internal/cbm/extract_defs.c", 686], ["resolve_func_name_c_family", "internal/cbm/extract_defs.c", 664], ["resolve_func_name_fp", "internal/cbm/extract_defs.c", 422], ["resolve_func_name_node", "internal/cbm/extract_unified.c", 91], ["resolve_func_name_scripting", "internal/cbm/extract_defs.c", 298], ["resolve_function_call", "internal/cbm/lsp/php_lsp.c", 1432], ["resolve_haskell_func_name", "internal/cbm/extract_defs.c", 342], ["resolve_identifier", "internal/cbm/extract_channels.c", 172], ["resolve_identifier_type", "internal/cbm/lsp/java_lsp.c", 794], ["resolve_import", "internal/cbm/lsp/go_lsp.c", 61], ["resolve_js_relative", "src/pipeline/fqn.c", 246], ["resolve_jsx_element", "internal/cbm/lsp/ts_lsp.c", 2619], ["resolve_julia_func_name", "internal/cbm/extract_defs.c", 229], ["resolve_kotlin_var_name", "internal/cbm/extract_defs.c", 4332], ["resolve_lean_func_name", "internal/cbm/extract_defs.c", 323], ["resolve_lhs_write_name", "internal/cbm/extract_semantic.c", 149], ["resolve_lua_func_name", "internal/cbm/extract_defs.c", 201], ["resolve_makefile_func_name", "internal/cbm/extract_defs.c", 376], ["resolve_member_call", "internal/cbm/lsp/php_lsp.c", 1496], ["resolve_method_call", "internal/cbm/lsp/java_lsp.c", 1807], ["resolve_method_name", "internal/cbm/extract_defs.c", 3467], ["resolve_ocaml_func_name", "internal/cbm/extract_defs.c", 247], ["resolve_param_name", "internal/cbm/extract_defs.c", 2281], ["resolve_path", "src/pipeline/pass_compile_commands.c", 60], ["resolve_path_to_type_qn", "internal/cbm/lsp/rust_lsp.c", 557], ["resolve_phpdoc_type", "internal/cbm/lsp/php_lsp.c", 621], ["resolve_pkg_entry", "src/pipeline/pass_pkgmap.c", 265], ["resolve_py_module_node", "internal/cbm/extract_imports.c", 221], ["resolve_python_relative", "src/pipeline/fqn.c", 202], ["resolve_qualified_name", "internal/cbm/extract_defs.c", 468], ["resolve_r_func_name", "internal/cbm/extract_defs.c", 556], ["resolve_slash_prefix", "src/pipeline/pass_pkgmap.c", 1015], ["resolve_sql_func_name", "internal/cbm/extract_defs.c", 260], ["resolve_static_call", "internal/cbm/lsp/php_lsp.c", 1542], ["resolve_store", "src/mcp/mcp.c", 788], ["resolve_target_relative", "src/pipeline/path_alias.c", 68], ["resolve_toplevel_arrow_name", "internal/cbm/extract_defs.c", 642], ["resolve_type_with_imports", "internal/cbm/lsp/ts_lsp.c", 1873], ["resolve_vimscript_func_name", "internal/cbm/extract_defs.c", 285], ["resolve_wolfram_func_name", "internal/cbm/extract_defs.c", 403], ["resolve_worker", "src/pipeline/pass_parallel.c", 2065], ["resolve_write_lhs_node", "internal/cbm/extract_semantic.c", 201], ["resolve_zig_test_name", "internal/cbm/extract_defs.c", 272], ["result_push", "src/simhash/minhash.c", 437], ["ret_agg_accumulate", "src/cypher/cypher.c", 3918], ["ret_agg_emit_row", "src/cypher/cypher.c", 3999], ["ret_agg_free", "src/cypher/cypher.c", 3948], ["return_type_of", "internal/cbm/lsp/ts_lsp.c", 1583], ["rmdir_recursive", "src/cli/cli.c", 552], ["rmdir_scan_dir", "src/cli/cli.c", 531], ["round_to_page", "src/foundation/vmem.c", 52], ["route_edge_visitor", "src/pipeline/pass_route_nodes.c", 73], ["rtrim", "src/pipeline/pass_infrascan.c", 129], ["ruby_process_call", "internal/cbm/extract_channels.c", 815], ["ruby_require_method", "internal/cbm/extract_imports.c", 678], ["run_cli", "src/main.c", 231], ["run_extract_resolve", "src/pipeline/pipeline_incremental.c", 535], ["run_githistory", "src/pipeline/pipeline.c", 907], ["run_predump_passes", "src/pipeline/pipeline.c", 520], ["run_pthreads", "src/pipeline/worker_pool.c", 54], ["run_serial", "src/pipeline/worker_pool.c", 27], ["rust_bind_pattern", "internal/cbm/lsp/rust_lsp.c", 3181], ["rust_binop_trait_method", "internal/cbm/lsp/rust_lsp.c", 2394], ["rust_collect_bounds_from_text", "internal/cbm/lsp/rust_lsp.c", 4116], ["rust_collect_macro_rules", "internal/cbm/lsp/rust_lsp.c", 2531], ["rust_collect_uses", "internal/cbm/lsp/rust_lsp.c", 4406], ["rust_deref_step", "internal/cbm/lsp/rust_lsp.c", 2206], ["rust_emit_operator_call", "internal/cbm/lsp/rust_lsp.c", 2426], ["rust_eval_expr_type", "internal/cbm/lsp/rust_lsp.c", 1248], ["rust_eval_expr_typed", "internal/cbm/lsp/rust_lsp.c", 2040], ["rust_eval_literal_type", "internal/cbm/lsp/rust_lsp.c", 1193], ["rust_expand_user_macro", "internal/cbm/lsp/rust_lsp.c", 2995], ["rust_impl_has_type_param", "internal/cbm/lsp/rust_lsp.c", 4221], ["rust_inject_syn_call", "internal/cbm/lsp/rust_lsp.c", 3356], ["rust_lookup_prelude", "internal/cbm/lsp/rust_lsp.c", 377], ["rust_lookup_type_param_bound", "internal/cbm/lsp/rust_lsp.c", 4096], ["rust_lsp_add_glob", "internal/cbm/lsp/rust_lsp.c", 102], ["rust_lsp_add_use", "internal/cbm/lsp/rust_lsp.c", 77], ["rust_lsp_process_file", "internal/cbm/lsp/rust_lsp.c", 4306], ["rust_macro_strip_outer", "internal/cbm/lsp/rust_lsp.c", 2474], ["rust_node_text", "internal/cbm/lsp/rust_lsp.c", 121], ["rust_parse_type_node", "internal/cbm/lsp/rust_lsp.c", 574], ["rust_process_call", "internal/cbm/extract_channels.c", 983], ["rust_process_function", "internal/cbm/lsp/rust_lsp.c", 3994], ["rust_process_impl", "internal/cbm/lsp/rust_lsp.c", 4249], ["rust_process_statement", "internal/cbm/lsp/rust_lsp.c", 3298], ["rust_resolve_call_expression", "internal/cbm/lsp/rust_lsp.c", 3401], ["rust_resolve_calls_in_node", "internal/cbm/lsp/rust_lsp.c", 3680], ["rust_resolve_macro_arg_exprs", "internal/cbm/lsp/rust_lsp.c", 3092], ["rust_resolve_path_expr", "internal/cbm/lsp/rust_lsp.c", 428], ["rust_resolve_use", "internal/cbm/lsp/rust_lsp.c", 306], ["rust_strip_turbofish", "internal/cbm/lsp/rust_lsp.c", 279], ["rust_type_derefs_to_first_arg", "internal/cbm/lsp/rust_lsp.c", 2177], ["rust_walk_macro_tokens", "internal/cbm/lsp/rust_lsp.c", 2372], ["safe_buf_free_impl", "src/foundation/platform.h", 55], ["safe_free_impl", "src/foundation/platform.h", 36], ["safe_kind", "internal/cbm/lsp/c_lsp.c", 11], ["safe_props", "src/store/store.c", 168], ["safe_realloc", "src/foundation/platform.h", 22], ["safe_stat", "src/discover/discover.c", 370], ["safe_str", "internal/cbm/sqlite_writer.c", 1358], ["safe_str_free", "src/foundation/platform.h", 46], ["sanitize_expr", "src/pipeline/pass_parallel.c", 1065], ["scalar_func_canonical", "src/cypher/cypher.c", 1332], ["scan_dockerfile_line", "src/pipeline/pass_envscan.c", 223], ["scan_edge", "src/store/store.c", 1386], ["scan_hcl_block_for_bindings", "internal/cbm/extract_unified.c", 656], ["scan_infra_bindings", "internal/cbm/extract_unified.c", 749], ["scan_mapping_for_bindings", "internal/cbm/extract_unified.c", 491], ["scan_node", "src/store/store.c", 1068], ["scan_string_consts_js", "internal/cbm/extract_channels.c", 102], ["scan_string_consts_python", "internal/cbm/extract_channels.c", 136], ["scan_terraform_line", "src/pipeline/pass_envscan.c", 253], ["scan_yaml_for_infra_bindings", "internal/cbm/extract_unified.c", 534], ["scan_yaml_line", "src/pipeline/pass_envscan.c", 239], ["score_seen_insert", "src/pipeline/pass_semantic_edges.c", 725], ["score_try_emit", "src/pipeline/pass_semantic_edges.c", 772], ["score_worker", "src/pipeline/pass_semantic_edges.c", 792], ["search_apply_degree_filter", "src/store/store.c", 2245], ["seed_source_dir", "src/pipeline/fqn.c", 169], ["seen_set_free", "src/simhash/minhash.c", 431], ["seen_set_init", "src/simhash/minhash.c", 407], ["seen_set_insert", "src/simhash/minhash.c", 413], ["select_update_variant", "src/cli/cli.c", 3831], ["sem_target_init_from_src", "src/semantic/semantic.c", 821], ["sem_vec_add_int8_scaled", "src/semantic/semantic.c", 954], ["send_all", "src/ui/httpd.c", 94], ["serve_embedded", "src/ui/http_server.c", 110], ["set_def_complexity", "internal/cbm/extract_defs.c", 2611], ["set_namespace_from_decl", "internal/cbm/lsp/php_lsp.c", 2566], ["setup_signal_handlers", "src/main.c", 373], ["sha256_file", "src/cli/cli.c", 2702], ["shell_dispatch_line", "src/pipeline/pass_infrascan.c", 835], ["shell_parse_docker", "src/pipeline/pass_infrascan.c", 784], ["shell_parse_export", "src/pipeline/pass_infrascan.c", 672], ["shell_parse_plain_var", "src/pipeline/pass_infrascan.c", 710], ["shell_parse_source", "src/pipeline/pass_infrascan.c", 746], ["shell_try_shebang", "src/pipeline/pass_infrascan.c", 816], ["should_skip_fqn_part", "internal/cbm/helpers.c", 1010], ["sig_build_worker", "src/pipeline/pass_semantic_edges.c", 671], ["signal_handler", "src/main.c", 95], ["sim_query_worker", "src/pipeline/pass_similarity.c", 176], ["simple_name", "src/pipeline/registry.c", 91], ["simplify_type", "internal/cbm/lsp/ts_lsp.c", 1165], ["size_for_label", "src/ui/layout3d.c", 73], ["skip_ref_prefix", "internal/cbm/lsp/rust_lsp.c", 389], ["skip_value", "internal/cbm/lsp/rust_cargo.c", 79], ["skip_ws", "src/pipeline/pass_infrascan.c", 99], ["skip_ws_and_comment", "internal/cbm/lsp/rust_cargo.c", 20], ["slab_calloc", "src/foundation/slab_alloc.c", 128], ["slab_free", "src/foundation/slab_alloc.c", 181], ["slab_grow", "src/foundation/slab_alloc.c", 75], ["slab_malloc", "src/foundation/slab_alloc.c", 107], ["slab_owns", "src/foundation/slab_alloc.c", 94], ["slab_realloc", "src/foundation/slab_alloc.c", 142], ["slab_rebuild_freelist", "src/foundation/slab_alloc.c", 62], ["slug_from_branch", "src/git/git_context.c", 157], ["smali_demangle_descriptor", "internal/cbm/extract_imports.c", 2535], ["small_cosine", "src/semantic/semantic.c", 1556], ["snapshot_project", "src/watcher/watcher.c", 470], ["snippet_suggestions", "src/mcp/mcp.c", 2826], ["sort_bindings", "src/cypher/cypher.c", 3376], ["sort_worker", "internal/cbm/sqlite_writer.c", 1545], ["sparse_tfidf_cosine", "src/semantic/semantic.c", 1571], ["spec_type_matches", "internal/cbm/extract_imports.c", 1340], ["split_generic_args", "internal/cbm/lsp/java_lsp.c", 2835], ["split_path_parts", "src/store/store.c", 3924], ["split_pipe_strings", "internal/cbm/lsp/go_lsp.c", 2024], ["split_pipe_types", "internal/cbm/lsp/go_lsp.c", 1992], ["sqlite_camel_split", "src/store/store.c", 418], ["sqlite_cosine_i8", "src/store/store.c", 511], ["sqlite_iregexp", "src/store/store.c", 482], ["sqlite_regexp", "src/store/store.c", 454], ["src_build_worker", "src/semantic/semantic.c", 1146], ["stat_mtime_ns", "src/pipeline/pipeline.c", 823], ["state_free", "src/watcher/watcher.c", 235], ["state_new", "src/watcher/watcher.c", 224], ["status_reason", "src/ui/httpd.c", 474], ["stellar_color", "src/ui/layout3d.c", 48], ["stmt_is_terminator", "internal/cbm/lsp/php_lsp.c", 1925], ["store_open_internal", "src/store/store.c", 558], ["store_set_error", "src/store/store.c", 140], ["store_set_error_sqlite", "src/store/store.c", 144], ["str_contains", "src/discover/discover.c", 130], ["str_ends_with", "src/pipeline/pass_tests.c", 55], ["str_eq_or_both_null", "internal/cbm/lsp/type_rep.c", 565], ["str_func_name", "src/cypher/cypher.c", 1222], ["str_in_list", "src/discover/discover.c", 108], ["strategy_dep_imports", "src/pipeline/pass_configlink.c", 292], ["strategy_key_symbols", "src/pipeline/pass_configlink.c", 146], ["strip_and_validate_string_arg", "internal/cbm/extract_calls.c", 667], ["strip_angle_brackets", "internal/cbm/extract_imports.c", 632], ["strip_cloud_run_suffixes", "src/pipeline/pass_route_nodes.c", 160], ["strip_decorator_syntax", "src/pipeline/pass_enrichment.c", 76], ["strip_ext", "internal/cbm/helpers.c", 232], ["strip_ext_len", "internal/cbm/helpers.c", 997], ["strip_extension", "src/pipeline/pass_pkgmap.c", 152], ["strip_file_extension", "src/pipeline/fqn.c", 53], ["strip_generic_args", "internal/cbm/extract_calls.c", 154], ["strip_generics", "internal/cbm/lsp/java_lsp.c", 226], ["strip_init_or_index", "src/pipeline/fqn.c", 85], ["strip_inline_comment", "src/foundation/yaml.c", 162], ["strip_perl_sigil", "internal/cbm/extract_defs.c", 4207], ["strip_quotes", "internal/cbm/extract_imports.c", 77], ["strip_resolved_ext", "src/pipeline/path_alias.c", 49], ["strip_surrounding_quotes", "src/pipeline/pass_infrascan.c", 601], ["strip_yaml_quotes", "internal/cbm/extract_unified.c", 430], ["svc_cache_free_key", "internal/cbm/service_patterns.c", 576], ["svc_enum_to_ptr", "internal/cbm/service_patterns.c", 569], ["svc_ptr_to_enum", "internal/cbm/service_patterns.c", 572], ["sveltekit_file_kind", "src/pipeline/pass_route_nodes.c", 832], ["sveltekit_file_visitor", "src/pipeline/pass_route_nodes.c", 978], ["sveltekit_route_path", "src/pipeline/pass_route_nodes.c", 862], ["sveltekit_server_method", "src/pipeline/pass_route_nodes.c", 949], ["synth_decorator_qn", "src/pipeline/pass_semantic.c", 355], ["sysctl_int", "src/foundation/system_info.c", 47], ["sysctl_size", "src/foundation/system_info.c", 56], ["test_to_prod_path", "src/pipeline/pass_tests.c", 174], ["text_serial_type", "internal/cbm/sqlite_writer.c", 211], ["tf_extract_ident", "src/pipeline/pass_infrascan.c", 949], ["tf_extract_quoted", "src/pipeline/pass_infrascan.c", 908], ["tf_extract_second_quoted", "src/pipeline/pass_infrascan.c", 973], ["tf_next_line", "src/pipeline/pass_infrascan.c", 1147], ["tf_parse_variable_attrs", "src/pipeline/pass_infrascan.c", 1088], ["tf_result_has_content", "src/pipeline/pass_infrascan.c", 1140], ["to_lower", "src/pipeline/pass_infrascan.c", 54], ["tokenize_path", "src/pipeline/fqn.c", 63], ["tokenize_worker", "src/pipeline/pass_semantic_edges.c", 561], ["toml_extract_name", "src/pipeline/pass_pkgmap.c", 350], ["translate_flags", "src/foundation/compat_regex.c", 73], ["translate_flags_tre", "src/foundation/compat_regex.c", 20], ["trigram_structural_weight", "src/simhash/minhash.c", 125], ["trim_dup", "src/foundation/yaml.c", 96], ["trim_heading_name", "internal/cbm/extract_defs.c", 2863], ["trim_newlines", "src/git/git_context.c", 32], ["trim_whitespace", "internal/cbm/extract_defs.c", 4399], ["try_artifact_bootstrap", "src/mcp/mcp.c", 2632], ["try_define_flag", "src/pipeline/pass_compile_commands.c", 104], ["try_emit_assignment_write", "internal/cbm/extract_semantic.c", 249], ["try_emit_usage", "internal/cbm/extract_usages.c", 90], ["try_generic_path_fields", "internal/cbm/extract_imports.c", 902], ["try_incremental_or_delete_db", "src/pipeline/pipeline.c", 763], ["try_load_nested_gitignore", "src/discover/discover.c", 409], ["try_upsert_infra_route", "src/pipeline/pipeline.c", 470], ["ts_builtin_compatible", "internal/cbm/lsp/ts_lsp.c", 657], ["ts_emit_unresolved_call", "internal/cbm/lsp/ts_lsp.c", 122], ["ts_eval_expr_type", "internal/cbm/lsp/ts_lsp.c", 1600], ["ts_is_assignable", "internal/cbm/lsp/ts_lsp.c", 907], ["ts_literal_promotes_to_builtin", "internal/cbm/lsp/ts_lsp.c", 666], ["ts_lsp_add_import", "internal/cbm/lsp/ts_lsp.c", 3148], ["ts_lsp_process_file", "internal/cbm/lsp/ts_lsp.c", 3062], ["ts_nstack_init", "internal/cbm/extract_node_stack.h", 26], ["ts_nstack_pop", "internal/cbm/extract_node_stack.h", 50], ["ts_nstack_push", "internal/cbm/extract_node_stack.h", 33], ["ts_nstack_push_children", "internal/cbm/extract_node_stack.h", 66], ["ts_parse_type_node", "internal/cbm/lsp/ts_lsp.c", 1942], ["ts_process_statement", "internal/cbm/lsp/ts_lsp.c", 2166], ["ts_relater_unwrap", "internal/cbm/lsp/ts_lsp.c", 649], ["tt_builtin", "internal/cbm/lsp/ts_lsp.c", 3171], ["tt_param", "internal/cbm/lsp/ts_lsp.c", 3174], ["type_of_identifier", "internal/cbm/lsp/ts_lsp.c", 1190], ["type_to_qn", "internal/cbm/lsp/c_lsp.c", 1341], ["type_to_qn_simple", "internal/cbm/lsp/type_registry.c", 463], ["unindex_edge", "src/graph_buffer/graph_buffer.c", 244], ["uninstall_claude_code", "src/cli/cli.c", 3458], ["uninstall_gemini_config", "src/cli/cli.c", 3516], ["union_member_dedupe", "internal/cbm/lsp/type_rep.c", 214], ["uniq_trig_init", "src/simhash/minhash.c", 184], ["uniq_trig_insert", "src/simhash/minhash.c", 190], ["unquote", "internal/cbm/extract_env_accesses.c", 17], ["unquote_string", "internal/cbm/extract_channels.c", 51], ["unsupported_clause_error", "src/cypher/cypher.c", 804], ["unwrap_array_text", "internal/cbm/lsp/java_lsp.c", 236], ["unwrap_block_mapping", "internal/cbm/extract_k8s.c", 107], ["unwrap_pair_value", "internal/cbm/extract_k8s.c", 205], ["unwrap_passthrough_template", "internal/cbm/lsp/ts_lsp.c", 1432], ["unwrap_template_inner", "internal/cbm/extract_defs.c", 2560], ["update_clear_indexes", "src/cli/cli.c", 3774], ["update_cors", "src/ui/http_server.c", 65], ["update_peak", "src/foundation/vmem.c", 98], ["upsert_hooks_json", "src/cli/cli.c", 1699], ["url_path", "src/pipeline/pass_route_nodes.c", 128], ["validate_edge_type", "src/mcp/mcp.c", 1166], ["varint_len", "internal/cbm/sqlite_writer.c", 200], ["vec_build_worker", "src/pipeline/pass_semantic_edges.c", 594], ["verify_download_checksum", "src/cli/cli.c", 2792], ["verify_project_indexed", "src/mcp/mcp.c", 1080], ["vs_clamp_int8", "src/store/store.c", 5649], ["vs_fill_sparse_random", "src/store/store.c", 5638], ["vs_normalize_and_quantize", "src/store/store.c", 5662], ["wait_readable", "src/ui/httpd.c", 72], ["walk_body_type_refs", "internal/cbm/extract_type_refs.c", 246], ["walk_calls", "internal/cbm/extract_calls.c", 744], ["walk_defs", "internal/cbm/extract_defs.c", 5418], ["walk_env_accesses", "internal/cbm/extract_env_accesses.c", 141], ["walk_es_imports", "internal/cbm/extract_imports.c", 496], ["walk_readwrites", "internal/cbm/extract_semantic.c", 264], ["walk_throws", "internal/cbm/extract_semantic.c", 126], ["walk_type_assigns", "internal/cbm/extract_type_assigns.c", 187], ["walk_type_refs", "internal/cbm/extract_type_refs.c", 286], ["walk_usages", "internal/cbm/extract_usages.c", 110], ["walk_variables_iter", "internal/cbm/extract_defs.c", 4617], ["walk_with_narrowing", "internal/cbm/lsp/php_lsp.c", 1916], ["walk_wolfram_imports", "internal/cbm/extract_imports.c", 1153], ["walk_yaml_mapping", "internal/cbm/extract_unified.c", 338], ["want_aspect", "src/store/store.c", 4934], ["watcher_index_fn", "src/main.c", 152], ["watcher_thread", "src/main.c", 134], ["weighted_minhash_update", "src/simhash/minhash.c", 208], ["where_append", "src/store/store.c", 2266], ["where_bind_text", "src/store/store.c", 2276], ["wide_stat", "src/discover/discover.c", 348], ["win_thread_wrapper", "src/foundation/compat_thread.c", 27], ["with_add_vbinding_var", "src/cypher/cypher.c", 3561], ["with_agg_accumulate", "src/cypher/cypher.c", 3522], ["with_agg_build_key", "src/cypher/cypher.c", 3455], ["with_agg_format", "src/cypher/cypher.c", 3546], ["with_agg_free", "src/cypher/cypher.c", 3571], ["with_apply_distinct", "src/cypher/cypher.c", 3699], ["with_proj_key", "src/cypher/cypher.c", 3680], ["with_sort_skip_limit", "src/cypher/cypher.c", 3418], ["write_db_after_nodes", "internal/cbm/sqlite_writer.c", 1974], ["write_diagnostics", "src/foundation/diagnostics.c", 92], ["write_empty_index_leaf", "internal/cbm/sqlite_writer.c", 1242], ["write_file_atomic", "src/pipeline/artifact.c", 88], ["write_file_str", "src/cli/cli.c", 1176], ["write_json_file", "src/cli/cli.c", 713], ["write_master_page1", "internal/cbm/sqlite_writer.c", 1836], ["write_sqlite_file_header", "internal/cbm/sqlite_writer.c", 1809], ["xml_tag_content", "src/pipeline/pass_pkgmap.c", 522], ["yy_doc_to_str", "src/mcp/mcp.c", 112]], "macros": [["ADD_FUNC", "internal/cbm/lsp/generated/rust_stdlib_data.c", 47], ["ADD_TYPE", "internal/cbm/lsp/generated/rust_stdlib_data.c", 38], ["BOOL_T", "internal/cbm/lsp/generated/cs_stdlib_data.c", 139], ["CADD_FUNC", "internal/cbm/lsp/generated/rust_crates_seed.c", 38], ["CADD_TYPE", "internal/cbm/lsp/generated/rust_crates_seed.c", 29], ["CBM_AC_CLEAR_LOW_BIT", "internal/cbm/ac.c", 29], ["CBM_AC_PATTERN_BIT", "internal/cbm/ac.c", 28], ["CBM_PROF_END", "src/foundation/profile.h", 44], ["CBM_PROF_END_N", "src/foundation/profile.h", 51], ["CBM_PROF_START", "src/foundation/profile.h", 39], ["CBM_SNPRINTF_APPEND", "src/foundation/str_util.h", 73], ["DBL", "internal/cbm/lsp/generated/cs_stdlib_data.c", 140], ["GROW_ARRAY", "internal/cbm/cbm.c", 108], ["INT", "internal/cbm/lsp/generated/cs_stdlib_data.c", 137], ["KT_FUNC0", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 44], ["KT_METHOD", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 54], ["KT_TYPE_SIMPLE", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 27], ["KT_TYPE_WITH_METHODS", "internal/cbm/lsp/generated/kotlin_stdlib_data.c", 35], ["LONG_T", "internal/cbm/lsp/generated/cs_stdlib_data.c", 138], ["OBJ", "internal/cbm/lsp/generated/cs_stdlib_data.c", 135], ["REG_CTOR", "internal/cbm/lsp/generated/java_stdlib_data.c", 63], ["REG_EXTENSION", "internal/cbm/lsp/generated/cs_stdlib_data.c", 111], ["REG_FIELD", "internal/cbm/lsp/generated/java_stdlib_data.c", 81], ["REG_FUNC", "internal/cbm/lsp/generated/c_stdlib_data.c", 8], ["REG_GENERIC_TYPE", "internal/cbm/lsp/generated/cs_stdlib_data.c", 62], ["REG_GENERIC_TYPE_P1", "internal/cbm/lsp/generated/cs_stdlib_data.c", 50], ["REG_METHOD", "internal/cbm/lsp/generated/cs_stdlib_data.c", 73], ["REG_STATIC", "internal/cbm/lsp/generated/cs_stdlib_data.c", 91], ["REG_TYPE", "internal/cbm/lsp/generated/cs_stdlib_data.c", 26], ["REG_TYPE_P1", "internal/cbm/lsp/generated/cs_stdlib_data.c", 39], ["REQUIRE_STORE", "src/mcp/mcp.c", 944], ["SLEN", "src/main.c", 35], ["STR", "internal/cbm/lsp/generated/cs_stdlib_data.c", 136], ["TS_FIELD", "src/foundation/constants.h", 55], ["TS_LSP_FIELD_LEN", "internal/cbm/lsp/ts_lsp.c", 35], ["UNK", "internal/cbm/lsp/generated/cs_stdlib_data.c", 142], ["VOID_T", "internal/cbm/lsp/generated/cs_stdlib_data.c", 141], ["cbm_da_clear", "src/foundation/dyn_array.h", 61], ["cbm_da_free", "src/foundation/dyn_array.h", 64], ["cbm_da_insert", "src/foundation/dyn_array.h", 85], ["cbm_da_last", "src/foundation/dyn_array.h", 58], ["cbm_da_pop", "src/foundation/dyn_array.h", 55], ["cbm_da_push", "src/foundation/dyn_array.h", 33], ["cbm_da_push_ptr", "src/foundation/dyn_array.h", 47], ["cbm_da_remove", "src/foundation/dyn_array.h", 96], ["cbm_da_reserve", "src/foundation/dyn_array.h", 73], ["cbm_log_debug", "src/foundation/log.h", 52], ["cbm_log_error", "src/foundation/log.h", 55], ["cbm_log_info", "src/foundation/log.h", 53], ["cbm_log_warn", "src/foundation/log.h", 54], ["cbm_mkdir", "src/foundation/compat.h", 67], ["cbm_pipe", "src/foundation/compat.h", 134], ["cbm_query_pattern", "src/cypher/cypher.h", 286], ["cbm_usleep", "src/foundation/compat.h", 25], ["safe_buf_free", "src/foundation/platform.h", 64], ["safe_free", "src/foundation/platform.h", 42], ["safe_grow", "src/foundation/platform.h", 72]], "types": [["CBMArena", "internal/cbm/arena.h", 20], ["CBMAutomaton", "internal/cbm/ac.c", 34], ["CBMBatchCLSPFile", "internal/cbm/lsp/c_lsp.h", 154], ["CBMBatchCSLSPFile", "internal/cbm/lsp/cs_lsp.h", 171], ["CBMBatchGoLSPFile", "internal/cbm/lsp/go_lsp.h", 145], ["CBMBatchJavaLSPFile", "internal/cbm/lsp/java_lsp.h", 163], ["CBMBatchPHPLSPFile", "internal/cbm/lsp/php_lsp.h", 120], ["CBMBatchPyLSPFile", "internal/cbm/lsp/py_lsp.h", 137], ["CBMBatchRustLSPFile", "internal/cbm/lsp/rust_lsp.h", 295], ["CBMBatchTSLSPFile", "internal/cbm/lsp/ts_lsp.h", 142], ["CBMCSUsing", "internal/cbm/lsp/cs_lsp.h", 64], ["CBMCSUsingKind", "internal/cbm/lsp/cs_lsp.h", 57], ["CBMCall", "internal/cbm/cbm.h", 239], ["CBMCallArg", "internal/cbm/cbm.h", 225], ["CBMCallArray", "internal/cbm/cbm.h", 351], ["CBMCargoDep", "internal/cbm/lsp/rust_cargo.h", 31], ["CBMCargoManifest", "internal/cbm/lsp/rust_cargo.h", 48], ["CBMCargoMember", "internal/cbm/lsp/rust_cargo.h", 36], ["CBMChannel", "internal/cbm/cbm.h", 317], ["CBMChannelArray", "internal/cbm/cbm.h", 417], ["CBMChannelDirection", "internal/cbm/cbm.h", 310], ["CBMCrossLspRegistries", "src/pipeline/pass_lsp_cross.h", 108], ["CBMDefArray", "internal/cbm/cbm.h", 345], ["CBMDefinition", "internal/cbm/cbm.h", 217], ["CBMDictLiteralEntry", "internal/cbm/lsp/py_lsp.h", 25], ["CBMDumpEdge", "internal/cbm/sqlite_writer.h", 28], ["CBMDumpNode", "internal/cbm/sqlite_writer.h", 18], ["CBMDumpTokenVec", "internal/cbm/sqlite_writer.h", 44], ["CBMDumpVector", "internal/cbm/sqlite_writer.h", 35], ["CBMEmbeddedLangSpec", "internal/cbm/lang_specs.h", 17], ["CBMEnvAccess", "internal/cbm/cbm.h", 270], ["CBMEnvAccessArray", "internal/cbm/cbm.h", 387], ["CBMExtractCtx", "internal/cbm/cbm.h", 501], ["CBMFileResult", "internal/cbm/cbm.h", 460], ["CBMFuncFlags", "internal/cbm/lsp/type_registry.h", 19], ["CBMHashTable", "src/foundation/hash_table.h", 21], ["CBMImplTrait", "internal/cbm/cbm.h", 323], ["CBMImplTraitArray", "internal/cbm/cbm.h", 411], ["CBMImport", "internal/cbm/cbm.h", 244], ["CBMImportArray", "internal/cbm/cbm.h", 357], ["CBMInfraBinding", "internal/cbm/cbm.h", 299], ["CBMInfraBindingArray", "internal/cbm/cbm.h", 405], ["CBMInternPool", "src/foundation/str_intern.c", 37], ["CBMKotlinUseKind", "internal/cbm/lsp/kotlin_lsp.h", 66], ["CBMLSPDef", "internal/cbm/lsp/go_lsp.h", 85], ["CBMLambdaEntry", "internal/cbm/lsp/py_lsp.h", 16], ["CBMLangSpec", "internal/cbm/lang_specs.h", 42], ["CBMLanguage", "internal/cbm/cbm.h", 174], ["CBMLogLevel", "src/foundation/log.h", 23], ["CBMLz4Entry", "internal/cbm/ac.h", 14], ["CBMLz4Match", "internal/cbm/ac.h", 20], ["CBMMatchResult", "internal/cbm/ac.h", 26], ["CBMModuleDefIndex", "src/pipeline/pass_lsp_cross.h", 77], ["CBMRWArray", "internal/cbm/cbm.h", 375], ["CBMReadWrite", "internal/cbm/cbm.h", 260], ["CBMRegisteredFunc", "internal/cbm/lsp/type_registry.h", 32], ["CBMRegisteredType", "internal/cbm/lsp/type_registry.h", 55], ["CBMRegistryHashEntry", "internal/cbm/lsp/type_registry.h", 63], ["CBMResolvedCall", "internal/cbm/cbm.h", 332], ["CBMResolvedCallArray", "internal/cbm/cbm.h", 338], ["CBMRustLSPDef", "internal/cbm/lsp/rust_lsp.h", 276], ["CBMScope", "internal/cbm/lsp/scope.h", 24], ["CBMScopeChunk", "internal/cbm/lsp/scope.h", 18], ["CBMStringConstantMap", "internal/cbm/cbm.h", 486], ["CBMStringInput", "internal/cbm/cbm.c", 198], ["CBMStringRef", "internal/cbm/cbm.h", 290], ["CBMStringRefArray", "internal/cbm/cbm.h", 399], ["CBMStringRefKind", "internal/cbm/cbm.h", 283], ["CBMThrow", "internal/cbm/cbm.h", 254], ["CBMThrowArray", "internal/cbm/cbm.h", 369], ["CBMType", "internal/cbm/lsp/type_rep.h", 46], ["CBMTypeAssign", "internal/cbm/cbm.h", 276], ["CBMTypeAssignArray", "internal/cbm/cbm.h", 393], ["CBMTypeKind", "internal/cbm/lsp/type_rep.h", 43], ["CBMTypeParam", "internal/cbm/lsp/type_rep.h", 52], ["CBMTypeRef", "internal/cbm/cbm.h", 265], ["CBMTypeRefArray", "internal/cbm/cbm.h", 381], ["CBMTypeRegistry", "internal/cbm/lsp/type_registry.h", 101], ["CBMUsage", "internal/cbm/cbm.h", 249], ["CBMUsageArray", "internal/cbm/cbm.h", 363], ["CBMVarBinding", "internal/cbm/lsp/scope.h", 10], ["CBM_DYN_ARRAY", "src/pipeline/registry.c", 75], ["CBM_SEM_DIM", "src/pipeline/pass_semantic_edges.c", 661], ["CLSPContext", "internal/cbm/lsp/c_lsp.h", 83], ["CSLSPContext", "internal/cbm/lsp/cs_lsp.h", 112], ["DeriveImpl", "internal/cbm/lsp/rust_lsp.c", 4793], ["DeriveMethod", "internal/cbm/lsp/rust_lsp.c", 4788], ["DynBuf", "internal/cbm/sqlite_writer.c", 293], ["EFCEntry", "internal/cbm/cbm.h", 471], ["EFCache", "internal/cbm/cbm.h", 476], ["GoLSPContext", "internal/cbm/lsp/go_lsp.h", 31], ["InternEntry", "src/foundation/str_intern.c", 35], ["JSDocParam", "internal/cbm/lsp/ts_lsp.c", 4318], ["JavaLSPContext", "internal/cbm/lsp/java_lsp.h", 93], ["JavaSAMSpec", "internal/cbm/lsp/java_lsp.c", 2025], ["KotlinLSPContext", "internal/cbm/lsp/kotlin_lsp.h", 115], ["MacroBinding", "internal/cbm/lsp/rust_lsp.c", 2589], ["MacroEnv", "internal/cbm/lsp/rust_lsp.c", 2603], ["MasterEntry", "internal/cbm/sqlite_writer.c", 1329], ["PHPLSPContext", "internal/cbm/lsp/php_lsp.h", 55], ["PageBuilder", "internal/cbm/sqlite_writer.c", 452], ["PageRef", "internal/cbm/sqlite_writer.c", 434], ["PyLSPContext", "internal/cbm/lsp/py_lsp.h", 74], ["Queue", "internal/cbm/ac.c", 51], ["ReExport", "internal/cbm/lsp/generated/rust_stdlib_data.c", 384], ["RecordBuilder", "internal/cbm/sqlite_writer.c", 346], ["RustAttrSynth", "internal/cbm/lsp/rust_proc_macros.c", 49], ["RustLSPContext", "internal/cbm/lsp/rust_lsp.h", 167], ["RustMacroRule", "internal/cbm/lsp/rust_lsp.c", 2469], ["RustPreludeEntry", "internal/cbm/lsp/rust_lsp.c", 326], ["SortJob", "internal/cbm/sqlite_writer.c", 1543], ["TSInferBinding", "internal/cbm/lsp/ts_lsp.c", 928], ["TSLSPContext", "internal/cbm/lsp/ts_lsp.h", 63], ["TSNode", "src/simhash/minhash.h", 51], ["TSNodeStack", "internal/cbm/extract_node_stack.h", 23], ["TSRelaterCacheSlot", "internal/cbm/lsp/ts_lsp.c", 644], ["WalkState", "internal/cbm/extract_unified.h", 33], ["alias_config_hit_t", "src/pipeline/path_alias.c", 330], ["batch_resolve_ctx_t", "src/semantic/semantic.c", 620], ["bind_id_t", "src/store/store.c", 1432], ["bind_id_type_t", "src/store/store.c", 1436], ["bind_proj_type_t", "src/store/store.c", 1440], ["binding_t", "src/cypher/cypher.c", 2039], ["blend_ctx_t", "src/semantic/semantic.c", 1053], ["body_t", "src/ui/layout3d.c", 212], ["build_record_fn", "internal/cbm/sqlite_writer.c", 1718], ["caller_edge_ref_t", "src/pipeline/pass_route_nodes.c", 574], ["cbm_adr_sections_t", "src/store/store.h", 561], ["cbm_adr_t", "src/store/store.h", 544], ["cbm_architecture_info_t", "src/store/store.h", 529], ["cbm_ast_profile_t", "src/semantic/ast_profile.h", 59], ["cbm_case_branch_t", "src/cypher/cypher.h", 229], ["cbm_case_expr_t", "src/cypher/cypher.h", 235], ["cbm_change_coupling_t", "src/pipeline/pipeline_internal.h", 157], ["cbm_changed_file_t", "src/pipeline/pipeline_internal.h", 194], ["cbm_changed_hunk_t", "src/pipeline/pipeline_internal.h", 200], ["cbm_cluster_info_t", "src/store/store.h", 498], ["cbm_commit_files_t", "src/pipeline/pipeline_internal.h", 166], ["cbm_compile_flags_t", "src/pipeline/pipeline_internal.h", 244], ["cbm_complexity_t", "internal/cbm/helpers.h", 62], ["cbm_condition_t", "src/cypher/cypher.h", 198], ["cbm_config", "src/cli/cli.c", 2433], ["cbm_config_t", "src/cli/cli.h", 234], ["cbm_cross_pkg_boundary_t", "src/store/store.h", 472], ["cbm_cross_repo_result_t", "src/pipeline/pass_cross_repo.h", 20], ["cbm_cypher_result_t", "src/cypher/cypher.h", 310], ["cbm_db_writer", "internal/cbm/sqlite_writer.c", 2188], ["cbm_db_writer_t", "internal/cbm/sqlite_writer.h", 70], ["cbm_detected_agents_t", "src/cli/cli.h", 125], ["cbm_dir", "src/foundation/compat_fs.c", 26], ["cbm_dir_t", "src/foundation/compat_fs.h", 19], ["cbm_dirent_t", "src/foundation/compat_fs.h", 25], ["cbm_discover_opts_t", "src/discover/discover.h", 104], ["cbm_dockerfile_result_t", "src/pipeline/pipeline_internal.h", 306], ["cbm_dotenv_result_t", "src/pipeline/pipeline_internal.h", 312], ["cbm_edge_capture_t", "src/pipeline/pipeline_incremental.c", 337], ["cbm_edge_info_t", "src/store/store.h", 151], ["cbm_edge_t", "src/store/store.h", 48], ["cbm_embedded_file_t", "src/ui/embedded_assets.h", 15], ["cbm_entry_point_t", "src/store/store.h", 454], ["cbm_env_binding_t", "src/pipeline/pipeline_internal.h", 514], ["cbm_env_kv_t", "src/pipeline/pipeline_internal.h", 287], ["cbm_expr", "src/cypher/cypher.h", 210], ["cbm_expr_t", "src/cypher/cypher.h", 209], ["cbm_expr_type_t", "src/cypher/cypher.h", 207], ["cbm_file_hash_t", "src/store/store.h", 62], ["cbm_file_info_t", "src/discover/discover.h", 98], ["cbm_file_temporal_t", "src/pipeline/pipeline_internal.h", 175], ["cbm_file_tree_entry_t", "src/store/store.h", 504], ["cbm_func_arg_t", "src/cypher/cypher.h", 242], ["cbm_fuzzy_result_t", "src/pipeline/pipeline.h", 197], ["cbm_gbuf_edge_t", "src/graph_buffer/graph_buffer.h", 44], ["cbm_gbuf_node_t", "src/graph_buffer/graph_buffer.h", 35], ["cbm_gbuf_t", "src/pipeline/pipeline.h", 23], ["cbm_git_context_t", "src/git/git_context.h", 20], ["cbm_githistory_result_t", "src/pipeline/pipeline_internal.h", 480], ["cbm_gitignore", "src/discover/gitignore.c", 33], ["cbm_gitignore_t", "src/discover/discover.h", 44], ["cbm_helm_chart_t", "src/pipeline/pipeline_internal.h", 381], ["cbm_hotspot_t", "src/store/store.h", 466], ["cbm_http_conn", "src/ui/httpd.c", 52], ["cbm_http_conn_t", "src/ui/httpd.h", 42], ["cbm_http_req_t", "src/ui/httpd.h", 54], ["cbm_http_server", "src/ui/http_server.c", 84], ["cbm_http_server_t", "src/ui/http_server.h", 15], ["cbm_http_span_info_t", "src/traces/traces.h", 47], ["cbm_httpd", "src/ui/httpd.c", 46], ["cbm_httpd_t", "src/ui/httpd.h", 41], ["cbm_impact_summary_t", "src/store/store.h", 413], ["cbm_index_mode_t", "src/pipeline/pipeline.h", 40], ["cbm_install_plan_t", "src/cli/cli.c", 2926], ["cbm_jsonrpc_request_t", "src/mcp/mcp.h", 29], ["cbm_jsonrpc_response_t", "src/mcp/mcp.h", 37], ["cbm_label_count_t", "src/store/store.h", 168], ["cbm_language_count_t", "src/store/store.h", 441], ["cbm_layout_edge_t", "src/ui/layout3d.h", 35], ["cbm_layout_level_t", "src/ui/layout3d.h", 52], ["cbm_layout_node_t", "src/ui/layout3d.h", 27], ["cbm_layout_result_t", "src/ui/layout3d.h", 45], ["cbm_lex_result_t", "src/cypher/cypher.h", 143], ["cbm_lg_t", "src/store/store.c", 4182], ["cbm_louvain_edge_t", "src/store/store.h", 599], ["cbm_louvain_result_t", "src/store/store.h", 604], ["cbm_lsh_entry_t", "src/simhash/minhash.h", 93], ["cbm_lsh_index", "src/simhash/minhash.c", 329], ["cbm_lsh_index_t", "src/simhash/minhash.h", 85], ["cbm_mcp_server", "src/mcp/mcp.c", 641], ["cbm_mcp_server_t", "src/mcp/mcp.h", 84], ["cbm_minhash_t", "src/simhash/minhash.h", 47], ["cbm_mutex_t", "src/foundation/compat_thread.h", 51], ["cbm_node_hop_t", "src/store/store.h", 144], ["cbm_node_pattern_t", "src/cypher/cypher.h", 163], ["cbm_node_t", "src/store/store.h", 39], ["cbm_package_layer_t", "src/store/store.h", 485], ["cbm_package_summary_t", "src/store/store.h", 448], ["cbm_parallel_for_opts_t", "src/pipeline/worker_pool.h", 22], ["cbm_parse_result_t", "src/cypher/cypher.h", 293], ["cbm_path_alias_collection_t", "src/pipeline/path_alias.h", 67], ["cbm_path_alias_map_t", "src/pipeline/path_alias.h", 51], ["cbm_path_alias_scope_t", "src/pipeline/path_alias.h", 59], ["cbm_path_alias_t", "src/pipeline/path_alias.h", 41], ["cbm_pattern_t", "src/cypher/cypher.h", 182], ["cbm_pipeline", "src/pipeline/pipeline.c", 74], ["cbm_pipeline_ctx_t", "src/pipeline/pipeline_internal.h", 72], ["cbm_pipeline_t", "src/pipeline/pipeline.h", 27], ["cbm_pkg_entries_t", "src/pipeline/pipeline_internal.h", 47], ["cbm_pkg_entry_t", "src/pipeline/pipeline_internal.h", 40], ["cbm_plan_entry_t", "src/cli/cli.c", 2920], ["cbm_profile_out_t", "internal/cbm/cbm.h", 552], ["cbm_project_t", "src/store/store.h", 54], ["cbm_prop_filter_t", "src/cypher/cypher.h", 155], ["cbm_query", "src/cypher/cypher.h", 270], ["cbm_query_stats_t", "src/foundation/diagnostics.h", 20], ["cbm_query_t", "src/cypher/cypher.h", 269], ["cbm_regex_t", "src/foundation/compat_regex.h", 34], ["cbm_registry_t", "src/pipeline/pipeline.h", 119], ["cbm_regmatch_t", "src/foundation/compat_regex.h", 39], ["cbm_rel_pattern_t", "src/cypher/cypher.h", 173], ["cbm_resolution_t", "src/pipeline/pipeline.h", 126], ["cbm_return_clause_t", "src/cypher/cypher.h", 266], ["cbm_return_item_t", "src/cypher/cypher.h", 255], ["cbm_risk_level_t", "src/store/store.h", 398], ["cbm_route_info_t", "src/store/store.h", 460], ["cbm_saved_edge_t", "src/pipeline/pipeline_incremental.c", 329], ["cbm_schema_info_t", "src/store/store.h", 191], ["cbm_search_output_t", "src/store/store.h", 137], ["cbm_search_params_t", "src/store/store.h", 122], ["cbm_search_result_t", "src/store/store.h", 131], ["cbm_sem_config_t", "src/semantic/semantic.h", 80], ["cbm_sem_corpus", "src/semantic/semantic.c", 503], ["cbm_sem_corpus_t", "src/semantic/semantic.h", 153], ["cbm_sem_func_t", "src/semantic/semantic.h", 148], ["cbm_sem_src_entry_t", "src/semantic/semantic.c", 818], ["cbm_sem_vec_t", "src/semantic/semantic.h", 103], ["cbm_service_link_t", "src/store/store.h", 479], ["cbm_shell_result_t", "src/pipeline/pipeline_internal.h", 323], ["cbm_skill_t", "src/cli/cli.h", 62], ["cbm_sock_t", "src/ui/httpd.c", 21], ["cbm_store", "src/store/store.c", 97], ["cbm_store_t", "src/pipeline/pipeline.h", 22], ["cbm_svc_kind_t", "internal/cbm/service_patterns.h", 24], ["cbm_system_info_t", "src/foundation/platform.h", 107], ["cbm_terraform_result_t", "src/pipeline/pipeline_internal.h", 361], ["cbm_tf_module_t", "src/pipeline/pipeline_internal.h", 343], ["cbm_tf_resource_t", "src/pipeline/pipeline_internal.h", 337], ["cbm_tf_variable_t", "src/pipeline/pipeline_internal.h", 331], ["cbm_thread_t", "src/foundation/compat_thread.h", 23], ["cbm_token_t", "src/cypher/cypher.h", 134], ["cbm_token_type_t", "src/cypher/cypher.h", 128], ["cbm_trace_attr_t", "src/traces/traces.h", 19], ["cbm_trace_resource_t", "src/traces/traces.h", 26], ["cbm_trace_span_t", "src/traces/traces.h", 36], ["cbm_traverse_result_t", "src/store/store.h", 159], ["cbm_type_count_t", "src/store/store.h", 175], ["cbm_ui_config_t", "src/ui/config.h", 19], ["cbm_userconfig_t", "src/discover/userconfig.h", 32], ["cbm_userext_t", "src/discover/userconfig.h", 27], ["cbm_vector_result_t", "src/store/store.h", 649], ["cbm_watcher", "src/watcher/watcher.c", 49], ["cbm_watcher_t", "src/watcher/watcher.h", 21], ["cbm_where_clause_t", "src/cypher/cypher.h", 223], ["cbm_yaml_node", "src/foundation/yaml.c", 32], ["cbm_yaml_node_t", "src/foundation/yaml.h", 17], ["chan_const_t", "internal/cbm/extract_channels.c", 42], ["chan_const_table_t", "internal/cbm/extract_channels.c", 47], ["cluster_rank_t", "src/store/store.c", 4773], ["code_entry_t", "src/pipeline/pass_configlink.c", 112], ["collect_coupling_ctx_t", "src/pipeline/pass_githistory.c", 318], ["collect_ctx_t", "src/pipeline/pass_semantic_edges.c", 826], ["commit_t", "src/pipeline/pass_githistory.c", 91], ["config_entry_t", "src/pipeline/pass_configlink.c", 67], ["cooccur_int8_ctx_t", "src/semantic/semantic.c", 952], ["cooccur_pos_t", "src/semantic/semantic.c", 798], ["cooccur_sparse_ctx_t", "src/semantic/semantic.c", 869], ["corpus_entry_t", "src/semantic/semantic.c", 501], ["cs_fields_t", "internal/cbm/lsp/cs_lsp.c", 2329], ["cs_fields_table_t", "internal/cbm/lsp/cs_lsp.c", 2335], ["cs_method_rt_entry_t", "internal/cbm/lsp/cs_lsp.c", 2537], ["cs_method_rt_table_t", "internal/cbm/lsp/cs_lsp.c", 2543], ["ctx", "src/pipeline/worker_pool.h", 16], ["cut_range_t", "internal/cbm/lsp/kotlin_lsp.c", 3748], ["cx_frame", "internal/cbm/helpers.c", 549], ["deferred_edge_buf_t", "src/pipeline/pass_semantic_edges.c", 76], ["deferred_edge_t", "src/pipeline/pass_semantic_edges.c", 70], ["dep_entry_t", "src/pipeline/pass_configlink.c", 199], ["detect_idset_t", "src/mcp/mcp.c", 4086], ["edge_cell_fn", "internal/cbm/sqlite_writer.c", 1552], ["event_handler_t", "src/cli/progress_sink.c", 189], ["expl_buf_t", "src/mcp/mcp.c", 4538], ["expl_neighbor_t", "src/mcp/mcp.c", 4618], ["expl_seed_t", "src/mcp/mcp.c", 4712], ["ext_entry_t", "src/discover/language.c", 26], ["ext_lang_entry_t", "src/store/store.c", 3177], ["extract_ctx_t", "src/pipeline/pass_parallel.c", 489], ["extract_install_args_t", "src/cli/cli.c", 3707], ["extract_worker_state_t", "src/pipeline/pass_parallel.c", 469], ["few_ctx", "src/pipeline/registry.c", 782], ["file_list_t", "src/discover/discover.c", 217], ["file_sort_entry_t", "src/pipeline/pass_parallel.c", 446], ["file_type_t", "src/pipeline/pass_envscan.c", 170], ["filename_entry_t", "src/discover/language.c", 629], ["finalize_params_t", "src/semantic/semantic.c", 1289], ["fp_entry_t", "src/pipeline/pass_similarity.c", 92], ["gh_compute_arg_t", "src/pipeline/pipeline.c", 397], ["gi_pattern_t", "src/discover/gitignore.c", 31], ["go_imethod_t", "src/pipeline/pass_semantic.c", 235], ["grep_match_t", "src/mcp/mcp.c", 3229], ["hooks_remove_args_t", "src/cli/cli.c", 1781], ["hooks_upsert_args_t", "src/cli/cli.c", 1698], ["i", "internal/cbm/sqlite_writer.c", 1719], ["index_job_t", "src/ui/http_server.c", 104], ["int", "src/pipeline/pipeline.c", 579], ["k8s_record_array_t", "src/pipeline/pass_k8s.c", 179], ["k8s_record_t", "src/pipeline/pass_k8s.c", 173], ["ks_slot_t", "internal/cbm/helpers.c", 337], ["kt_fix_t", "internal/cbm/lsp/kotlin_lsp.c", 3579], ["kw_entry_t", "src/cypher/cypher.c", 134], ["lang_name_entry_t", "src/discover/userconfig.c", 48], ["lib_pattern_t", "internal/cbm/service_patterns.c", 26], ["line", "src/foundation/log.h", 61], ["lsh_bucket_t", "src/simhash/minhash.c", 324], ["mcp_uninstall_args_t", "src/cli/cli.c", 3497], ["method_suffix_t", "internal/cbm/service_patterns.c", 469], ["node_col_fn", "internal/cbm/sqlite_writer.c", 1643], ["node_id_entry_t", "src/ui/layout3d.c", 358], ["norm_ctx_t", "src/semantic/semantic.c", 1027], ["octree_node_t", "src/ui/layout3d.c", 120], ["parser_t", "src/cypher/cypher.c", 437], ["pass1_quant_ctx_t", "src/semantic/semantic.c", 1173], ["path_map_t", "src/pipeline/pass_configlink.c", 353], ["phase_t", "src/cli/progress_sink.c", 69], ["php_class_field_table_t", "internal/cbm/lsp/php_lsp.c", 2786], ["php_class_fields_t", "internal/cbm/lsp/php_lsp.c", 2780], ["php_narrowing_t", "internal/cbm/lsp/php_lsp.c", 1615], ["poll_ctx_t", "src/watcher/watcher.c", 411], ["profile_frame_t", "src/semantic/ast_profile.c", 36], ["project_state_t", "src/watcher/watcher.c", 45], ["pthread_worker_arg_t", "src/pipeline/worker_pool.c", 40], ["pxc_module_entry_t", "src/pipeline/pass_lsp_cross.c", 516], ["resolve_cache_entry_t", "src/pipeline/registry.c", 272], ["resolve_ctx_t", "src/pipeline/pass_parallel.c", 1057], ["resolve_worker_state_t", "src/pipeline/pass_parallel.c", 990], ["result_builder_t", "src/cypher/cypher.c", 2552], ["ret_agg_entry_t", "src/cypher/cypher.c", 3897], ["reverse_index_t", "src/semantic/semantic.c", 803], ["route_ctx_t", "src/pipeline/pass_route_nodes.c", 71], ["score_ctx_t", "src/pipeline/pass_semantic_edges.c", 714], ["search_bind_t", "src/store/store.c", 2208], ["search_like_pool_t", "src/store/store.c", 2215], ["search_result_t", "src/mcp/mcp.c", 3245], ["seen_set_t", "src/simhash/minhash.c", 405], ["sem_bucket_t", "src/pipeline/pass_semantic_edges.c", 857], ["sig_build_ctx_t", "src/pipeline/pass_semantic_edges.c", 669], ["sim_deferred_edge_t", "src/pipeline/pass_similarity.c", 142], ["sim_edge_buf_t", "src/pipeline/pass_similarity.c", 148], ["sim_query_ctx_t", "src/pipeline/pass_similarity.c", 172], ["slab_free_node_t", "src/foundation/slab_alloc.c", 42], ["slab_page_t", "src/foundation/slab_alloc.c", 48], ["slab_state_t", "src/foundation/slab_alloc.c", 55], ["snapshot_ctx_t", "src/watcher/watcher.c", 468], ["src_build_ctx_t", "src/semantic/semantic.c", 1084], ["stack_entry_t", "src/foundation/yaml.c", 131], ["stack_t", "internal/cbm/lsp/rust_lsp.c", 4411], ["sveltekit_ctx_t", "src/pipeline/pass_route_nodes.c", 973], ["tagged_node_t", "src/pipeline/pass_enrichment.c", 156], ["tf_block_kind_t", "src/pipeline/pass_infrascan.c", 904], ["tokenize_ctx_t", "src/pipeline/pass_semantic_edges.c", 559], ["tool_def_t", "src/mcp/mcp.c", 272], ["uniq_trig_set_t", "src/simhash/minhash.c", 182], ["user_data", "src/watcher/watcher.h", 28], ["userdata", "src/foundation/hash_table.h", 51], ["vec_build_ctx_t", "src/pipeline/pass_semantic_edges.c", 592], ["walk_defs_frame_t", "internal/cbm/extract_defs.c", 4937], ["walk_frame_t", "src/discover/discover.c", 405], ["win_thread_arg_t", "src/foundation/compat_thread.c", 25], ["with_agg_t", "src/cypher/cypher.c", 3452], ["write_db_ctx_t", "internal/cbm/sqlite_writer.c", 1715], ["yaml_type_t", "src/foundation/yaml.c", 30], ["yaml_walk_frame_t", "internal/cbm/extract_unified.c", 322]], "n_functions": 2281, "n_macros": 57, "n_types": 399, "include_edges": [["internal/cbm/grammar_nix.c", "vendored/grammars/nix/parser.c"], ["internal/cbm/grammar_nix.c", "vendored/grammars/nix/scanner.c"], ["internal/cbm/grammar_tcl.c", "vendored/grammars/tcl/parser.c"], ["internal/cbm/grammar_tcl.c", "vendored/grammars/tcl/scanner.c"], ["internal/cbm/service_patterns.c", "service_patterns.h"], ["internal/cbm/service_patterns.c", "stdbool.h"], ["internal/cbm/service_patterns.c", "stddef.h"], ["internal/cbm/service_patterns.c", "stdlib.h"], ["internal/cbm/service_patterns.c", "string.h"], ["internal/cbm/service_patterns.c", "foundation/hash_table.h"], ["internal/cbm/service_patterns.c", "foundation/compat.h"], ["internal/cbm/grammar_markdown.c", "vendored/grammars/markdown/parser.c"], ["internal/cbm/grammar_markdown.c", "vendored/grammars/markdown/scanner.c"], ["internal/cbm/grammar_form.c", "vendored/grammars/form/parser.c"], ["internal/cbm/grammar_vue.c", "vendored/grammars/vue/parser.c"], ["internal/cbm/grammar_vue.c", "vendored/grammars/vue/scanner.c"], ["internal/cbm/grammar_teal.c", "vendored/grammars/teal/parser.c"], ["internal/cbm/grammar_teal.c", "vendored/grammars/teal/scanner.c"], ["internal/cbm/grammar_jinja2.c", "vendored/grammars/jinja2/parser.c"], ["internal/cbm/grammar_gitignore.c", "vendored/grammars/gitignore/parser.c"], ["internal/cbm/grammar_rust.c", "vendored/grammars/rust/parser.c"], ["internal/cbm/grammar_rust.c", "vendored/grammars/rust/scanner.c"], ["internal/cbm/grammar_html.c", "vendored/grammars/html/parser.c"], ["internal/cbm/grammar_html.c", "vendored/grammars/html/scanner.c"], ["internal/cbm/grammar_verilog.c", "vendored/grammars/verilog/parser.c"], ["internal/cbm/grammar_templ.c", "vendored/grammars/templ/parser.c"], ["internal/cbm/grammar_templ.c", "vendored/grammars/templ/scanner.c"], ["internal/cbm/lz4_store.c", "vendored/lz4/lz4.h"], ["internal/cbm/lz4_store.c", "vendored/lz4/lz4hc.h"], ["internal/cbm/lz4_store.c", "lz4_store.h"], ["internal/cbm/grammar_vhdl.c", "vendored/grammars/vhdl/parser.c"], ["internal/cbm/grammar_vhdl.c", "vendored/grammars/vhdl/scanner.c"], ["internal/cbm/grammar_scheme.c", "vendored/grammars/scheme/parser.c"], ["internal/cbm/grammar_bitbake.c", "vendored/grammars/bitbake/parser.c"], ["internal/cbm/grammar_bitbake.c", "vendored/grammars/bitbake/scanner.c"], ["internal/cbm/grammar_c_sharp.c", "vendored/grammars/c_sharp/parser.c"], ["internal/cbm/grammar_c_sharp.c", "vendored/grammars/c_sharp/scanner.c"], ["internal/cbm/extract_imports.c", "cbm.h"], ["internal/cbm/extract_imports.c", "arena.h"], ["internal/cbm/extract_imports.c", "helpers.h"], ["internal/cbm/extract_imports.c", "lang_specs.h"], ["internal/cbm/extract_imports.c", "tree_sitter/api.h"], ["internal/cbm/extract_imports.c", "foundation/constants.h"], ["internal/cbm/extract_imports.c", "extract_node_stack.h"], ["internal/cbm/extract_imports.c", "stdint.h"], ["internal/cbm/extract_imports.c", "string.h"], ["internal/cbm/extract_imports.c", "ctype.h"], ["internal/cbm/grammar_tsx.c", "vendored/grammars/tsx/parser.c"], ["internal/cbm/grammar_tsx.c", "vendored/grammars/tsx/scanner.c"], ["internal/cbm/grammar_rescript.c", "vendored/grammars/rescript/parser.c"], ["internal/cbm/grammar_rescript.c", "vendored/grammars/rescript/scanner.c"], ["internal/cbm/grammar_json5.c", "vendored/grammars/json5/parser.c"], ["internal/cbm/grammar_sway.c", "vendored/grammars/sway/parser.c"], ["internal/cbm/grammar_sway.c", "vendored/grammars/sway/scanner.c"], ["internal/cbm/grammar_svelte.c", "vendored/grammars/svelte/parser.c"], ["internal/cbm/grammar_svelte.c", "vendored/grammars/svelte/scanner.c"], ["internal/cbm/grammar_ron.c", "vendored/grammars/ron/parser.c"], ["internal/cbm/grammar_ron.c", "vendored/grammars/ron/scanner.c"], ["internal/cbm/grammar_po.c", "vendored/grammars/po/parser.c"], ["internal/cbm/grammar_soql.c", "vendored/grammars/soql/parser.c"], ["internal/cbm/grammar_slang.c", "vendored/grammars/slang/parser.c"], ["internal/cbm/grammar_slang.c", "vendored/grammars/slang/scanner.c"], ["internal/cbm/grammar_kconfig.c", "vendored/grammars/kconfig/parser.c"], ["internal/cbm/grammar_kconfig.c", "vendored/grammars/kconfig/scanner.c"], ["internal/cbm/grammar_gitattributes.c", "vendored/grammars/gitattributes/parser.c"], ["internal/cbm/grammar_erlang.c", "vendored/grammars/erlang/parser.c"], ["internal/cbm/grammar_erlang.c", "vendored/grammars/erlang/scanner.c"], ["internal/cbm/grammar_just.c", "vendored/grammars/just/parser.c"], ["internal/cbm/grammar_just.c", "vendored/grammars/just/scanner.c"], ["internal/cbm/grammar_cmake.c", "vendored/grammars/cmake/parser.c"], ["internal/cbm/grammar_cmake.c", "vendored/grammars/cmake/scanner.c"], ["internal/cbm/grammar_powershell.c", "vendored/grammars/powershell/parser.c"], ["internal/cbm/grammar_powershell.c", "vendored/grammars/powershell/scanner.c"], ["internal/cbm/grammar_hyprlang.c", "vendored/grammars/hyprlang/parser.c"], ["internal/cbm/grammar_tlaplus.c", "vendored/grammars/tlaplus/parser.c"], ["internal/cbm/grammar_tlaplus.c", "vendored/grammars/tlaplus/scanner.c"], ["internal/cbm/grammar_gdscript.c", "vendored/grammars/gdscript/parser.c"], ["internal/cbm/grammar_gdscript.c", "vendored/grammars/gdscript/scanner.c"], ["internal/cbm/grammar_csv.c", "vendored/grammars/csv/parser.c"], ["internal/cbm/extract_calls.c", "cbm.h"], ["internal/cbm/extract_calls.c", "arena.h"], ["internal/cbm/extract_calls.c", "helpers.h"], ["internal/cbm/extract_calls.c", "lang_specs.h"], ["internal/cbm/extract_calls.c", "extract_unified.h"], ["internal/cbm/extract_calls.c", "foundation/constants.h"], ["internal/cbm/extract_calls.c", "extract_node_stack.h"], ["internal/cbm/extract_calls.c", "tree_sitter/api.h"], ["internal/cbm/extract_calls.c", "stdint.h"], ["internal/cbm/extract_calls.c", "stdio.h"], ["internal/cbm/extract_calls.c", "stdlib.h"], ["internal/cbm/extract_calls.c", "string.h"], ["internal/cbm/extract_calls.c", "ctype.h"], ["internal/cbm/grammar_typescript.c", "vendored/grammars/typescript/parser.c"], ["internal/cbm/grammar_typescript.c", "vendored/grammars/typescript/scanner.c"], ["internal/cbm/ac.c", "stddef.h"], ["internal/cbm/ac.c", "stdlib.h"], ["internal/cbm/ac.c", "string.h"], ["internal/cbm/ac.c", "stdint.h"], ["internal/cbm/ac.c", "ac.h"], ["internal/cbm/ac.c", "foundation/compat.h"], ["internal/cbm/ac.c", "lz4_store.h"], ["internal/cbm/extract_type_refs.c", "cbm.h"], ["internal/cbm/extract_type_refs.c", "arena.h"], ["internal/cbm/extract_type_refs.c", "helpers.h"], ["internal/cbm/extract_type_refs.c", "lang_specs.h"], ["internal/cbm/extract_type_refs.c", "extract_unified.h"], ["internal/cbm/extract_type_refs.c", "tree_sitter/api.h"], ["internal/cbm/extract_type_refs.c", "foundation/constants.h"], ["internal/cbm/extract_type_refs.c", "extract_node_stack.h"], ["internal/cbm/extract_type_refs.c", "stdint.h"], ["internal/cbm/extract_type_refs.c", "string.h"], ["internal/cbm/extract_type_refs.c", "ctype.h"], ["internal/cbm/grammar_protobuf.c", "vendored/grammars/protobuf/parser.c"], ["internal/cbm/grammar_bibtex.c", "vendored/grammars/bibtex/parser.c"], ["internal/cbm/grammar_magma.c", "vendored/grammars/magma/parser.c"], ["internal/cbm/grammar_blade.c", "vendored/grammars/blade/parser.c"], ["internal/cbm/grammar_blade.c", "vendored/grammars/blade/scanner.c"], ["internal/cbm/grammar_hlsl.c", "vendored/grammars/hlsl/parser.c"], ["internal/cbm/grammar_hlsl.c", "vendored/grammars/hlsl/scanner.c"], ["internal/cbm/grammar_kdl.c", "vendored/grammars/kdl/parser.c"], ["internal/cbm/grammar_kdl.c", "vendored/grammars/kdl/scanner.c"], ["internal/cbm/extract_unified.h", "cbm.h"], ["internal/cbm/extract_unified.h", "lang_specs.h"], ["internal/cbm/grammar_prisma.c", "vendored/grammars/prisma/parser.c"], ["internal/cbm/extract_type_assigns.c", "cbm.h"], ["internal/cbm/extract_type_assigns.c", "arena.h"], ["internal/cbm/extract_type_assigns.c", "helpers.h"], ["internal/cbm/extract_type_assigns.c", "lang_specs.h"], ["internal/cbm/extract_type_assigns.c", "extract_unified.h"], ["internal/cbm/extract_type_assigns.c", "tree_sitter/api.h"], ["internal/cbm/extract_type_assigns.c", "foundation/constants.h"], ["internal/cbm/extract_type_assigns.c", "extract_node_stack.h"], ["internal/cbm/extract_type_assigns.c", "stdint.h"], ["internal/cbm/extract_type_assigns.c", "string.h"], ["internal/cbm/extract_type_assigns.c", "ctype.h"], ["internal/cbm/lang_specs.h", "cbm.h"], ["internal/cbm/grammar_go.c", "vendored/grammars/go/parser.c"], ["internal/cbm/grammar_llvm.c", "vendored/grammars/llvm/parser.c"], ["internal/cbm/grammar_kotlin.c", "vendored/grammars/kotlin/parser.c"], ["internal/cbm/grammar_kotlin.c", "vendored/grammars/kotlin/scanner.c"], ["internal/cbm/sqlite_writer.c", "sqlite_writer.h"], ["internal/cbm/sqlite_writer.c", "foundation/constants.h"], ["internal/cbm/sqlite_writer.c", "foundation/compat_thread.h"], ["internal/cbm/sqlite_writer.c", "foundation/profile.h"], ["internal/cbm/sqlite_writer.c", "stddef.h"], ["internal/cbm/sqlite_writer.c", "stdio.h"], ["internal/cbm/sqlite_writer.c", "stdlib.h"], ["internal/cbm/sqlite_writer.c", "string.h"], ["internal/cbm/sqlite_writer.c", "stdint.h"], ["internal/cbm/sqlite_writer.c", "stdbool.h"], ["internal/cbm/grammar_swift.c", "vendored/grammars/swift/parser.c"], ["internal/cbm/grammar_swift.c", "vendored/grammars/swift/scanner.c"], ["internal/cbm/grammar_cpp.c", "vendored/grammars/cpp/parser.c"], ["internal/cbm/grammar_cpp.c", "vendored/grammars/cpp/scanner.c"], ["internal/cbm/grammar_pine.c", "vendored/grammars/pine/parser.c"], ["internal/cbm/grammar_pine.c", "vendored/grammars/pine/scanner.c"], ["internal/cbm/grammar_purescript.c", "vendored/grammars/purescript/parser.c"], ["internal/cbm/grammar_purescript.c", "vendored/grammars/purescript/scanner.c"], ["internal/cbm/cbm.c", "cbm.h"], ["internal/cbm/cbm.c", "arena.h"], ["internal/cbm/cbm.c", "helpers.h"], ["internal/cbm/cbm.c", "lang_specs.h"], ["internal/cbm/cbm.c", "extract_unified.h"], ["internal/cbm/cbm.c", "lsp/go_lsp.h"], ["internal/cbm/cbm.c", "lsp/c_lsp.h"], ["internal/cbm/cbm.c", "lsp/php_lsp.h"], ["internal/cbm/cbm.c", "lsp/py_lsp.h"], ["internal/cbm/cbm.c", "lsp/ts_lsp.h"], ["internal/cbm/cbm.c", "lsp/cs_lsp.h"], ["internal/cbm/cbm.c", "lsp/java_lsp.h"], ["internal/cbm/cbm.c", "lsp/kotlin_lsp.h"], ["internal/cbm/cbm.c", "lsp/rust_lsp.h"], ["internal/cbm/cbm.c", "preprocessor.h"], ["internal/cbm/cbm.c", "foundation/compat.h"], ["internal/cbm/cbm.c", "tree_sitter/api.h"], ["internal/cbm/cbm.c", "foundation/constants.h"], ["internal/cbm/cbm.c", "mimalloc.h"], ["internal/cbm/cbm.c", "sqlite3.h"], ["internal/cbm/cbm.c", "git2.h"], ["internal/cbm/cbm.c", "git2/sys/alloc.h"], ["internal/cbm/cbm.c", "stdint.h"], ["internal/cbm/cbm.c", "stdlib.h"], ["internal/cbm/cbm.c", "string.h"], ["internal/cbm/cbm.c", "ctype.h"], ["internal/cbm/cbm.c", "time.h"], ["internal/cbm/cbm.c", "stdatomic.h"], ["internal/cbm/cbm.c", "assert.h"], ["internal/cbm/grammar_nasm.c", "vendored/grammars/nasm/parser.c"], ["internal/cbm/extract_semantic.c", "cbm.h"], ["internal/cbm/extract_semantic.c", "arena.h"], ["internal/cbm/extract_semantic.c", "helpers.h"], ["internal/cbm/extract_semantic.c", "lang_specs.h"], ["internal/cbm/extract_semantic.c", "extract_unified.h"], ["internal/cbm/extract_semantic.c", "tree_sitter/api.h"], ["internal/cbm/extract_semantic.c", "foundation/constants.h"], ["internal/cbm/extract_semantic.c", "extract_node_stack.h"], ["internal/cbm/extract_semantic.c", "stdint.h"], ["internal/cbm/extract_semantic.c", "string.h"], ["internal/cbm/extract_semantic.c", "ctype.h"], ["internal/cbm/extract_defs.c", "cbm.h"], ["internal/cbm/extract_defs.c", "arena.h"], ["internal/cbm/extract_defs.c", "helpers.h"], ["internal/cbm/extract_defs.c", "lang_specs.h"], ["internal/cbm/extract_defs.c", "foundation/constants.h"], ["internal/cbm/extract_defs.c", "extract_node_stack.h"], ["internal/cbm/extract_defs.c", "simhash/minhash.h"], ["internal/cbm/extract_defs.c", "semantic/ast_profile.h"], ["internal/cbm/extract_defs.c", "tree_sitter/api.h"], ["internal/cbm/extract_defs.c", "stdint.h"], ["internal/cbm/extract_defs.c", "string.h"], ["internal/cbm/extract_defs.c", "ctype.h"], ["internal/cbm/extract_k8s.c", "cbm.h"], ["internal/cbm/extract_k8s.c", "arena.h"], ["internal/cbm/extract_k8s.c", "helpers.h"], ["internal/cbm/extract_k8s.c", "tree_sitter/api.h"], ["internal/cbm/extract_k8s.c", "foundation/constants.h"], ["internal/cbm/extract_k8s.c", "stdint.h"], ["internal/cbm/extract_k8s.c", "stdio.h"], ["internal/cbm/extract_k8s.c", "string.h"], ["internal/cbm/grammar_toml.c", "vendored/grammars/toml/parser.c"], ["internal/cbm/grammar_toml.c", "vendored/grammars/toml/scanner.c"], ["internal/cbm/grammar_objc.c", "vendored/grammars/objc/parser.c"], ["internal/cbm/grammar_capnp.c", "vendored/grammars/capnp/parser.c"], ["internal/cbm/grammar_thrift.c", "vendored/grammars/thrift/parser.c"], ["internal/cbm/grammar_pony.c", "vendored/grammars/pony/parser.c"], ["internal/cbm/grammar_pony.c", "vendored/grammars/pony/scanner.c"], ["internal/cbm/grammar_cfml.c", "vendored/grammars/cfml/parser.c"], ["internal/cbm/grammar_cfml.c", "vendored/grammars/cfml/scanner.c"], ["internal/cbm/grammar_jsdoc.c", "vendored/grammars/jsdoc/parser.c"], ["internal/cbm/grammar_jsdoc.c", "vendored/grammars/jsdoc/scanner.c"], ["internal/cbm/grammar_wolfram.c", "vendored/grammars/wolfram/parser.c"], ["internal/cbm/grammar_wolfram.c", "vendored/grammars/wolfram/scanner.c"], ["internal/cbm/grammar_janet.c", "vendored/grammars/janet/parser.c"], ["internal/cbm/grammar_janet.c", "vendored/grammars/janet/scanner.c"], ["internal/cbm/grammar_sql.c", "vendored/grammars/sql/parser.c"], ["internal/cbm/grammar_sql.c", "vendored/grammars/sql/scanner.c"], ["internal/cbm/zstd_store.h", "stddef.h"], ["internal/cbm/grammar_qml.c", "vendored/grammars/qml/parser.c"], ["internal/cbm/grammar_qml.c", "vendored/grammars/qml/scanner.c"], ["internal/cbm/grammar_dockerfile.c", "vendored/grammars/dockerfile/parser.c"], ["internal/cbm/grammar_dockerfile.c", "vendored/grammars/dockerfile/scanner.c"], ["internal/cbm/grammar_zsh.c", "vendored/grammars/zsh/parser.c"], ["internal/cbm/grammar_zsh.c", "vendored/grammars/zsh/scanner.c"], ["internal/cbm/grammar_gotemplate.c", "vendored/grammars/gotemplate/parser.c"], ["internal/cbm/grammar_agda.c", "vendored/grammars/agda/parser.c"], ["internal/cbm/grammar_agda.c", "vendored/grammars/agda/scanner.c"], ["internal/cbm/grammar_zig.c", "vendored/grammars/zig/parser.c"], ["internal/cbm/grammar_systemverilog.c", "vendored/grammars/systemverilog/parser.c"], ["internal/cbm/extract_channels.c", "cbm.h"], ["internal/cbm/extract_channels.c", "arena.h"], ["internal/cbm/extract_channels.c", "helpers.h"], ["internal/cbm/extract_channels.c", "foundation/constants.h"], ["internal/cbm/extract_channels.c", "extract_node_stack.h"], ["internal/cbm/extract_channels.c", "tree_sitter/api.h"], ["internal/cbm/extract_channels.c", "stdint.h"], ["internal/cbm/extract_channels.c", "string.h"], ["internal/cbm/grammar_haskell.c", "vendored/grammars/haskell/parser.c"], ["internal/cbm/grammar_haskell.c", "vendored/grammars/haskell/scanner.c"], ["internal/cbm/grammar_nickel.c", "vendored/grammars/nickel/parser.c"], ["internal/cbm/grammar_nickel.c", "vendored/grammars/nickel/scanner.c"], ["internal/cbm/grammar_requirements.c", "vendored/grammars/requirements/parser.c"], ["internal/cbm/grammar_mermaid.c", "vendored/grammars/mermaid/parser.c"], ["internal/cbm/grammar_scss.c", "vendored/grammars/scss/parser.c"], ["internal/cbm/grammar_scss.c", "vendored/grammars/scss/scanner.c"], ["internal/cbm/grammar_starlark.c", "vendored/grammars/starlark/parser.c"], ["internal/cbm/grammar_starlark.c", "vendored/grammars/starlark/scanner.c"], ["internal/cbm/grammar_php.c", "vendored/grammars/php/parser.c"], ["internal/cbm/grammar_php.c", "vendored/grammars/php/scanner.c"], ["internal/cbm/arena.c", "arena.h"], ["internal/cbm/arena.c", "stdlib.h"], ["internal/cbm/arena.c", "string.h"], ["internal/cbm/arena.c", "stdarg.h"], ["internal/cbm/arena.c", "stdio.h"], ["internal/cbm/helpers.c", "helpers.h"], ["internal/cbm/helpers.c", "arena.h"], ["internal/cbm/helpers.c", "cbm.h"], ["internal/cbm/helpers.c", "lang_specs.h"], ["internal/cbm/helpers.c", "tree_sitter/api.h"], ["internal/cbm/helpers.c", "foundation/constants.h"], ["internal/cbm/helpers.c", "foundation/compat.h"], ["internal/cbm/helpers.c", "stdlib.h"], ["internal/cbm/helpers.c", "stdint.h"], ["internal/cbm/helpers.c", "string.h"], ["internal/cbm/helpers.c", "ctype.h"], ["internal/cbm/helpers.c", "stdio.h"], ["internal/cbm/grammar_astro.c", "vendored/grammars/astro/parser.c"], ["internal/cbm/grammar_astro.c", "vendored/grammars/astro/scanner.c"], ["internal/cbm/grammar_wit.c", "vendored/grammars/wit/parser.c"], ["internal/cbm/grammar_wit.c", "vendored/grammars/wit/scanner.c"], ["internal/cbm/lsp_all.c", "lsp/type_rep.c"], ["internal/cbm/lsp_all.c", "lsp/scope.c"], ["internal/cbm/lsp_all.c", "lsp/type_registry.c"], ["internal/cbm/lsp_all.c", "lsp/go_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/go_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/c_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/c_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/generated/cpp_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/php_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/php_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/generated/python_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/py_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/ts_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/cs_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/cs_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/java_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/java_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/generated/kotlin_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/kotlin_lsp.c"], ["internal/cbm/lsp_all.c", "lsp/generated/rust_stdlib_data.c"], ["internal/cbm/lsp_all.c", "lsp/generated/rust_crates_seed.c"], ["internal/cbm/lsp_all.c", "lsp/rust_cargo.c"], ["internal/cbm/lsp_all.c", "lsp/rust_proc_macros.c"], ["internal/cbm/lsp_all.c", "lsp/rust_rustdoc.c"], ["internal/cbm/lsp_all.c", "lsp/rust_lsp.c"], ["internal/cbm/grammar_clojure.c", "vendored/grammars/clojure/parser.c"], ["internal/cbm/grammar_java.c", "vendored/grammars/java/parser.c"], ["internal/cbm/grammar_elm.c", "vendored/grammars/elm/parser.c"], ["internal/cbm/grammar_elm.c", "vendored/grammars/elm/scanner.c"], ["internal/cbm/grammar_sshconfig.c", "vendored/grammars/sshconfig/parser.c"], ["internal/cbm/extract_env_accesses.c", "cbm.h"], ["internal/cbm/extract_env_accesses.c", "arena.h"], ["internal/cbm/extract_env_accesses.c", "helpers.h"], ["internal/cbm/extract_env_accesses.c", "lang_specs.h"], ["internal/cbm/extract_env_accesses.c", "extract_unified.h"], ["internal/cbm/extract_env_accesses.c", "foundation/constants.h"], ["internal/cbm/extract_env_accesses.c", "extract_node_stack.h"], ["internal/cbm/extract_env_accesses.c", "tree_sitter/api.h"], ["internal/cbm/extract_env_accesses.c", "stdint.h"], ["internal/cbm/extract_env_accesses.c", "string.h"], ["internal/cbm/extract_env_accesses.c", "ctype.h"], ["internal/cbm/grammar_javascript.c", "vendored/grammars/javascript/parser.c"], ["internal/cbm/grammar_javascript.c", "vendored/grammars/javascript/scanner.c"], ["internal/cbm/grammar_gn.c", "vendored/grammars/gn/parser.c"], ["internal/cbm/grammar_gn.c", "vendored/grammars/gn/scanner.c"], ["internal/cbm/grammar_scala.c", "vendored/grammars/scala/parser.c"], ["internal/cbm/grammar_scala.c", "vendored/grammars/scala/scanner.c"], ["internal/cbm/grammar_cfscript.c", "vendored/grammars/cfscript/parser.c"], ["internal/cbm/grammar_cfscript.c", "vendored/grammars/cfscript/scanner.c"], ["internal/cbm/grammar_graphql.c", "vendored/grammars/graphql/parser.c"], ["internal/cbm/grammar_pascal.c", "vendored/grammars/pascal/parser.c"], ["internal/cbm/grammar_r.c", "vendored/grammars/r/parser.c"], ["internal/cbm/grammar_r.c", "vendored/grammars/r/scanner.c"], ["internal/cbm/grammar_elisp.c", "vendored/grammars/elisp/parser.c"], ["internal/cbm/grammar_cuda.c", "vendored/grammars/cuda/parser.c"], ["internal/cbm/grammar_cuda.c", "vendored/grammars/cuda/scanner.c"], ["internal/cbm/grammar_rst.c", "vendored/grammars/rst/parser.c"], ["internal/cbm/grammar_rst.c", "vendored/grammars/rst/scanner.c"], ["internal/cbm/grammar_commonlisp.c", "vendored/grammars/commonlisp/parser.c"], ["internal/cbm/grammar_bash.c", "vendored/grammars/bash/parser.c"], ["internal/cbm/grammar_bash.c", "vendored/grammars/bash/scanner.c"], ["internal/cbm/grammar_yaml.c", "vendored/grammars/yaml/parser.c"], ["internal/cbm/grammar_yaml.c", "vendored/grammars/yaml/scanner.c"], ["internal/cbm/grammar_elixir.c", "vendored/grammars/elixir/parser.c"], ["internal/cbm/grammar_elixir.c", "vendored/grammars/elixir/scanner.c"], ["internal/cbm/grammar_ocaml.c", "vendored/grammars/ocaml/parser.c"], ["internal/cbm/grammar_ocaml.c", "vendored/grammars/ocaml/scanner.c"], ["internal/cbm/grammar_vim.c", "vendored/grammars/vim/parser.c"], ["internal/cbm/grammar_vim.c", "vendored/grammars/vim/scanner.c"], ["internal/cbm/ac.h", "stdint.h"], ["internal/cbm/grammar_diff.c", "vendored/grammars/diff/parser.c"], ["internal/cbm/grammar_d.c", "vendored/grammars/d/parser.c"], ["internal/cbm/grammar_d.c", "vendored/grammars/d/scanner.c"], ["internal/cbm/grammar_crystal.c", "vendored/grammars/crystal/parser.c"], ["internal/cbm/grammar_crystal.c", "vendored/grammars/crystal/scanner.c"], ["internal/cbm/extract_unified.c", "extract_unified.h"], ["internal/cbm/extract_unified.c", "arena.h"], ["internal/cbm/extract_unified.c", "cbm.h"], ["internal/cbm/extract_unified.c", "helpers.h"], ["internal/cbm/extract_unified.c", "lang_specs.h"], ["internal/cbm/extract_unified.c", "tree_sitter/api.h"], ["internal/cbm/extract_unified.c", "foundation/constants.h"], ["internal/cbm/extract_unified.c", "stdint.h"], ["internal/cbm/extract_unified.c", "string.h"], ["internal/cbm/grammar_xml.c", "vendored/grammars/xml/parser.c"], ["internal/cbm/grammar_xml.c", "vendored/grammars/xml/scanner.c"], ["internal/cbm/grammar_lean.c", "vendored/grammars/lean/parser.c"], ["internal/cbm/grammar_lean.c", "vendored/grammars/lean/scanner.c"], ["internal/cbm/grammar_groovy.c", "vendored/grammars/groovy/parser.c"], ["internal/cbm/grammar_pkl.c", "vendored/grammars/pkl/parser.c"], ["internal/cbm/grammar_pkl.c", "vendored/grammars/pkl/scanner.c"], ["internal/cbm/grammar_wgsl.c", "vendored/grammars/wgsl/parser.c"], ["internal/cbm/grammar_wgsl.c", "vendored/grammars/wgsl/scanner.c"], ["internal/cbm/grammar_json.c", "vendored/grammars/json/parser.c"], ["internal/cbm/grammar_makefile.c", "vendored/grammars/make/parser.c"], ["internal/cbm/grammar_python.c", "vendored/grammars/python/parser.c"], ["internal/cbm/grammar_python.c", "vendored/grammars/python/scanner.c"], ["internal/cbm/grammar_apex.c", "vendored/grammars/apex/parser.c"], ["internal/cbm/grammar_cobol.c", "vendored/grammars/cobol/parser.c"], ["internal/cbm/grammar_cobol.c", "vendored/grammars/cobol/scanner.c"], ["internal/cbm/grammar_julia.c", "vendored/grammars/julia/parser.c"], ["internal/cbm/grammar_julia.c", "vendored/grammars/julia/scanner.c"], ["internal/cbm/grammar_typst.c", "vendored/grammars/typst/parser.c"], ["internal/cbm/grammar_typst.c", "vendored/grammars/typst/scanner.c"], ["internal/cbm/grammar_fsharp.c", "vendored/grammars/fsharp/parser.c"], ["internal/cbm/grammar_fsharp.c", "vendored/grammars/fsharp/scanner.c"], ["internal/cbm/grammar_meson.c", "vendored/grammars/meson/parser.c"], ["internal/cbm/grammar_hare.c", "vendored/grammars/hare/parser.c"], ["internal/cbm/grammar_ini.c", "vendored/grammars/ini/parser.c"], ["internal/cbm/grammar_ada.c", "vendored/grammars/ada/parser.c"], ["internal/cbm/grammar_assembly.c", "vendored/grammars/assembly/parser.c"], ["internal/cbm/grammar_jsonnet.c", "vendored/grammars/jsonnet/parser.c"], ["internal/cbm/grammar_jsonnet.c", "vendored/grammars/jsonnet/scanner.c"], ["internal/cbm/grammar_devicetree.c", "vendored/grammars/devicetree/parser.c"], ["internal/cbm/grammar_awk.c", "vendored/grammars/awk/parser.c"], ["internal/cbm/grammar_awk.c", "vendored/grammars/awk/scanner.c"], ["internal/cbm/grammar_gleam.c", "vendored/grammars/gleam/parser.c"], ["internal/cbm/grammar_gleam.c", "vendored/grammars/gleam/scanner.c"], ["internal/cbm/grammar_dart.c", "vendored/grammars/dart/parser.c"], ["internal/cbm/grammar_dart.c", "vendored/grammars/dart/scanner.c"], ["internal/cbm/grammar_odin.c", "vendored/grammars/odin/parser.c"], ["internal/cbm/grammar_odin.c", "vendored/grammars/odin/scanner.c"], ["internal/cbm/grammar_fish.c", "vendored/grammars/fish/parser.c"], ["internal/cbm/grammar_fish.c", "vendored/grammars/fish/scanner.c"], ["internal/cbm/cbm.h", "stdint.h"], ["internal/cbm/cbm.h", "stdbool.h"], ["internal/cbm/cbm.h", "arena.h"], ["internal/cbm/cbm.h", "tree_sitter/api.h"], ["internal/cbm/grammar_bicep.c", "vendored/grammars/bicep/parser.c"], ["internal/cbm/grammar_bicep.c", "vendored/grammars/bicep/scanner.c"], ["internal/cbm/grammar_solidity.c", "vendored/grammars/solidity/parser.c"], ["internal/cbm/ts_runtime.c", "vendored/ts_runtime/src/lib.c"], ["internal/cbm/grammar_cairo.c", "vendored/grammars/cairo/parser.c"], ["internal/cbm/grammar_cairo.c", "vendored/grammars/cairo/scanner.c"], ["internal/cbm/grammar_puppet.c", "vendored/grammars/puppet/parser.c"], ["internal/cbm/grammar_smali.c", "vendored/grammars/smali/parser.c"], ["internal/cbm/grammar_smali.c", "vendored/grammars/smali/scanner.c"], ["internal/cbm/lang_specs.c", "lang_specs.h"], ["internal/cbm/lang_specs.c", "cbm.h"], ["internal/cbm/lang_specs.c", "tree_sitter/api.h"], ["internal/cbm/sqlite_writer.h", "stdint.h"], ["internal/cbm/grammar_beancount.c", "vendored/grammars/beancount/parser.c"], ["internal/cbm/grammar_beancount.c", "vendored/grammars/beancount/scanner.c"], ["internal/cbm/grammar_hcl.c", "vendored/grammars/hcl/parser.c"], ["internal/cbm/grammar_hcl.c", "vendored/grammars/hcl/scanner.c"], ["internal/cbm/grammar_glsl.c", "vendored/grammars/glsl/parser.c"], ["internal/cbm/grammar_move.c", "vendored/grammars/move/parser.c"], ["internal/cbm/arena.h", "stddef.h"], ["internal/cbm/helpers.h", "cbm.h"], ["internal/cbm/grammar_gomod.c", "vendored/grammars/gomod/parser.c"], ["internal/cbm/grammar_css.c", "vendored/grammars/css/parser.c"], ["internal/cbm/grammar_css.c", "vendored/grammars/css/scanner.c"], ["internal/cbm/grammar_regex.c", "vendored/grammars/regex/parser.c"], ["internal/cbm/grammar_lua.c", "vendored/grammars/lua/parser.c"], ["internal/cbm/grammar_lua.c", "vendored/grammars/lua/scanner.c"], ["internal/cbm/grammar_liquid.c", "vendored/grammars/liquid/parser.c"], ["internal/cbm/grammar_liquid.c", "vendored/grammars/liquid/scanner.c"], ["internal/cbm/grammar_ruby.c", "vendored/grammars/ruby/parser.c"], ["internal/cbm/grammar_ruby.c", "vendored/grammars/ruby/scanner.c"], ["internal/cbm/grammar_fortran.c", "vendored/grammars/fortran/parser.c"], ["internal/cbm/grammar_fortran.c", "vendored/grammars/fortran/scanner.c"], ["internal/cbm/grammar_perl.c", "vendored/grammars/perl/parser.c"], ["internal/cbm/grammar_perl.c", "vendored/grammars/perl/scanner.c"], ["internal/cbm/grammar_luau.c", "vendored/grammars/luau/parser.c"], ["internal/cbm/grammar_luau.c", "vendored/grammars/luau/scanner.c"], ["internal/cbm/grammar_ispc.c", "vendored/grammars/ispc/parser.c"], ["internal/cbm/grammar_dotenv.c", "vendored/grammars/dotenv/parser.c"], ["internal/cbm/grammar_dotenv.c", "vendored/grammars/dotenv/scanner.c"], ["internal/cbm/grammar_linkerscript.c", "vendored/grammars/linkerscript/parser.c"], ["internal/cbm/extract_usages.c", "cbm.h"], ["internal/cbm/extract_usages.c", "helpers.h"], ["internal/cbm/extract_usages.c", "lang_specs.h"], ["internal/cbm/extract_usages.c", "extract_unified.h"], ["internal/cbm/extract_usages.c", "tree_sitter/api.h"], ["internal/cbm/extract_usages.c", "foundation/constants.h"], ["internal/cbm/extract_usages.c", "extract_node_stack.h"], ["internal/cbm/extract_usages.c", "stdint.h"], ["internal/cbm/extract_usages.c", "string.h"], ["internal/cbm/extract_usages.c", "ctype.h"], ["internal/cbm/grammar_tablegen.c", "vendored/grammars/tablegen/parser.c"], ["internal/cbm/grammar_tablegen.c", "vendored/grammars/tablegen/scanner.c"], ["internal/cbm/grammar_squirrel.c", "vendored/grammars/squirrel/parser.c"], ["internal/cbm/grammar_squirrel.c", "vendored/grammars/squirrel/scanner.c"], ["internal/cbm/grammar_c.c", "vendored/grammars/c/parser.c"], ["internal/cbm/extract_node_stack.h", "arena.h"], ["internal/cbm/extract_node_stack.h", "tree_sitter/api.h"], ["internal/cbm/extract_node_stack.h", "string.h"], ["internal/cbm/grammar_smithy.c", "vendored/grammars/smithy/parser.c"], ["internal/cbm/grammar_properties.c", "vendored/grammars/properties/parser.c"], ["internal/cbm/grammar_properties.c", "vendored/grammars/properties/scanner.c"], ["internal/cbm/grammar_fennel.c", "vendored/grammars/fennel/parser.c"], ["internal/cbm/preprocessor.h", "stddef.h"], ["internal/cbm/grammar_racket.c", "vendored/grammars/racket/parser.c"], ["internal/cbm/grammar_racket.c", "vendored/grammars/racket/scanner.c"], ["internal/cbm/grammar_sosl.c", "vendored/grammars/sosl/parser.c"], ["internal/cbm/grammar_matlab.c", "vendored/grammars/matlab/parser.c"], ["internal/cbm/grammar_matlab.c", "vendored/grammars/matlab/scanner.c"], ["internal/cbm/grammar_func.c", "vendored/grammars/func/parser.c"], ["internal/cbm/zstd_store.c", "vendored/zstd/zstd.h"], ["internal/cbm/zstd_store.c", "zstd_store.h"], ["internal/cbm/zstd_store.c", "stddef.h"], ["internal/cbm/lsp/kotlin_lsp.h", "type_rep.h"], ["internal/cbm/lsp/kotlin_lsp.h", "scope.h"], ["internal/cbm/lsp/kotlin_lsp.h", "type_registry.h"], ["internal/cbm/lsp/kotlin_lsp.h", "../cbm.h"], ["internal/cbm/lsp/kotlin_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/rust_proc_macros.c", "../arena.h"], ["internal/cbm/lsp/rust_proc_macros.c", "../cbm.h"], ["internal/cbm/lsp/rust_proc_macros.c", "rust_lsp.h"], ["internal/cbm/lsp/rust_proc_macros.c", "string.h"], ["internal/cbm/lsp/rust_proc_macros.c", "stdio.h"], ["internal/cbm/lsp/rust_cargo.h", "../arena.h"], ["internal/cbm/lsp/rust_cargo.h", "stdbool.h"], ["internal/cbm/lsp/java_lsp.c", "java_lsp.h"], ["internal/cbm/lsp/java_lsp.c", "../helpers.h"], ["internal/cbm/lsp/java_lsp.c", "ctype.h"], ["internal/cbm/lsp/java_lsp.c", "stdint.h"], ["internal/cbm/lsp/java_lsp.c", "stdio.h"], ["internal/cbm/lsp/java_lsp.c", "stdlib.h"], ["internal/cbm/lsp/java_lsp.c", "string.h"], ["internal/cbm/lsp/c_lsp.c", "c_lsp.h"], ["internal/cbm/lsp/c_lsp.c", "lsp_node_iter.h"], ["internal/cbm/lsp/c_lsp.c", "../helpers.h"], ["internal/cbm/lsp/c_lsp.c", "string.h"], ["internal/cbm/lsp/c_lsp.c", "stdio.h"], ["internal/cbm/lsp/c_lsp.c", "stdlib.h"], ["internal/cbm/lsp/c_lsp.c", "ctype.h"], ["internal/cbm/lsp/type_rep.c", "type_rep.h"], ["internal/cbm/lsp/type_rep.c", "stdint.h"], ["internal/cbm/lsp/type_rep.c", "string.h"], ["internal/cbm/lsp/type_registry.c", "type_registry.h"], ["internal/cbm/lsp/type_registry.c", "string.h"], ["internal/cbm/lsp/type_registry.c", "stdlib.h"], ["internal/cbm/lsp/go_lsp.c", "go_lsp.h"], ["internal/cbm/lsp/go_lsp.c", "lsp_node_iter.h"], ["internal/cbm/lsp/go_lsp.c", "../helpers.h"], ["internal/cbm/lsp/go_lsp.c", "string.h"], ["internal/cbm/lsp/go_lsp.c", "stdio.h"], ["internal/cbm/lsp/go_lsp.c", "stdlib.h"], ["internal/cbm/lsp/lsp_node_iter.h", "../arena.h"], ["internal/cbm/lsp/lsp_node_iter.h", "tree_sitter/api.h"], ["internal/cbm/lsp/py_lsp.c", "py_lsp.h"], ["internal/cbm/lsp/py_lsp.c", "../cbm.h"], ["internal/cbm/lsp/py_lsp.c", "../helpers.h"], ["internal/cbm/lsp/py_lsp.c", "tree_sitter/api.h"], ["internal/cbm/lsp/py_lsp.c", "stdio.h"], ["internal/cbm/lsp/py_lsp.c", "stdlib.h"], ["internal/cbm/lsp/py_lsp.c", "string.h"], ["internal/cbm/lsp/rust_lsp.c", "rust_lsp.h"], ["internal/cbm/lsp/rust_lsp.c", "rust_cargo.h"], ["internal/cbm/lsp/rust_lsp.c", "../helpers.h"], ["internal/cbm/lsp/rust_lsp.c", "ctype.h"], ["internal/cbm/lsp/rust_lsp.c", "stdio.h"], ["internal/cbm/lsp/rust_lsp.c", "stdlib.h"], ["internal/cbm/lsp/rust_lsp.c", "string.h"], ["internal/cbm/lsp/cs_lsp.c", "cs_lsp.h"], ["internal/cbm/lsp/cs_lsp.c", "lsp_node_iter.h"], ["internal/cbm/lsp/cs_lsp.c", "../helpers.h"], ["internal/cbm/lsp/cs_lsp.c", "ctype.h"], ["internal/cbm/lsp/cs_lsp.c", "stdio.h"], ["internal/cbm/lsp/cs_lsp.c", "stdlib.h"], ["internal/cbm/lsp/cs_lsp.c", "string.h"], ["internal/cbm/lsp/ts_lsp.h", "type_rep.h"], ["internal/cbm/lsp/ts_lsp.h", "scope.h"], ["internal/cbm/lsp/ts_lsp.h", "type_registry.h"], ["internal/cbm/lsp/ts_lsp.h", "../cbm.h"], ["internal/cbm/lsp/ts_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/php_lsp.h", "type_rep.h"], ["internal/cbm/lsp/php_lsp.h", "scope.h"], ["internal/cbm/lsp/php_lsp.h", "type_registry.h"], ["internal/cbm/lsp/php_lsp.h", "../cbm.h"], ["internal/cbm/lsp/php_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/scope.c", "scope.h"], ["internal/cbm/lsp/scope.c", "string.h"], ["internal/cbm/lsp/rust_rustdoc.c", "rust_rustdoc.h"], ["internal/cbm/lsp/rust_rustdoc.c", "type_rep.h"], ["internal/cbm/lsp/rust_rustdoc.c", "../../../vendored/yyjson/yyjson.h"], ["internal/cbm/lsp/rust_rustdoc.c", "string.h"], ["internal/cbm/lsp/rust_rustdoc.c", "stdio.h"], ["internal/cbm/lsp/rust_cargo.c", "rust_cargo.h"], ["internal/cbm/lsp/rust_cargo.c", "stdbool.h"], ["internal/cbm/lsp/rust_cargo.c", "string.h"], ["internal/cbm/lsp/rust_cargo.c", "ctype.h"], ["internal/cbm/lsp/kotlin_lsp.c", "kotlin_lsp.h"], ["internal/cbm/lsp/kotlin_lsp.c", "../helpers.h"], ["internal/cbm/lsp/kotlin_lsp.c", "ctype.h"], ["internal/cbm/lsp/kotlin_lsp.c", "stdarg.h"], ["internal/cbm/lsp/kotlin_lsp.c", "stdio.h"], ["internal/cbm/lsp/kotlin_lsp.c", "stdlib.h"], ["internal/cbm/lsp/kotlin_lsp.c", "string.h"], ["internal/cbm/lsp/type_rep.h", "../arena.h"], ["internal/cbm/lsp/type_rep.h", "stdbool.h"], ["internal/cbm/lsp/type_rep.h", "stdint.h"], ["internal/cbm/lsp/type_registry.h", "type_rep.h"], ["internal/cbm/lsp/type_registry.h", "../arena.h"], ["internal/cbm/lsp/c_lsp.h", "type_rep.h"], ["internal/cbm/lsp/c_lsp.h", "scope.h"], ["internal/cbm/lsp/c_lsp.h", "type_registry.h"], ["internal/cbm/lsp/c_lsp.h", "../cbm.h"], ["internal/cbm/lsp/c_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/java_lsp.h", "type_rep.h"], ["internal/cbm/lsp/java_lsp.h", "scope.h"], ["internal/cbm/lsp/java_lsp.h", "type_registry.h"], ["internal/cbm/lsp/java_lsp.h", "../cbm.h"], ["internal/cbm/lsp/java_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/cs_lsp.h", "type_rep.h"], ["internal/cbm/lsp/cs_lsp.h", "scope.h"], ["internal/cbm/lsp/cs_lsp.h", "type_registry.h"], ["internal/cbm/lsp/cs_lsp.h", "../cbm.h"], ["internal/cbm/lsp/cs_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/rust_lsp.h", "type_rep.h"], ["internal/cbm/lsp/rust_lsp.h", "scope.h"], ["internal/cbm/lsp/rust_lsp.h", "type_registry.h"], ["internal/cbm/lsp/rust_lsp.h", "../cbm.h"], ["internal/cbm/lsp/py_lsp.h", "type_rep.h"], ["internal/cbm/lsp/py_lsp.h", "scope.h"], ["internal/cbm/lsp/py_lsp.h", "type_registry.h"], ["internal/cbm/lsp/py_lsp.h", "../cbm.h"], ["internal/cbm/lsp/py_lsp.h", "go_lsp.h"], ["internal/cbm/lsp/go_lsp.h", "type_rep.h"], ["internal/cbm/lsp/go_lsp.h", "scope.h"], ["internal/cbm/lsp/go_lsp.h", "type_registry.h"], ["internal/cbm/lsp/go_lsp.h", "../cbm.h"], ["internal/cbm/lsp/scope.h", "type_rep.h"], ["internal/cbm/lsp/scope.h", "../arena.h"], ["internal/cbm/lsp/rust_rustdoc.h", "../arena.h"], ["internal/cbm/lsp/rust_rustdoc.h", "type_registry.h"], ["internal/cbm/lsp/php_lsp.c", "php_lsp.h"], ["internal/cbm/lsp/php_lsp.c", "lsp_node_iter.h"], ["internal/cbm/lsp/php_lsp.c", "../helpers.h"], ["internal/cbm/lsp/php_lsp.c", "ctype.h"], ["internal/cbm/lsp/php_lsp.c", "stdio.h"], ["internal/cbm/lsp/php_lsp.c", "stdlib.h"], ["internal/cbm/lsp/php_lsp.c", "string.h"], ["internal/cbm/lsp/php_lsp.c", "unistd.h"], ["internal/cbm/lsp/ts_lsp.c", "ts_lsp.h"], ["internal/cbm/lsp/ts_lsp.c", "stdio.h"], ["internal/cbm/lsp/ts_lsp.c", "stdlib.h"], ["internal/cbm/lsp/ts_lsp.c", "string.h"], ["internal/cbm/lsp/generated/rust_crates_seed.c", "../type_rep.h"], ["internal/cbm/lsp/generated/rust_crates_seed.c", "../type_registry.h"], ["internal/cbm/lsp/generated/rust_crates_seed.c", "../rust_lsp.h"], ["internal/cbm/lsp/generated/rust_crates_seed.c", "string.h"], ["internal/cbm/lsp/generated/cpp_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/cpp_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/cpp_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/go_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/go_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/go_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/cs_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/cs_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/cs_stdlib_data.c", "../../arena.h"], ["internal/cbm/lsp/generated/cs_stdlib_data.c", "../cs_lsp.h"], ["internal/cbm/lsp/generated/cs_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/java_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/java_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/java_stdlib_data.c", "../../arena.h"], ["internal/cbm/lsp/generated/java_stdlib_data.c", "../java_lsp.h"], ["internal/cbm/lsp/generated/java_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/kotlin_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/kotlin_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/kotlin_stdlib_data.c", "../kotlin_lsp.h"], ["internal/cbm/lsp/generated/kotlin_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/rust_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/rust_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/rust_stdlib_data.c", "../rust_lsp.h"], ["internal/cbm/lsp/generated/rust_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/python_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/python_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/python_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/php_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/php_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/php_stdlib_data.c", "../../arena.h"], ["internal/cbm/lsp/generated/php_stdlib_data.c", "../php_lsp.h"], ["internal/cbm/lsp/generated/php_stdlib_data.c", "string.h"], ["internal/cbm/lsp/generated/c_stdlib_data.c", "../type_rep.h"], ["internal/cbm/lsp/generated/c_stdlib_data.c", "../type_registry.h"], ["internal/cbm/lsp/generated/c_stdlib_data.c", "string.h"], ["src/main.c", "cbm.h"], ["src/main.c", "mcp/mcp.h"], ["src/main.c", "watcher/watcher.h"], ["src/main.c", "pipeline/pipeline.h"], ["src/main.c", "store/store.h"], ["src/main.c", "cli/cli.h"], ["src/main.c", "cli/progress_sink.h"], ["src/main.c", "foundation/constants.h"], ["src/main.c", "foundation/log.h"], ["src/main.c", "foundation/diagnostics.h"], ["src/main.c", "foundation/platform.h"], ["src/main.c", "foundation/compat.h"], ["src/main.c", "foundation/compat_thread.h"], ["src/main.c", "foundation/mem.h"], ["src/main.c", "foundation/profile.h"], ["src/main.c", "ui/config.h"], ["src/main.c", "ui/http_server.h"], ["src/main.c", "ui/embedded_assets.h"], ["src/main.c", "yyjson/yyjson.h"], ["src/main.c", "stdio.h"], ["src/main.c", "stdlib.h"], ["src/main.c", "string.h"], ["src/main.c", "signal.h"], ["src/main.c", "stdatomic.h"], ["src/ui/layout3d.h", "store/store.h"], ["src/ui/layout3d.h", "stdbool.h"], ["src/ui/httpd.h", "stdbool.h"], ["src/ui/httpd.h", "stddef.h"], ["src/ui/config.h", "stdbool.h"], ["src/ui/http_server.c", "ui/http_server.h"], ["src/ui/http_server.c", "ui/httpd.h"], ["src/ui/http_server.c", "ui/embedded_assets.h"], ["src/ui/http_server.c", "ui/layout3d.h"], ["src/ui/http_server.c", "mcp/mcp.h"], ["src/ui/http_server.c", "store/store.h"], ["src/ui/http_server.c", "foundation/log.h"], ["src/ui/http_server.c", "foundation/platform.h"], ["src/ui/http_server.c", "foundation/compat.h"], ["src/ui/http_server.c", "foundation/str_util.h"], ["src/ui/http_server.c", "foundation/compat_thread.h"], ["src/ui/http_server.c", "sqlite3/sqlite3.h"], ["src/ui/http_server.c", "yyjson/yyjson.h"], ["src/ui/http_server.c", "math.h"], ["src/ui/http_server.c", "stdatomic.h"], ["src/ui/http_server.c", "stdio.h"], ["src/ui/http_server.c", "stdlib.h"], ["src/ui/http_server.c", "string.h"], ["src/ui/http_server.c", "windows.h"], ["src/ui/http_server.c", "process.h"], ["src/ui/http_server.c", "psapi.h"], ["src/ui/http_server.c", "unistd.h"], ["src/ui/http_server.c", "sys/wait.h"], ["src/ui/http_server.c", "mach-o/dyld.h"], ["src/ui/http_server.c", "sys/resource.h"], ["src/ui/http_server.c", "signal.h"], ["src/ui/http_server.c", "dirent.h"], ["src/ui/httpd.c", "ui/httpd.h"], ["src/ui/httpd.c", "ctype.h"], ["src/ui/httpd.c", "stdarg.h"], ["src/ui/httpd.c", "stdatomic.h"], ["src/ui/httpd.c", "stdint.h"], ["src/ui/httpd.c", "stdio.h"], ["src/ui/httpd.c", "stdlib.h"], ["src/ui/httpd.c", "string.h"], ["src/ui/httpd.c", "winsock2.h"], ["src/ui/httpd.c", "ws2tcpip.h"], ["src/ui/httpd.c", "arpa/inet.h"], ["src/ui/httpd.c", "errno.h"], ["src/ui/httpd.c", "netinet/in.h"], ["src/ui/httpd.c", "netinet/tcp.h"], ["src/ui/httpd.c", "poll.h"], ["src/ui/httpd.c", "sys/socket.h"], ["src/ui/httpd.c", "time.h"], ["src/ui/httpd.c", "unistd.h"], ["src/ui/layout3d.c", "foundation/constants.h"], ["src/ui/layout3d.c", "ui/layout3d.h"], ["src/ui/layout3d.c", "foundation/log.h"], ["src/ui/layout3d.c", "yyjson/yyjson.h"], ["src/ui/layout3d.c", "math.h"], ["src/ui/layout3d.c", "stdlib.h"], ["src/ui/layout3d.c", "string.h"], ["src/ui/layout3d.c", "stdint.h"], ["src/ui/config.c", "foundation/constants.h"], ["src/ui/config.c", "ui/config.h"], ["src/ui/config.c", "ui/embedded_assets.h"], ["src/ui/config.c", "foundation/log.h"], ["src/ui/config.c", "foundation/platform.h"], ["src/ui/config.c", "foundation/compat_fs.h"], ["src/ui/config.c", "foundation/compat.h"], ["src/ui/config.c", "yyjson/yyjson.h"], ["src/ui/config.c", "stdio.h"], ["src/ui/config.c", "stdlib.h"], ["src/ui/config.c", "string.h"], ["src/ui/embedded_stub.c", "ui/embedded_assets.h"], ["src/ui/embedded_stub.c", "stddef.h"], ["src/ui/embedded_stub.c", "string.h"], ["src/ui/http_server.h", "stdbool.h"], ["src/pipeline/pass_infrascan.c", "foundation/constants.h"], ["src/pipeline/pass_infrascan.c", "pipeline/pipeline.h"], ["src/pipeline/pass_infrascan.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_infrascan.c", "ctype.h"], ["src/pipeline/pass_infrascan.c", "stdlib.h"], ["src/pipeline/pass_infrascan.c", "string.h"], ["src/pipeline/pass_infrascan.c", "stdio.h"], ["src/pipeline/pipeline_internal.h", "foundation/constants.h"], ["src/pipeline/pipeline_internal.h", "pipeline/pipeline.h"], ["src/pipeline/pipeline_internal.h", "pipeline/path_alias.h"], ["src/pipeline/pipeline_internal.h", "graph_buffer/graph_buffer.h"], ["src/pipeline/pipeline_internal.h", "discover/discover.h"], ["src/pipeline/pipeline_internal.h", "foundation/hash_table.h"], ["src/pipeline/pipeline_internal.h", "cbm.h"], ["src/pipeline/pipeline_internal.h", "lsp/go_lsp.h"], ["src/pipeline/pipeline_internal.h", "stdatomic.h"], ["src/pipeline/pass_gitdiff.c", "foundation/constants.h"], ["src/pipeline/pass_gitdiff.c", "pipeline/pipeline.h"], ["src/pipeline/pass_gitdiff.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_gitdiff.c", "stdio.h"], ["src/pipeline/pass_gitdiff.c", "stdlib.h"], ["src/pipeline/pass_gitdiff.c", "string.h"], ["src/pipeline/pass_semantic_edges.c", "foundation/constants.h"], ["src/pipeline/pass_semantic_edges.c", "pipeline/pipeline.h"], ["src/pipeline/pass_semantic_edges.c", "stdint.h"], ["src/pipeline/pass_semantic_edges.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_semantic_edges.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_semantic_edges.c", "semantic/semantic.h"], ["src/pipeline/pass_semantic_edges.c", "semantic/ast_profile.h"], ["src/pipeline/pass_semantic_edges.c", "simhash/minhash.h"], ["src/pipeline/pass_semantic_edges.c", "foundation/log.h"], ["src/pipeline/pass_semantic_edges.c", "foundation/compat.h"], ["src/pipeline/pass_semantic_edges.c", "xxhash/xxhash.h"], ["src/pipeline/pass_semantic_edges.c", "pipeline/worker_pool.h"], ["src/pipeline/pass_semantic_edges.c", "foundation/platform.h"], ["src/pipeline/pass_semantic_edges.c", "foundation/profile.h"], ["src/pipeline/pass_semantic_edges.c", "stdatomic.h"], ["src/pipeline/pass_semantic_edges.c", "stddef.h"], ["src/pipeline/pass_semantic_edges.c", "stdio.h"], ["src/pipeline/pass_semantic_edges.c", "stdlib.h"], ["src/pipeline/pass_semantic_edges.c", "string.h"], ["src/pipeline/pass_lsp_cross.h", "cbm.h"], ["src/pipeline/pass_lsp_cross.h", "lsp/go_lsp.h"], ["src/pipeline/pass_lsp_cross.h", "lsp/py_lsp.h"], ["src/pipeline/pass_lsp_cross.h", "lsp/c_lsp.h"], ["src/pipeline/pass_lsp_cross.h", "lsp/cs_lsp.h"], ["src/pipeline/pass_lsp_cross.h", "lsp/ts_lsp.h"], ["src/pipeline/pass_lsp_cross.h", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_lsp_cross.h", "stdbool.h"], ["src/pipeline/pass_semantic.c", "foundation/constants.h"], ["src/pipeline/pass_semantic.c", "foundation/str_util.h"], ["src/pipeline/pass_semantic.c", "pipeline/pipeline.h"], ["src/pipeline/pass_semantic.c", "stdint.h"], ["src/pipeline/pass_semantic.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_semantic.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_semantic.c", "foundation/log.h"], ["src/pipeline/pass_semantic.c", "foundation/compat.h"], ["src/pipeline/pass_semantic.c", "cbm.h"], ["src/pipeline/pass_semantic.c", "stdio.h"], ["src/pipeline/pass_semantic.c", "stdlib.h"], ["src/pipeline/pass_semantic.c", "string.h"], ["src/pipeline/pass_configlink.c", "pipeline/pipeline.h"], ["src/pipeline/pass_configlink.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_configlink.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_configlink.c", "foundation/hash_table.h"], ["src/pipeline/pass_configlink.c", "foundation/log.h"], ["src/pipeline/pass_configlink.c", "foundation/compat.h"], ["src/pipeline/pass_configlink.c", "stdint.h"], ["src/pipeline/pass_configlink.c", "stdio.h"], ["src/pipeline/pass_configlink.c", "stdlib.h"], ["src/pipeline/pass_configlink.c", "string.h"], ["src/pipeline/pass_configlink.c", "ctype.h"], ["src/pipeline/pass_configlink.c", "foundation/compat_regex.h"], ["src/pipeline/pass_definitions.c", "foundation/constants.h"], ["src/pipeline/pass_definitions.c", "pipeline/pipeline.h"], ["src/pipeline/pass_definitions.c", "stdint.h"], ["src/pipeline/pass_definitions.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_definitions.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_definitions.c", "foundation/log.h"], ["src/pipeline/pass_definitions.c", "foundation/compat.h"], ["src/pipeline/pass_definitions.c", "cbm.h"], ["src/pipeline/pass_definitions.c", "simhash/minhash.h"], ["src/pipeline/pass_definitions.c", "semantic/ast_profile.h"], ["src/pipeline/pass_definitions.c", "stdio.h"], ["src/pipeline/pass_definitions.c", "stdlib.h"], ["src/pipeline/pass_definitions.c", "string.h"], ["src/pipeline/pass_tests.c", "foundation/constants.h"], ["src/pipeline/pass_tests.c", "pipeline/pipeline.h"], ["src/pipeline/pass_tests.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_tests.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_tests.c", "foundation/log.h"], ["src/pipeline/pass_tests.c", "stdio.h"], ["src/pipeline/pass_tests.c", "stdlib.h"], ["src/pipeline/pass_tests.c", "string.h"], ["src/pipeline/worker_pool.h", "stdbool.h"], ["src/pipeline/fqn.c", "pipeline/pipeline.h"], ["src/pipeline/fqn.c", "foundation/constants.h"], ["src/pipeline/fqn.c", "foundation/platform.h"], ["src/pipeline/fqn.c", "stdbool.h"], ["src/pipeline/fqn.c", "stddef.h"], ["src/pipeline/fqn.c", "stdio.h"], ["src/pipeline/fqn.c", "stdlib.h"], ["src/pipeline/fqn.c", "string.h"], ["src/pipeline/path_alias.h", "stdbool.h"], ["src/pipeline/path_alias.h", "stddef.h"], ["src/pipeline/pipeline.c", "foundation/constants.h"], ["src/pipeline/pipeline.c", "pipeline/pipeline.h"], ["src/pipeline/pipeline.c", "pipeline/artifact.h"], ["src/pipeline/pipeline.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pipeline.c", "pipeline/pass_lsp_cross.h"], ["src/pipeline/pipeline.c", "pipeline/worker_pool.h"], ["src/pipeline/pipeline.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pipeline.c", "git/git_context.h"], ["src/pipeline/pipeline.c", "store/store.h"], ["src/pipeline/pipeline.c", "discover/discover.h"], ["src/pipeline/pipeline.c", "discover/userconfig.h"], ["src/pipeline/pipeline.c", "foundation/platform.h"], ["src/pipeline/pipeline.c", "foundation/compat_fs.h"], ["src/pipeline/pipeline.c", "foundation/log.h"], ["src/pipeline/pipeline.c", "foundation/hash_table.h"], ["src/pipeline/pipeline.c", "foundation/compat.h"], ["src/pipeline/pipeline.c", "foundation/compat_thread.h"], ["src/pipeline/pipeline.c", "foundation/profile.h"], ["src/pipeline/pipeline.c", "foundation/mem.h"], ["src/pipeline/pipeline.c", "stdint.h"], ["src/pipeline/pipeline.c", "stdio.h"], ["src/pipeline/pipeline.c", "stdlib.h"], ["src/pipeline/pipeline.c", "string.h"], ["src/pipeline/pipeline.c", "stdatomic.h"], ["src/pipeline/pipeline.c", "sys/stat.h"], ["src/pipeline/pipeline.c", "time.h"], ["src/pipeline/pipeline_incremental.c", "foundation/constants.h"], ["src/pipeline/pipeline_incremental.c", "pipeline/pipeline.h"], ["src/pipeline/pipeline_incremental.c", "pipeline/artifact.h"], ["src/pipeline/pipeline_incremental.c", "stdio.h"], ["src/pipeline/pipeline_incremental.c", "time.h"], ["src/pipeline/pipeline_incremental.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pipeline_incremental.c", "store/store.h"], ["src/pipeline/pipeline_incremental.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pipeline_incremental.c", "discover/discover.h"], ["src/pipeline/pipeline_incremental.c", "foundation/log.h"], ["src/pipeline/pipeline_incremental.c", "foundation/hash_table.h"], ["src/pipeline/pipeline_incremental.c", "foundation/compat.h"], ["src/pipeline/pipeline_incremental.c", "foundation/compat_fs.h"], ["src/pipeline/pipeline_incremental.c", "foundation/platform.h"], ["src/pipeline/pipeline_incremental.c", "errno.h"], ["src/pipeline/pipeline_incremental.c", "stdlib.h"], ["src/pipeline/pipeline_incremental.c", "string.h"], ["src/pipeline/pipeline_incremental.c", "sys/stat.h"], ["src/pipeline/pipeline_incremental.c", "stdatomic.h"], ["src/pipeline/pipeline_incremental.c", "stdint.h"], ["src/pipeline/lsp_resolve.h", "cbm.h"], ["src/pipeline/lsp_resolve.h", "graph_buffer/graph_buffer.h"], ["src/pipeline/lsp_resolve.h", "foundation/constants.h"], ["src/pipeline/lsp_resolve.h", "stdio.h"], ["src/pipeline/lsp_resolve.h", "string.h"], ["src/pipeline/pass_githistory.c", "foundation/constants.h"], ["src/pipeline/pass_githistory.c", "pipeline/pipeline.h"], ["src/pipeline/pass_githistory.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_githistory.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_githistory.c", "foundation/hash_table.h"], ["src/pipeline/pass_githistory.c", "foundation/log.h"], ["src/pipeline/pass_githistory.c", "foundation/platform.h"], ["src/pipeline/pass_githistory.c", "foundation/compat.h"], ["src/pipeline/pass_githistory.c", "foundation/compat_fs.h"], ["src/pipeline/pass_githistory.c", "foundation/str_util.h"], ["src/pipeline/pass_githistory.c", "stdio.h"], ["src/pipeline/pass_githistory.c", "stdlib.h"], ["src/pipeline/pass_githistory.c", "string.h"], ["src/pipeline/pass_githistory.c", "git2.h"], ["src/pipeline/pass_githistory.c", "time.h"], ["src/pipeline/pass_cross_repo.h", "store/store.h"], ["src/pipeline/pass_route_nodes.c", "foundation/constants.h"], ["src/pipeline/pass_route_nodes.c", "foundation/str_util.h"], ["src/pipeline/pass_route_nodes.c", "yyjson/yyjson.h"], ["src/pipeline/pass_route_nodes.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_route_nodes.c", "stdint.h"], ["src/pipeline/pass_route_nodes.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_route_nodes.c", "foundation/log.h"], ["src/pipeline/pass_route_nodes.c", "stdio.h"], ["src/pipeline/pass_route_nodes.c", "string.h"], ["src/pipeline/artifact.h", "stdbool.h"], ["src/pipeline/pass_configures.c", "pipeline/pipeline.h"], ["src/pipeline/pass_configures.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_configures.c", "ctype.h"], ["src/pipeline/pass_configures.c", "string.h"], ["src/pipeline/pass_compile_commands.c", "foundation/constants.h"], ["src/pipeline/pass_compile_commands.c", "pipeline/pipeline.h"], ["src/pipeline/pass_compile_commands.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_compile_commands.c", "stdlib.h"], ["src/pipeline/pass_compile_commands.c", "string.h"], ["src/pipeline/pass_compile_commands.c", "stdio.h"], ["src/pipeline/pass_compile_commands.c", "yyjson/yyjson.h"], ["src/pipeline/pass_calls.c", "foundation/constants.h"], ["src/pipeline/pass_calls.c", "pipeline/pipeline.h"], ["src/pipeline/pass_calls.c", "stdint.h"], ["src/pipeline/pass_calls.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_calls.c", "pipeline/lsp_resolve.h"], ["src/pipeline/pass_calls.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_calls.c", "foundation/log.h"], ["src/pipeline/pass_calls.c", "foundation/compat.h"], ["src/pipeline/pass_calls.c", "foundation/str_util.h"], ["src/pipeline/pass_calls.c", "cbm.h"], ["src/pipeline/pass_calls.c", "service_patterns.h"], ["src/pipeline/pass_calls.c", "foundation/compat_regex.h"], ["src/pipeline/pass_calls.c", "stdbool.h"], ["src/pipeline/pass_calls.c", "stdio.h"], ["src/pipeline/pass_calls.c", "stdlib.h"], ["src/pipeline/pass_calls.c", "string.h"], ["src/pipeline/pass_pkgmap.c", "pipeline/pipeline.h"], ["src/pipeline/pass_pkgmap.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_pkgmap.c", "discover/discover.h"], ["src/pipeline/pass_pkgmap.c", "foundation/compat.h"], ["src/pipeline/pass_pkgmap.c", "foundation/compat_fs.h"], ["src/pipeline/pass_pkgmap.c", "foundation/constants.h"], ["src/pipeline/pass_pkgmap.c", "foundation/hash_table.h"], ["src/pipeline/pass_pkgmap.c", "foundation/log.h"], ["src/pipeline/pass_pkgmap.c", "foundation/platform.h"], ["src/pipeline/pass_pkgmap.c", "foundation/str_util.h"], ["src/pipeline/pass_pkgmap.c", "foundation/win_utf8.h"], ["src/pipeline/pass_pkgmap.c", "foundation/yaml.h"], ["src/pipeline/pass_pkgmap.c", "yyjson/yyjson.h"], ["src/pipeline/pass_pkgmap.c", "stdbool.h"], ["src/pipeline/pass_pkgmap.c", "stdio.h"], ["src/pipeline/pass_pkgmap.c", "stdlib.h"], ["src/pipeline/pass_pkgmap.c", "string.h"], ["src/pipeline/pass_pkgmap.c", "sys/stat.h"], ["src/pipeline/pass_similarity.c", "foundation/constants.h"], ["src/pipeline/pass_similarity.c", "pipeline/pipeline.h"], ["src/pipeline/pass_similarity.c", "stdint.h"], ["src/pipeline/pass_similarity.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_similarity.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_similarity.c", "simhash/minhash.h"], ["src/pipeline/pass_similarity.c", "foundation/log.h"], ["src/pipeline/pass_similarity.c", "foundation/compat.h"], ["src/pipeline/pass_similarity.c", "foundation/profile.h"], ["src/pipeline/pass_similarity.c", "foundation/platform.h"], ["src/pipeline/pass_similarity.c", "pipeline/worker_pool.h"], ["src/pipeline/pass_similarity.c", "stdatomic.h"], ["src/pipeline/pass_similarity.c", "stdio.h"], ["src/pipeline/pass_similarity.c", "stdlib.h"], ["src/pipeline/pass_similarity.c", "string.h"], ["src/pipeline/pass_lsp_cross.c", "pipeline/pass_lsp_cross.h"], ["src/pipeline/pass_lsp_cross.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/go_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/c_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/py_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/ts_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/php_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/java_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "lsp/kotlin_lsp.h"], ["src/pipeline/pass_lsp_cross.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_lsp_cross.c", "foundation/constants.h"], ["src/pipeline/pass_lsp_cross.c", "foundation/hash_table.h"], ["src/pipeline/pass_lsp_cross.c", "foundation/log.h"], ["src/pipeline/pass_lsp_cross.c", "stdio.h"], ["src/pipeline/pass_lsp_cross.c", "stdlib.h"], ["src/pipeline/pass_lsp_cross.c", "string.h"], ["src/pipeline/pipeline.h", "stdbool.h"], ["src/pipeline/pipeline.h", "stdint.h"], ["src/pipeline/path_alias.c", "pipeline/path_alias.h"], ["src/pipeline/path_alias.c", "foundation/compat.h"], ["src/pipeline/path_alias.c", "foundation/compat_fs.h"], ["src/pipeline/path_alias.c", "foundation/constants.h"], ["src/pipeline/path_alias.c", "foundation/log.h"], ["src/pipeline/path_alias.c", "foundation/platform.h"], ["src/pipeline/path_alias.c", "stdbool.h"], ["src/pipeline/path_alias.c", "stddef.h"], ["src/pipeline/path_alias.c", "stdio.h"], ["src/pipeline/path_alias.c", "stdlib.h"], ["src/pipeline/path_alias.c", "string.h"], ["src/pipeline/path_alias.c", "yyjson/yyjson.h"], ["src/pipeline/pass_envscan.c", "foundation/constants.h"], ["src/pipeline/pass_envscan.c", "pipeline/pipeline.h"], ["src/pipeline/pass_envscan.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_envscan.c", "foundation/log.h"], ["src/pipeline/pass_envscan.c", "ctype.h"], ["src/pipeline/pass_envscan.c", "foundation/compat_fs.h"], ["src/pipeline/pass_envscan.c", "foundation/compat_regex.h"], ["src/pipeline/pass_envscan.c", "stdio.h"], ["src/pipeline/pass_envscan.c", "stdlib.h"], ["src/pipeline/pass_envscan.c", "string.h"], ["src/pipeline/pass_envscan.c", "sys/stat.h"], ["src/pipeline/pass_enrichment.c", "foundation/constants.h"], ["src/pipeline/pass_enrichment.c", "pipeline/pipeline.h"], ["src/pipeline/pass_enrichment.c", "stdint.h"], ["src/pipeline/pass_enrichment.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_enrichment.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_enrichment.c", "foundation/log.h"], ["src/pipeline/pass_enrichment.c", "foundation/hash_table.h"], ["src/pipeline/pass_enrichment.c", "foundation/platform.h"], ["src/pipeline/pass_enrichment.c", "foundation/compat.h"], ["src/pipeline/pass_enrichment.c", "yyjson/yyjson.h"], ["src/pipeline/pass_enrichment.c", "ctype.h"], ["src/pipeline/pass_enrichment.c", "stdlib.h"], ["src/pipeline/pass_enrichment.c", "string.h"], ["src/pipeline/pass_usages.c", "foundation/constants.h"], ["src/pipeline/pass_usages.c", "foundation/str_util.h"], ["src/pipeline/pass_usages.c", "pipeline/pipeline.h"], ["src/pipeline/pass_usages.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_usages.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_usages.c", "foundation/log.h"], ["src/pipeline/pass_usages.c", "foundation/compat.h"], ["src/pipeline/pass_usages.c", "cbm.h"], ["src/pipeline/pass_usages.c", "stdio.h"], ["src/pipeline/pass_usages.c", "stdlib.h"], ["src/pipeline/pass_usages.c", "string.h"], ["src/pipeline/worker_pool.c", "pipeline/worker_pool.h"], ["src/pipeline/worker_pool.c", "foundation/constants.h"], ["src/pipeline/worker_pool.c", "foundation/platform.h"], ["src/pipeline/worker_pool.c", "foundation/compat_thread.h"], ["src/pipeline/worker_pool.c", "stdatomic.h"], ["src/pipeline/worker_pool.c", "stdlib.h"], ["src/pipeline/pass_k8s.c", "foundation/constants.h"], ["src/pipeline/pass_k8s.c", "pipeline/pipeline.h"], ["src/pipeline/pass_k8s.c", "stdint.h"], ["src/pipeline/pass_k8s.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_k8s.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_k8s.c", "discover/discover.h"], ["src/pipeline/pass_k8s.c", "foundation/log.h"], ["src/pipeline/pass_k8s.c", "foundation/compat.h"], ["src/pipeline/pass_k8s.c", "cbm.h"], ["src/pipeline/pass_k8s.c", "stdlib.h"], ["src/pipeline/pass_k8s.c", "string.h"], ["src/pipeline/pass_k8s.c", "stdio.h"], ["src/pipeline/artifact.c", "foundation/constants.h"], ["src/pipeline/artifact.c", "pipeline/artifact.h"], ["src/pipeline/artifact.c", "store/store.h"], ["src/pipeline/artifact.c", "foundation/platform.h"], ["src/pipeline/artifact.c", "foundation/compat_fs.h"], ["src/pipeline/artifact.c", "foundation/compat.h"], ["src/pipeline/artifact.c", "foundation/log.h"], ["src/pipeline/artifact.c", "zstd_store.h"], ["src/pipeline/artifact.c", "sqlite3.h"], ["src/pipeline/artifact.c", "yyjson/yyjson.h"], ["src/pipeline/artifact.c", "errno.h"], ["src/pipeline/artifact.c", "fcntl.h"], ["src/pipeline/artifact.c", "stdint.h"], ["src/pipeline/artifact.c", "stdio.h"], ["src/pipeline/artifact.c", "stdlib.h"], ["src/pipeline/artifact.c", "string.h"], ["src/pipeline/artifact.c", "sys/stat.h"], ["src/pipeline/artifact.c", "time.h"], ["src/pipeline/artifact.c", "unistd.h"], ["src/pipeline/pass_parallel.c", "foundation/constants.h"], ["src/pipeline/pass_parallel.c", "pipeline/pipeline.h"], ["src/pipeline/pass_parallel.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_parallel.c", "pipeline/pass_lsp_cross.h"], ["src/pipeline/pass_parallel.c", "pipeline/lsp_resolve.h"], ["src/pipeline/pass_parallel.c", "helpers.h"], ["src/pipeline/pass_parallel.c", "pipeline/worker_pool.h"], ["src/pipeline/pass_parallel.c", "foundation/compat.h"], ["src/pipeline/pass_parallel.c", "foundation/compat_thread.h"], ["src/pipeline/pass_parallel.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_parallel.c", "service_patterns.h"], ["src/pipeline/pass_parallel.c", "foundation/platform.h"], ["src/pipeline/pass_parallel.c", "foundation/hash_table.h"], ["src/pipeline/pass_parallel.c", "foundation/log.h"], ["src/pipeline/pass_parallel.c", "foundation/slab_alloc.h"], ["src/pipeline/pass_parallel.c", "foundation/mem.h"], ["src/pipeline/pass_parallel.c", "foundation/str_util.h"], ["src/pipeline/pass_parallel.c", "foundation/profile.h"], ["src/pipeline/pass_parallel.c", "foundation/compat_regex.h"], ["src/pipeline/pass_parallel.c", "cbm.h"], ["src/pipeline/pass_parallel.c", "simhash/minhash.h"], ["src/pipeline/pass_parallel.c", "semantic/ast_profile.h"], ["src/pipeline/pass_parallel.c", "stdatomic.h"], ["src/pipeline/pass_parallel.c", "stdint.h"], ["src/pipeline/pass_parallel.c", "stdio.h"], ["src/pipeline/pass_parallel.c", "stdlib.h"], ["src/pipeline/pass_parallel.c", "string.h"], ["src/pipeline/pass_parallel.c", "time.h"], ["src/pipeline/registry.c", "foundation/constants.h"], ["src/pipeline/registry.c", "pipeline/pipeline.h"], ["src/pipeline/registry.c", "foundation/compat.h"], ["src/pipeline/registry.c", "foundation/hash_table.h"], ["src/pipeline/registry.c", "foundation/dyn_array.h"], ["src/pipeline/registry.c", "foundation/platform.h"], ["src/pipeline/registry.c", "math.h"], ["src/pipeline/registry.c", "stdio.h"], ["src/pipeline/registry.c", "stdlib.h"], ["src/pipeline/registry.c", "string.h"], ["src/pipeline/pass_cross_repo.c", "pipeline/pass_cross_repo.h"], ["src/pipeline/pass_cross_repo.c", "foundation/constants.h"], ["src/pipeline/pass_cross_repo.c", "foundation/log.h"], ["src/pipeline/pass_cross_repo.c", "foundation/platform.h"], ["src/pipeline/pass_cross_repo.c", "foundation/compat.h"], ["src/pipeline/pass_cross_repo.c", "foundation/compat_fs.h"], ["src/pipeline/pass_cross_repo.c", "sqlite3/sqlite3.h"], ["src/pipeline/pass_cross_repo.c", "stdint.h"], ["src/pipeline/pass_cross_repo.c", "stdio.h"], ["src/pipeline/pass_cross_repo.c", "stdlib.h"], ["src/pipeline/pass_cross_repo.c", "string.h"], ["src/pipeline/pass_cross_repo.c", "time.h"], ["src/pipeline/pass_complexity.c", "foundation/constants.h"], ["src/pipeline/pass_complexity.c", "pipeline/pipeline.h"], ["src/pipeline/pass_complexity.c", "pipeline/pipeline_internal.h"], ["src/pipeline/pass_complexity.c", "graph_buffer/graph_buffer.h"], ["src/pipeline/pass_complexity.c", "foundation/log.h"], ["src/pipeline/pass_complexity.c", "foundation/platform.h"], ["src/pipeline/pass_complexity.c", "foundation/compat.h"], ["src/pipeline/pass_complexity.c", "cbm.h"], ["src/pipeline/pass_complexity.c", "stdlib.h"], ["src/pipeline/pass_complexity.c", "string.h"], ["src/pipeline/pass_complexity.c", "stdio.h"], ["src/pipeline/pass_complexity.c", "stdbool.h"], ["src/traces/traces.h", "stdbool.h"], ["src/traces/traces.h", "stddef.h"], ["src/traces/traces.h", "stdint.h"], ["src/traces/traces.c", "stdint.h"], ["src/traces/traces.c", "traces/traces.h"], ["src/traces/traces.c", "foundation/constants.h"], ["src/traces/traces.c", "stdlib.h"], ["src/traces/traces.c", "string.h"], ["src/traces/traces.c", "stdio.h"], ["src/traces/traces.c", "inttypes.h"], ["src/simhash/minhash.h", "stdint.h"], ["src/simhash/minhash.h", "stdbool.h"], ["src/simhash/minhash.c", "simhash/minhash.h"], ["src/simhash/minhash.c", "foundation/constants.h"], ["src/simhash/minhash.c", "foundation/log.h"], ["src/simhash/minhash.c", "xxhash/xxhash.h"], ["src/simhash/minhash.c", "tree_sitter/api.h"], ["src/simhash/minhash.c", "stddef.h"], ["src/simhash/minhash.c", "stdint.h"], ["src/simhash/minhash.c", "stdlib.h"], ["src/simhash/minhash.c", "string.h"], ["src/simhash/minhash.c", "stdio.h"], ["src/simhash/minhash.c", "ctype.h"], ["src/discover/userconfig.c", "discover/userconfig.h"], ["src/discover/userconfig.c", "cbm.h"], ["src/discover/userconfig.c", "foundation/constants.h"], ["src/discover/userconfig.c", "foundation/platform.h"], ["src/discover/userconfig.c", "foundation/log.h"], ["src/discover/userconfig.c", "yyjson/yyjson.h"], ["src/discover/userconfig.c", "ctype.h"], ["src/discover/userconfig.c", "stdio.h"], ["src/discover/userconfig.c", "stdlib.h"], ["src/discover/userconfig.c", "string.h"], ["src/discover/discover.c", "discover/discover.h"], ["src/discover/discover.c", "cbm.h"], ["src/discover/discover.c", "foundation/constants.h"], ["src/discover/discover.c", "foundation/compat_fs.h"], ["src/discover/discover.c", "foundation/win_utf8.h"], ["src/discover/discover.c", "stdint.h"], ["src/discover/discover.c", "stdio.h"], ["src/discover/discover.c", "stdlib.h"], ["src/discover/discover.c", "string.h"], ["src/discover/discover.c", "sys/stat.h"], ["src/discover/gitignore.c", "foundation/constants.h"], ["src/discover/gitignore.c", "discover/discover.h"], ["src/discover/gitignore.c", "ctype.h"], ["src/discover/gitignore.c", "stdio.h"], ["src/discover/gitignore.c", "stdlib.h"], ["src/discover/gitignore.c", "string.h"], ["src/discover/userconfig.h", "cbm.h"], ["src/discover/language.c", "discover/discover.h"], ["src/discover/language.c", "discover/userconfig.h"], ["src/discover/language.c", "cbm.h"], ["src/discover/language.c", "foundation/constants.h"], ["src/discover/language.c", "ctype.h"], ["src/discover/language.c", "stdio.h"], ["src/discover/language.c", "string.h"], ["src/discover/discover.h", "stdbool.h"], ["src/discover/discover.h", "stdint.h"], ["src/discover/discover.h", "cbm.h"], ["src/watcher/watcher.c", "stdint.h"], ["src/watcher/watcher.c", "watcher/watcher.h"], ["src/watcher/watcher.c", "store/store.h"], ["src/watcher/watcher.c", "foundation/constants.h"], ["src/watcher/watcher.c", "foundation/log.h"], ["src/watcher/watcher.c", "foundation/hash_table.h"], ["src/watcher/watcher.c", "foundation/compat.h"], ["src/watcher/watcher.c", "foundation/compat_thread.h"], ["src/watcher/watcher.c", "foundation/compat_fs.h"], ["src/watcher/watcher.c", "foundation/str_util.h"], ["src/watcher/watcher.c", "stdio.h"], ["src/watcher/watcher.c", "stdlib.h"], ["src/watcher/watcher.c", "string.h"], ["src/watcher/watcher.c", "time.h"], ["src/watcher/watcher.c", "stdatomic.h"], ["src/watcher/watcher.c", "sys/stat.h"], ["src/watcher/watcher.h", "stdbool.h"], ["src/watcher/watcher.h", "stdint.h"], ["src/foundation/log.c", "log.h"], ["src/foundation/log.c", "foundation/constants.h"], ["src/foundation/log.c", "ctype.h"], ["src/foundation/log.c", "inttypes.h"], ["src/foundation/log.c", "stdarg.h"], ["src/foundation/log.c", "stdint.h"], ["src/foundation/log.c", "stdio.h"], ["src/foundation/log.c", "stdlib.h"], ["src/foundation/log.c", "string.h"], ["src/foundation/slab_alloc.h", "stddef.h"], ["src/foundation/compat_thread.h", "stddef.h"], ["src/foundation/compat_thread.h", "windows.h"], ["src/foundation/compat_thread.h", "pthread.h"], ["src/foundation/profile.h", "stdbool.h"], ["src/foundation/profile.h", "time.h"], ["src/foundation/system_info_internal.h", "stddef.h"], ["src/foundation/compat.c", "foundation/compat.h"], ["src/foundation/compat.c", "foundation/constants.h"], ["src/foundation/compat.c", "stdlib.h"], ["src/foundation/compat.c", "string.h"], ["src/foundation/compat.c", "io.h"], ["src/foundation/compat.c", "fcntl.h"], ["src/foundation/compat.c", "sys/stat.h"], ["src/foundation/compat.c", "direct.h"], ["src/foundation/compat_fs.c", "foundation/constants.h"], ["src/foundation/compat_fs.c", "foundation/compat_fs.h"], ["src/foundation/compat_fs.c", "stdio.h"], ["src/foundation/compat_fs.c", "stdlib.h"], ["src/foundation/compat_fs.c", "string.h"], ["src/foundation/compat_fs.c", "windows.h"], ["src/foundation/compat_fs.c", "direct.h"], ["src/foundation/compat_fs.c", "io.h"], ["src/foundation/compat_fs.c", "foundation/win_utf8.h"], ["src/foundation/compat_fs.c", "dirent.h"], ["src/foundation/compat_fs.c", "errno.h"], ["src/foundation/compat_fs.c", "sys/stat.h"], ["src/foundation/compat_fs.c", "sys/wait.h"], ["src/foundation/compat_fs.c", "unistd.h"], ["src/foundation/yaml.c", "foundation/constants.h"], ["src/foundation/yaml.c", "foundation/yaml.h"], ["src/foundation/yaml.c", "ctype.h"], ["src/foundation/yaml.c", "stddef.h"], ["src/foundation/yaml.c", "stdio.h"], ["src/foundation/yaml.c", "stdlib.h"], ["src/foundation/yaml.c", "string.h"], ["src/foundation/system_info.c", "foundation/constants.h"], ["src/foundation/system_info.c", "foundation/log.h"], ["src/foundation/system_info.c", "foundation/platform.h"], ["src/foundation/system_info.c", "foundation/system_info_internal.h"], ["src/foundation/system_info.c", "stdint.h"], ["src/foundation/system_info.c", "stdlib.h"], ["src/foundation/system_info.c", "string.h"], ["src/foundation/system_info.c", "windows.h"], ["src/foundation/system_info.c", "sys/sysctl.h"], ["src/foundation/system_info.c", "unistd.h"], ["src/foundation/system_info.c", "sys/types.h"], ["src/foundation/system_info.c", "sys/sysctl.h"], ["src/foundation/system_info.c", "limits.h"], ["src/foundation/system_info.c", "stdio.h"], ["src/foundation/system_info.c", "stdlib.h"], ["src/foundation/system_info.c", "sys/sysinfo.h"], ["src/foundation/system_info.c", "unistd.h"], ["src/foundation/compat_regex.c", "foundation/constants.h"], ["src/foundation/compat_regex.c", "foundation/compat_regex.h"], ["src/foundation/compat_regex.c", "string.h"], ["src/foundation/compat_regex.c", "../../vendored/tre/regex.h"], ["src/foundation/compat_regex.c", "regex.h"], ["src/foundation/mem.c", "mem.h"], ["src/foundation/mem.c", "platform.h"], ["src/foundation/mem.c", "log.h"], ["src/foundation/mem.c", "foundation/constants.h"], ["src/foundation/mem.c", "mimalloc.h"], ["src/foundation/mem.c", "stdatomic.h"], ["src/foundation/mem.c", "stdio.h"], ["src/foundation/mem.c", "windows.h"], ["src/foundation/mem.c", "psapi.h"], ["src/foundation/mem.c", "mach/mach.h"], ["src/foundation/mem.c", "unistd.h"], ["src/foundation/str_util.h", "arena.h"], ["src/foundation/str_util.h", "stdbool.h"], ["src/foundation/str_util.h", "stddef.h"], ["src/foundation/diagnostics.c", "foundation/constants.h"], ["src/foundation/diagnostics.c", "foundation/diagnostics.h"], ["src/foundation/diagnostics.c", "stdatomic.h"], ["src/foundation/diagnostics.c", "foundation/mem.h"], ["src/foundation/diagnostics.c", "foundation/compat.h"], ["src/foundation/diagnostics.c", "foundation/compat_thread.h"], ["src/foundation/diagnostics.c", "foundation/compat_fs.h"], ["src/foundation/diagnostics.c", "foundation/platform.h"], ["src/foundation/diagnostics.c", "mimalloc.h"], ["src/foundation/diagnostics.c", "stdio.h"], ["src/foundation/diagnostics.c", "stdlib.h"], ["src/foundation/diagnostics.c", "string.h"], ["src/foundation/diagnostics.c", "time.h"], ["src/foundation/diagnostics.c", "process.h"], ["src/foundation/diagnostics.c", "dirent.h"], ["src/foundation/diagnostics.c", "unistd.h"], ["src/foundation/platform.c", "platform.h"], ["src/foundation/platform.c", "foundation/constants.h"], ["src/foundation/platform.c", "fcntl.h"], ["src/foundation/platform.c", "stdint.h"], ["src/foundation/platform.c", "stdio.h"], ["src/foundation/platform.c", "string.h"], ["src/foundation/platform.c", "windows.h"], ["src/foundation/platform.c", "io.h"], ["src/foundation/platform.c", "sys/stat.h"], ["src/foundation/platform.c", "foundation/win_utf8.h"], ["src/foundation/platform.c", "sys/mman.h"], ["src/foundation/platform.c", "sys/stat.h"], ["src/foundation/platform.c", "unistd.h"], ["src/foundation/platform.c", "time.h"], ["src/foundation/platform.c", "mach/mach_time.h"], ["src/foundation/platform.c", "sys/sysctl.h"], ["src/foundation/platform.c", "sched.h"], ["src/foundation/platform.c", "stdlib.h"], ["src/foundation/platform.c", "crt_externs.h"], ["src/foundation/vmem.c", "vmem.h"], ["src/foundation/vmem.c", "platform.h"], ["src/foundation/vmem.c", "log.h"], ["src/foundation/vmem.c", "stdatomic.h"], ["src/foundation/vmem.c", "stdio.h"], ["src/foundation/vmem.c", "string.h"], ["src/foundation/vmem.c", "windows.h"], ["src/foundation/vmem.c", "sys/mman.h"], ["src/foundation/vmem.c", "unistd.h"], ["src/foundation/str_intern.c", "str_intern.h"], ["src/foundation/str_intern.c", "arena.h"], ["src/foundation/str_intern.c", "foundation/constants.h"], ["src/foundation/str_intern.c", "stdint.h"], ["src/foundation/str_intern.c", "stdlib.h"], ["src/foundation/str_intern.c", "string.h"], ["src/foundation/arena.c", "arena.h"], ["src/foundation/arena.c", "foundation/constants.h"], ["src/foundation/arena.c", "stdlib.h"], ["src/foundation/arena.c", "string.h"], ["src/foundation/arena.c", "stdarg.h"], ["src/foundation/arena.c", "stdio.h"], ["src/foundation/hash_table.h", "stddef.h"], ["src/foundation/hash_table.h", "stdint.h"], ["src/foundation/hash_table.h", "stdbool.h"], ["src/foundation/win_utf8.h", "windows.h"], ["src/foundation/win_utf8.h", "stdlib.h"], ["src/foundation/win_utf8.h", "wchar.h"], ["src/foundation/slab_alloc.c", "foundation/constants.h"], ["src/foundation/slab_alloc.c", "foundation/slab_alloc.h"], ["src/foundation/slab_alloc.c", "foundation/compat.h"], ["src/foundation/slab_alloc.c", "stdbool.h"], ["src/foundation/slab_alloc.c", "stdint.h"], ["src/foundation/slab_alloc.c", "stdlib.h"], ["src/foundation/slab_alloc.c", "string.h"], ["src/foundation/compat_thread.c", "foundation/constants.h"], ["src/foundation/compat_thread.c", "foundation/compat_thread.h"], ["src/foundation/compat_thread.c", "pthread.h"], ["src/foundation/compat_thread.c", "stdlib.h"], ["src/foundation/compat_thread.c", "string.h"], ["src/foundation/log.h", "stdint.h"], ["src/foundation/compat_fs.h", "stdbool.h"], ["src/foundation/compat_fs.h", "stddef.h"], ["src/foundation/compat_fs.h", "stdio.h"], ["src/foundation/yaml.h", "stdbool.h"], ["src/foundation/compat.h", "stddef.h"], ["src/foundation/compat.h", "stdio.h"], ["src/foundation/compat.h", "windows.h"], ["src/foundation/compat.h", "unistd.h"], ["src/foundation/compat.h", "direct.h"], ["src/foundation/compat.h", "sys/stat.h"], ["src/foundation/compat.h", "time.h"], ["src/foundation/compat.h", "io.h"], ["src/foundation/compat.h", "fcntl.h"], ["src/foundation/profile.c", "foundation/profile.h"], ["src/foundation/profile.c", "foundation/log.h"], ["src/foundation/profile.c", "foundation/compat.h"], ["src/foundation/profile.c", "stdio.h"], ["src/foundation/profile.c", "stdlib.h"], ["src/foundation/profile.c", "time.h"], ["src/foundation/diagnostics.h", "stdbool.h"], ["src/foundation/diagnostics.h", "stdint.h"], ["src/foundation/diagnostics.h", "stdatomic.h"], ["src/foundation/str_util.c", "str_util.h"], ["src/foundation/str_util.c", "arena.h"], ["src/foundation/str_util.c", "foundation/constants.h"], ["src/foundation/str_util.c", "string.h"], ["src/foundation/str_util.c", "ctype.h"], ["src/foundation/str_util.c", "stdio.h"], ["src/foundation/mem.h", "stdbool.h"], ["src/foundation/mem.h", "stddef.h"], ["src/foundation/dyn_array.h", "stdlib.h"], ["src/foundation/dyn_array.h", "string.h"], ["src/foundation/compat_regex.h", "foundation/constants.h"], ["src/foundation/compat_regex.h", "stddef.h"], ["src/foundation/arena.h", "stddef.h"], ["src/foundation/arena.h", "stdarg.h"], ["src/foundation/hash_table.c", "foundation/constants.h"], ["src/foundation/hash_table.c", "hash_table.h"], ["src/foundation/hash_table.c", "stdlib.h"], ["src/foundation/hash_table.c", "string.h"], ["src/foundation/hash_table.c", "../../internal/cbm/vendored/verstable/verstable.h"], ["src/foundation/platform.h", "stddef.h"], ["src/foundation/platform.h", "stdint.h"], ["src/foundation/platform.h", "stdbool.h"], ["src/foundation/platform.h", "stdlib.h"], ["src/foundation/str_intern.h", "stddef.h"], ["src/foundation/str_intern.h", "stdint.h"], ["src/foundation/vmem.h", "stdbool.h"], ["src/foundation/vmem.h", "stddef.h"], ["src/mcp/mcp.c", "foundation/constants.h"], ["src/mcp/mcp.c", "mcp/mcp.h"], ["src/mcp/mcp.c", "store/store.h"], ["src/mcp/mcp.c", "sqlite3.h"], ["src/mcp/mcp.c", "cypher/cypher.h"], ["src/mcp/mcp.c", "pipeline/pipeline.h"], ["src/mcp/mcp.c", "pipeline/pass_cross_repo.h"], ["src/mcp/mcp.c", "git/git_context.h"], ["src/mcp/mcp.c", "cli/cli.h"], ["src/mcp/mcp.c", "watcher/watcher.h"], ["src/mcp/mcp.c", "foundation/mem.h"], ["src/mcp/mcp.c", "foundation/diagnostics.h"], ["src/mcp/mcp.c", "foundation/platform.h"], ["src/mcp/mcp.c", "foundation/compat.h"], ["src/mcp/mcp.c", "foundation/compat_fs.h"], ["src/mcp/mcp.c", "foundation/compat_thread.h"], ["src/mcp/mcp.c", "foundation/log.h"], ["src/mcp/mcp.c", "foundation/str_util.h"], ["src/mcp/mcp.c", "foundation/compat_regex.h"], ["src/mcp/mcp.c", "pipeline/artifact.h"], ["src/mcp/mcp.c", "process.h"], ["src/mcp/mcp.c", "unistd.h"], ["src/mcp/mcp.c", "poll.h"], ["src/mcp/mcp.c", "fcntl.h"], ["src/mcp/mcp.c", "yyjson/yyjson.h"], ["src/mcp/mcp.c", "stdint.h"], ["src/mcp/mcp.c", "stdio.h"], ["src/mcp/mcp.c", "stdlib.h"], ["src/mcp/mcp.c", "stdarg.h"], ["src/mcp/mcp.c", "string.h"], ["src/mcp/mcp.c", "sys/stat.h"], ["src/mcp/mcp.c", "time.h"], ["src/mcp/mcp.c", "errno.h"], ["src/mcp/mcp.h", "stdbool.h"], ["src/mcp/mcp.h", "stdint.h"], ["src/mcp/mcp.h", "stdio.h"], ["src/cypher/cypher.c", "cypher/cypher.h"], ["src/cypher/cypher.c", "store/store.h"], ["src/cypher/cypher.c", "foundation/platform.h"], ["src/cypher/cypher.c", "ctype.h"], ["src/cypher/cypher.c", "foundation/compat_regex.h"], ["src/cypher/cypher.c", "stddef.h"], ["src/cypher/cypher.c", "stdint.h"], ["src/cypher/cypher.c", "stdio.h"], ["src/cypher/cypher.c", "stdlib.h"], ["src/cypher/cypher.c", "string.h"], ["src/cypher/cypher.h", "stdint.h"], ["src/cypher/cypher.h", "stdbool.h"], ["src/cypher/cypher.h", "store/store.h"], ["src/cli/cli.c", "cli/cli.h"], ["src/cli/cli.c", "foundation/compat.h"], ["src/cli/cli.c", "foundation/platform.h"], ["src/cli/cli.c", "foundation/constants.h"], ["src/cli/cli.c", "ctype.h"], ["src/cli/cli.c", "signal.h"], ["src/cli/cli.c", "unistd.h"], ["src/cli/cli.c", "mach-o/dyld.h"], ["src/cli/cli.c", "foundation/compat_fs.h"], ["src/cli/cli.c", "errno.h"], ["src/cli/cli.c", "fcntl.h"], ["src/cli/cli.c", "stdint.h"], ["src/cli/cli.c", "stdio.h"], ["src/cli/cli.c", "stdlib.h"], ["src/cli/cli.c", "string.h"], ["src/cli/cli.c", "sys/stat.h"], ["src/cli/cli.c", "zlib.h"], ["src/cli/cli.c", "yyjson/yyjson.h"], ["src/cli/cli.c", "sqlite3.h"], ["src/cli/hook_augment.c", "cli/cli.h"], ["src/cli/hook_augment.c", "foundation/mem.h"], ["src/cli/hook_augment.c", "mcp/mcp.h"], ["src/cli/hook_augment.c", "pipeline/pipeline.h"], ["src/cli/hook_augment.c", "yyjson/yyjson.h"], ["src/cli/hook_augment.c", "ctype.h"], ["src/cli/hook_augment.c", "stdbool.h"], ["src/cli/hook_augment.c", "stdio.h"], ["src/cli/hook_augment.c", "stdlib.h"], ["src/cli/hook_augment.c", "string.h"], ["src/cli/hook_augment.c", "signal.h"], ["src/cli/hook_augment.c", "sys/time.h"], ["src/cli/hook_augment.c", "unistd.h"], ["src/cli/progress_sink.c", "progress_sink.h"], ["src/cli/progress_sink.c", "foundation/constants.h"], ["src/cli/progress_sink.c", "foundation/log.h"], ["src/cli/progress_sink.c", "stdatomic.h"], ["src/cli/progress_sink.c", "stdio.h"], ["src/cli/progress_sink.c", "stdlib.h"], ["src/cli/progress_sink.c", "string.h"], ["src/cli/cli.h", "stdbool.h"], ["src/cli/progress_sink.h", "stdio.h"], ["src/semantic/semantic.h", "stdbool.h"], ["src/semantic/semantic.h", "stdint.h"], ["src/semantic/ast_profile.c", "semantic/ast_profile.h"], ["src/semantic/ast_profile.c", "foundation/constants.h"], ["src/semantic/ast_profile.c", "tree_sitter/api.h"], ["src/semantic/ast_profile.c", "stdbool.h"], ["src/semantic/ast_profile.c", "stdint.h"], ["src/semantic/ast_profile.c", "stdlib.h"], ["src/semantic/ast_profile.c", "stdio.h"], ["src/semantic/ast_profile.c", "string.h"], ["src/semantic/ast_profile.h", "stdbool.h"], ["src/semantic/ast_profile.h", "stdint.h"], ["src/semantic/semantic.c", "semantic/semantic.h"], ["src/semantic/semantic.c", "foundation/constants.h"], ["src/semantic/semantic.c", "foundation/hash_table.h"], ["src/semantic/semantic.c", "foundation/log.h"], ["src/semantic/semantic.c", "foundation/profile.h"], ["src/semantic/semantic.c", "foundation/platform.h"], ["src/semantic/semantic.c", "foundation/compat_thread.h"], ["src/semantic/semantic.c", "pipeline/worker_pool.h"], ["src/semantic/semantic.c", "simhash/minhash.h"], ["src/semantic/semantic.c", "nomic/code_vectors.h"], ["src/semantic/semantic.c", "xxhash/xxhash.h"], ["src/semantic/semantic.c", "ctype.h"], ["src/semantic/semantic.c", "math.h"], ["src/semantic/semantic.c", "stdatomic.h"], ["src/semantic/semantic.c", "stddef.h"], ["src/semantic/semantic.c", "stdint.h"], ["src/semantic/semantic.c", "stdio.h"], ["src/semantic/semantic.c", "stdlib.h"], ["src/semantic/semantic.c", "string.h"], ["src/graph_buffer/graph_buffer.h", "stdbool.h"], ["src/graph_buffer/graph_buffer.h", "stdint.h"], ["src/graph_buffer/graph_buffer.h", "stdatomic.h"], ["src/graph_buffer/graph_buffer.c", "foundation/constants.h"], ["src/graph_buffer/graph_buffer.c", "graph_buffer/graph_buffer.h"], ["src/graph_buffer/graph_buffer.c", "yyjson/yyjson.h"], ["src/graph_buffer/graph_buffer.c", "store/store.h"], ["src/graph_buffer/graph_buffer.c", "sqlite_writer.h"], ["src/graph_buffer/graph_buffer.c", "foundation/hash_table.h"], ["src/graph_buffer/graph_buffer.c", "foundation/compat.h"], ["src/graph_buffer/graph_buffer.c", "foundation/log.h"], ["src/graph_buffer/graph_buffer.c", "foundation/dyn_array.h"], ["src/graph_buffer/graph_buffer.c", "foundation/profile.h"], ["src/graph_buffer/graph_buffer.c", "foundation/mem.h"], ["src/graph_buffer/graph_buffer.c", "sqlite3.h"], ["src/graph_buffer/graph_buffer.c", "stdatomic.h"], ["src/graph_buffer/graph_buffer.c", "stdint.h"], ["src/graph_buffer/graph_buffer.c", "stdio.h"], ["src/graph_buffer/graph_buffer.c", "stdlib.h"], ["src/graph_buffer/graph_buffer.c", "string.h"], ["src/graph_buffer/graph_buffer.c", "time.h"], ["src/git/git_context.h", "stdbool.h"], ["src/git/git_context.c", "git/git_context.h"], ["src/git/git_context.c", "foundation/compat_fs.h"], ["src/git/git_context.c", "foundation/constants.h"], ["src/git/git_context.c", "foundation/str_util.h"], ["src/git/git_context.c", "ctype.h"], ["src/git/git_context.c", "stdarg.h"], ["src/git/git_context.c", "stdio.h"], ["src/git/git_context.c", "stdlib.h"], ["src/git/git_context.c", "string.h"], ["src/git/git_context.c", "sys/stat.h"], ["src/store/store.c", "stdint.h"], ["src/store/store.c", "foundation/constants.h"], ["src/store/store.c", "math.h"], ["src/store/store.c", "store/store.h"], ["src/store/store.c", "foundation/platform.h"], ["src/store/store.c", "foundation/compat.h"], ["src/store/store.c", "foundation/log.h"], ["src/store/store.c", "foundation/compat_regex.h"], ["src/store/store.c", "foundation/str_util.h"], ["src/store/store.c", "xxhash/xxhash.h"], ["src/store/store.c", "sqlite3.h"], ["src/store/store.c", "stdio.h"], ["src/store/store.c", "stdlib.h"], ["src/store/store.c", "string.h"], ["src/store/store.c", "sys/stat.h"], ["src/store/store.c", "time.h"], ["src/store/store.c", "unistd.h"], ["src/store/store.h", "stdint.h"], ["src/store/store.h", "stdbool.h"], ["src/store/store.h", "stddef.h"]], "n_include_edges": 1626} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/results/qbank.jsonl b/bench/cbm-vs-graphify/results/qbank.jsonl new file mode 100644 index 00000000..7c5f48ef --- /dev/null +++ b/bench/cbm-vs-graphify/results/qbank.jsonl @@ -0,0 +1,25 @@ +{"id": "D1.1", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/simhash/minhash.c. Return just the function names.", "ground_truth": {"type": "set", "file": "src/simhash/minhash.c", "functions": ["band_hash", "bucket_push", "cbm_lsh_free", "cbm_lsh_insert", "cbm_lsh_new", "cbm_minhash_compute", "cbm_minhash_from_hex", "cbm_minhash_jaccard", "cbm_minhash_to_hex", "collect_ast_tokens", "hash_trigrams", "is_identifier_type", "is_normalised_token", "is_number_type", "is_string_type", "is_type_annotation", "normalise_node_type", "result_push", "seen_set_free", "seen_set_init", "seen_set_insert", "trigram_structural_weight", "uniq_trig_init", "uniq_trig_insert", "weighted_minhash_update"], "count": 25}, "scope": "full"} +{"id": "D1.2", "dim": "D1", "question": "List the names of all functions DEFINED in the file internal/cbm/ac.c. Return just the function names.", "ground_truth": {"type": "set", "file": "internal/cbm/ac.c", "functions": ["ac_build_failure", "ac_build_trie", "ac_shrink_tables", "cbm_ac_free", "cbm_ac_num_patterns", "cbm_ac_num_states", "cbm_ac_scan_bitmask", "cbm_ac_table_bytes", "get_decomp_buf", "queue_empty", "queue_free", "queue_init", "queue_pop", "queue_push"], "count": 14}, "scope": "full"} +{"id": "D1.3", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/foundation/str_util.c. Return just the function names.", "ground_truth": {"type": "set", "file": "src/foundation/str_util.c", "functions": ["cbm_json_escape", "cbm_path_base", "cbm_path_dir", "cbm_path_ext", "cbm_path_join", "cbm_path_join_n", "cbm_str_contains", "cbm_str_ends_with", "cbm_str_replace_char", "cbm_str_split", "cbm_str_starts_with", "cbm_str_strip_ext", "cbm_str_tolower", "cbm_validate_project_name", "cbm_validate_shell_arg"], "count": 15}, "scope": "full"} +{"id": "D1.4", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/git/git_context.c. Return just the function names.", "ground_truth": {"type": "set", "file": "src/git/git_context.c", "functions": ["append_fmt_checked", "cbm_git_context_branch_qn", "cbm_git_context_free", "cbm_git_context_props_json", "cbm_git_context_resolve", "derive_canonical_root", "git_capture", "git_strdup", "git_validate_repo_path", "join_root_relative", "json_escaped_len", "path_is_absolute", "slug_from_branch", "trim_newlines"], "count": 14}, "scope": "full"} +{"id": "D1.5", "dim": "D1", "question": "List the names of all functions DEFINED in the file src/discover/discover.c. Return just the function names.", "ground_truth": {"type": "set", "file": "src/discover/discover.c", "functions": ["cbm_discover_free", "cbm_discover_free_excluded", "cbm_has_ignored_suffix", "cbm_matches_fast_pattern", "cbm_should_skip_dir", "cbm_should_skip_filename", "detect_file_language", "file_list_add_excluded", "local_rel_path", "safe_stat", "str_contains", "str_in_list", "try_load_nested_gitignore", "wide_stat"], "count": 14}, "scope": "full"} +{"id": "D2.1", "dim": "D2", "question": "Which functions/files call the function `cbm_arena_alloc`? List the caller locations (files).", "ground_truth": {"type": "callers_ub", "symbol": "cbm_arena_alloc", "caller_files_grep_ub": {"internal/cbm/lsp/ts_lsp.c": 47, "internal/cbm/lsp/c_lsp.c": 46, "internal/cbm/lsp/type_rep.c": 45, "internal/cbm/lsp/py_lsp.c": 39, "internal/cbm/lsp/go_lsp.c": 31, "internal/cbm/lsp/cs_lsp.c": 30, "internal/cbm/lsp/kotlin_lsp.c": 27, "internal/cbm/lsp/php_lsp.c": 26, "internal/cbm/lsp/rust_lsp.c": 24, "internal/cbm/extract_defs.c": 21, "internal/cbm/lsp/java_lsp.c": 21, "internal/cbm/lsp/type_registry.c": 8, "internal/cbm/lsp/generated/cs_stdlib_data.c": 5, "src/foundation/arena.c": 5, "src/foundation/str_util.c": 4, "internal/cbm/arena.c": 3, "internal/cbm/helpers.c": 2, "internal/cbm/extract_node_stack.h": 2, "internal/cbm/lsp/scope.c": 2, "internal/cbm/lsp/generated/cpp_stdlib_data.c": 2, "internal/cbm/lsp/generated/java_stdlib_data.c": 2, "internal/cbm/cbm.c": 1, "internal/cbm/arena.h": 1, "internal/cbm/lsp/lsp_node_iter.h": 1, "internal/cbm/lsp/rust_rustdoc.c": 1, "internal/cbm/lsp/generated/rust_crates_seed.c": 1, "internal/cbm/lsp/generated/rust_stdlib_data.c": 1, "internal/cbm/lsp/generated/php_stdlib_data.c": 1, "src/pipeline/pass_lsp_cross.c": 1, "src/pipeline/pass_parallel.c": 1, "src/foundation/arena.h": 1}, "n_caller_files": 31}, "scope": "full"} +{"id": "D2.2", "dim": "D2", "question": "Which functions/files call the function `cbm_minhash_compute`? List the caller locations (files).", "ground_truth": {"type": "callers_ub", "symbol": "cbm_minhash_compute", "caller_files_grep_ub": {"src/simhash/minhash.h": 2, "internal/cbm/extract_defs.c": 1}, "n_caller_files": 2}, "scope": "full"} +{"id": "D2.3", "dim": "D2", "question": "Which functions/files call the function `cbm_split_camel_case`? List the caller locations (files).", "ground_truth": {"type": "callers_ub", "symbol": "cbm_split_camel_case", "caller_files_grep_ub": {"src/pipeline/pipeline_internal.h": 1, "src/pipeline/pass_enrichment.c": 1}, "n_caller_files": 2}, "scope": "full"} +{"id": "D2.4", "dim": "D2", "question": "Which functions/files call the function `cbm_sem_tokenize`? List the caller locations (files).", "ground_truth": {"type": "callers_ub", "symbol": "cbm_sem_tokenize", "caller_files_grep_ub": {"src/pipeline/pass_semantic_edges.c": 6, "src/semantic/semantic.h": 1}, "n_caller_files": 2}, "scope": "full"} +{"id": "D2.5", "dim": "D2", "question": "Which functions/files call the function `ac_build_trie`? List the caller locations (files).", "ground_truth": {"type": "callers_ub", "symbol": "ac_build_trie", "caller_files_grep_ub": {"internal/cbm/ac.c": 1}, "n_caller_files": 1}, "scope": "full"} +{"id": "D3.1", "dim": "D3", "question": "In which file and at what line is the function `ac_build_trie` defined? Show its full signature.", "ground_truth": {"type": "location", "symbol": "ac_build_trie", "file": "internal/cbm/ac.c", "line": 72, "signature": "static int ac_build_trie(CBMAutomaton *ac, const char **patterns, const int *lengths, int count) {"}, "scope": "full"} +{"id": "D3.2", "dim": "D3", "question": "In which file and at what line is the function `cbm_minhash_jaccard` defined? Show its full signature.", "ground_truth": {"type": "location", "symbol": "cbm_minhash_jaccard", "file": "src/simhash/minhash.c", "line": 269, "signature": "double cbm_minhash_jaccard(const cbm_minhash_t *a, const cbm_minhash_t *b) {"}, "scope": "full"} +{"id": "D3.3", "dim": "D3", "question": "In which file and at what line is the function `cbm_split_camel_case` defined? Show its full signature.", "ground_truth": {"type": "location", "symbol": "cbm_split_camel_case", "file": "src/pipeline/pass_enrichment.c", "line": 45, "signature": "int cbm_split_camel_case(const char *s, char **out, int max_out) {"}, "scope": "full"} +{"id": "D3.4", "dim": "D3", "question": "In which file and at what line is the function `cbm_arena_alloc` defined? Show its full signature.", "ground_truth": {"type": "location", "symbol": "cbm_arena_alloc", "file": "internal/cbm/arena.c", "line": 35, "signature": "void *cbm_arena_alloc(CBMArena *a, size_t n) {"}, "scope": "full"} +{"id": "D3.5", "dim": "D3", "question": "In which file and at what line is the function `camel_should_split` defined? Show its full signature.", "ground_truth": {"type": "location", "symbol": "camel_should_split", "file": "src/store/store.c", "line": 402, "signature": "static bool camel_should_split(const char *input, int i) {"}, "scope": "full"} +{"id": "D4.1", "dim": "D4", "question": "What are the main subsystems / top-level modules of this codebase? Describe the overall architecture.", "ground_truth": {"type": "rubric", "key_subsystems": ["src/cypher", "src/store", "src/semantic", "src/simhash", "src/pipeline", "internal/cbm/lsp", "src/mcp", "src/cli", "src/foundation", "src/discover", "src/watcher", "src/git", "src/graph_buffer", "src/traces", "src/ui"], "note": "credit for identifying the major subsystems and their roles"}, "scope": "full"} +{"id": "D4.2", "dim": "D4", "question": "Which source file is the largest / most central hub by number of functions, and roughly how many functions does it have?", "ground_truth": {"type": "value", "answer": ["src/store/store.c (~140)", "src/cypher/cypher.c (~134)"], "store_c": 140, "cypher_c": 134}, "scope": "full"} +{"id": "D4.3", "dim": "D4", "question": "What is the program entry point, and which file contains main()?", "ground_truth": {"type": "value", "answer": "src/main.c", "has_main": true}, "scope": "full"} +{"id": "D4.4", "dim": "D4", "question": "Which directory contains the per-language LSP type resolvers, and which languages have a hybrid LSP module?", "ground_truth": {"type": "rubric", "dir": "internal/cbm/lsp/", "languages": ["go", "python", "typescript", "java", "c", "csharp", "php", "kotlin", "rust"]}, "scope": "full"} +{"id": "D4.5", "dim": "D4", "question": "How is the MCP server layer organized \u2014 which file implements it and what does it expose?", "ground_truth": {"type": "rubric", "file": "src/mcp/mcp.c", "note": "MCP JSON-RPC server exposing the graph query tools"}, "scope": "full"} +{"id": "D5.1", "dim": "D5", "question": "Find the functions that implement near-duplicate / clone detection (minhash/simhash).", "ground_truth": {"type": "concept_set", "keywords": ["minhash", "simhash"], "reference_hits": {"src/simhash/minhash.c": ["cbm_minhash_compute", "cbm_minhash_from_hex", "cbm_minhash_jaccard", "cbm_minhash_to_hex", "weighted_minhash_update"], "src/pipeline/pass_semantic_edges.c": ["decode_minhash"]}}, "scope": "full"} +{"id": "D5.2", "dim": "D5", "question": "Where is camelCase / identifier tokenization (splitting identifiers into words) implemented?", "ground_truth": {"type": "concept_set", "keywords": ["camel", "tokeniz"], "reference_hits": {"src/store/store.c": ["camel_should_split", "sqlite_camel_split"], "src/semantic/semantic.c": ["cbm_sem_tokenize", "is_camel_break"], "src/pipeline/pass_enrichment.c": ["cbm_split_camel_case", "cbm_tokenize_decorator"], "src/pipeline/fqn.c": ["tokenize_path"], "src/pipeline/pass_semantic_edges.c": ["tokenize_worker"]}}, "scope": "full"} +{"id": "D5.3", "dim": "D5", "question": "Find the arena / bump allocator implementation (allocation from a memory arena).", "ground_truth": {"type": "concept_set", "keywords": ["arena"], "reference_hits": {"internal/cbm/arena.c": ["arena_grow", "cbm_arena_alloc", "cbm_arena_destroy", "cbm_arena_init", "cbm_arena_sprintf", "cbm_arena_strdup", "cbm_arena_strndup"], "src/foundation/arena.c": ["cbm_arena_calloc", "cbm_arena_init_sized", "cbm_arena_reset", "cbm_arena_total"]}}, "scope": "full"} +{"id": "D5.4", "dim": "D5", "question": "Which code implements Aho-Corasick multi-pattern string matching?", "ground_truth": {"type": "concept_set", "keywords": ["ac_build", "ac_match", "ac_queue", "automaton"], "reference_hits": {"internal/cbm/ac.c": ["ac_build_failure", "ac_build_trie"]}}, "scope": "full"} +{"id": "D5.5", "dim": "D5", "question": "Where is the Cypher query language parsed and executed?", "ground_truth": {"type": "concept_set", "keywords": ["cypher", "parse_match", "eval_pattern"], "reference_hits": {"src/cypher/cypher.c": ["cbm_cypher_parse", "cbm_cypher_result_free", "parse_match_chain", "parse_match_pattern"]}}, "scope": "full"} diff --git a/bench/cbm-vs-graphify/results/summary.json b/bench/cbm-vs-graphify/results/summary.json new file mode 100644 index 00000000..3f0997f3 --- /dev/null +++ b/bench/cbm-vs-graphify/results/summary.json @@ -0,0 +1,101 @@ +{ + "corpus": { + "sha": "3ff76d29a639c5be2ca27c943ce2f87de141b73c", + "files": 347, + "loc": 187197, + "lang": "C (vendored & tree-sitter grammars excluded)" + }, + "layer1_structural": { + "cbm": { + "nodes": 4595, + "edges": 16924, + "kinds": 11, + "dup_nodes": 0 + }, + "graphify_ast": { + "nodes": 4077, + "links": 14516, + "kinds": 1 + }, + "function_recall": { + "oracle_n": 2281, + "cbm": 0.997, + "graphify": 0.999 + }, + "include_edges": { + "oracle_n": 692, + "cbm": 326, + "graphify": 68, + "cbm_recall": 0.256, + "graphify_recall": 0.039 + } + }, + "layer2_qa": { + "D1": { + "cbm": 4, + "graphify": 3.2, + "explorer": 3.2 + }, + "D2": { + "cbm": 3.1, + "graphify": 2.8, + "explorer": 4 + }, + "D3": { + "cbm": 4, + "graphify": 2.1, + "explorer": 4 + }, + "D4": { + "cbm": 2.5, + "graphify": 1.5, + "explorer": 4 + }, + "D5": { + "cbm": 3.8, + "graphify": 3.4, + "explorer": 2.2 + }, + "OVERALL": { + "cbm": 3.48, + "graphify": 2.6, + "explorer": 3.48 + } + }, + "layer2_explorer_adjusted_overall": 3.95, + "layer3_operational": { + "cold_build_s": { + "cbm_median": 2.44, + "cbm_runs": [ + 2.51, + 2.42, + 2.44 + ], + "graphify_ast_median": 4.21, + "graphify_ast_runs": [ + 4.94, + 4.18, + 4.21 + ] + }, + "disk_bytes": { + "cbm_db": 53084160, + "graphify_out_total": 33582761, + "graphify_graph_json": 6133023 + }, + "query_latency_ms": { + "cbm_median": 39.95, + "graphify_median": 126.11 + }, + "incremental_s": { + "graphify_update": 3.24, + "cbm_reindex_full": 1.47 + }, + "token_cost": { + "cbm_index": 0, + "graphify_ast": 0, + "graphify_full_subset_llm_naming_wallclock_s": 705.9, + "note": "cbm uses local nomic embeddings (0 API tokens); graphify-AST is deterministic (0 tokens); graphify-FULL semantic/community-naming uses an LLM backend (here local ollama gemma4:26b = 0 API $ but 11.8 min wall-clock for the 16K-LOC subset)." + } + } +} \ No newline at end of file diff --git a/bench/cbm-vs-graphify/scripts/analyze_layer2.py b/bench/cbm-vs-graphify/scripts/analyze_layer2.py new file mode 100644 index 00000000..aca9cc3c --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/analyze_layer2.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import json +from collections import defaultdict + +d = json.load(open("layer2_results.json")) +res = d["result"] +results = res["results"] +CONDS = ["cbm", "graphify", "explorer"] + +print("======== LAYER 2: per-question condition scores (mean of 2 judge passes, 0-4) ========") +print(f"{'id':6} {'dim':4} {'cbm':>5} {'gfy':>5} {'exp':>5} notes") +no_answer = defaultdict(list) +low = [] +toolcalls = defaultdict(list) +disagree = [] +for r in results: + cm = r["condMeanScore"] + # detect no-answer / failures + note = "" + for a in r["answers"]: + toolcalls[a["cond"]].append(a["tool_calls"]) + if a["answer"].strip() in ("(no answer)", "") or "StructuredOutput" in a["answer"]: + no_answer[a["cond"]].append(r["id"]) + note += f" {a['cond']}=NOANS" + # judge pass disagreement + bypass = defaultdict(list) + for p in r["judged"]: + for s in p.get("scores", []): + cond = r["slotToCond"].get(s["slot"]) + if cond: + bypass[cond].append(s["correctness"]) + for c, arr in bypass.items(): + if len(arr) == 2 and abs(arr[0] - arr[1]) >= 2: + disagree.append((r["id"], c, arr)) + def f(x): return f"{x:.1f}" if x is not None else " - " + print(f"{r['id']:6} {r['dim']:4} {f(cm['cbm']):>5} {f(cm['graphify']):>5} {f(cm['explorer']):>5} {note}") + +print("\n-- no-answer / harness failures by condition --") +for c in CONDS: + print(f" {c}: {no_answer.get(c, [])}") + +print("\n-- judge-pass disagreements (|p0-p1|>=2) --") +for did, c, arr in disagree: + print(f" {did} {c}: {arr}") +if not disagree: + print(" none (judge passes consistent)") + +print("\n-- mean tool calls per condition (effort) --") +for c in CONDS: + arr = toolcalls.get(c, []) + print(f" {c}: mean={sum(arr)/len(arr):.1f} total={sum(arr)}") + +print("\n-- graphify notable failures (score<=1) --") +for r in results: + if r["condMeanScore"]["graphify"] is not None and r["condMeanScore"]["graphify"] <= 1.0: + gans = [a["answer"] for a in r["answers"] if a["cond"] == "graphify"][0] + print(f" [{r['id']}] gfy={r['condMeanScore']['graphify']}: {gans[:160]}") + +print("\n-- cbm notable weak spots (D4, score<=2.5) --") +for r in results: + if r["dim"] == "D4": + print(f" [{r['id']}] cbm={r['condMeanScore']['cbm']} gfy={r['condMeanScore']['graphify']} exp={r['condMeanScore']['explorer']}") + +# recompute summary excluding harness-failed explorer answers (fairness) +print("\n-- explorer score EXCLUDING the harness no-answer failures (fairness-adjusted) --") +adj = defaultdict(list) +failed_ids = set(i for ids in no_answer.values() for i in ids) +for r in results: + if r["id"] in [i for i in no_answer.get("explorer", [])]: + continue + if r["condMeanScore"]["explorer"] is not None: + adj[r["dim"]].append(r["condMeanScore"]["explorer"]) +import statistics +allv = [] +for dim in ["D1", "D2", "D3", "D4", "D5"]: + if adj[dim]: + m = statistics.mean(adj[dim]); allv.extend(adj[dim]) + print(f" {dim}: {m:.2f}") +print(f" explorer OVERALL (excl failures): {statistics.mean(allv):.2f}") diff --git a/bench/cbm-vs-graphify/scripts/build_oracle.py b/bench/cbm-vs-graphify/scripts/build_oracle.py new file mode 100644 index 00000000..3044ac05 --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/build_oracle.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""Independent C oracle from `ctags -x` + ripgrep. No tool-under-test involved.""" +import json, re, sys, subprocess, os +from collections import defaultdict, Counter + +EVAL = "/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval" +CORPUS = f"{EVAL}/eval-corpus" +XFILE = f"{EVAL}/oracle_ctags_x.txt" + +def norm_file(f): + return f[2:] if f.startswith("./") else f + +def classify(pattern): + p = pattern.strip() + if p.startswith("#define") or p.startswith("# define"): + return "macro" + if re.match(r'^\s*typedef\b', p): + return "type" + if re.match(r'^\s*(static\s+|const\s+)*(struct|union|enum)\b\s+\w+\s*\{?', p) or re.match(r'^\s*\}\s*\w+\s*;', p): + return "type" + # function definition: has a paren call-like signature, ends with { or ) and not a control kw + if "(" in p and not p.lstrip().startswith(("if", "for", "while", "switch", "return")): + # exclude obvious variable initializers like `int x = foo(...);` + if re.search(r'\b\w+\s*\([^;]*\)\s*\{?\s*$', p) or p.rstrip().endswith("{"): + return "function" + return "other" + +defs = [] # (name, file, line, kind, pattern) +with open(XFILE) as fh: + for ln in fh: + ln = ln.rstrip("\n") + if not ln.strip(): + continue + # name line file pattern... + m = re.match(r'^(\S+)\s+(\d+)\s+(\S+)\s+(.*)$', ln) + if not m: + continue + name, line, f, pat = m.group(1), int(m.group(2)), norm_file(m.group(3)), m.group(4) + defs.append((name, f, line, classify(pat), pat)) + +KW = {"if", "for", "while", "switch", "return", "sizeof", "do", "else", "case"} +def is_real_func(n): + return n not in KW and not n.startswith("__") +kinds = Counter(d[3] for d in defs) +functions = [(n, f, l) for (n, f, l, k, p) in defs if k == "function" and is_real_func(n)] +macros = [(n, f, l) for (n, f, l, k, p) in defs if k == "macro"] +types = [(n, f, l) for (n, f, l, k, p) in defs if k == "type"] + +# include edges (exact, pure-python walk) +inc_re = re.compile(r'^\s*#\s*include\s*[<"]([^>"]+)[>"]') +include_edges = [] +for root, _dirs, files in os.walk(CORPUS): + if "/graphify-out" in root: + continue + for fn in files: + if not fn.endswith((".c", ".h")): + continue + path = os.path.join(root, fn) + src = os.path.relpath(path, CORPUS) + try: + with open(path, errors="ignore") as fh2: + for line in fh2: + mm = inc_re.match(line) + if mm: + include_edges.append((src, mm.group(1))) + except Exception: + pass + +oracle = { + "corpus": CORPUS, + "n_defs_total": len(defs), + "kind_dist": dict(kinds), + "functions": functions, + "macros": macros, + "types": types, + "n_functions": len(functions), + "n_macros": len(macros), + "n_types": len(types), + "include_edges": include_edges, + "n_include_edges": len(include_edges), +} +with open(f"{EVAL}/oracle.json", "w") as fh: + json.dump(oracle, fh) + +print("=== ORACLE (independent, ctags -x + rg) ===") +print("total ctags defs:", len(defs)) +print("kind classification:", dict(kinds)) +print(f"functions={len(functions)} macros={len(macros)} types={len(types)}") +print(f"include edges (exact)={len(include_edges)}") +print("\nsample functions:", functions[:5]) +print("sample macros:", macros[:3]) +print("sample includes:", include_edges[:4]) diff --git a/bench/cbm-vs-graphify/scripts/compare_layer1.py b/bench/cbm-vs-graphify/scripts/compare_layer1.py new file mode 100644 index 00000000..0d750fd4 --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/compare_layer1.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python3 +"""Layer 1 — structural extraction accuracy. cbm vs graphify-AST vs independent oracle.""" +import json, re, os, subprocess +from collections import defaultdict, Counter + +EVAL = "/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval" +CORPUS = f"{EVAL}/eval-corpus" +CBM = "/Users/yf.jin/.local/bin/codebase-memory-mcp" +CBM_CACHE = f"{EVAL}/cbm-cache-smoke" +PROJ = "private-tmp-claude-502-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro-fd757ee7-44e7-439c-ba81-f9b8dc43c4b4-scratchpad-eval-eval-corpus" +GJSON = f"{CORPUS}/graphify-out/graph.json" + +oracle = json.load(open(f"{EVAL}/oracle.json")) + +# corpus file set (relative paths + basenames) for include resolution +corpus_files = set() +basename_to_rel = defaultdict(list) +for root, _d, files in os.walk(CORPUS): + if "/graphify-out" in root: + continue + for fn in files: + if fn.endswith((".c", ".h")): + rel = os.path.relpath(os.path.join(root, fn), CORPUS) + corpus_files.add(rel) + basename_to_rel[fn].append(rel) + +def cbm_query(q): + env = dict(os.environ, CBM_CACHE_DIR=CBM_CACHE) + out = subprocess.run([CBM, "cli", "--json", "query_graph", + json.dumps({"project": PROJ, "query": q})], + capture_output=True, text=True, env=env).stdout + try: + inner = json.loads(out)["content"][0]["text"] + return json.loads(inner).get("rows", []) + except Exception as e: + return [] + +# ---------- cbm graph ---------- +def _i(x): + try: return int(x) + except Exception: return 0 +cbm_nodes = cbm_query("MATCH (n) RETURN n.label, count(*)") +cbm_label_dist = {r[0]: _i(r[1]) for r in cbm_nodes} +cbm_edges = {r[0]: _i(r[1]) for r in cbm_query("MATCH ()-[r]->() RETURN type(r), count(*)")} +cbm_funcs_rows = cbm_query("MATCH (n:Function) RETURN n.name, n.file_path") +cbm_macros_rows = cbm_query("MATCH (n:Macro) RETURN n.name, n.file_path") +cbm_all_rows = cbm_query("MATCH (n) RETURN n.name, n.file_path, n.label") +# dup nodes: same (name,file) emitted as both Method and Function +byk = defaultdict(set) +for nm, f, lab in cbm_all_rows: + if nm: + byk[(nm, f)].add(lab) +cbm_dups = sum(1 for k, s in byk.items() if "Method" in s and "Function" in s) +cbm_funcs = set((r[0], r[1]) for r in cbm_funcs_rows if r[0] and r[1]) +cbm_macros = set((r[0], r[1]) for r in cbm_macros_rows if r[0] and r[1]) +cbm_any = set((r[0], r[1]) for r in cbm_all_rows if r[0] and r[1]) +# cbm includes (IMPORTS edges) src->target file +cbm_imports = cbm_query("MATCH (a)-[:IMPORTS]->(b) RETURN a.file_path, b.file_path, b.name") + +# ---------- graphify graph ---------- +g = json.load(open(GJSON)) +gnodes = g["nodes"]; glinks = g.get("links", []) +gfy_funcs = set() # (name, file) +gfy_any = set() # (name, file) any node +id_to_node = {} +for n in gnodes: + lab = (n.get("label") or "") + sf = n.get("source_file") or "" + id_to_node[n["id"]] = n + name = lab[:-2] if lab.endswith("()") else lab + if sf: + gfy_any.add((name, sf)) + if lab.endswith("()"): + gfy_funcs.add((name, sf)) +gfy_rel = Counter(l.get("relation", "?") for l in glinks) +# graphify includes: relation == 'imports' +gfy_imports = [(l["source"], l["target"]) for l in glinks if l.get("relation") == "imports"] + +# ---------- oracle sets ---------- +oracle_funcs = set((n, f) for (n, f, l) in oracle["functions"]) +oracle_funcs_names = set(n for (n, f, l) in oracle["functions"]) + +def prf(tool_set, gold_set): + tp = len(tool_set & gold_set) + rec = tp / len(gold_set) if gold_set else 0 + prec = tp / len(tool_set) if tool_set else 0 + return tp, rec, prec + +# function-definition recall (strict: function-typed node at name+file) +cbm_tp, cbm_rec, cbm_prec = prf(cbm_funcs, oracle_funcs) +gfy_tp, gfy_rec, gfy_prec = prf(gfy_funcs, oracle_funcs) +# loose recall: oracle function present as ANY node at (name,file) +cbm_tp_l, cbm_rec_l, _ = prf(cbm_any, oracle_funcs) +gfy_tp_l, gfy_rec_l, _ = prf(gfy_any, oracle_funcs) +# name-only recall (file-agnostic): does the tool know this function name anywhere? +cbm_names = set(n for (n, f) in cbm_any) +gfy_names = set(n for (n, f) in gfy_any) +cbm_name_rec = len(oracle_funcs_names & cbm_names) / len(oracle_funcs_names) +gfy_name_rec = len(oracle_funcs_names & gfy_names) / len(oracle_funcs_names) + +# ---------- include-edge recall (in-corpus targets only) ---------- +def resolve_inc(inc): + base = os.path.basename(inc) + if inc in corpus_files: + return inc + if base in basename_to_rel and len(basename_to_rel[base]) == 1: + return basename_to_rel[base][0] + # try suffix match + for rel in corpus_files: + if rel.endswith("/" + inc) or rel == inc: + return rel + return None + +oracle_inc_incorpus = set() +for src, inc in oracle["include_edges"]: + tgt = resolve_inc(inc) + if tgt: + oracle_inc_incorpus.add((src, tgt)) + +# cbm include edges as (src, tgt) by file_path +cbm_inc_set = set() +for r in cbm_imports: + if r[0] and r[1]: + cbm_inc_set.add((r[0], r[1])) +# graphify imports: source/target are node ids; resolve to source_file +gfy_inc_set = set() +for s, t in gfy_imports: + sn = id_to_node.get(s); tn = id_to_node.get(t) + if sn and tn and sn.get("source_file") and tn.get("source_file"): + gfy_inc_set.add((sn["source_file"], tn["source_file"])) + +cbm_inc_tp, cbm_inc_rec, cbm_inc_prec = prf(cbm_inc_set, oracle_inc_incorpus) +gfy_inc_tp, gfy_inc_rec, gfy_inc_prec = prf(gfy_inc_set, oracle_inc_incorpus) + +# ---------- call-edge parity (top callees by fan-in) + grep upper bound ---------- +def grep_callers(sym): + # count call-sites (noisy upper bound): SYM( not preceded by ident char, excluding the def line is approximate + cnt = 0 + pat = re.compile(r'(^|[^A-Za-z0-9_])' + re.escape(sym) + r'\s*\(') + for rel in corpus_files: + try: + with open(os.path.join(CORPUS, rel), errors="ignore") as fh: + for line in fh: + if pat.search(line): + cnt += 1 + except Exception: + pass + return cnt + +cbm_top = cbm_query("MATCH (a)-[:CALLS]->(b) RETURN b.name, count(a) AS n ORDER BY n DESC LIMIT 8") +# graphify caller counts +gfy_call_targets = Counter() +for l in glinks: + if l.get("relation") == "calls": + tn = id_to_node.get(l["target"]) + if tn: + nm = (tn.get("label") or "") + nm = nm[:-2] if nm.endswith("()") else nm + gfy_call_targets[nm] += 1 + +call_parity = [] +for nm, cbm_n in cbm_top: + short = nm.split(".")[-1] if nm else nm + gfy_n = gfy_call_targets.get(short, 0) + grep_n = grep_callers(short) + call_parity.append({"sym": short, "cbm": _i(cbm_n), "gfy": gfy_n, "grep_ub": grep_n}) + +# ---------- output ---------- +res = { + "structural": { + "cbm": {"nodes": sum(cbm_label_dist.values()), "node_labels": cbm_label_dist, + "edges": sum(cbm_edges.values()), "edge_types": cbm_edges, + "dup_nodes": cbm_dups, "kind_richness": len(cbm_label_dist)}, + "graphify_ast": {"nodes": len(gnodes), "links": len(glinks), + "relations": dict(gfy_rel), "kind_richness": 1}, + }, + "function_recall": { + "oracle_functions": len(oracle_funcs), + "cbm": {"function_nodes": len(cbm_funcs), "tp": cbm_tp, "recall_strict": round(cbm_rec, 3), + "precision": round(cbm_prec, 3), "recall_loose_anynode": round(cbm_rec_l, 3), + "recall_name_only": round(cbm_name_rec, 3)}, + "graphify": {"function_nodes": len(gfy_funcs), "tp": gfy_tp, "recall_strict": round(gfy_rec, 3), + "precision": round(gfy_prec, 3), "recall_loose_anynode": round(gfy_rec_l, 3), + "recall_name_only": round(gfy_name_rec, 3)}, + }, + "include_recall": { + "oracle_include_edges_incorpus": len(oracle_inc_incorpus), + "cbm": {"edges": len(cbm_inc_set), "tp": cbm_inc_tp, "recall": round(cbm_inc_rec, 3), "precision": round(cbm_inc_prec, 3)}, + "graphify": {"edges": len(gfy_inc_set), "tp": gfy_inc_tp, "recall": round(gfy_inc_rec, 3), "precision": round(gfy_inc_prec, 3)}, + }, + "call_parity": call_parity, +} +json.dump(res, open(f"{EVAL}/layer1_results.json", "w"), indent=2) + +print("======== LAYER 1: STRUCTURAL EXTRACTION ACCURACY ========\n") +print("-- Structural stats --") +print(f" cbm : nodes={res['structural']['cbm']['nodes']:5} edges={res['structural']['cbm']['edges']:5} " + f"kinds={res['structural']['cbm']['kind_richness']} dup_nodes={cbm_dups}") +print(f" graphify-AST : nodes={len(gnodes):5} links={len(glinks):5} kinds=1(flat) communities given") +print(f" cbm node labels: {dict(Counter(cbm_label_dist).most_common(8))}") +print(f" cbm edge types : {dict(Counter(cbm_edges).most_common(8))}") +print(f" gfy relations : {dict(gfy_rel)}") +print() +print("-- Function-definition recall/precision (gold = ctags, N=%d) --" % len(oracle_funcs)) +for tool, d in [("cbm", res["function_recall"]["cbm"]), ("graphify", res["function_recall"]["graphify"])]: + print(f" {tool:9}: fn_nodes={d['function_nodes']:5} recall_strict={d['recall_strict']:.3f} " + f"recall_loose={d['recall_loose_anynode']:.3f} recall_name={d['recall_name_only']:.3f} precision={d['precision']:.3f}") +print() +print("-- Include-edge recall (gold = in-corpus #include, N=%d) --" % len(oracle_inc_incorpus)) +for tool, d in [("cbm", res["include_recall"]["cbm"]), ("graphify", res["include_recall"]["graphify"])]: + print(f" {tool:9}: edges={d['edges']:5} recall={d['recall']:.3f} precision={d['precision']:.3f}") +print() +print("-- Call-graph parity (callers; grep = noisy upper bound) --") +print(f" {'symbol':28} {'cbm':>5} {'gfy':>5} {'grep_ub':>8}") +for c in call_parity: + print(f" {c['sym']:28} {c['cbm']:>5} {c['gfy']:>5} {c['grep_ub']:>8}") diff --git a/bench/cbm-vs-graphify/scripts/generate_qbank.py b/bench/cbm-vs-graphify/scripts/generate_qbank.py new file mode 100644 index 00000000..d498cda5 --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/generate_qbank.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +"""Generate oracle-seeded D1-D5 question bank with machine-checkable ground truth.""" +import json, os, re +from collections import defaultdict + +EVAL = "/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval" +CORPUS = f"{EVAL}/eval-corpus" +oracle = json.load(open(f"{EVAL}/oracle.json")) + +funcs_by_file = defaultdict(list) +func_loc = {} +for n, f, l in oracle["functions"]: + funcs_by_file[f].append(n) + func_loc[n] = (f, l) + +def sig_of(name): + f, l = func_loc[name] + try: + lines = open(os.path.join(CORPUS, f), errors="ignore").read().splitlines() + return lines[l-1].strip() + except Exception: + return "" + +def callers_of(sym): + """files+lines that reference SYM( as a call (noisy upper bound, excludes the def line).""" + pat = re.compile(r'(^|[^A-Za-z0-9_])' + re.escape(sym) + r'\s*\(') + deff, defl = func_loc.get(sym, (None, None)) + hits = defaultdict(int) + for root, _d, files in os.walk(CORPUS): + if "/graphify-out" in root: + continue + for fn in files: + if not fn.endswith((".c", ".h")): + continue + rel = os.path.relpath(os.path.join(root, fn), CORPUS) + for i, line in enumerate(open(os.path.join(root, fn), errors="ignore"), 1): + if rel == deff and i == defl: + continue + if pat.search(line) and "#define" not in line: + hits[rel] += 1 + return dict(sorted(hits.items(), key=lambda x: -x[1])) + +Q = [] +def add(qid, dim, question, gt): + Q.append({"id": qid, "dim": dim, "question": question, "ground_truth": gt, "scope": "full"}) + +# ---- D1: definition / API discovery ---- +d1_files = ["src/simhash/minhash.c", "internal/cbm/ac.c", "src/foundation/str_util.c", + "src/git/git_context.c", "src/discover/discover.c"] +for i, f in enumerate(d1_files, 1): + add(f"D1.{i}", "D1", f"List the names of all functions DEFINED in the file {f}. Return just the function names.", + {"type": "set", "file": f, "functions": sorted(funcs_by_file[f]), "count": len(funcs_by_file[f])}) + +# ---- D2: relationship / call graph (callers) ---- +d2_syms = ["cbm_arena_alloc", "cbm_minhash_compute", "cbm_split_camel_case", "cbm_sem_tokenize", "ac_build_trie"] +for i, s in enumerate(d2_syms, 1): + c = callers_of(s) + add(f"D2.{i}", "D2", f"Which functions/files call the function `{s}`? List the caller locations (files).", + {"type": "callers_ub", "symbol": s, "caller_files_grep_ub": c, "n_caller_files": len(c)}) + +# ---- D3: targeted retrieval ---- +d3_syms = ["ac_build_trie", "cbm_minhash_jaccard", "cbm_split_camel_case", "cbm_arena_alloc", "camel_should_split"] +for i, s in enumerate(d3_syms, 1): + f, l = func_loc.get(s, ("?", 0)) + add(f"D3.{i}", "D3", f"In which file and at what line is the function `{s}` defined? Show its full signature.", + {"type": "location", "symbol": s, "file": f, "line": l, "signature": sig_of(s)}) + +# ---- D4: architecture / structure (rubric-scored) ---- +subsystems = sorted(set(p.split("/")[1] if p.startswith("src/") else "/".join(p.split("/")[:2]) + for p in funcs_by_file if "/" in p)) +add("D4.1", "D4", "What are the main subsystems / top-level modules of this codebase? Describe the overall architecture.", + {"type": "rubric", "key_subsystems": ["src/cypher", "src/store", "src/semantic", "src/simhash", + "src/pipeline", "internal/cbm/lsp", "src/mcp", "src/cli", "src/foundation", "src/discover", + "src/watcher", "src/git", "src/graph_buffer", "src/traces", "src/ui"], + "note": "credit for identifying the major subsystems and their roles"}) +add("D4.2", "D4", "Which source file is the largest / most central hub by number of functions, and roughly how many functions does it have?", + {"type": "value", "answer": ["src/store/store.c (~140)", "src/cypher/cypher.c (~134)"], + "store_c": len(funcs_by_file["src/store/store.c"]), "cypher_c": len(funcs_by_file["src/cypher/cypher.c"])}) +add("D4.3", "D4", "What is the program entry point, and which file contains main()?", + {"type": "value", "answer": "src/main.c", "has_main": "main" in [n for n in funcs_by_file.get("src/main.c", [])]}) +add("D4.4", "D4", "Which directory contains the per-language LSP type resolvers, and which languages have a hybrid LSP module?", + {"type": "rubric", "dir": "internal/cbm/lsp/", "languages": ["go","python","typescript","java","c","csharp","php","kotlin","rust"]}) +add("D4.5", "D4", "How is the MCP server layer organized — which file implements it and what does it expose?", + {"type": "rubric", "file": "src/mcp/mcp.c", "note": "MCP JSON-RPC server exposing the graph query tools"}) + +# ---- D5: cross-cutting / semantic ---- +def grep_concept(keywords): + res = defaultdict(list) + for n, f, l in oracle["functions"]: + if any(k in n.lower() for k in keywords): + res[f].append(n) + return {k: sorted(v) for k, v in res.items()} + +d5 = [ + ("D5.1", "Find the functions that implement near-duplicate / clone detection (minhash/simhash).", ["minhash", "simhash"]), + ("D5.2", "Where is camelCase / identifier tokenization (splitting identifiers into words) implemented?", ["camel", "tokeniz"]), + ("D5.3", "Find the arena / bump allocator implementation (allocation from a memory arena).", ["arena"]), + ("D5.4", "Which code implements Aho-Corasick multi-pattern string matching?", ["ac_build", "ac_match", "ac_queue", "automaton"]), + ("D5.5", "Where is the Cypher query language parsed and executed?", ["cypher", "parse_match", "eval_pattern"]), +] +for qid, q, kw in d5: + add(qid, "D5", q, {"type": "concept_set", "keywords": kw, "reference_hits": grep_concept(kw)}) + +with open(f"{EVAL}/qbank.jsonl", "w") as fh: + for q in Q: + fh.write(json.dumps(q) + "\n") + +print(f"generated {len(Q)} questions -> qbank.jsonl") +from collections import Counter +print("by dim:", dict(Counter(q["dim"] for q in Q))) +print("\n-- sample ground truths --") +for q in [Q[0], Q[5], Q[10], Q[15], Q[20]]: + print(f"\n[{q['id']}] {q['question']}") + print(" GT:", json.dumps(q["ground_truth"])[:200]) diff --git a/bench/cbm-vs-graphify/scripts/measure_layer3.py b/bench/cbm-vs-graphify/scripts/measure_layer3.py new file mode 100644 index 00000000..85615f13 --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/measure_layer3.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""Layer 3 — operational cost. cold-build time (median of 3), disk, query latency, incremental.""" +import json, os, subprocess, time, shutil, statistics + +EVAL = "/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval" +CORPUS = f"{EVAL}/eval-corpus" +CBM = "/Users/yf.jin/.local/bin/codebase-memory-mcp" +GFY = "/Users/yf.jin/.local/bin/graphify" +PROJ = "private-tmp-claude-502-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro-fd757ee7-44e7-439c-ba81-f9b8dc43c4b4-scratchpad-eval-eval-corpus" + +def t(): return time.time() +def med(xs): return round(statistics.median(xs), 2) + +# ---------- cold build: cbm ---------- +cbm_times = [] +cache = f"{EVAL}/cbm-l3-cache" +for i in range(3): + shutil.rmtree(cache, ignore_errors=True); os.makedirs(cache) + env = dict(os.environ, CBM_CACHE_DIR=cache) + a = t() + subprocess.run([CBM, "cli", "--json", "index_repository", json.dumps({"repo_path": CORPUS, "mode": "full"})], + capture_output=True, text=True, env=env) + cbm_times.append(t() - a) +# cbm db size +dbs = [f for f in os.listdir(cache) if f.endswith(".db")] +cbm_db_bytes = os.path.getsize(os.path.join(cache, dbs[0])) if dbs else 0 + +# ---------- cold build: graphify-AST ---------- +gfy_times = [] +for i in range(3): + shutil.rmtree(f"{CORPUS}/graphify-out", ignore_errors=True) + a = t() + subprocess.run([GFY, "update", CORPUS], capture_output=True, text=True, cwd=CORPUS) + gfy_times.append(t() - a) +def dir_size(p): + tot = 0 + for r, _d, fs in os.walk(p): + for f in fs: + try: tot += os.path.getsize(os.path.join(r, f)) + except Exception: pass + return tot +gfy_out_bytes = dir_size(f"{CORPUS}/graphify-out") +gfy_graphjson_bytes = os.path.getsize(f"{CORPUS}/graphify-out/graph.json") + +# ---------- query latency ---------- +env = dict(os.environ, CBM_CACHE_DIR=cache) +cbm_q = [] +for i in range(3): + a = t() + subprocess.run([CBM, "cli", "--json", "query_graph", + json.dumps({"project": PROJ, "query": "MATCH (a)-[:CALLS]->(b) WHERE b.name='cbm_arena_alloc' RETURN a.name"})], + capture_output=True, text=True, env=env) + cbm_q.append((t() - a) * 1000) +gfy_q = [] +for i in range(3): + a = t() + subprocess.run([GFY, "query", "what calls cbm_arena_alloc", "--graph", f"{CORPUS}/graphify-out/graph.json", "--budget", "800"], + capture_output=True, text=True) + gfy_q.append((t() - a) * 1000) + +# ---------- incremental update ---------- +victim = f"{CORPUS}/src/simhash/minhash.c" +backup = open(victim).read() +with open(victim, "a") as fh: + fh.write("\n// eval touch\n") +a = t() +subprocess.run([GFY, "update", CORPUS], capture_output=True, text=True, cwd=CORPUS) +gfy_incr = t() - a +# cbm re-index cost after a 1-file change (cold full reindex is the comparator in this CLI harness) +a = t() +env2 = dict(os.environ, CBM_CACHE_DIR=cache) +subprocess.run([CBM, "cli", "--json", "index_repository", json.dumps({"repo_path": CORPUS, "mode": "full"})], + capture_output=True, text=True, env=env2) +cbm_reindex = t() - a +# restore the touched file exactly +with open(victim, "w") as fh: + fh.write(backup) + +res = { + "cold_build_s": {"cbm_median": med(cbm_times), "cbm_runs": [round(x, 2) for x in cbm_times], + "graphify_ast_median": med(gfy_times), "graphify_ast_runs": [round(x, 2) for x in gfy_times]}, + "disk_bytes": {"cbm_db": cbm_db_bytes, "graphify_out_total": gfy_out_bytes, "graphify_graph_json": gfy_graphjson_bytes}, + "query_latency_ms": {"cbm_median": med(cbm_q), "graphify_median": med(gfy_q)}, + "incremental_s": {"graphify_update": round(gfy_incr, 2), "cbm_reindex_full": round(cbm_reindex, 2)}, + "token_cost": {"cbm_index": 0, "graphify_ast": 0, + "graphify_full_subset_llm_naming_wallclock_s": 705.9, + "note": "cbm uses local nomic embeddings (0 API tokens); graphify-AST is deterministic (0 tokens); graphify-FULL semantic/community-naming uses an LLM backend (here local ollama gemma4:26b = 0 API $ but 11.8 min wall-clock for the 16K-LOC subset)."}, +} +json.dump(res, open(f"{EVAL}/layer3_results.json", "w"), indent=2) +print(json.dumps(res, indent=2)) +print("\nMB: cbm_db=%.1f graphify_out=%.1f graphify_json=%.1f" % + (cbm_db_bytes/1e6, gfy_out_bytes/1e6, gfy_graphjson_bytes/1e6)) diff --git a/bench/cbm-vs-graphify/scripts/qa_workflow.js b/bench/cbm-vs-graphify/scripts/qa_workflow.js new file mode 100644 index 00000000..1286b23d --- /dev/null +++ b/bench/cbm-vs-graphify/scripts/qa_workflow.js @@ -0,0 +1,215 @@ +export const meta = { + name: 'cbm-vs-graphify-qa', + description: 'Layer 2: blind D1-D5 Q&A effectiveness — cbm vs graphify-AST vs Explorer(grep), judged against oracle ground truth', + phases: [ + { title: 'Answer', detail: '3 tool-restricted conditions answer each question' }, + { title: 'Judge', detail: 'blind 2-pass scoring vs ground truth' }, + ], +} + +const EVAL = '/private/tmp/claude-502/-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro/fd757ee7-44e7-439c-ba81-f9b8dc43c4b4/scratchpad/eval' +const cfg = { + corpus: `${EVAL}/eval-corpus`, + evalDir: EVAL, + proj: 'private-tmp-claude-502-Users-yf-jin-Desktop-03-Projects-codebase-memory-mcp-pro-fd757ee7-44e7-439c-ba81-f9b8dc43c4b4-scratchpad-eval-eval-corpus', + cbmCache: `${EVAL}/cbm-cache-smoke`, + cbmBin: '/Users/yf.jin/.local/bin/codebase-memory-mcp', + gfyBin: '/Users/yf.jin/.local/bin/graphify', + graph: `${EVAL}/eval-corpus/graphify-out/graph.json`, + gfyOut: `${EVAL}/eval-corpus/graphify-out`, +} +const Qs = [ + { id: 'D1.1', dim: 'D1', question: 'List the names of all functions DEFINED in the file src/simhash/minhash.c. Return just the function names.' }, + { id: 'D1.2', dim: 'D1', question: 'List the names of all functions DEFINED in the file internal/cbm/ac.c. Return just the function names.' }, + { id: 'D1.3', dim: 'D1', question: 'List the names of all functions DEFINED in the file src/foundation/str_util.c. Return just the function names.' }, + { id: 'D1.4', dim: 'D1', question: 'List the names of all functions DEFINED in the file src/git/git_context.c. Return just the function names.' }, + { id: 'D1.5', dim: 'D1', question: 'List the names of all functions DEFINED in the file src/discover/discover.c. Return just the function names.' }, + { id: 'D2.1', dim: 'D2', question: 'Which functions/files call the function `cbm_arena_alloc`? List the caller locations (files).' }, + { id: 'D2.2', dim: 'D2', question: 'Which functions/files call the function `cbm_minhash_compute`? List the caller locations (files).' }, + { id: 'D2.3', dim: 'D2', question: 'Which functions/files call the function `cbm_split_camel_case`? List the caller locations (files).' }, + { id: 'D2.4', dim: 'D2', question: 'Which functions/files call the function `cbm_sem_tokenize`? List the caller locations (files).' }, + { id: 'D2.5', dim: 'D2', question: 'Which functions/files call the function `ac_build_trie`? List the caller locations (files).' }, + { id: 'D3.1', dim: 'D3', question: 'In which file and at what line is the function `ac_build_trie` defined? Show its full signature.' }, + { id: 'D3.2', dim: 'D3', question: 'In which file and at what line is the function `cbm_minhash_jaccard` defined? Show its full signature.' }, + { id: 'D3.3', dim: 'D3', question: 'In which file and at what line is the function `cbm_split_camel_case` defined? Show its full signature.' }, + { id: 'D3.4', dim: 'D3', question: 'In which file and at what line is the function `cbm_arena_alloc` defined? Show its full signature.' }, + { id: 'D3.5', dim: 'D3', question: 'In which file and at what line is the function `camel_should_split` defined? Show its full signature.' }, + { id: 'D4.1', dim: 'D4', question: 'What are the main subsystems / top-level modules of this codebase? Describe the overall architecture.' }, + { id: 'D4.2', dim: 'D4', question: 'Which source file is the largest / most central hub by number of functions, and roughly how many functions does it have?' }, + { id: 'D4.3', dim: 'D4', question: 'What is the program entry point, and which file contains main()?' }, + { id: 'D4.4', dim: 'D4', question: 'Which directory contains the per-language LSP type resolvers, and which languages have a hybrid LSP module?' }, + { id: 'D4.5', dim: 'D4', question: 'How is the MCP server layer organized — which file implements it and what does it expose?' }, + { id: 'D5.1', dim: 'D5', question: 'Find the functions that implement near-duplicate / clone detection (minhash/simhash).' }, + { id: 'D5.2', dim: 'D5', question: 'Where is camelCase / identifier tokenization (splitting identifiers into words) implemented?' }, + { id: 'D5.3', dim: 'D5', question: 'Find the arena / bump allocator implementation (allocation from a memory arena).' }, + { id: 'D5.4', dim: 'D5', question: 'Which code implements Aho-Corasick multi-pattern string matching?' }, + { id: 'D5.5', dim: 'D5', question: 'Where is the Cypher query language parsed and executed?' }, +] +const CONDS = ['cbm', 'graphify', 'explorer'] + +const ANSWER_SCHEMA = { + type: 'object', + properties: { + answer: { type: 'string', description: 'the direct factual answer, list-form where applicable' }, + tool_calls: { type: 'integer', description: 'how many tool/CLI invocations you made' }, + }, + required: ['answer', 'tool_calls'], + additionalProperties: false, +} +const JUDGE_SCHEMA = { + type: 'object', + properties: { + scores: { + type: 'array', + items: { + type: 'object', + properties: { + slot: { type: 'string' }, + correctness: { type: 'number', description: '0-4 vs ground truth' }, + justification: { type: 'string' }, + }, + required: ['slot', 'correctness', 'justification'], + additionalProperties: false, + }, + }, + }, + required: ['scores'], + additionalProperties: false, +} + +function cbmPrompt(q) { + return `You answer ONE question about a C codebase using ONLY the codebase-memory (cbm) graph tools via its CLI. STRICT RULE: do NOT read, cat, grep, or open source files. Use ONLY cbm CLI. + +Invoke: CBM_CACHE_DIR='${cfg.cbmCache}' '${cfg.cbmBin}' cli --json '' +The output is wrapped as {"content":[{"text":""}]} — parse the inner text field. +Project name: ${cfg.proj} +Tools (jsonargs always include "project"): +- query_graph {"project","query"} -> openCypher (e.g. MATCH (f:File {name:'minhash.c'})-[:DEFINES]->(fn:Function) RETURN fn.name ; or MATCH (n:Function {name:'X'}) RETURN n.file_path,n.line) +- search_graph {"project","query"|"name_pattern"|"semantic_query":["kw"]} +- trace_path {"project","function_name","direction":"inbound|outbound|both","depth":2} +- get_code_snippet {"project","qualified_name"} +- get_architecture {"project","aspects":["clusters","hotspots"]} +- search_code {"project","pattern"} + +QUESTION (${q.id}): ${q.question} + +Use the cbm tools to find the answer. Give the DIRECT answer (names / file:line / list). Do not narrate which tool you used. Report tool_calls = number of CLI invocations you ran.` +} + +function gfyPrompt(q) { + return `You answer ONE question about a C codebase using ONLY the graphify graph tools. STRICT RULE: do NOT read, cat, grep, or open the .c/.h source files. Use ONLY graphify commands and (optionally) the graphify-out report. + +Commands: +- '${cfg.gfyBin}' query "" --graph '${cfg.graph}' --budget 1500 +- '${cfg.gfyBin}' query "" --dfs --graph '${cfg.graph}' (depth-first for paths) +- '${cfg.gfyBin}' path "A" "B" --graph '${cfg.graph}' +- '${cfg.gfyBin}' explain "X" --graph '${cfg.graph}' +- '${cfg.gfyBin}' affected "X" --graph '${cfg.graph}' +You may also read '${cfg.gfyOut}/GRAPH_REPORT.md' for architecture questions. +The graph node labels look like 'foo()' for functions; source_file/source_location give file and line. + +QUESTION (${q.id}): ${q.question} + +Use graphify to find the answer. Give the DIRECT answer (names / file:line / list). Do not narrate which tool you used. Report tool_calls = number of graphify invocations you ran.` +} + +function expPrompt(q) { + return `You answer ONE question about a C codebase using ONLY plain text exploration: Grep, Glob, and Read on the source tree at ${cfg.corpus}. STRICT RULE: do NOT use any graph/database tool. + +QUESTION (${q.id}): ${q.question} + +Find the answer by searching/reading the source. Give the DIRECT answer (names / file:line / list). Report tool_calls = number of Grep/Glob/Read calls you made.` +} + +function judgePrompt(q, slotted, pass) { + const block = slotted.map(s => `--- Answer ${s.slot} ---\n${s.answer}`).join('\n\n') + return `You are a STRICT, blind grader. Score each candidate answer 0-4 against the GROUND TRUTH for a codebase question. You do not know which tool produced which answer. + +First, load the ground truth by running: +python3 -c "import json; [print(json.dumps(j['ground_truth'],indent=0)) for j in (json.loads(l) for l in open('${cfg.evalDir}/qbank.jsonl')) if j['id']=='${q.id}']" +You MAY also verify against the real source at ${cfg.corpus} (you are the judge — reading source is allowed for grading). + +QUESTION (${q.id}, ${q.dim}): ${q.question} + +Rubric (0-4): +- 4 = fully correct AND complete vs ground truth (for set questions: ~all items, no fabrication; for location: correct file+line+signature) +- 3 = mostly correct, minor omissions or one small error +- 2 = partially correct (about half right, or right answer buried in noise/extras) +- 1 = mostly wrong / largely incomplete +- 0 = wrong, irrelevant, fabricated, or "no answer" +For D2 caller questions the ground truth is a grep upper-bound; credit answers that identify the real caller files even if counts differ. Penalize fabricated function/file names not in the source. + +Candidate answers: +${block} + +Score every slot (A, B, C). Pass #${pass}. Be calibrated and consistent.` +} + +phase('Answer') +const results = await pipeline( + Qs, + async (q) => { + const ans = await parallel([ + () => agent(cbmPrompt(q), { label: `ans:${q.id}:cbm`, phase: 'Answer', schema: ANSWER_SCHEMA }), + () => agent(gfyPrompt(q), { label: `ans:${q.id}:gfy`, phase: 'Answer', schema: ANSWER_SCHEMA }), + () => agent(expPrompt(q), { label: `ans:${q.id}:exp`, phase: 'Answer', schema: ANSWER_SCHEMA }), + ]) + return { q, answers: CONDS.map((c, i) => ({ cond: c, answer: (ans[i] && ans[i].answer) || '(no answer)', tool_calls: (ans[i] && ans[i].tool_calls) || 0 })) } + }, + async (r) => { + const { q, answers } = r + const rot = parseInt(q.id.replace(/\D/g, '') || '0', 10) % 3 + const slotNames = ['A', 'B', 'C'] + const order = [0, 1, 2].map((i) => (i + rot) % 3) + const slotted = order.map((condIdx, k) => ({ slot: slotNames[k], cond: answers[condIdx].cond, answer: answers[condIdx].answer })) + const judged = await parallel([0, 1].map((p) => () => + agent(judgePrompt(q, slotted, p), { label: `judge:${q.id}:p${p}`, phase: 'Judge', schema: JUDGE_SCHEMA }) + )) + // map slot->cond + const slotToCond = {} + slotted.forEach((s) => { slotToCond[s.slot] = s.cond }) + return { id: q.id, dim: q.dim, question: q.question, answers, slotToCond, judged: judged.filter(Boolean) } + } +) + +// aggregate by dimension and condition +const agg = {} +for (const r of results) { + if (!r) continue + const condScore = {} + for (const pass of r.judged) { + for (const s of (pass.scores || [])) { + const cond = r.slotToCond[s.slot] + if (!cond) continue + condScore[cond] = condScore[cond] || [] + condScore[cond].push(s.correctness) + } + } + r.condMeanScore = {} + for (const c of CONDS) { + const arr = condScore[c] || [] + r.condMeanScore[c] = arr.length ? arr.reduce((a, b) => a + b, 0) / arr.length : null + } + for (const c of CONDS) { + const key = `${r.dim}|${c}` + agg[key] = agg[key] || [] + if (r.condMeanScore[c] != null) agg[key].push(r.condMeanScore[c]) + } +} +const summary = {} +for (const dim of ['D1', 'D2', 'D3', 'D4', 'D5']) { + summary[dim] = {} + for (const c of CONDS) { + const arr = agg[`${dim}|${c}`] || [] + summary[dim][c] = arr.length ? +(arr.reduce((a, b) => a + b, 0) / arr.length).toFixed(2) : null + } +} +// overall mean per condition +summary.OVERALL = {} +for (const c of CONDS) { + const all = [] + for (const dim of ['D1', 'D2', 'D3', 'D4', 'D5']) if (summary[dim][c] != null) all.push(summary[dim][c]) + summary.OVERALL[c] = all.length ? +(all.reduce((a, b) => a + b, 0) / all.length).toFixed(2) : null +} +log(`SUMMARY (mean 0-4): cbm=${summary.OVERALL.cbm} graphify=${summary.OVERALL.graphify} explorer=${summary.OVERALL.explorer}`) +return { summary, results } \ No newline at end of file diff --git a/bench/headtohead.sh b/bench/headtohead.sh new file mode 100755 index 00000000..5557a797 --- /dev/null +++ b/bench/headtohead.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# headtohead.sh — deterministic head-to-head: codebase-memory-mcp (cbm) vs codegraph. +# Re-run after each workstream to MEASURE movement (no self-grading). +# +# Usage: bench/headtohead.sh [cbm_binary] +# Metrics (deterministic): +# - nodes / edges +# - dup-node count: qualified_names that are BOTH a Method and a Function (cbm modeling bug; codegraph structurally 0) +# - kind richness: # distinct symbol kinds +# - call-graph parity: caller counts for top-N callees, cbm vs codegraph vs grep ground-truth +set -uo pipefail +REPO="${1:?repo path}"; NICK="${2:?nickname}"; CBM="${3:-/Users/charlesqin/.local/bin/codebase-memory-mcp}" +WORK="$(mktemp -d)/$NICK"; CACHE="$(mktemp -d)" +cp -R "$REPO" "$WORK" +echo "== head-to-head: $NICK ($(find "$WORK" -name '*.swift' -o -name '*.go' -o -name '*.ts' -o -name '*.py' 2>/dev/null | wc -l | tr -d ' ') src files) ==" + +# ---- cbm index ---- +CBM_OUT=$(CBM_CACHE_DIR="$CACHE" "$CBM" cli index_repository "{\"repo_path\":\"$WORK\"}" 2>/dev/null | grep -v '^level=') +PROJ=$(echo "$CBM_OUT" | sed -n 's/.*"project":"\([^"]*\)".*/\1/p') +CBM_N=$(echo "$CBM_OUT" | sed -n 's/.*"nodes":\([0-9]*\).*/\1/p') +CBM_E=$(echo "$CBM_OUT" | sed -n 's/.*"edges":\([0-9]*\).*/\1/p') +qcbm(){ CBM_CACHE_DIR="$CACHE" "$CBM" cli query_graph "{\"project\":\"$PROJ\",\"query\":\"$1\"}" 2>/dev/null | grep -v '^level='; } + +# cbm dup-node + kind richness: dup keyed on (name,file) since the bug emits the +# same source symbol as Method+Function with DIFFERENT qualified_names. +qcbm "MATCH (n) RETURN n.name AS nm, n.label AS l, n.file_path AS f" | python3 -c " +import sys,json +from collections import defaultdict,Counter +rows=json.load(sys.stdin).get('rows',[]) +by=defaultdict(set); kinds=Counter() +for nm,l,f in rows: + kinds[l]+=1 + if nm: by[(nm,f)].add(l) +dups=[k for k,s in by.items() if 'Method' in s and 'Function' in s] +# Swift type-kind fidelity: are struct/enum/protocol/extension distinct, or lumped into Class? +swiftkinds=sum(1 for k in kinds if k in ('Struct','Enum','Protocol','Extension','EnumCase','Actor','Component','Class')) +print(f'CBM_DUP={len(dups)}'); print(f'CBM_KINDS={len(kinds)}'); print(f'CBM_SWIFTKINDS={swiftkinds}') +print('CBM_KINDDIST='+','.join(f'{k}:{v}' for k,v in kinds.most_common(8))) +" > /tmp/_cbm_m +source /tmp/_cbm_m + +# ---- codegraph index ---- +CG_WORK="$(mktemp -d)/$NICK"; cp -R "$REPO" "$CG_WORK" +codegraph init "$CG_WORK" >/dev/null 2>&1 +CG_STAT=$(codegraph status "$CG_WORK" 2>/dev/null) +CG_N=$(echo "$CG_STAT" | sed -n 's/.*Nodes:[[:space:]]*\([0-9]*\).*/\1/p' | head -1) +CG_E=$(echo "$CG_STAT" | sed -n 's/.*Edges:[[:space:]]*\([0-9]*\).*/\1/p' | head -1) +CG_KINDS=$(echo "$CG_STAT" | awk '/Nodes by Kind/{f=1;next} f&&/^ [a-z]/{c++} f&&/^$/{f=0} END{print c+0}') + +# ---- call-graph parity (top-3 callees by fan-in) ---- +echo "-- structural --" +printf " %-10s nodes=%-5s edges=%-5s dup_nodes=%-3s kinds=%-3s\n" "cbm" "$CBM_N" "$CBM_E" "$CBM_DUP" "$CBM_KINDS" +printf " %-10s nodes=%-5s edges=%-5s dup_nodes=%-3s kinds=%-3s\n" "codegraph" "$CG_N" "$CG_E" "0" "$CG_KINDS" +echo " cbm kinds: $CBM_KINDDIST" +echo "-- call-graph parity (callers: cbm | codegraph | grep-truth) --" +CALLEES=$(qcbm "MATCH (a)-[:CALLS]->(b) RETURN b.name AS c, count(a) AS n ORDER BY n DESC LIMIT 5" | python3 -c "import sys,json;print(' '.join(r[0].split('.')[-1] for r in json.load(sys.stdin).get('rows',[]) if r[0].isidentifier() or '.' in r[0]))" 2>/dev/null) +for sym in $CALLEES; do + cb=$(qcbm "MATCH (a)-[:CALLS]->(b) WHERE b.name='$sym' RETURN count(a) AS n" | python3 -c "import sys,json;d=json.load(sys.stdin);print(d['rows'][0][0] if d.get('rows') else 0)" 2>/dev/null) + cg=$(codegraph callers "$sym" -p "$CG_WORK" -j 2>/dev/null | python3 -c "import sys,json +try: d=json.load(sys.stdin); print(len(d) if isinstance(d,list) else len(d.get('callers',d.get('results',[])))) +except: print('?')" 2>/dev/null) + gt=$(grep -rEo "[^a-zA-Z_]$sym\s*\(" "$WORK" --include='*.swift' 2>/dev/null | wc -l | tr -d ' ') + printf " %-28s cbm=%-3s codegraph=%-3s grep~%-3s\n" "$sym" "${cb:-?}" "${cg:-?}" "$gt" +done +rm -rf "$WORK" "$CG_WORK" "$CACHE"