{
  "schemaVersion": "evergreen.dashboard-data.v1",
  "referenceDay": "2026-10-24",
  "corpus": {
    "file": "benchmarks/public-repositories.json",
    "repositories": 457
  },
  "sources": {
    "thresholds": "benchmarks/thresholds.json",
    "corpus": "benchmarks/public-repositories.json",
    "decision": "docs/decisions/0013-detector-maturity.md"
  },
  "run": {
    "date": "2026-10-24",
    "commit": "c7b4e14",
    "repositories": 456,
    "findings": 2201,
    "runAgeDays": 0,
    "recordedPrecision": 1,
    "recordedRecall": 1,
    "timing": {
      "medianScanMs": null,
      "p95ScanMs": null,
      "note": "not measured"
    }
  },
  "detectors": [
    {
      "id": "android",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 9,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 7,
        "expectedFindings": 9,
        "zeroFindingRepositories": 4,
        "repositories": 12,
        "blindRepositories": 8
      }
    },
    {
      "id": "ci-images",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 13,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 7,
        "expectedFindings": 13,
        "zeroFindingRepositories": 1,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "container",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 74,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 48,
        "expectedFindings": 105,
        "zeroFindingRepositories": 1,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "cpp",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 18,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 13,
        "expectedFindings": 18,
        "zeroFindingRepositories": 1,
        "repositories": 12,
        "blindRepositories": 8
      }
    },
    {
      "id": "dart",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 8,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 4,
        "expectedFindings": 8,
        "zeroFindingRepositories": 3,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "database",
      "level": "experimental",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 16,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 12,
        "expectedFindings": 17,
        "zeroFindingRepositories": 2,
        "repositories": 12,
        "blindRepositories": 8
      }
    },
    {
      "id": "dotnet",
      "level": "beta",
      "earnedLevel": "stable",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 304,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 20,
        "expectedFindings": 304,
        "zeroFindingRepositories": 9,
        "repositories": 18,
        "blindRepositories": 12
      }
    },
    {
      "id": "elixir",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": null,
      "evidence": {
        "repositoriesWithFindings": 0,
        "expectedFindings": 0,
        "zeroFindingRepositories": 0,
        "repositories": 0,
        "blindRepositories": 0
      }
    },
    {
      "id": "github-actions",
      "level": "stable",
      "earnedLevel": "stable",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 986,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 172,
        "expectedFindings": 986,
        "zeroFindingRepositories": 4,
        "repositories": 34,
        "blindRepositories": 23
      }
    },
    {
      "id": "go",
      "level": "experimental",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 54,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 21,
        "expectedFindings": 54,
        "zeroFindingRepositories": 3,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "java",
      "level": "beta",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 61,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 14,
        "expectedFindings": 61,
        "zeroFindingRepositories": 3,
        "repositories": 17,
        "blindRepositories": 12
      }
    },
    {
      "id": "kubernetes",
      "level": "beta",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 71,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 13,
        "expectedFindings": 73,
        "zeroFindingRepositories": 2,
        "repositories": 18,
        "blindRepositories": 12
      }
    },
    {
      "id": "nodejs",
      "level": "stable",
      "earnedLevel": "stable",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 305,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 73,
        "expectedFindings": 320,
        "zeroFindingRepositories": 18,
        "repositories": 78,
        "blindRepositories": 52
      }
    },
    {
      "id": "npm",
      "level": "stable",
      "earnedLevel": "stable",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 100,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 45,
        "expectedFindings": 100,
        "zeroFindingRepositories": 18,
        "repositories": 78,
        "blindRepositories": 52
      }
    },
    {
      "id": "php",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 5,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 4,
        "expectedFindings": 5,
        "zeroFindingRepositories": 7,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "python",
      "level": "stable",
      "earnedLevel": "stable",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 74,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 64,
        "expectedFindings": 74,
        "zeroFindingRepositories": 34,
        "repositories": 107,
        "blindRepositories": 90
      }
    },
    {
      "id": "ruby",
      "level": "experimental",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 24,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 14,
        "expectedFindings": 24,
        "zeroFindingRepositories": 3,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "rust",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 18,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 12,
        "expectedFindings": 18,
        "zeroFindingRepositories": 1,
        "repositories": 12,
        "blindRepositories": 7
      }
    },
    {
      "id": "scala",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": null,
      "evidence": {
        "repositoriesWithFindings": 1,
        "expectedFindings": 2,
        "zeroFindingRepositories": 0,
        "repositories": 0,
        "blindRepositories": 0
      }
    },
    {
      "id": "serverless",
      "level": "beta",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 26,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 14,
        "expectedFindings": 26,
        "zeroFindingRepositories": 3,
        "repositories": 19,
        "blindRepositories": 14
      }
    },
    {
      "id": "shell",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 12,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 5,
        "expectedFindings": 12,
        "zeroFindingRepositories": 2,
        "repositories": 12,
        "blindRepositories": 8
      }
    },
    {
      "id": "swift",
      "level": "beta",
      "earnedLevel": "beta",
      "precisionFloor": {
        "value": 0.95,
        "enforced": true
      },
      "run": {
        "truePositives": 16,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 11,
        "expectedFindings": 16,
        "zeroFindingRepositories": 5,
        "repositories": 22,
        "blindRepositories": 16
      }
    },
    {
      "id": "terraform",
      "level": "experimental",
      "earnedLevel": "experimental",
      "precisionFloor": {
        "value": 0.95,
        "enforced": false
      },
      "run": {
        "truePositives": 7,
        "falsePositives": 0,
        "falseNegatives": 0,
        "precision": 1,
        "recall": 1
      },
      "evidence": {
        "repositoriesWithFindings": 6,
        "expectedFindings": 8,
        "zeroFindingRepositories": 3,
        "repositories": 12,
        "blindRepositories": 7
      }
    }
  ],
  "evidenceMinimums": {
    "beta": {
      "repositoriesWithFindings": 8,
      "expectedFindings": 15,
      "zeroFindingRepositories": 2,
      "blindShare": 0.5
    },
    "stable": {
      "repositoriesWithFindings": 20,
      "expectedFindings": 60,
      "zeroFindingRepositories": 4,
      "blindShare": 0.6666666666666666
    }
  },
  "definitions": {
    "level": {
      "label": "Level",
      "meaning": "What the detector promises users: experimental, beta, or stable (shown in the docs as Supported).",
      "computation": "Copied from the detector's entry in benchmarks/thresholds.json. A maintainer changes it in a pull request; nothing computes it.",
      "source": "benchmarks/thresholds.json"
    },
    "earnedLevel": {
      "label": "Earned level",
      "meaning": "The highest level the counted corpus evidence supports.",
      "computation": "earnedLevel() in benchmarks/thresholds.ts applied to the three evidence counts below, against the minimums in ADR 0013. It does not check precision, recall, or blind selection.",
      "source": "docs/decisions/0013-detector-maturity.md"
    },
    "precisionFloor": {
      "label": "Precision floor",
      "meaning": "The lowest precision the corpus run may show for the detector before CI fails.",
      "computation": "minPrecision from the detector's entry in benchmarks/thresholds.json. It is enforced for beta and stable detectors and only reported for experimental ones.",
      "source": "benchmarks/thresholds.json"
    },
    "precision": {
      "label": "Precision",
      "meaning": "Of the findings the detector reported in the last full run, the share that the corpus lists as expected.",
      "computation": "truePositives / (truePositives + falsePositives), rounded to 4 decimals. Not measured when the denominator is zero. (The corpus harness treats an empty result as 1 so it never counts as a regression; the dashboard does not.)",
      "source": "benchmarks/thresholds.json"
    },
    "recall": {
      "label": "Recall",
      "meaning": "Of the findings the corpus lists as expected for the detector, the share it reported in the last full run.",
      "computation": "truePositives / (truePositives + falseNegatives), rounded to 4 decimals. Not measured when the denominator is zero.",
      "source": "benchmarks/thresholds.json"
    },
    "truePositives": {
      "label": "True positives",
      "meaning": "Findings the detector reported that the corpus lists as expected.",
      "computation": "perDetector.<detector>.truePositives in the lastFullRun record.",
      "source": "benchmarks/thresholds.json"
    },
    "falsePositives": {
      "label": "False positives",
      "meaning": "Findings the detector reported that the corpus does not list.",
      "computation": "perDetector.<detector>.falsePositives in the lastFullRun record.",
      "source": "benchmarks/thresholds.json"
    },
    "falseNegatives": {
      "label": "False negatives",
      "meaning": "Findings the corpus lists that the detector did not report.",
      "computation": "perDetector.<detector>.falseNegatives in the lastFullRun record.",
      "source": "benchmarks/thresholds.json"
    },
    "repositoriesWithFindings": {
      "label": "Repositories with findings",
      "meaning": "Corpus repositories with at least one expected finding of this detector.",
      "computation": "countEvidence() in benchmarks/thresholds.ts over the corpus entries' expected findings, grouped by the first segment of the rule id.",
      "source": "benchmarks/public-repositories.json"
    },
    "expectedFindings": {
      "label": "Expected findings",
      "meaning": "Findings of this detector that the corpus lists as expected.",
      "computation": "countEvidence() in benchmarks/thresholds.ts: the number of expected findings whose rule id belongs to the detector.",
      "source": "benchmarks/public-repositories.json"
    },
    "zeroFindingRepositories": {
      "label": "Zero-finding repositories",
      "meaning": "Corpus repositories of the detector's ecosystem that have no expected findings at all, so a report there would be a false positive.",
      "computation": "countEvidence() in benchmarks/thresholds.ts: entries of the detector's corpus ecosystems with an empty expected list. Detectors that read the same ecosystem share this count.",
      "source": "benchmarks/public-repositories.json"
    },
    "runAge": {
      "label": "Run age",
      "meaning": "How many days before the reference day the last full run happened.",
      "computation": "The whole days between lastFullRun.date and the reference day given to the build with --today. It is fixed when the file is built, never read from a clock.",
      "source": "benchmarks/thresholds.json"
    },
    "scanTime": {
      "label": "Scan time",
      "meaning": "Median and p95 time of a local scan.",
      "computation": "Not measured: the corpus harness prints these numbers but no committed file records them.",
      "source": "benchmarks/public-repositories.ts"
    }
  },
  "limitations": [
    "A precision of 1.0 means no regression against this corpus. The expected findings were written by reviewing the same commits, so it does not show that the detectors generalize to unseen repositories. See ADR 0013 and issue #740.",
    "Only the last full run is recorded, so there is no trend: the numbers describe one run on one commit.",
    "Scan time is not measured here. Median and p95 scan times are printed by the corpus harness but are not recorded in a committed file, so the dashboard does not show them.",
    "Evidence counts come from the corpus file as it is now, not as it was at the recorded run. The configured level is a promise recorded in benchmarks/thresholds.json; the earned level counts evidence only and does not check recall or blind selection, which the corpus does not record yet.",
    "A detector's configured level can be higher than its earned level: ADR 0013 lets the detectors that held the Supported label before the evidence rules existed keep it until the corpus grows."
  ]
}
