{
  "run_id": "2026-09-22T18-59-46Z",
  "dataset": "docs/eval/golden.yaml",
  "collection": "m0_self_postmerge_20260922_185850",
  "embedder": "ollama/nomic-embed-text:latest",
  "mode": "hybrid",
  "limit": 10,
  "aggregate": {
    "queries": 39,
    "positive_queries": 35,
    "negative_queries": 4,
    "errors": 0,
    "hit_at_1": 0.8571428571428571,
    "hit_at_3": 0.9428571428571428,
    "hit_at_5": 0.9714285714285714,
    "mrr_at_5": 0.9023809523809524,
    "recall_at_5": 0.8161904761904762,
    "recall_at_10": 0.8885714285714286,
    "negative_pass_rate": 0.5,
    "latency_total_p50_ms": 21,
    "latency_total_p95_ms": 33,
    "latency_embed_p50_ms": 16,
    "latency_embed_p95_ms": 26,
    "latency_qdrant_p50_ms": 3,
    "latency_qdrant_p95_ms": 7
  },
  "by_type": {
    "behavior": {
      "count": 4,
      "hit_at_5": 1,
      "mrr_at_5": 0.8125
    },
    "concept": {
      "count": 7,
      "hit_at_5": 1,
      "mrr_at_5": 0.7619047619047619
    },
    "navigation": {
      "count": 24,
      "hit_at_5": 0.9583333333333334,
      "mrr_at_5": 0.9583333333333334
    },
    "negative": {
      "count": 4,
      "negative_pass_rate": 0.5
    }
  },
  "queries": [
    {
      "id": "chunkfile_navigation",
      "type": "navigation",
      "query": "where is ChunkFile defined",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032539684,
      "embed_ms": 65,
      "qdrant_ms": 22,
      "total_ms": 93,
      "top_results": [
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "ChunkFile",
          "score": 0.032539684,
          "start_line": 20,
          "end_line": 28
        },
        {
          "file_path": "internal/model/chunk.go",
          "score": 0.029877368,
          "start_line": 1,
          "end_line": 3
        },
        {
          "file_path": "internal/answer/fake.go",
          "name": "chunkSummary",
          "score": 0.029213954,
          "start_line": 49,
          "end_line": 60
        },
        {
          "file_path": "internal/ingest/enrichment.go",
          "name": "chunkTypeLabel",
          "score": 0.02830941,
          "start_line": 37,
          "end_line": 52
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "sortChunksByStartLine",
          "score": 0.027212143,
          "start_line": 277,
          "end_line": 284
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "chunkGeneric",
          "score": 0.026875902,
          "start_line": 30,
          "end_line": 87
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "collectGapChunks",
          "score": 0.026491228,
          "start_line": 149,
          "end_line": 173
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "SearchResult",
          "score": 0.026356857,
          "start_line": 55,
          "end_line": 62
        },
        {
          "file_path": "internal/answer/results.go",
          "name": "ContextsFromResults",
          "score": 0.026171742,
          "start_line": 9,
          "end_line": 26
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.016666668,
          "start_line": 14,
          "end_line": 25
        }
      ]
    },
    {
      "id": "ensure_collection_navigation",
      "type": "navigation",
      "query": "EnsureCollection function on Qdrant client",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 19,
      "qdrant_ms": 3,
      "total_ms": 26,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsureCollection",
          "score": 0.033333335,
          "start_line": 51,
          "end_line": 86
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsurePayloadIndexes",
          "score": 0.032786883,
          "start_line": 88,
          "end_line": 101
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ensurePayloadIndexes",
          "score": 0.03175403,
          "start_line": 107,
          "end_line": 124
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runCollectionsDelete",
          "score": 0.0305789,
          "start_line": 549,
          "end_line": 563
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ValidateCollectionVectorSize",
          "score": 0.02967033,
          "start_line": 187,
          "end_line": 191
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "DeleteCollection",
          "score": 0.028985508,
          "start_line": 433,
          "end_line": 440
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "sdkClient",
          "score": 0.028404512,
          "start_line": 15,
          "end_line": 27
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Search",
          "score": 0.027809743,
          "start_line": 271,
          "end_line": 310
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateCollectionDimension",
          "score": 0.027583601,
          "start_line": 126,
          "end_line": 185
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileHashes",
          "score": 0.02707152,
          "start_line": 459,
          "end_line": 472
        }
      ]
    },
    {
      "id": "parse_language_filter_navigation",
      "type": "navigation",
      "query": "where is parseLanguageFilter implemented",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 16,
      "qdrant_ms": 4,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "parseLanguageFilter",
          "score": 0.033333335,
          "start_line": 281,
          "end_line": 297
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.016393442,
          "start_line": 61,
          "end_line": 100
        },
        {
          "file_path": "internal/eval/dataset.go",
          "name": "Filters",
          "score": 0.016393442,
          "start_line": 26,
          "end_line": 30
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "filterFilesByLanguage",
          "score": 0.016129032,
          "start_line": 329,
          "end_line": 342
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "main",
          "score": 0.016129032,
          "start_line": 26,
          "end_line": 65
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "buildFilter",
          "score": 0.015873017,
          "start_line": 379,
          "end_line": 412
        },
        {
          "file_path": "internal/answer/metrics.go",
          "score": 0.015873017,
          "start_line": 60,
          "end_line": 98
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithLanguages",
          "score": 0.015625,
          "start_line": 47,
          "end_line": 58
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.015625,
          "start_line": 131,
          "end_line": 170
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "ParseSearchMode",
          "score": 0.015384615,
          "start_line": 56,
          "end_line": 68
        }
      ]
    },
    {
      "id": "run_eval_navigation",
      "type": "navigation",
      "query": "where is runEval function implemented",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.03306011,
      "embed_ms": 20,
      "qdrant_ms": 2,
      "total_ms": 24,
      "top_results": [
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runEval",
          "score": 0.03306011,
          "start_line": 465,
          "end_line": 504
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.032522473,
          "start_line": 201,
          "end_line": 223
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.026144907,
          "start_line": 131,
          "end_line": 170
        },
        {
          "file_path": "internal/answer/metrics.go",
          "score": 0.016666668,
          "start_line": 60,
          "end_line": 98
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.016129032,
          "start_line": 257,
          "end_line": 270
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Timings",
          "score": 0.015873017,
          "start_line": 40,
          "end_line": 46
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.015873017,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.015625,
          "start_line": 14,
          "end_line": 25
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "main",
          "score": 0.015625,
          "start_line": 26,
          "end_line": 65
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "name": "Embedder",
          "score": 0.015384615,
          "start_line": 6,
          "end_line": 15
        }
      ]
    },
    {
      "id": "search_with_timings_navigation",
      "type": "navigation",
      "query": "where is SearchWithTimings defined",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 15,
      "qdrant_ms": 3,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/search/searcher.go",
          "name": "SearchWithTimings",
          "score": 0.033333335,
          "start_line": 76,
          "end_line": 131
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Timings",
          "score": 0.031778056,
          "start_line": 40,
          "end_line": 46
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Search",
          "score": 0.031746034,
          "start_line": 70,
          "end_line": 74
        },
        {
          "file_path": "internal/search/searcher.go",
          "score": 0.029211087,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "SearchMode",
          "score": 0.016393442,
          "start_line": 26,
          "end_line": 27
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.016129032,
          "start_line": 14,
          "end_line": 25
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "SearchMode",
          "score": 0.016129032,
          "start_line": 255,
          "end_line": 256
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Searcher",
          "score": 0.015625,
          "start_line": 15,
          "end_line": 19
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "runQuery",
          "score": 0.015625,
          "start_line": 212,
          "end_line": 260
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "HasAny",
          "score": 0.015384615,
          "start_line": 23,
          "end_line": 26
        }
      ]
    },
    {
      "id": "validate_collection_vector_size_navigation",
      "type": "navigation",
      "query": "where is ValidateCollectionVectorSize defined",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 16,
      "qdrant_ms": 3,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ValidateCollectionVectorSize",
          "score": 0.033333335,
          "start_line": 187,
          "end_line": 191
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateCollectionDimension",
          "score": 0.03226646,
          "start_line": 126,
          "end_line": 185
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "vectorClient",
          "score": 0.03201844,
          "start_line": 21,
          "end_line": 24
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsureCollection",
          "score": 0.031498015,
          "start_line": 51,
          "end_line": 86
        },
        {
          "file_path": "internal/embedding/validate.go",
          "name": "ValidateVectorBatch",
          "score": 0.03001792,
          "start_line": 5,
          "end_line": 38
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateSparseVector",
          "score": 0.02967033,
          "start_line": 414,
          "end_line": 422
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "vectorStore",
          "score": 0.029009879,
          "start_line": 14,
          "end_line": 21
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.028258707,
          "start_line": 306,
          "end_line": 345
        },
        {
          "file_path": "internal/answer/metrics.go",
          "name": "ValidateCitations",
          "score": 0.027972028,
          "start_line": 40,
          "end_line": 53
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Upsert",
          "score": 0.02741784,
          "start_line": 193,
          "end_line": 253
        }
      ]
    },
    {
      "id": "load_dataset_navigation",
      "type": "navigation",
      "query": "where is LoadDataset implemented",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 14,
      "qdrant_ms": 2,
      "total_ms": 18,
      "top_results": [
        {
          "file_path": "internal/eval/dataset.go",
          "name": "LoadDataset",
          "score": 0.033333335,
          "start_line": 62,
          "end_line": 101
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Load",
          "score": 0.030303031,
          "start_line": 39,
          "end_line": 59
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.027479768,
          "start_line": 118,
          "end_line": 121
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.026356857,
          "start_line": 1,
          "end_line": 9
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runEval",
          "score": 0.016393442,
          "start_line": 465,
          "end_line": 504
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "name": "CorpusStats",
          "score": 0.016393442,
          "start_line": 261,
          "end_line": 266
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "score": 0.016129032,
          "start_line": 1,
          "end_line": 19
        },
        {
          "file_path": "internal/answer/metrics.go",
          "score": 0.016129032,
          "start_line": 60,
          "end_line": 98
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.015873017,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.015873017,
          "start_line": 17,
          "end_line": 27
        }
      ]
    },
    {
      "id": "hihatk_navigation",
      "type": "navigation",
      "query": "where is HitAtK function implemented",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 15,
      "qdrant_ms": 2,
      "total_ms": 19,
      "top_results": [
        {
          "file_path": "internal/eval/metrics.go",
          "name": "HitAtK",
          "score": 0.033333335,
          "start_line": 40,
          "end_line": 50
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "MRRAtK",
          "score": 0.03125,
          "start_line": 52,
          "end_line": 62
        },
        {
          "file_path": "internal/eval/metrics.go",
          "score": 0.03079839,
          "start_line": 1,
          "end_line": 13
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "RecallAtK",
          "score": 0.030090498,
          "start_line": 64,
          "end_line": 84
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "runQuery",
          "score": 0.016393442,
          "start_line": 212,
          "end_line": 260
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "getIntValue",
          "score": 0.016393442,
          "start_line": 626,
          "end_line": 631
        },
        {
          "file_path": "internal/answer/metrics.go",
          "score": 0.016129032,
          "start_line": 60,
          "end_line": 98
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "markCovered",
          "score": 0.016129032,
          "start_line": 94,
          "end_line": 100
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "getStringValue",
          "score": 0.015873017,
          "start_line": 617,
          "end_line": 624
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "score": 0.015384615,
          "start_line": 1,
          "end_line": 21
        }
      ]
    },
    {
      "id": "chunking_concept",
      "type": "concept",
      "query": "how does code chunking work",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.030365298,
      "embed_ms": 14,
      "qdrant_ms": 7,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "splitLargeBlock",
          "score": 0.030365298,
          "start_line": 201,
          "end_line": 246
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "collectGapChunks",
          "score": 0.029551337,
          "start_line": 149,
          "end_line": 173
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "CodeChunk",
          "score": 0.028991597,
          "start_line": 4,
          "end_line": 45
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "chunkGeneric",
          "score": 0.028860029,
          "start_line": 30,
          "end_line": 87
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "SearchResult",
          "score": 0.028850146,
          "start_line": 55,
          "end_line": 62
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "namedGoChunks",
          "score": 0.028665029,
          "start_line": 131,
          "end_line": 147
        },
        {
          "file_path": "internal/ingest/enrichment.go",
          "name": "enrichForEmbedding",
          "score": 0.028594771,
          "start_line": 10,
          "end_line": 35
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "ChunkContext",
          "score": 0.027150981,
          "start_line": 40,
          "end_line": 66
        },
        {
          "file_path": "internal/ingest/walker.go",
          "score": 0.016666668,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.016393442,
          "start_line": 14,
          "end_line": 25
        }
      ]
    },
    {
      "id": "ingestion_pipeline_concept",
      "type": "concept",
      "query": "how does the ingestion pipeline walk files and produce chunks",
      "hit_at_1": false,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 0.5,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.03306011,
      "embed_ms": 17,
      "qdrant_ms": 2,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/ingest/walker.go",
          "score": 0.03306011,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Pipeline",
          "score": 0.03306011,
          "start_line": 23,
          "end_line": 32
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "NewPipeline",
          "score": 0.031054404,
          "start_line": 60,
          "end_line": 74
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Run",
          "score": 0.031009614,
          "start_line": 85,
          "end_line": 124
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithLanguages",
          "score": 0.03036577,
          "start_line": 47,
          "end_line": 58
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "Watcher",
          "score": 0.029857397,
          "start_line": 22,
          "end_line": 41
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "ChunkFile",
          "score": 0.029642545,
          "start_line": 20,
          "end_line": 28
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029009879,
          "start_line": 295,
          "end_line": 327
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.028991597,
          "start_line": 75,
          "end_line": 80
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithChunkOverlap",
          "score": 0.028850146,
          "start_line": 42,
          "end_line": 45
        }
      ]
    },
    {
      "id": "config_language_detection_concept",
      "type": "concept",
      "query": "how does config detect language from file extension",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 15,
      "qdrant_ms": 3,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/config/config.go",
          "name": "DetectLanguage",
          "score": 0.033333335,
          "start_line": 96,
          "end_line": 104
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Config",
          "score": 0.032522473,
          "start_line": 17,
          "end_line": 37
        },
        {
          "file_path": "internal/config/config.go",
          "name": "IsSourceFile",
          "score": 0.03226646,
          "start_line": 106,
          "end_line": 111
        },
        {
          "file_path": "internal/config/config.go",
          "name": "buildIndexes",
          "score": 0.031024532,
          "start_line": 131,
          "end_line": 146
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithLanguages",
          "score": 0.029116046,
          "start_line": 47,
          "end_line": 58
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "ChunkFile",
          "score": 0.028665029,
          "start_line": 20,
          "end_line": 28
        },
        {
          "file_path": "internal/config/config.go",
          "score": 0.027583601,
          "start_line": 1,
          "end_line": 16
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveIndexConfig",
          "score": 0.027106227,
          "start_line": 377,
          "end_line": 390
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "filterFilesByLanguage",
          "score": 0.015625,
          "start_line": 329,
          "end_line": 342
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "score": 0.015625,
          "start_line": 1,
          "end_line": 21
        }
      ]
    },
    {
      "id": "payload_indexes_concept",
      "type": "concept",
      "query": "how are payload indexes ensured in qdrant",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032539684,
      "embed_ms": 16,
      "qdrant_ms": 3,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsurePayloadIndexes",
          "score": 0.032539684,
          "start_line": 88,
          "end_line": 101
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ensurePayloadIndexes",
          "score": 0.032522473,
          "start_line": 107,
          "end_line": 124
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.03181818,
          "start_line": 102,
          "end_line": 106
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "payloadToChunk",
          "score": 0.031778056,
          "start_line": 442,
          "end_line": 457
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsureCollection",
          "score": 0.031054404,
          "start_line": 51,
          "end_line": 86
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileStates",
          "score": 0.028985508,
          "start_line": 474,
          "end_line": 550
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "getStringValue",
          "score": 0.028958334,
          "start_line": 617,
          "end_line": 624
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.02837022,
          "start_line": 120,
          "end_line": 159
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "getIntValue",
          "score": 0.028219396,
          "start_line": 626,
          "end_line": 631
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "FileIndexState",
          "score": 0.027212143,
          "start_line": 47,
          "end_line": 53
        }
      ]
    },
    {
      "id": "eval_aggregation_concept",
      "type": "concept",
      "query": "how does eval aggregate metrics by query type",
      "hit_at_1": false,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 0.5,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 14,
      "qdrant_ms": 3,
      "total_ms": 19,
      "top_results": [
        {
          "file_path": "internal/eval/dataset.go",
          "name": "QueryType",
          "score": 0.033333335,
          "start_line": 10,
          "end_line": 13
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Aggregate",
          "score": 0.032002047,
          "start_line": 90,
          "end_line": 110
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "aggregateAnswers",
          "score": 0.031513646,
          "start_line": 376,
          "end_line": 415
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "TypeBreakdown",
          "score": 0.03079839,
          "start_line": 112,
          "end_line": 118
        },
        {
          "file_path": "internal/eval/metrics.go",
          "score": 0.030477948,
          "start_line": 1,
          "end_line": 13
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Report",
          "score": 0.030303031,
          "start_line": 135,
          "end_line": 147
        },
        {
          "file_path": "internal/eval/format.go",
          "score": 0.030117754,
          "start_line": 44,
          "end_line": 83
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "aggregate",
          "score": 0.029513888,
          "start_line": 300,
          "end_line": 374
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "AnswerAggregate",
          "score": 0.02889813,
          "start_line": 120,
          "end_line": 133
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.028438887,
          "start_line": 14,
          "end_line": 25
        }
      ]
    },
    {
      "id": "enrichment_concept",
      "type": "concept",
      "query": "how is code enriched before embedding",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 17,
      "qdrant_ms": 4,
      "total_ms": 24,
      "top_results": [
        {
          "file_path": "internal/ingest/enrichment.go",
          "name": "enrichForEmbedding",
          "score": 0.033333335,
          "start_line": 10,
          "end_line": 35
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Embed",
          "score": 0.028542511,
          "start_line": 45,
          "end_line": 103
        },
        {
          "file_path": "internal/ingest/enrichment.go",
          "score": 0.027212143,
          "start_line": 1,
          "end_line": 9
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "score": 0.025974026,
          "start_line": 240,
          "end_line": 253
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.016393442,
          "start_line": 260,
          "end_line": 299
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "name": "Embedder",
          "score": 0.016393442,
          "start_line": 6,
          "end_line": 15
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Dimension",
          "score": 0.016129032,
          "start_line": 105,
          "end_line": 111
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "score": 0.016129032,
          "start_line": 1,
          "end_line": 5
        },
        {
          "file_path": "internal/embedding/fake.go",
          "score": 0.015873017,
          "start_line": 63,
          "end_line": 66
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "score": 0.015873017,
          "start_line": 1,
          "end_line": 21
        }
      ]
    },
    {
      "id": "hasher_concept",
      "type": "concept",
      "query": "how are file hashes computed for re-indexing",
      "hit_at_1": false,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 0.3333333333333333,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032795697,
      "embed_ms": 15,
      "qdrant_ms": 3,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.032795697,
          "start_line": 120,
          "end_line": 159
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Run",
          "score": 0.03079839,
          "start_line": 85,
          "end_line": 124
        },
        {
          "file_path": "internal/ingest/hasher.go",
          "name": "HashFiles",
          "score": 0.030776516,
          "start_line": 20,
          "end_line": 32
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.030555557,
          "start_line": 225,
          "end_line": 264
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "FileIndexState",
          "score": 0.029761907,
          "start_line": 47,
          "end_line": 53
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.02967033,
          "start_line": 155,
          "end_line": 194
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029551337,
          "start_line": 190,
          "end_line": 229
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileHashes",
          "score": 0.029462365,
          "start_line": 459,
          "end_line": 472
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileStates",
          "score": 0.028191384,
          "start_line": 474,
          "end_line": 550
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "DeleteStaleChunksByFilePath",
          "score": 0.027526395,
          "start_line": 552,
          "end_line": 578
        }
      ]
    },
    {
      "id": "dimension_validation_behavior",
      "type": "behavior",
      "query": "what happens when the embedder returns inconsistent vector dimensions",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": true,
      "mrr_at_5": 0.25,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032795697,
      "embed_ms": 15,
      "qdrant_ms": 2,
      "total_ms": 19,
      "top_results": [
        {
          "file_path": "internal/embedding/fake.go",
          "name": "Dimension",
          "score": 0.032795697,
          "start_line": 32,
          "end_line": 35
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Dimension",
          "score": 0.03226646,
          "start_line": 105,
          "end_line": 111
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "name": "Embedder",
          "score": 0.03226646,
          "start_line": 6,
          "end_line": 15
        },
        {
          "file_path": "internal/embedding/validate.go",
          "name": "ValidateVectorBatch",
          "score": 0.032051284,
          "start_line": 5,
          "end_line": 38
        },
        {
          "file_path": "internal/embedding/fake.go",
          "name": "NewFakeEmbedder",
          "score": 0.03175403,
          "start_line": 17,
          "end_line": 20
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.029857397,
          "start_line": 13,
          "end_line": 23
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "NewOllamaEmbedder",
          "score": 0.029469121,
          "start_line": 25,
          "end_line": 34
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "score": 0.02857726,
          "start_line": 348,
          "end_line": 387
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Embed",
          "score": 0.02848485,
          "start_line": 45,
          "end_line": 103
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateCollectionDimension",
          "score": 0.027745886,
          "start_line": 126,
          "end_line": 185
        }
      ]
    },
    {
      "id": "reindex_change_detection_behavior",
      "type": "behavior",
      "query": "how does the system detect changed files when re-indexing",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.5,
      "recall_at_10": 0.5,
      "top_score": 0.032795697,
      "embed_ms": 17,
      "qdrant_ms": 2,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.032795697,
          "start_line": 120,
          "end_line": 159
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.032786883,
          "start_line": 155,
          "end_line": 194
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "Watcher",
          "score": 0.032539684,
          "start_line": 22,
          "end_line": 41
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "Watch",
          "score": 0.03053613,
          "start_line": 68,
          "end_line": 134
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Run",
          "score": 0.030330881,
          "start_line": 85,
          "end_line": 124
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.030158732,
          "start_line": 295,
          "end_line": 327
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "eventIsRelevant",
          "score": 0.029910713,
          "start_line": 136,
          "end_line": 156
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileStates",
          "score": 0.029631255,
          "start_line": 474,
          "end_line": 550
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029462365,
          "start_line": 190,
          "end_line": 229
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029418126,
          "start_line": 75,
          "end_line": 80
        }
      ]
    },
    {
      "id": "collection_dimension_mismatch_behavior",
      "type": "behavior",
      "query": "what happens when query vector dimension does not match collection",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.5,
      "recall_at_10": 0.5,
      "top_score": 0.03306011,
      "embed_ms": 16,
      "qdrant_ms": 4,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ValidateCollectionVectorSize",
          "score": 0.03306011,
          "start_line": 187,
          "end_line": 191
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateCollectionDimension",
          "score": 0.032522473,
          "start_line": 126,
          "end_line": 185
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsureCollection",
          "score": 0.031498015,
          "start_line": 51,
          "end_line": 86
        },
        {
          "file_path": "internal/embedding/validate.go",
          "name": "ValidateVectorBatch",
          "score": 0.03036577,
          "start_line": 5,
          "end_line": 38
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Dimension",
          "score": 0.029462365,
          "start_line": 105,
          "end_line": 111
        },
        {
          "file_path": "internal/embedding/fake.go",
          "name": "Dimension",
          "score": 0.02889813,
          "start_line": 32,
          "end_line": 35
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.028571429,
          "start_line": 295,
          "end_line": 327
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "score": 0.028438887,
          "start_line": 348,
          "end_line": 387
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.028404512,
          "start_line": 306,
          "end_line": 345
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Search",
          "score": 0.027242402,
          "start_line": 271,
          "end_line": 310
        }
      ]
    },
    {
      "id": "eval_limit_guard_behavior",
      "type": "behavior",
      "query": "what happens when eval limit is below 10",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.5,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 16,
      "qdrant_ms": 5,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/eval/runner.go",
          "score": 0.033333335,
          "start_line": 1,
          "end_line": 16
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "NegativeResult",
          "score": 0.030834913,
          "start_line": 40,
          "end_line": 49
        },
        {
          "file_path": "internal/eval/negative.go",
          "score": 0.030213539,
          "start_line": 9,
          "end_line": 47
        },
        {
          "file_path": "internal/eval/negative.go",
          "name": "NegativeCeiling",
          "score": 0.029437229,
          "start_line": 60,
          "end_line": 87
        },
        {
          "file_path": "internal/eval/negative.go",
          "name": "NegativePasses",
          "score": 0.028782895,
          "start_line": 89,
          "end_line": 93
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "RecallAtK",
          "score": 0.026846848,
          "start_line": 64,
          "end_line": 84
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "HitAtK",
          "score": 0.016393442,
          "start_line": 40,
          "end_line": 50
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runSearch",
          "score": 0.016393442,
          "start_line": 392,
          "end_line": 440
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "HasAny",
          "score": 0.015873017,
          "start_line": 23,
          "end_line": 26
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Runner",
          "score": 0.015873017,
          "start_line": 149,
          "end_line": 175
        }
      ]
    },
    {
      "id": "oauth_middleware_negative",
      "type": "negative",
      "query": "where is the OAuth middleware implemented",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": false,
      "mrr_at_5": 0,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.032002047,
      "negative": {
        "score_kind": "rrf",
        "threshold": 0.02,
        "pass": false
      },
      "embed_ms": 19,
      "qdrant_ms": 2,
      "total_ms": 22,
      "top_results": [
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "setDim",
          "score": 0.032002047,
          "start_line": 113,
          "end_line": 117
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.03036577,
          "start_line": 118,
          "end_line": 121
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "Warmup",
          "score": 0.029236022,
          "start_line": 133,
          "end_line": 170
        },
        {
          "file_path": "internal/answer/ollama.go",
          "score": 0.026905019,
          "start_line": 191,
          "end_line": 197
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "statusError",
          "score": 0.026846848,
          "start_line": 184,
          "end_line": 190
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "connectionError",
          "score": 0.025978409,
          "start_line": 172,
          "end_line": 182
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "OllamaGenerator",
          "score": 0.016666668,
          "start_line": 41,
          "end_line": 48
        },
        {
          "file_path": "internal/eval/negative.go",
          "score": 0.016666668,
          "start_line": 9,
          "end_line": 47
        },
        {
          "file_path": "internal/answer/metrics.go",
          "score": 0.016393442,
          "start_line": 60,
          "end_line": 98
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.016393442,
          "start_line": 13,
          "end_line": 23
        }
      ]
    },
    {
      "id": "kubernetes_manifest_negative",
      "type": "negative",
      "query": "Kubernetes deployment manifest for the service",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": false,
      "mrr_at_5": 0,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.016666668,
      "negative": {
        "score_kind": "rrf",
        "threshold": 0.02,
        "pass": true
      },
      "embed_ms": 15,
      "qdrant_ms": 3,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Client",
          "score": 0.016666668,
          "start_line": 29,
          "end_line": 32
        },
        {
          "file_path": "internal/model/chunk.go",
          "score": 0.016393442,
          "start_line": 1,
          "end_line": 3
        },
        {
          "file_path": "internal/embedding/validate.go",
          "score": 0.016129032,
          "start_line": 1,
          "end_line": 4
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.015873017,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.015625,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/config/config.go",
          "score": 0.015384615,
          "start_line": 1,
          "end_line": 16
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.015151516,
          "start_line": 1,
          "end_line": 9
        },
        {
          "file_path": "internal/eval/negative.go",
          "name": "ScoreKindForMode",
          "score": 0.014925373,
          "start_line": 48,
          "end_line": 58
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "representationVersion",
          "score": 0.014705882,
          "start_line": 81,
          "end_line": 83
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "name": "CorpusStats",
          "score": 0.014492754,
          "start_line": 261,
          "end_line": 266
        }
      ]
    },
    {
      "id": "grpc_gateway_router_negative",
      "type": "negative",
      "query": "where is the grpc gateway HTTP router setup",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": false,
      "mrr_at_5": 0,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.032291666,
      "negative": {
        "score_kind": "rrf",
        "threshold": 0.02,
        "pass": false
      },
      "embed_ms": 15,
      "qdrant_ms": 4,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Close",
          "score": 0.032291666,
          "start_line": 46,
          "end_line": 49
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "OllamaGenerator",
          "score": 0.031054404,
          "start_line": 41,
          "end_line": 48
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "printUsage",
          "score": 0.030000001,
          "start_line": 225,
          "end_line": 279
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "validateSparseVector",
          "score": 0.029198635,
          "start_line": 414,
          "end_line": 422
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.02857726,
          "start_line": 1,
          "end_line": 12
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.026334027,
          "start_line": 13,
          "end_line": 23
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "NewOllamaGenerator",
          "score": 0.025807526,
          "start_line": 50,
          "end_line": 62
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Timings",
          "score": 0.016393442,
          "start_line": 40,
          "end_line": 46
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.016393442,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/eval/dataset.go",
          "score": 0.016129032,
          "start_line": 14,
          "end_line": 25
        }
      ]
    },
    {
      "id": "terraform_module_negative",
      "type": "negative",
      "query": "terraform module for production networking",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": false,
      "mrr_at_5": 0,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.016666668,
      "negative": {
        "score_kind": "rrf",
        "threshold": 0.02,
        "pass": true
      },
      "embed_ms": 15,
      "qdrant_ms": 2,
      "total_ms": 19,
      "top_results": [
        {
          "file_path": "internal/eval/runner.go",
          "name": "Runner",
          "score": 0.016666668,
          "start_line": 149,
          "end_line": 175
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.016666668,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "OllamaGenerator",
          "score": 0.016393442,
          "start_line": 41,
          "end_line": 48
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "SearchWithTimings",
          "score": 0.016393442,
          "start_line": 76,
          "end_line": 131
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Default",
          "score": 0.016129032,
          "start_line": 61,
          "end_line": 94
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Client",
          "score": 0.016129032,
          "start_line": 29,
          "end_line": 32
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.015873017,
          "start_line": 13,
          "end_line": 23
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "ollamaEmbedRequest",
          "score": 0.015625,
          "start_line": 36,
          "end_line": 39
        },
        {
          "file_path": "internal/model/chunk.go",
          "score": 0.015384615,
          "start_line": 1,
          "end_line": 3
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.015151516,
          "start_line": 1,
          "end_line": 12
        }
      ]
    },
    {
      "id": "chunkfile_callers_structural",
      "type": "navigation",
      "query": "what calls the ChunkFile function",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.032291666,
      "embed_ms": 16,
      "qdrant_ms": 2,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "ChunkFile",
          "score": 0.032291666,
          "start_line": 20,
          "end_line": 28
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "name": "Tokenize",
          "score": 0.016666668,
          "start_line": 59,
          "end_line": 86
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "NewOllamaEmbedder",
          "score": 0.016393442,
          "start_line": 25,
          "end_line": 34
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "generateChunkID",
          "score": 0.016393442,
          "start_line": 129,
          "end_line": 131
        },
        {
          "file_path": "internal/answer/fake.go",
          "name": "chunkSummary",
          "score": 0.016129032,
          "start_line": 49,
          "end_line": 60
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "ollamaOptions",
          "score": 0.016129032,
          "start_line": 70,
          "end_line": 75
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "NewOllamaGenerator",
          "score": 0.015873017,
          "start_line": 50,
          "end_line": 62
        },
        {
          "file_path": "internal/ingest/enrichment.go",
          "name": "chunkTypeLabel",
          "score": 0.015873017,
          "start_line": 37,
          "end_line": 52
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "namedGoChunks",
          "score": 0.015625,
          "start_line": 131,
          "end_line": 147
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "score": 0.015384615,
          "start_line": 1,
          "end_line": 21
        }
      ]
    },
    {
      "id": "pipeline_run_callers_structural",
      "type": "navigation",
      "query": "what invokes the ingestion Pipeline.Run method",
      "hit_at_1": false,
      "hit_at_3": false,
      "hit_at_5": false,
      "mrr_at_5": 0,
      "recall_at_5": 0,
      "recall_at_10": 0,
      "top_score": 0.03306011,
      "embed_ms": 17,
      "qdrant_ms": 2,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Pipeline",
          "score": 0.03306011,
          "start_line": 23,
          "end_line": 32
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "NewPipeline",
          "score": 0.032258064,
          "start_line": 60,
          "end_line": 74
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "Watcher",
          "score": 0.03159204,
          "start_line": 22,
          "end_line": 41
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Option",
          "score": 0.031318814,
          "start_line": 34,
          "end_line": 35
        },
        {
          "file_path": "internal/ingest/walker.go",
          "score": 0.031009614,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithLanguages",
          "score": 0.03036577,
          "start_line": 47,
          "end_line": 58
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithChunkOverlap",
          "score": 0.02964427,
          "start_line": 42,
          "end_line": 45
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "WithChunkSize",
          "score": 0.029411765,
          "start_line": 37,
          "end_line": 40
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "score": 0.029236022,
          "start_line": 1,
          "end_line": 21
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029030912,
          "start_line": 1,
          "end_line": 13
        }
      ]
    },
    {
      "id": "searcher_search_callers_structural",
      "type": "navigation",
      "query": "what code calls Searcher.Search or SearchWithTimings",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 17,
      "qdrant_ms": 2,
      "total_ms": 22,
      "top_results": [
        {
          "file_path": "internal/search/searcher.go",
          "name": "SearchWithTimings",
          "score": 0.033333335,
          "start_line": 76,
          "end_line": 131
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Search",
          "score": 0.03226646,
          "start_line": 70,
          "end_line": 74
        },
        {
          "file_path": "internal/search/searcher.go",
          "score": 0.031280547,
          "start_line": 1,
          "end_line": 14
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Timings",
          "score": 0.031280547,
          "start_line": 40,
          "end_line": 46
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "SearchMode",
          "score": 0.030092072,
          "start_line": 26,
          "end_line": 27
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Searcher",
          "score": 0.029513888,
          "start_line": 15,
          "end_line": 19
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "NewSearcher",
          "score": 0.027242402,
          "start_line": 48,
          "end_line": 54
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "runQuery",
          "score": 0.015873017,
          "start_line": 212,
          "end_line": 260
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runSearch",
          "score": 0.015625,
          "start_line": 392,
          "end_line": 440
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "ParseSearchMode",
          "score": 0.015384615,
          "start_line": 56,
          "end_line": 68
        }
      ]
    },
    {
      "id": "resolve_generator_callers_structural",
      "type": "navigation",
      "query": "what command paths use resolveGenerator to build the answer Generator",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 16,
      "qdrant_ms": 4,
      "total_ms": 22,
      "top_results": [
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveGenerator",
          "score": 0.033333335,
          "start_line": 312,
          "end_line": 326
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.03201844,
          "start_line": 201,
          "end_line": 223
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveIndexConfig",
          "score": 0.029469121,
          "start_line": 377,
          "end_line": 390
        },
        {
          "file_path": "internal/answer/prompt.go",
          "score": 0.028542511,
          "start_line": 1,
          "end_line": 17
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Prompt",
          "score": 0.028381642,
          "start_line": 29,
          "end_line": 38
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "printUsage",
          "score": 0.027826088,
          "start_line": 225,
          "end_line": 279
        },
        {
          "file_path": "internal/answer/prompt.go",
          "name": "BuildPrompt",
          "score": 0.02744361,
          "start_line": 18,
          "end_line": 42
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.026875902,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "Generate",
          "score": 0.026685644,
          "start_line": 88,
          "end_line": 131
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Generator",
          "score": 0.016393442,
          "start_line": 8,
          "end_line": 15
        }
      ]
    },
    {
      "id": "trace_search_to_qdrant_structural",
      "type": "navigation",
      "query": "trace from the search subcommand down to the Qdrant client search call",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.03181818,
      "embed_ms": 20,
      "qdrant_ms": 4,
      "total_ms": 27,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "SearchMode",
          "score": 0.03181818,
          "start_line": 255,
          "end_line": 256
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "NewSearcher",
          "score": 0.030550372,
          "start_line": 48,
          "end_line": 54
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.030213539,
          "start_line": 257,
          "end_line": 270
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.029761907,
          "start_line": 131,
          "end_line": 170
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.02964427,
          "start_line": 102,
          "end_line": 106
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Timings",
          "score": 0.029324897,
          "start_line": 40,
          "end_line": 46
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Search",
          "score": 0.02889813,
          "start_line": 271,
          "end_line": 310
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "EnsurePayloadIndexes",
          "score": 0.02871795,
          "start_line": 88,
          "end_line": 101
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "vectorClient",
          "score": 0.028404512,
          "start_line": 21,
          "end_line": 24
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.027912386,
          "start_line": 341,
          "end_line": 377
        }
      ]
    },
    {
      "id": "trace_answer_flag_to_ollama_chat_structural",
      "type": "navigation",
      "query": "trace from the --answer CLI flag to the Ollama /api/chat HTTP request",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.5,
      "recall_at_10": 0.5,
      "top_score": 0.032539684,
      "embed_ms": 18,
      "qdrant_ms": 3,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/answer/ollama.go",
          "name": "OllamaGenerator",
          "score": 0.032539684,
          "start_line": 41,
          "end_line": 48
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "ollamaChatMessage",
          "score": 0.032522473,
          "start_line": 64,
          "end_line": 68
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "Generate",
          "score": 0.03159204,
          "start_line": 88,
          "end_line": 131
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "Warmup",
          "score": 0.031544957,
          "start_line": 133,
          "end_line": 170
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "statusError",
          "score": 0.03125,
          "start_line": 184,
          "end_line": 190
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "ollamaChatRequest",
          "score": 0.031024532,
          "start_line": 77,
          "end_line": 82
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "connectionError",
          "score": 0.030090498,
          "start_line": 172,
          "end_line": 182
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "ollamaChatResponse",
          "score": 0.03001792,
          "start_line": 84,
          "end_line": 86
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "ollamaOptions",
          "score": 0.028542511,
          "start_line": 70,
          "end_line": 75
        },
        {
          "file_path": "internal/answer/ollama.go",
          "score": 0.02837022,
          "start_line": 1,
          "end_line": 40
        }
      ]
    },
    {
      "id": "trace_eval_to_recall_metric_structural",
      "type": "navigation",
      "query": "trace from eval --output json to the recall@5 number in the report",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032539684,
      "embed_ms": 18,
      "qdrant_ms": 2,
      "total_ms": 22,
      "top_results": [
        {
          "file_path": "internal/eval/metrics.go",
          "score": 0.032539684,
          "start_line": 1,
          "end_line": 13
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "QueryResult",
          "score": 0.03201844,
          "start_line": 17,
          "end_line": 38
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Report",
          "score": 0.031778056,
          "start_line": 135,
          "end_line": 147
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Aggregate",
          "score": 0.030621786,
          "start_line": 90,
          "end_line": 110
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.029910713,
          "start_line": 535,
          "end_line": 547
        },
        {
          "file_path": "internal/eval/metrics.go",
          "name": "RecallAtK",
          "score": 0.029642545,
          "start_line": 64,
          "end_line": 84
        },
        {
          "file_path": "internal/eval/format.go",
          "name": "FormatHuman",
          "score": 0.029324897,
          "start_line": 9,
          "end_line": 48
        },
        {
          "file_path": "internal/eval/runner.go",
          "score": 0.029236022,
          "start_line": 1,
          "end_line": 16
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "resultSummary",
          "score": 0.02869353,
          "start_line": 80,
          "end_line": 88
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "TypeBreakdown",
          "score": 0.026320346,
          "start_line": 112,
          "end_line": 118
        }
      ]
    },
    {
      "id": "trace_index_to_qdrant_upsert_structural",
      "type": "navigation",
      "query": "trace from the index command through to Qdrant upsert",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.6666666666666666,
      "recall_at_10": 1,
      "top_score": 0.032795697,
      "embed_ms": 26,
      "qdrant_ms": 3,
      "total_ms": 33,
      "top_results": [
        {
          "file_path": "internal/qdrant/client.go",
          "name": "Upsert",
          "score": 0.032795697,
          "start_line": 193,
          "end_line": 253
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "name": "Run",
          "score": 0.031498015,
          "start_line": 85,
          "end_line": 124
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ensurePayloadIndexes",
          "score": 0.029642545,
          "start_line": 107,
          "end_line": 124
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029551337,
          "start_line": 295,
          "end_line": 327
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "ScrollFileStates",
          "score": 0.029469121,
          "start_line": 474,
          "end_line": 550
        },
        {
          "file_path": "internal/qdrant/client.go",
          "score": 0.028542511,
          "start_line": 102,
          "end_line": 106
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "printUsage",
          "score": 0.028283227,
          "start_line": 225,
          "end_line": 279
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "main",
          "score": 0.027619049,
          "start_line": 26,
          "end_line": 65
        },
        {
          "file_path": "internal/qdrant/client.go",
          "name": "payloadToChunk",
          "score": 0.026153848,
          "start_line": 442,
          "end_line": 457
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.016666668,
          "start_line": 201,
          "end_line": 223
        }
      ]
    },
    {
      "id": "embedder_implementers_structural",
      "type": "navigation",
      "query": "what types implement the Embedder interface",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032795697,
      "embed_ms": 20,
      "qdrant_ms": 5,
      "total_ms": 28,
      "top_results": [
        {
          "file_path": "internal/embedding/embedder.go",
          "name": "Embedder",
          "score": 0.032795697,
          "start_line": 6,
          "end_line": 15
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.032051284,
          "start_line": 118,
          "end_line": 121
        },
        {
          "file_path": "internal/embedding/fake.go",
          "score": 0.03201844,
          "start_line": 63,
          "end_line": 66
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveEmbedder",
          "score": 0.031513646,
          "start_line": 299,
          "end_line": 310
        },
        {
          "file_path": "internal/embedding/fake.go",
          "name": "NewFakeEmbedder",
          "score": 0.030076887,
          "start_line": 17,
          "end_line": 20
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "score": 0.029051669,
          "start_line": 1,
          "end_line": 5
        },
        {
          "file_path": "internal/embedding/fake.go",
          "name": "FakeEmbedder",
          "score": 0.028790388,
          "start_line": 9,
          "end_line": 15
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.028665029,
          "start_line": 13,
          "end_line": 23
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "NewOllamaEmbedder",
          "score": 0.028191384,
          "start_line": 25,
          "end_line": 34
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "NewSearcher",
          "score": 0.027692895,
          "start_line": 48,
          "end_line": 54
        }
      ]
    },
    {
      "id": "generator_implementers_structural",
      "type": "navigation",
      "query": "what types implement the answer Generator interface",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032795697,
      "embed_ms": 19,
      "qdrant_ms": 1,
      "total_ms": 27,
      "top_results": [
        {
          "file_path": "internal/answer/generator.go",
          "name": "Generator",
          "score": 0.032795697,
          "start_line": 8,
          "end_line": 15
        },
        {
          "file_path": "internal/answer/fake.go",
          "score": 0.03181818,
          "start_line": 61,
          "end_line": 64
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveGenerator",
          "score": 0.031280547,
          "start_line": 312,
          "end_line": 326
        },
        {
          "file_path": "internal/answer/ollama.go",
          "score": 0.030886196,
          "start_line": 191,
          "end_line": 197
        },
        {
          "file_path": "internal/answer/fake.go",
          "name": "NewFakeGenerator",
          "score": 0.030309988,
          "start_line": 25,
          "end_line": 28
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.030158732,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/answer/fake.go",
          "name": "FakeGenerator",
          "score": 0.029761907,
          "start_line": 9,
          "end_line": 23
        },
        {
          "file_path": "internal/answer/generator.go",
          "score": 0.029380456,
          "start_line": 1,
          "end_line": 7
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Prompt",
          "score": 0.029138513,
          "start_line": 29,
          "end_line": 38
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "AnswerAggregate",
          "score": 0.02857726,
          "start_line": 120,
          "end_line": 133
        }
      ]
    },
    {
      "id": "warmer_implementers_structural",
      "type": "navigation",
      "query": "what types implement the Warmer interface for model pre-loading",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.033333335,
      "embed_ms": 18,
      "qdrant_ms": 3,
      "total_ms": 23,
      "top_results": [
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.033333335,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/model/chunk.go",
          "score": 0.031778056,
          "start_line": 1,
          "end_line": 3
        },
        {
          "file_path": "internal/answer/ollama.go",
          "score": 0.031513646,
          "start_line": 191,
          "end_line": 197
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "Warmup",
          "score": 0.031280547,
          "start_line": 133,
          "end_line": 170
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runSearch",
          "score": 0.016393442,
          "start_line": 392,
          "end_line": 440
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveIndexConfig",
          "score": 0.015873017,
          "start_line": 377,
          "end_line": 390
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "ollamaEmbedRequest",
          "score": 0.015873017,
          "start_line": 36,
          "end_line": 39
        },
        {
          "file_path": "internal/embedding/validate.go",
          "score": 0.015625,
          "start_line": 1,
          "end_line": 4
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Load",
          "score": 0.015625,
          "start_line": 39,
          "end_line": 59
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "name": "goTypeChunkKind",
          "score": 0.015151516,
          "start_line": 124,
          "end_line": 129
        }
      ]
    },
    {
      "id": "change_impact_embedder_embed_structural",
      "type": "navigation",
      "query": "what would break if I change the Embedder.Embed signature",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.6,
      "recall_at_10": 0.6,
      "top_score": 0.032291666,
      "embed_ms": 18,
      "qdrant_ms": 1,
      "total_ms": 22,
      "top_results": [
        {
          "file_path": "internal/embedding/fake.go",
          "name": "Embed",
          "score": 0.032291666,
          "start_line": 22,
          "end_line": 30
        },
        {
          "file_path": "internal/embedding/embedder.go",
          "name": "Embedder",
          "score": 0.032258064,
          "start_line": 6,
          "end_line": 15
        },
        {
          "file_path": "internal/embedding/fake.go",
          "score": 0.029324897,
          "start_line": 63,
          "end_line": 66
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveEmbedder",
          "score": 0.029213954,
          "start_line": 299,
          "end_line": 310
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "Embed",
          "score": 0.02920635,
          "start_line": 45,
          "end_line": 103
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "OllamaEmbedder",
          "score": 0.02889813,
          "start_line": 13,
          "end_line": 23
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "name": "NewOllamaEmbedder",
          "score": 0.028445512,
          "start_line": 25,
          "end_line": 34
        },
        {
          "file_path": "internal/ingest/enrichment.go",
          "name": "enrichForEmbedding",
          "score": 0.026144907,
          "start_line": 10,
          "end_line": 35
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "main",
          "score": 0.016393442,
          "start_line": 26,
          "end_line": 65
        },
        {
          "file_path": "internal/embedding/ollama.go",
          "score": 0.015873017,
          "start_line": 118,
          "end_line": 121
        }
      ]
    },
    {
      "id": "change_impact_generator_generate_structural",
      "type": "navigation",
      "query": "what would break if I change the Generator.Generate signature",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.8,
      "recall_at_10": 1,
      "top_score": 0.031024532,
      "embed_ms": 16,
      "qdrant_ms": 3,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/answer/fake.go",
          "name": "FakeGenerator",
          "score": 0.031024532,
          "start_line": 9,
          "end_line": 23
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Warmer",
          "score": 0.030751174,
          "start_line": 17,
          "end_line": 27
        },
        {
          "file_path": "internal/answer/generator.go",
          "name": "Generator",
          "score": 0.030309988,
          "start_line": 8,
          "end_line": 15
        },
        {
          "file_path": "internal/answer/ollama.go",
          "name": "NewOllamaGenerator",
          "score": 0.028174603,
          "start_line": 50,
          "end_line": 62
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runSearch",
          "score": 0.016666668,
          "start_line": 392,
          "end_line": 440
        },
        {
          "file_path": "internal/answer/fake.go",
          "score": 0.016393442,
          "start_line": 61,
          "end_line": 64
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "aggregateAnswers",
          "score": 0.016393442,
          "start_line": 376,
          "end_line": 415
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "resolveGenerator",
          "score": 0.016129032,
          "start_line": 312,
          "end_line": 326
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.016129032,
          "start_line": 155,
          "end_line": 194
        },
        {
          "file_path": "internal/ingest/watcher.go",
          "name": "Watcher",
          "score": 0.015873017,
          "start_line": 22,
          "end_line": 41
        }
      ]
    },
    {
      "id": "change_impact_chunkfile_structural",
      "type": "navigation",
      "query": "what would break if I change ChunkFile's parameters",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.030180182,
      "embed_ms": 15,
      "qdrant_ms": 3,
      "total_ms": 21,
      "top_results": [
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.030180182,
          "start_line": 190,
          "end_line": 229
        },
        {
          "file_path": "internal/ingest/chunker.go",
          "name": "ChunkFile",
          "score": 0.030158732,
          "start_line": 20,
          "end_line": 28
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.029469121,
          "start_line": 155,
          "end_line": 194
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "CodeChunk",
          "score": 0.029411765,
          "start_line": 4,
          "end_line": 45
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.026547117,
          "start_line": 295,
          "end_line": 327
        },
        {
          "file_path": "internal/ingest/pipeline.go",
          "score": 0.016666668,
          "start_line": 75,
          "end_line": 80
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "score": 0.016393442,
          "start_line": 240,
          "end_line": 253
        },
        {
          "file_path": "internal/model/chunk.go",
          "name": "FileIndexState",
          "score": 0.016393442,
          "start_line": 47,
          "end_line": 53
        },
        {
          "file_path": "internal/embedding/sparse.go",
          "name": "stemToken",
          "score": 0.016129032,
          "start_line": 143,
          "end_line": 164
        },
        {
          "file_path": "internal/ingest/chunker_go.go",
          "score": 0.016129032,
          "start_line": 1,
          "end_line": 21
        }
      ]
    },
    {
      "id": "propagate_hit_at_5_structural",
      "type": "navigation",
      "query": "how does hit@5 flow from search results to the human-readable report",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 1,
      "recall_at_10": 1,
      "top_score": 0.032539684,
      "embed_ms": 15,
      "qdrant_ms": 2,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/eval/metrics.go",
          "name": "HitAtK",
          "score": 0.032539684,
          "start_line": 40,
          "end_line": 50
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "Runner",
          "score": 0.032002047,
          "start_line": 149,
          "end_line": 175
        },
        {
          "file_path": "internal/eval/format.go",
          "name": "FormatHuman",
          "score": 0.030679155,
          "start_line": 9,
          "end_line": 48
        },
        {
          "file_path": "internal/eval/metrics.go",
          "score": 0.030000001,
          "start_line": 1,
          "end_line": 13
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "resultSummary",
          "score": 0.02932363,
          "start_line": 80,
          "end_line": 88
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "QueryResult",
          "score": 0.02889813,
          "start_line": 17,
          "end_line": 38
        },
        {
          "file_path": "internal/eval/runner.go",
          "name": "runQuery",
          "score": 0.028612014,
          "start_line": 212,
          "end_line": 260
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "Search",
          "score": 0.026875902,
          "start_line": 70,
          "end_line": 74
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "score": 0.025978409,
          "start_line": 535,
          "end_line": 547
        },
        {
          "file_path": "internal/search/searcher.go",
          "name": "FormatResults",
          "score": 0.025316456,
          "start_line": 145,
          "end_line": 163
        }
      ]
    },
    {
      "id": "propagate_skip_file_pattern_structural",
      "type": "navigation",
      "query": "how does skip_file_patterns from config.yaml affect which files get indexed",
      "hit_at_1": true,
      "hit_at_3": true,
      "hit_at_5": true,
      "mrr_at_5": 1,
      "recall_at_5": 0.5,
      "recall_at_10": 1,
      "top_score": 0.03306011,
      "embed_ms": 14,
      "qdrant_ms": 4,
      "total_ms": 20,
      "top_results": [
        {
          "file_path": "internal/config/config.go",
          "score": 0.03306011,
          "start_line": 1,
          "end_line": 16
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Config",
          "score": 0.03306011,
          "start_line": 17,
          "end_line": 37
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Load",
          "score": 0.032002047,
          "start_line": 39,
          "end_line": 59
        },
        {
          "file_path": "internal/config/config.go",
          "name": "ShouldSkipFile",
          "score": 0.03175403,
          "start_line": 119,
          "end_line": 129
        },
        {
          "file_path": "internal/config/config.go",
          "name": "Default",
          "score": 0.03079839,
          "start_line": 61,
          "end_line": 94
        },
        {
          "file_path": "internal/ingest/walker.go",
          "name": "WalkFiles",
          "score": 0.028850146,
          "start_line": 15,
          "end_line": 59
        },
        {
          "file_path": "internal/config/config.go",
          "name": "buildIndexes",
          "score": 0.026846848,
          "start_line": 131,
          "end_line": 146
        },
        {
          "file_path": "internal/config/config.go",
          "name": "ShouldSkipDir",
          "score": 0.015625,
          "start_line": 113,
          "end_line": 117
        },
        {
          "file_path": "cmd/ragcodepilot/main.go",
          "name": "runIndex",
          "score": 0.015384615,
          "start_line": 336,
          "end_line": 375
        },
        {
          "file_path": "internal/eval/dataset.go",
          "name": "Filters",
          "score": 0.015384615,
          "start_line": 26,
          "end_line": 30
        }
      ]
    }
  ]
}
