{
  "metric": "M2 — связность соизменённых файлов (нижняя граница пользы графа)",
  "method": "обход графа в оба направления от главного изменённого символа",
  "rev": "rev-0025",
  "depth": 3,
  "commits_analyzed": 8,
  "recall_mean": 0.9167,
  "recall_median": 1.0,
  "precision_mean": 0.0197,
  "baseline_naive_recall_mean": 0.0,
  "cases_full_recall": 6,
  "cases_zero_recall": 0,
  "reference_orient": "Измеренный потолок в литературе: precision 69% / recall 79% / F1 55% (LCIP, arXiv:1512.07435, Java, симуляция мутациями). Наш случай иной (PHP, реальные правки, измеряется связность, а не полное предсказание) — сравнение только как порядок величины.",
  "generated_at": "2026-10-05T03:05:22+03:00",
  "cases": [
    {
      "commit": "7748931a37",
      "date": "2026-09-29T20:43:39+03:00",
      "files_changed": 7,
      "primary_file": "src/Skills/SkillSelector.php",
      "primary_symbol": "App\\Skills\\SkillSelector::__construct",
      "others": [
        "index.php",
        "src/Http/Controllers/SkillDocsController.php",
        "src/Http/Controllers/SkillDraftsController.php",
        "src/Pipeline/PipelineEngine.php",
        "src/Skills/SkillAutoCreator.php",
        "src/Skills/SkillDoc.php"
      ],
      "reachable": [
        "index.php",
        "src/Http/Controllers/SkillDocsController.php",
        "src/Http/Controllers/SkillDraftsController.php",
        "src/Pipeline/PipelineEngine.php",
        "src/Skills/SkillAutoCreator.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 0.8333,
      "graph_precision": 0.0238
    },
    {
      "commit": "def6c088d2",
      "date": "2026-09-29T18:06:21+03:00",
      "files_changed": 3,
      "primary_file": "src/Http/Controllers/SkillDocsController.php",
      "primary_symbol": "App\\Http\\Controllers\\SkillDocsController::document",
      "others": [
        "src/Skills/ConsensusSkillCatalog.php",
        "src/Skills/SkillDoc.php"
      ],
      "reachable": [
        "src/Skills/ConsensusSkillCatalog.php",
        "src/Skills/SkillDoc.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.0119
    },
    {
      "commit": "1abc777a2e",
      "date": "2026-09-29T17:51:50+03:00",
      "files_changed": 2,
      "primary_file": "src/Skills/SkillDoc.php",
      "primary_symbol": "App\\Skills\\SkillDoc::markdown",
      "others": [
        "src/Skills/ConsensusSkillCatalog.php"
      ],
      "reachable": [
        "src/Skills/ConsensusSkillCatalog.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.011
    },
    {
      "commit": "692c848e4e",
      "date": "2026-09-29T15:44:03+03:00",
      "files_changed": 5,
      "primary_file": "src/Skills/SkillDoc.php",
      "primary_symbol": "App\\Skills\\SkillDoc::markdown",
      "others": [
        "index.php",
        "src/Api/ApiAuth.php",
        "src/Http/Controllers/DocumentShareController.php",
        "src/Http/Controllers/SkillDocsController.php"
      ],
      "reachable": [
        "index.php",
        "src/Api/ApiAuth.php",
        "src/Http/Controllers/DocumentShareController.php",
        "src/Http/Controllers/SkillDocsController.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.0275
    },
    {
      "commit": "4d9849e63d",
      "date": "2026-09-29T15:23:00+03:00",
      "files_changed": 2,
      "primary_file": "src/Settings/DatabaseDsn.php",
      "primary_symbol": "App\\Settings\\DatabaseDsn::mergeForm",
      "others": [
        "src/Http/Controllers/SettingsController.php"
      ],
      "reachable": [
        "src/Http/Controllers/SettingsController.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.0085
    },
    {
      "commit": "07acf1d320",
      "date": "2026-09-29T04:30:29+03:00",
      "files_changed": 3,
      "primary_file": "src/Http/Controllers/ResearchController.php",
      "primary_symbol": "App\\Http\\Controllers\\ResearchController::search",
      "others": [
        "config.php",
        "src/Research/ResearchJournal.php"
      ],
      "reachable": [
        "src/Research/ResearchJournal.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 0.5,
      "graph_precision": 0.01
    },
    {
      "commit": "ccda94c6cb",
      "date": "2026-09-29T04:21:11+03:00",
      "files_changed": 3,
      "primary_file": "src/History/HistoryService.php",
      "primary_symbol": "App\\History\\HistoryService::__construct",
      "others": [
        "src/Jobs/JobService.php",
        "src/Pipeline/PipelineEngine.php"
      ],
      "reachable": [
        "src/Jobs/JobService.php",
        "src/Pipeline/PipelineEngine.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.0349
    },
    {
      "commit": "7f0eb8ed51",
      "date": "2026-09-29T03:57:22+03:00",
      "files_changed": 5,
      "primary_file": "src/Jobs/JobService.php",
      "primary_symbol": "App\\Jobs\\JobService::__construct",
      "others": [
        "src/Http/Controllers/CouncilController.php",
        "src/Jobs/PipelineJobRunner.php",
        "src/Pipeline/PipelineEngine.php",
        "src/Pipeline/QueryAttachments.php"
      ],
      "reachable": [
        "src/Http/Controllers/CouncilController.php",
        "src/Jobs/PipelineJobRunner.php",
        "src/Pipeline/PipelineEngine.php",
        "src/Pipeline/QueryAttachments.php"
      ],
      "naive_recall": 0.0,
      "graph_recall": 1.0,
      "graph_precision": 0.0298
    }
  ]
}
