Web interface

CANARY Web Console

A lightweight web UI for scoring Jenkins plugins and exploring ML-based advisory risk.

Plugin scoring

Score a plugin

Review the CANARY score, rationale, and supporting evidence.

Core workflow
Resolved model: baseline_6m

AI explanation

Explain this score

Bring your own AI

Copy the prompt below and paste it into Claude, ChatGPT, or any other AI assistant. You control what gets shared.

Show / edit raw prompt

"Explain now" uses the server API key (max 3/hr). "Open in" buttons use your own account with no limits. AI-generated explanations are provided for informational purposes only, may contain inaccuracies or omissions, and should not be relied upon as authoritative security guidance.

CANARY score

Advisory risk score

Select a model

Select an algorithm, feature set, and evaluation strategy on the left.

Honest track record

Where gradle ranked before each window

Activity-recency clocks + Contributor dynamics · Logistic Regression, embargoed rolling backtest: the rank this plugin held among every scored plugin at each forecast date, using only what was knowable then. Shaded months are the pre-registered holdout.

Recorded, not re-scored

Scored at 32 forecast dates; on average in the top 4.5% of plugins (top 1.6% across the holdout). An advisory followed within 180 days of 2 of those dates.

out-of-time holdout0255075100top 20%2023-052023-092024-012024-052024-092025-012025-052025-092025-122023-05 · rank 402 of 2053 · 80th percentile · score 0.633 advisory followed within 180 days2023-06 · rank 490 of 2053 · 76th percentile · score 0.628 advisory followed within 180 days2023-07 · rank 183 of 2053 · 91th percentile · score 0.680 no advisory within 180 days2023-08 · rank 144 of 2053 · 93th percentile · score 0.696 no advisory within 180 days2023-09 · rank 58 of 2053 · 97th percentile · score 0.761 no advisory within 180 days2023-10 · rank 52 of 2053 · 98th percentile · score 0.767 no advisory within 180 days2023-11 · rank 48 of 2053 · 98th percentile · score 0.778 no advisory within 180 days2023-12 · rank 46 of 2053 · 98th percentile · score 0.776 no advisory within 180 days2024-01 · rank 56 of 2053 · 97th percentile · score 0.752 no advisory within 180 days2024-02 · rank 76 of 2053 · 96th percentile · score 0.723 no advisory within 180 days2024-03 · rank 93 of 2053 · 96th percentile · score 0.704 no advisory within 180 days2024-04 · rank 98 of 2053 · 95th percentile · score 0.697 no advisory within 180 days2024-05 · rank 103 of 2053 · 95th percentile · score 0.685 no advisory within 180 days2024-06 · rank 90 of 2053 · 96th percentile · score 0.697 no advisory within 180 days2024-07 · rank 94 of 2053 · 95th percentile · score 0.689 no advisory within 180 days2024-08 · rank 99 of 2053 · 95th percentile · score 0.688 no advisory within 180 days2024-09 · rank 70 of 2053 · 97th percentile · score 0.714 no advisory within 180 days2024-10 · rank 68 of 2053 · 97th percentile · score 0.714 no advisory within 180 days2024-11 · rank 63 of 2053 · 97th percentile · score 0.726 no advisory within 180 days2024-12 · rank 78 of 2053 · 96th percentile · score 0.697 no advisory within 180 days2025-01 · rank 105 of 2053 · 95th percentile · score 0.667 no advisory within 180 days2025-02 · rank 58 of 2053 · 97th percentile · score 0.688 no advisory within 180 days2025-03 · rank 86 of 2053 · 96th percentile · score 0.661 no advisory within 180 days2025-04 · rank 80 of 2053 · 96th percentile · score 0.661 no advisory within 180 days2025-05 · rank 30 of 2053 · 99th percentile · score 0.726 no advisory within 180 days2025-06 · rank 36 of 2053 · 98th percentile · score 0.708 no advisory within 180 days2025-07 · rank 29 of 2053 · 99th percentile · score 0.718 no advisory within 180 days2025-08 · rank 41 of 2053 · 98th percentile · score 0.699 no advisory within 180 days2025-09 · rank 43 of 2053 · 98th percentile · score 0.689 no advisory within 180 days2025-10 · rank 47 of 2053 · 98th percentile · score 0.686 no advisory within 180 days2025-11 · rank 31 of 2053 · 99th percentile · score 0.697 no advisory within 180 days2025-12 · rank 17 of 2053 · 99th percentile · score 0.741 no advisory within 180 daysadvisory followed within 180 daysno advisory in window
Holdout monthScoreRankShare of panelWhat followed
2025-0771.8%29 of 2,053top 1.4%none within 180 days
2025-0869.9%41 of 2,053top 1.9%none within 180 days
2025-0968.9%43 of 2,053top 2.0%none within 180 days
2025-1068.6%47 of 2,053top 2.2%none within 180 days
2025-1169.7%31 of 2,053top 1.5%none within 180 days
2025-1274.1%17 of 2,053top 0.78%none within 180 days

