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 oic-auth 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.0% of plugins (top 0.80% across the holdout). An advisory followed within 180 days of 15 of those dates.

out-of-time holdout0255075100top 20%2023-052023-092024-012024-052024-092025-012025-052025-092025-122023-05 · rank 49 of 2053 · 98th percentile · score 0.766 no advisory within 180 days2023-06 · rank 50 of 2053 · 98th percentile · score 0.765 advisory followed within 180 days2023-07 · rank 51 of 2053 · 98th percentile · score 0.762 advisory followed within 180 days2023-08 · rank 59 of 2053 · 97th percentile · score 0.743 advisory followed within 180 days2023-09 · rank 67 of 2053 · 97th percentile · score 0.750 advisory followed within 180 days2023-10 · rank 137 of 2053 · 93th percentile · score 0.697 advisory followed within 180 days2023-11 · rank 282 of 2053 · 86th percentile · score 0.656 advisory followed within 180 days2023-12 · rank 282 of 2053 · 86th percentile · score 0.654 no advisory within 180 days2024-01 · rank 342 of 2053 · 83th percentile · score 0.635 no advisory within 180 days2024-02 · rank 357 of 2053 · 83th percentile · score 0.633 no advisory within 180 days2024-03 · rank 169 of 2053 · 92th percentile · score 0.671 no advisory within 180 days2024-04 · rank 100 of 2053 · 95th percentile · score 0.696 advisory followed within 180 days2024-05 · rank 79 of 2053 · 96th percentile · score 0.707 advisory followed within 180 days2024-06 · rank 94 of 2053 · 95th percentile · score 0.694 advisory followed within 180 days2024-07 · rank 97 of 2053 · 95th percentile · score 0.687 advisory followed within 180 days2024-08 · rank 93 of 2053 · 96th percentile · score 0.690 advisory followed within 180 days2024-09 · rank 61 of 2053 · 97th percentile · score 0.735 advisory followed within 180 days2024-10 · rank 22 of 2053 · 99th percentile · score 0.784 advisory followed within 180 days2024-11 · rank 18 of 2053 · 99th percentile · score 0.787 advisory followed within 180 days2024-12 · rank 15 of 2053 · 99th percentile · score 0.793 advisory followed within 180 days2025-01 · rank 16 of 2053 · 99th percentile · score 0.772 no advisory within 180 days2025-02 · rank 18 of 2053 · 99th percentile · score 0.766 no advisory within 180 days2025-03 · rank 15 of 2053 · 99th percentile · score 0.770 no advisory within 180 days2025-04 · rank 19 of 2053 · 99th percentile · score 0.748 no advisory within 180 days2025-05 · rank 29 of 2053 · 99th percentile · score 0.728 no advisory within 180 days2025-06 · rank 24 of 2053 · 99th percentile · score 0.747 no advisory within 180 days2025-07 · rank 24 of 2053 · 99th percentile · score 0.737 no advisory within 180 days2025-08 · rank 9 of 2053 · 100th percentile · score 0.785 no advisory within 180 days2025-09 · rank 14 of 2053 · 99th percentile · score 0.767 no advisory within 180 days2025-10 · rank 9 of 2053 · 100th percentile · score 0.770 no advisory within 180 days2025-11 · rank 20 of 2053 · 99th percentile · score 0.718 no advisory within 180 days2025-12 · rank 28 of 2053 · 99th percentile · score 0.706 no advisory within 180 daysadvisory followed within 180 daysno advisory in window
Holdout monthScoreRankShare of panelWhat followed
2025-0773.7%24 of 2,053top 1.1%none within 180 days
2025-0878.5%9 of 2,053top 0.39%none within 180 days
2025-0976.7%14 of 2,053top 0.63%none within 180 days
2025-1077.0%9 of 2,053top 0.39%none within 180 days
2025-1171.8%20 of 2,053top 0.93%none within 180 days
2025-1270.6%28 of 2,053top 1.3%none within 180 days

Risk context

Supporting signals

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

Key risk signals

  • 6 prior advisory record(s) — history +12, recency +0 (0 within 90d, 0 within 365 days); component total +12 (cap 30).
  • No advisory activity in the last 365 days — historical record only.
  • Advisory severity (max CVSS 8.8 — High): +15 (cap 15).
  • Latest release: 2026-07-30.
  • Requires Jenkins core 2.539.
  • Last commit: September 1, 2026 — live data from GitHub.
  • Recent release activity supports active maintenance.
  • 8 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).
  • Dependency risk: 1 of 7 dep(s) have advisories; worst: mailer (CVSS 4.8).
  • Plugin health score 100/100 — acceptable maintenance posture.
  • Plugin name suggests auth/security sensitivity (auth): +20 (cap 20).