Risk context

Supporting signals

Maintenance history, governance, and dependency risk indicators for this plugin.

Key risk signals

  • 1 prior advisory record(s) — history +2, recency +0 (0 within 90d, 0 within 365 days); component total +2 (cap 30).
  • No advisory activity in the last 365 days — historical record only.
  • Advisory severity (max CVSS 4.3 — Medium): +3 (cap 15).
  • Latest release: 2026-08-05.
  • Requires Jenkins core 2.528.1.
  • Last commit: September 10, 2026 — live data from GitHub.
  • Recent release activity supports active maintenance.
  • 1 historical security warning(s) — none currently active.
  • No SECURITY.md — vulnerability reporting process undocumented (+3).
  • No Dependabot or GitHub Actions detected — limited automated maintenance (+3).
  • No changelog detected — release transparency limited (+2).
  • Dependency risk: 6 of 12 dep(s) have advisories; worst: git (CVSS 7.5).
  • Plugin health score 96/100 — acceptable maintenance posture.
Feature details (34 keys)
{
  "advisory_count": 1,
  "latest_advisory_date": "2023-07-26",
  "days_since_latest_advisory": 1156,
  "advisory_within_90d": 0,
  "advisory_within_365d": 0,
  "had_advisory_within_365d": false,
  "max_cvss_base_score_observed": 4.3,
  "max_cvss_severity_label_observed": "Medium",
  "swh_present": true,
  "swh_days_since_last_commit": 4.8,
  "swh_commit_count": 16752,
  "swh_has_security_md": false,
  "swh_has_dependabot": false,
  "swh_has_github_actions": false,
  "swh_has_tests_directory": true,
  "swh_has_changelog": false,
  "swh_security_fix_commit_count": 480,
  "has_plugin_snapshot": true,
  "required_core": "2.528.1",
  "dependency_count": 12,
  "security_warning_count": 1,
  "active_security_warning_count": 0,
  "release_timestamp": "2026-08-05T21:27:32+00:00",
  "days_since_release": 49,
  "dependency_plugins": [
    "apache-httpcomponents-client-4-api",
    "commons-lang3-api",
    "credentials",
    "git",
    "jackson2-api",
    "maven-plugin",
    "okhttp-api",
    "plain-credentials",
    "structs",
    "workflow-api",
    "workflow-job",
    "workflow-step-api"
  ],
  "dependency_total": 12,
  "dependency_risk_points": 40,
  "dependency_risk_summary": {
    "deps_with_any_advisory": 6,
    "deps_with_recent_advisory_365d": 0,
    "deps_with_active_warning": 0,
    "worst_dep_max_cvss": 7.5,
    "worst_dep_id": "git",
    "worst_dep_latest_advisory_date": "2022-08-23"
  },
  "dependency_missing_data": {
    "snapshot_missing": 0,
    "advisories_missing": 0,
    "healthscore_missing": 0
  },
  "dependency_details_top": [
    {
      "plugin_id": "git",
      "advisory_count": 9,
      "latest_advisory_date": "2022-08-23",
      "recent_advisory_365d": false,
      "max_cvss": 7.5,
      "security_warning_count": 9,
      "active_security_warning_count": 0,
      "healthscore": 100,
      "risk_points": 14,
      "reasons": [
        "9 advisories (+10).",
        "Max CVSS 7.5 (+4)."
      ]
    },
    {
      "plugin_id": "credentials",
      "advisory_count": 4,
      "latest_advisory_date": "2024-10-02",
      "recent_advisory_365d": false,
      "max_cvss": 4.3,
      "security_warning_count": 4,
      "active_security_warning_count": 0,
      "healthscore": 100,
      "risk_points": 10,
      "reasons": [
        "4 advisories (+8).",
        "Max CVSS 4.3 (+2)."
      ]
    },
    {
      "plugin_id": "workflow-job",
      "advisory_count": 1,
      "latest_advisory_date": "2023-05-16",
      "recent_advisory_365d": false,
      "max_cvss": 7.5,
      "security_warning_count": 1,
      "active_security_warning_count": 0,
      "healthscore": 100,
      "risk_points": 6,
      "reasons": [
        "1 advisories (+2).",
        "Max CVSS 7.5 (+4)."
      ]
    },
    {
      "plugin_id": "maven-plugin",
      "advisory_count": 2,
      "latest_advisory_date": "2019-07-31",
      "recent_advisory_365d": false,
      "max_cvss": 5.3,
      "security_warning_count": 2,
      "active_security_warning_count": 0,
      "healthscore": 100,
      "risk_points": 6,
      "reasons": [
        "2 advisories (+4).",
        "Max CVSS 5.3 (+2)."
      ]
    },
    {
      "plugin_id": "plain-credentials",
      "advisory_count": 1,
      "latest_advisory_date": "2024-06-26",
      "recent_advisory_365d": false,
      "max_cvss": 4.3,
      "security_warning_count": 1,
      "active_security_warning_count": 0,
      "healthscore": 96,
      "risk_points": 4,
      "reasons": [
        "1 advisories (+2).",
        "Max CVSS 4.3 (+2)."
      ]
    }
  ],
  "healthscore_value": 96,
  "healthscore_date": "2026-02-23T14:30:52.494972Z",
  "healthscore_collected_at": "2026-02-28T16:43:20+00:00",
  "score_components": {
    "advisory_history": 2,
    "advisory_severity": 3,
    "staleness": 0,
    "active_warnings": 0,
    "governance": 8,
    "dependency": 5,
    "health_score": 0,
    "security_sensitivity": 0
  }
}
JSON payload
{
  "plugin": "gradle",
  "score": 18,
  "reasons": [
    "1 prior advisory record(s) — history +2, recency +0 (0 within 90d, 0 within 365 days); component total +2 (cap 30).",
    "No advisory activity in the last 365 days — historical record only.",
    "Advisory severity (max CVSS 4.3 — Medium): +3 (cap 15).",
    "Latest release: 2026-08-05.",
    "Requires Jenkins core 2.528.1.",
    "Recent commit activity (4 days ago) suggests active maintenance.",
    "Recent release activity supports active maintenance.",
    "1 historical security warning(s) — none currently active.",
    "No SECURITY.md — vulnerability reporting process undocumented (+3).",
    "No Dependabot or GitHub Actions detected — limited automated maintenance (+3).",
    "No changelog detected — release transparency limited (+2).",
    "Dependency risk: 6 of 12 dep(s) have advisories; worst: git (CVSS 7.5).",
    "Plugin health score 96/100 — acceptable maintenance posture."
  ],
  "features": {
    "advisory_count": 1,
    "latest_advisory_date": "2023-07-26",
    "days_since_latest_advisory": 1156,
    "advisory_within_90d": 0,
    "advisory_within_365d": 0,
    "had_advisory_within_365d": false,
    "max_cvss_base_score_observed": 4.3,
    "max_cvss_severity_label_observed": "Medium",
    "swh_present": true,
    "swh_days_since_last_commit": 4.8,
    "swh_commit_count": 16752,
    "swh_has_security_md": false,
    "swh_has_dependabot": false,
    "swh_has_github_actions": false,
    "swh_has_tests_directory": true,
    "swh_has_changelog": false,
    "swh_security_fix_commit_count": 480,
    "has_plugin_snapshot": true,
    "required_core": "2.528.1",
    "dependency_count": 12,
    "security_warning_count": 1,
    "active_security_warning_count": 0,
    "release_timestamp": "2026-08-05T21:27:32+00:00",
    "days_since_release": 49,
    "dependency_plugins": [
      "apache-httpcomponents-client-4-api",
      "commons-lang3-api",
      "credentials",
      "git",
      "jackson2-api",
      "maven-plugin",
      "okhttp-api",
      "plain-credentials",
      "structs",
      "workflow-api",
      "workflow-job",
      "workflow-step-api"
    ],
    "dependency_total": 12,
    "dependency_risk_points": 40,
    "dependency_risk_summary": {
      "deps_with_any_advisory": 6,
      "deps_with_recent_advisory_365d": 0,
      "deps_with_active_warning": 0,
      "worst_dep_max_cvss": 7.5,
      "worst_dep_id": "git",
      "worst_dep_latest_advisory_date": "2022-08-23"
    },
    "dependency_missing_data": {
      "snapshot_missing": 0,
      "advisories_missing": 0,
      "healthscore_missing": 0
    },
    "dependency_details_top": [
      {
        "plugin_id": "git",
        "advisory_count": 9,
        "latest_advisory_date": "2022-08-23",
        "recent_advisory_365d": false,
        "max_cvss": 7.5,
        "security_warning_count": 9,
        "active_security_warning_count": 0,
        "healthscore": 100,
        "risk_points": 14,
        "reasons": [
          "9 advisories (+10).",
          "Max CVSS 7.5 (+4)."
        ]
      },
      {
        "plugin_id": "credentials",
        "advisory_count": 4,
        "latest_advisory_date": "2024-10-02",
        "recent_advisory_365d": false,
        "max_cvss": 4.3,
        "security_warning_count": 4,
        "active_security_warning_count": 0,
        "healthscore": 100,
        "risk_points": 10,
        "reasons": [
          "4 advisories (+8).",
          "Max CVSS 4.3 (+2)."
        ]
      },
      {
        "plugin_id": "workflow-job",
        "advisory_count": 1,
        "latest_advisory_date": "2023-05-16",
        "recent_advisory_365d": false,
        "max_cvss": 7.5,
        "security_warning_count": 1,
        "active_security_warning_count": 0,
        "healthscore": 100,
        "risk_points": 6,
        "reasons": [
          "1 advisories (+2).",
          "Max CVSS 7.5 (+4)."
        ]
      },
      {
        "plugin_id": "maven-plugin",
        "advisory_count": 2,
        "latest_advisory_date": "2019-07-31",
        "recent_advisory_365d": false,
        "max_cvss": 5.3,
        "security_warning_count": 2,
        "active_security_warning_count": 0,
        "healthscore": 100,
        "risk_points": 6,
        "reasons": [
          "2 advisories (+4).",
          "Max CVSS 5.3 (+2)."
        ]
      },
      {
        "plugin_id": "plain-credentials",
        "advisory_count": 1,
        "latest_advisory_date": "2024-06-26",
        "recent_advisory_365d": false,
        "max_cvss": 4.3,
        "security_warning_count": 1,
        "active_security_warning_count": 0,
        "healthscore": 96,
        "risk_points": 4,
        "reasons": [
          "1 advisories (+2).",
          "Max CVSS 4.3 (+2)."
        ]
      }
    ],
    "healthscore_value": 96,
    "healthscore_date": "2026-02-23T14:30:52.494972Z",
    "healthscore_collected_at": "2026-02-28T16:43:20+00:00",
    "score_components": {
      "advisory_history": 2,
      "advisory_severity": 3,
      "staleness": 0,
      "active_warnings": 0,
      "governance": 8,
      "dependency": 5,
      "health_score": 0,
      "security_sensitivity": 0
    }
  }
}