Feature details (34 keys)
{
  "advisory_count": 6,
  "latest_advisory_date": "2025-01-22",
  "days_since_latest_advisory": 610,
  "advisory_within_90d": 0,
  "advisory_within_365d": 0,
  "had_advisory_within_365d": false,
  "max_cvss_base_score_observed": 8.8,
  "max_cvss_severity_label_observed": "High",
  "swh_present": true,
  "swh_days_since_last_commit": 2.3,
  "swh_commit_count": 8432,
  "swh_has_security_md": false,
  "swh_has_dependabot": false,
  "swh_has_github_actions": false,
  "swh_has_tests_directory": true,
  "swh_has_changelog": true,
  "swh_security_fix_commit_count": 56,
  "has_plugin_snapshot": true,
  "required_core": "2.539",
  "dependency_count": 7,
  "security_warning_count": 8,
  "active_security_warning_count": 0,
  "release_timestamp": "2026-07-30T08:06:20+00:00",
  "days_since_release": 56,
  "dependency_plugins": [
    "asm-api",
    "commons-lang3-api",
    "commons-text-api",
    "jackson2-api",
    "json-path-api",
    "mailer",
    "nimbus-jose-jwt-api"
  ],
  "dependency_total": 7,
  "dependency_risk_points": 10,
  "dependency_risk_summary": {
    "deps_with_any_advisory": 1,
    "deps_with_recent_advisory_365d": 0,
    "deps_with_active_warning": 0,
    "worst_dep_max_cvss": 4.8,
    "worst_dep_id": "mailer",
    "worst_dep_latest_advisory_date": "2022-01-12"
  },
  "dependency_missing_data": {
    "snapshot_missing": 1,
    "advisories_missing": 1,
    "healthscore_missing": 1
  },
  "dependency_details_top": [
    {
      "plugin_id": "mailer",
      "advisory_count": 4,
      "latest_advisory_date": "2022-01-12",
      "recent_advisory_365d": false,
      "max_cvss": 4.8,
      "security_warning_count": 4,
      "active_security_warning_count": 0,
      "healthscore": 100,
      "risk_points": 10,
      "reasons": [
        "4 advisories (+8).",
        "Max CVSS 4.8 (+2)."
      ]
    }
  ],
  "healthscore_value": 100,
  "healthscore_date": "2026-02-24T10:30:27.095608Z",
  "healthscore_collected_at": "2026-02-28T16:43:20+00:00",
  "score_components": {
    "advisory_history": 12,
    "advisory_severity": 15,
    "staleness": 0,
    "active_warnings": 0,
    "governance": 6,
    "dependency": 2,
    "health_score": 0,
    "security_sensitivity": 20
  }
}
JSON payload
{
  "plugin": "oic-auth",
  "score": 55,
  "reasons": [
    "6 prior advisory record(s) — history +12, recency +0 (0 within 90d, 0 within 365 days); component total +12 (cap 30).",
    "No advisory activity in the last 365 days — historical record only.",
    "Advisory severity (max CVSS 8.8 — High): +15 (cap 15).",
    "Latest release: 2026-07-30.",
    "Requires Jenkins core 2.539.",
    "Recent commit activity (2 days ago) suggests active maintenance.",
    "Recent release activity supports active maintenance.",
    "8 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).",
    "Dependency risk: 1 of 7 dep(s) have advisories; worst: mailer (CVSS 4.8).",
    "Plugin health score 100/100 — acceptable maintenance posture.",
    "Plugin name suggests auth/security sensitivity (auth): +20 (cap 20)."
  ],
  "features": {
    "advisory_count": 6,
    "latest_advisory_date": "2025-01-22",
    "days_since_latest_advisory": 610,
    "advisory_within_90d": 0,
    "advisory_within_365d": 0,
    "had_advisory_within_365d": false,
    "max_cvss_base_score_observed": 8.8,
    "max_cvss_severity_label_observed": "High",
    "swh_present": true,
    "swh_days_since_last_commit": 2.3,
    "swh_commit_count": 8432,
    "swh_has_security_md": false,
    "swh_has_dependabot": false,
    "swh_has_github_actions": false,
    "swh_has_tests_directory": true,
    "swh_has_changelog": true,
    "swh_security_fix_commit_count": 56,
    "has_plugin_snapshot": true,
    "required_core": "2.539",
    "dependency_count": 7,
    "security_warning_count": 8,
    "active_security_warning_count": 0,
    "release_timestamp": "2026-07-30T08:06:20+00:00",
    "days_since_release": 56,
    "dependency_plugins": [
      "asm-api",
      "commons-lang3-api",
      "commons-text-api",
      "jackson2-api",
      "json-path-api",
      "mailer",
      "nimbus-jose-jwt-api"
    ],
    "dependency_total": 7,
    "dependency_risk_points": 10,
    "dependency_risk_summary": {
      "deps_with_any_advisory": 1,
      "deps_with_recent_advisory_365d": 0,
      "deps_with_active_warning": 0,
      "worst_dep_max_cvss": 4.8,
      "worst_dep_id": "mailer",
      "worst_dep_latest_advisory_date": "2022-01-12"
    },
    "dependency_missing_data": {
      "snapshot_missing": 1,
      "advisories_missing": 1,
      "healthscore_missing": 1
    },
    "dependency_details_top": [
      {
        "plugin_id": "mailer",
        "advisory_count": 4,
        "latest_advisory_date": "2022-01-12",
        "recent_advisory_365d": false,
        "max_cvss": 4.8,
        "security_warning_count": 4,
        "active_security_warning_count": 0,
        "healthscore": 100,
        "risk_points": 10,
        "reasons": [
          "4 advisories (+8).",
          "Max CVSS 4.8 (+2)."
        ]
      }
    ],
    "healthscore_value": 100,
    "healthscore_date": "2026-02-24T10:30:27.095608Z",
    "healthscore_collected_at": "2026-02-28T16:43:20+00:00",
    "score_components": {
      "advisory_history": 12,
      "advisory_severity": 15,
      "staleness": 0,
      "active_warnings": 0,
      "governance": 6,
      "dependency": 2,
      "health_score": 0,
      "security_sensitivity": 20
    }
  }
}