Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-27 01:18 UTC

nutanix-cloud-native / cluster-api

Home for Cluster API, a subproject of sig-cluster-lifecycle

GoApache-2.0★ 0 stars⑂ 0 forkssince Nov 2025forkView on GitHub ↗

nutanix-cloud-native/cluster-api holds a health index of 55 out of 100, placing it in the Moderate band. It scores highest on Sustainability & Governance (80/100) and lowest on Community & Adoption (12/100). It was last updated 159 days ago. 2 contributors account for most of its recent work.

55
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

55
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

94 followers71 public repossince Dec 2021

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gosigs.k8s.io/cluster-apiv1.13.4-26812 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

56Moderate · 22% of overall
How it's scored
9.9/36Push recency — last push 159 days ago
12.5/36Commit cadence — 18/52 weeks with commits
18/18Commit volume — 510 commits in the last year
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Inputs used
commits_last_year510
human_commit_share0.99
days_since_last_push159
active_weeks_last_year18
How it's scored
27/27Ships releases — 4 releases published
27/36Release recency — latest release 159 days ago
27/27Release cadence — a release every ~34.1 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count4
latest_release_tagv1.10.10-ncn.3
releases_from_tagsno
days_since_latest_release159
mean_days_between_releases34.1

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

12Critical · 18% of overall
How it's scored
0/60Stars — 0 stars
0/25Forks — 0 forks
0/15Watchers — 0 watchers
Inputs used
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
0/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

80Good · 24% of overall
How it's scored
25.2/54Bus factor — 2 contributor(s) cover half of all commits
11.6/22.5Commit distribution — top contributor authored 48% of commits
13.5/13.5Contributor breadth — 99 contributors
10/10OpenSSF Scorecard: Contributors — project has 48 contributing companies or organizations
Inputs used
bus_factor2
contributors_sampled99
top_contributor_share0.485
How it's scored
0/46.8Issue resolution — no issues or no data
38.2/38.3PR acceptance — 22/22 decided PRs merged
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Inputs used
merged_prs22
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
14.2/25Owner reach — 94 followers of nutanix-cloud-native
22.3/25Track record — 71 public repos, account ~4 yr old
Inputs used
followers94
owner_typeOrganization
is_verified
owner_loginnutanix-cloud-native
public_repos71
account_age_days1,698
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 12 days ago
20/20Version history — 268 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagessigs.k8s.io/cluster-api
ecosystemsgo
any_deprecatedno
min_days_since_publish12

Engineering Quality

Are baseline engineering and documentation practices in place?

70Good · 20% of overall
How it's scored
24/24CI workflows — 9 workflow(s)
24/24Tests present
16/16Linter config — .golangci.yml
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 16 out of 16 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

50Moderate
How it's scored
0/30README
25/25Documentation directory
15/15Documentation / homepage site — https://cluster-api.sigs.k8s.io
0/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepagehttps://cluster-api.sigs.k8s.io
has_readmeno
has_docs_diryes
has_descriptionno

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

46At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 16 out of 16 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 48 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — no data
2/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 53 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.6
Excluded from scoring (no data or not applicable): packaging. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

65Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
36.6/40Legible commit history — 68 of 99 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.687
agent_instruction_files
agent_instruction_max_bytes
How it's scored
18/18One-command bootstrap — Makefile, docs/book/Makefile
22/22Automated tests
11/11Lint / format config — .golangci.yml
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — Dockerfile, lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 1 of the last 100 commits are automated dependency updates
4/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
Inputs used
has_nixno
has_testsyes
lockfilesgo.sum
has_dockerfileyes
typed_languageyes
bootstrap_filesMakefile, docs/book/Makefile
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod, hack/tools/go.mod, test/go.mod
dependency_bot_commit_share0.01
How it's scored
45/45Type-checkable code — Go (statically typed)
53/55Manageable file sizes — 52/1,431 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes368,556
source_files_sampled1,431
oversized_source_files52
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

0GitHub stars
99contributors
510commits, last 12 months
159days since last push
4releases
2bus factor
0open issues
Gopackage ecosystems

Data collection warnings

  • Community profile unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

OpenSSF Scorecard 4.6 / 10
4.6aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-27 01:17 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests16 out of 16 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 48 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/aPackagingpackaging workflow not detected
4Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 4
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities53 existing vulnerabilities detected
Direct dependencies 47
RegistryPackageVersion constraintManifest
Gogithub.com/MakeNowJust/heredocv1.0.0go.mod
Gogithub.com/Masterminds/sprig/v3v3.3.0go.mod
Gogithub.com/adrg/xdgv0.5.3go.mod
Gogithub.com/blang/semver/v4v4.0.0go.mod
Gogithub.com/coredns/corefile-migrationv1.0.29go.mod
Gogithub.com/davecgh/go-spewv1.1.2-0.20180830191138-d8f796af33ccgo.mod
Gogithub.com/distribution/referencev0.6.0go.mod
Gogithub.com/drone/envsubst/v2v2.0.0-20210730161058-179042472c46go.mod
Gogithub.com/evanphx/json-patch/v5v5.9.11go.mod
Gogithub.com/fatih/colorv1.18.0go.mod
Gogithub.com/flatcar/container-linux-config-transpilerv0.9.4go.mod
Gogithub.com/flatcar/ignitionv0.36.2go.mod
Gogithub.com/go-logr/logrv1.4.3go.mod
Gogithub.com/gobuffalo/flectv1.0.3go.mod
Gogithub.com/google/cel-gov0.26.0go.mod
Gogithub.com/google/go-cmpv0.7.0go.mod
Gogithub.com/google/go-github/v53v53.2.0go.mod
Gogithub.com/olekukonko/tablewriterv1.0.9go.mod
Gogithub.com/onsi/ginkgo/v2v2.27.2go.mod
Gogithub.com/onsi/gomegav1.38.2go.mod
Gogithub.com/pkg/errorsv0.9.1go.mod
Gogithub.com/prometheus/client_golangv1.22.0go.mod
Gogithub.com/spf13/cobrav1.10.1go.mod
Gogithub.com/spf13/pflagv1.0.10go.mod
Gogithub.com/spf13/viperv1.21.0go.mod
Gogithub.com/valyala/fastjsonv1.6.4go.mod
Gogo.etcd.io/etcd/api/v3v3.6.5go.mod
Gogo.etcd.io/etcd/client/pkg/v3v3.6.5go.mod
Gogo.etcd.io/etcd/client/v3v3.6.5go.mod
Gogo.uber.org/zapv1.27.0go.mod
Gogolang.org/x/oauth2v0.32.0go.mod
Gogolang.org/x/textv0.30.0go.mod
Gogomodules.xyz/jsonpatch/v2v2.5.0go.mod
Gogoogle.golang.org/grpcv1.72.3go.mod
Gok8s.io/apiv0.34.1go.mod
Gok8s.io/apiextensions-apiserverv0.34.1go.mod
Gok8s.io/apimachineryv0.34.1go.mod
Gok8s.io/apiserverv0.34.1go.mod
Gok8s.io/client-gov0.34.1go.mod
Gok8s.io/cluster-bootstrapv0.34.1go.mod
Gok8s.io/component-basev0.34.1go.mod
Gok8s.io/klog/v2v2.130.1go.mod
Gok8s.io/kube-openapiv0.0.0-20250710124328-f3f2b991d03bgo.mod
Gok8s.io/utilsv0.0.0-20250604170112-4c0f3b243397go.mod
Gosigs.k8s.io/controller-runtimev0.22.4go.mod
Gosigs.k8s.io/randfillv1.0.0go.mod
Gosigs.k8s.io/yamlv1.6.0go.mod
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": true,
      "size_kb": 228187,
      "has_wiki": true,
      "homepage": "https://cluster-api.sigs.k8s.io",
      "languages": {
        "Go": 15392035,
        "Shell": 76495,
        "Python": 49287,
        "Makefile": 79038,
        "Dockerfile": 10244,
        "Go Template": 146
      },
      "pushed_at": "2026-02-17T21:54:18Z",
      "created_at": "2025-11-05T23:14:55Z",
      "owner_type": "Organization",
      "updated_at": "2026-02-17T21:54:00Z",
      "description": "Home for Cluster API, a subproject of sig-cluster-lifecycle",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://www.nutanix.com",
      "name": "Nutanix Cloud Native",
      "type": "Organization",
      "login": "nutanix-cloud-native",
      "company": null,
      "location": "United States of America",
      "followers": 94,
      "avatar_url": "https://avatars.githubusercontent.com/u/95383139?v=4",
      "created_at": "2021-12-01T20:57:25Z",
      "is_verified": null,
      "public_repos": 71,
      "account_age_days": 1698
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.10.10-ncn.3",
          "kind": "prerelease",
          "published_at": "2026-02-17T22:21:25Z"
        },
        {
          "tag": "v1.10.7-ncn.5",
          "kind": "prerelease",
          "published_at": "2025-12-02T03:03:57Z"
        },
        {
          "tag": "v1.10.7-ncn.2",
          "kind": "prerelease",
          "published_at": "2025-11-26T20:09:52Z"
        },
        {
          "tag": "v1.10.7-ncn.1",
          "kind": "prerelease",
          "published_at": "2025-11-07T18:06:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "83c8daeed4d94f0ebfd430f7dce4e892c234225f",
          "body": null,
          "is_bot": false,
          "headline": "🚀 release v1.10.10-ncn.3 (#22)",
          "author_name": "Dimitri Koshkin",
          "author_login": "dkoshkin",
          "committed_at": "2026-02-17T21:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f1ff70e8c236d886a21896b5686b494228a1fc7",
          "body": null,
          "is_bot": false,
          "headline": "🚀 release v1.10.10-ncn.2 (#21)",
          "author_name": "Dimitri Koshkin",
          "author_login": "dkoshkin",
          "committed_at": "2026-02-17T20:34:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9679b4511c09b1d83b9440296c1ed6ba810fc9ab",
          "body": "…10.10-ncn.1\n\n:rocket: release v1.10.10-ncn.1",
          "is_bot": false,
          "headline": "Merge pull request #20 from nutanix-cloud-native/dkoshkin/release-v1.…",
          "author_name": "Dimitri Koshkin",
          "author_login": "dkoshkin",
          "committed_at": "2026-02-17T18:47:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "544ee5332bb8b84abeaccdb88553ede927165a3a",
          "body": ":rocket: release v1.10.7-ncn.5",
          "is_bot": false,
          "headline": "Merge pull request #19 from nutanix-cloud-native/faiq/login-ghcr",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T22:40:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e90d7eac703311c057da58d18000b1c1e1d0ce42",
          "body": null,
          "is_bot": false,
          "headline": ":rocket: Release v1.10.7-ncn.5",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T22:27:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55f04b727b82d7e1233b0ba04a095de7aa6e7ee3",
          "body": null,
          "is_bot": false,
          "headline": "fix: log in to ghcr to do release",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T22:25:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69c5b02b027fa653331bb039940abdeae3023271",
          "body": ":bug: fix: allows us to push packages from GHA",
          "is_bot": false,
          "headline": "Merge pull request #18 from nutanix-cloud-native/faiq/update-permissions",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T20:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2d8cc49dc1957842608e4281972d873e21771f0",
          "body": null,
          "is_bot": false,
          "headline": "fix: allows us to push packages from GHA",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T20:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fdb2a99163e933ea901ef491e411655d934a954",
          "body": "…ease-fix\n\n:rocket: Release v1.10.7-ncn.4",
          "is_bot": false,
          "headline": "Merge pull request #17 from nutanix-cloud-native/faiq/release-the-rel…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T19:38:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31f8de7b058fa20ef81077d0297a55b02d7a2910",
          "body": null,
          "is_bot": false,
          "headline": ":rocket: Release v1.10.7-ncn.4",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T19:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7de0c771df2a0ffa4449d0d63fcf495f57be94df",
          "body": ":bug: fix: try to fix release process again",
          "is_bot": false,
          "headline": "Merge pull request #16 from nutanix-cloud-native/faiq/fix-release-again",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T19:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc1498bb79f0e7b0615e3e757e65154a5f8433d4",
          "body": null,
          "is_bot": false,
          "headline": "fix: try to fix release process again",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T19:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7df40bcf1ea86b177779b5041ac5659c89f1ccda",
          "body": ":rocket: Release v1.10.7-ncn.3",
          "is_bot": false,
          "headline": "Merge pull request #15 from nutanix-cloud-native/faiq/release-110ncn3",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T18:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "210a522aa7a2f36bd05534aff94b2e17b0838479",
          "body": null,
          "is_bot": false,
          "headline": ":rocket: Release v1.10.7-ncn.3",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-12-01T18:05:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "980887059324244dc82fe2d2ad72d97954cb550a",
          "body": "…ges-correctly\n\n:bug: fix: set registry to PROD registry",
          "is_bot": false,
          "headline": "Merge pull request #13 from nutanix-cloud-native/faiq/sets-docker-ima…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-26T23:34:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "716fc36604e8e6704cde13a143f02f9e8b0b7d8e",
          "body": null,
          "is_bot": false,
          "headline": "fix: set registry to PROD registry",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-26T23:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52a56ed3d71d4eb50f4d4e15e0ab04c07487a4ef",
          "body": ":bug: fix release process for CAPI fork",
          "is_bot": false,
          "headline": "Merge pull request #12 from nutanix-cloud-native/faiq-patch-1",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-26T20:43:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac8be06de10ebac8c558aa1bd98d82e869233190",
          "body": "Added docker build and push commands to the release process.",
          "is_bot": false,
          "headline": "ci: adds docker images to release target",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-26T20:05:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b50667a400ec3ba629fe4ff2ad93545fba6b21a5",
          "body": "Updated the release workflow to include version information and set environment variables for the release process.",
          "is_bot": false,
          "headline": "ci: fixes release process for capi fork",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-26T20:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "decd2b3ba58001714f45e53ad601cd89bfc898b5",
          "body": null,
          "is_bot": false,
          "headline": ":rocket: Release v1.10.7-ncn.2 (#11)",
          "author_name": "Jimmi Dyson",
          "author_login": "jimmidyson",
          "committed_at": "2025-11-26T18:41:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1747da3425f4c365ae554f53012b95dddc403cdb",
          "body": "The current TLS configuration was overriding the TLSConfig for the global\n`http.DefaultClient`. This call is being used by controllers such as the\n`ExtensionConfig` controller which calls this function from multiple\nconcurrent workers. This leads to a race where the TLS `ServerName` is\nconfigured di\n[…]\n49f8-8276-b3725fc8e1b8\"\n```\n\nNotice how the URL and the expected hostname are swapped in each log\nindicating a race (TLSConfig being reconfigured in the middle of the\ncall by different worker threads.",
          "is_bot": false,
          "headline": ":bug: Do not overwrite global http.DefaultClient TLSConfig (#9)",
          "author_name": "Jimmi Dyson",
          "author_login": "jimmidyson",
          "committed_at": "2025-11-26T18:10:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32414fcddc0d1eea0f5b8f2ba58a3c53cd1f6262",
          "body": "…our-build\n\nfix: calculate relase version correctly",
          "is_bot": false,
          "headline": "Merge pull request #8 from nutanix-cloud-native/faiq/get-release-for-…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-07T17:46:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43c5e12f77704665134296a7117b0e30cb56d2b2",
          "body": null,
          "is_bot": false,
          "headline": "fix: calculate relase version correctly",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-07T03:33:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cd715f9b5b16f954855c8344f06f12fde54bfff",
          "body": "…cn.0\n\nfix: test release pipeline",
          "is_bot": false,
          "headline": "Merge pull request #7 from nutanix-cloud-native/faiq/release-1.10.7.n…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-07T02:25:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35c25daab33ee4ec80ff6c8e342bf48fc1e7d85e",
          "body": null,
          "is_bot": false,
          "headline": "ci: release 1.10.7-ncn.0",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-07T01:39:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "788c7fc056d1c050c6107f00ce26f093d562121b",
          "body": "…-1.10.7.ncn.0\n\nRevert \"🚀 Release v1.10.7-ncn.0\"",
          "is_bot": false,
          "headline": "Merge pull request #6 from nutanix-cloud-native/revert-5-faiq/release…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-07T01:21:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ca1a3e5944b78023c23956437f712e17f5359f3",
          "body": null,
          "is_bot": false,
          "headline": "Revert \"🚀 Release v1.10.7-ncn.0\"",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T22:21:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25e529525bffcd5bb15fd392adc4838fd6404d4f",
          "body": "…cn.0\n\n🚀 Release v1.10.7-ncn.0",
          "is_bot": false,
          "headline": "Merge pull request #5 from nutanix-cloud-native/faiq/release-1.10.7.n…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T21:53:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0770baa0c57f28f857799a077dd2e70f93a58599",
          "body": null,
          "is_bot": false,
          "headline": "fix: use git diff instead of action",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T21:13:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa64dd37814e6d992d3c49f36360105b2440b451",
          "body": null,
          "is_bot": false,
          "headline": "🚀 Release v1.10.7-ncn.0",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T20:07:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91e7f45dc3ce3141d39f833d4da36b8bf0167b50",
          "body": "…-1.10.7.ncn.0\n\nRevert \"🚀 Release v1.10.7-ncn.0\"",
          "is_bot": false,
          "headline": "Merge pull request #4 from nutanix-cloud-native/revert-3-faiq/release…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T20:05:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d76604b1967105fa176668556a06fc3f22082b",
          "body": null,
          "is_bot": false,
          "headline": "Revert \"🚀 Release v1.10.7-ncn.0\"",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T19:59:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48f506d31431f5615f8f103ccd062f5976467fcf",
          "body": "…cn.0\n\n🚀 Release v1.10.7-ncn.0",
          "is_bot": false,
          "headline": "Merge pull request #3 from nutanix-cloud-native/faiq/release-1.10.7.n…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T19:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3771a5c88bfabaad4d23035efcfb5defda821caf",
          "body": null,
          "is_bot": false,
          "headline": "🚀 Release v1.10.7-ncn.0",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T19:57:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f548d93d32f571736b9768cbad68e3effe1d257d",
          "body": "…-endpoint\n\n:bug: fix: ignore if control plane if spec.controlPlane is set",
          "is_bot": false,
          "headline": "Merge pull request #1 from nutanix-cloud-native/faiq/fix-controlplane…",
          "author_name": "Faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-06T18:29:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c32122511f2f43583b4d29ff201c3243898eb9c6",
          "body": null,
          "is_bot": false,
          "headline": "fix: ignore if control plane if spec.controlPlane is set",
          "author_name": "faiq",
          "author_login": "faiq",
          "committed_at": "2025-11-05T18:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0b2149eefbb69a3c0a2a04194b3a0a678b68fcb",
          "body": "* First draft of taint propagation proposal\n\nSigned-off-by: Nolan Brubaker <nolan@nbrubaker.com>\n\n* rework taints proposal based on initial feedback\n\n* fixup doctoc\n\n* first review update\n\n* second review update\n\n* third review update\n\n* KAL linting\n\n* Fix review findings\n\nSigned-off-by: Stefan Büri\n[…]\ner <nolan@nbrubaker.com>\nSigned-off-by: Stefan Büringer buringerst@vmware.com\nCo-authored-by: Christian Schlotter <christi.schlotter@gmail.com>\nCo-authored-by: Stefan Bueringer <buringerst@vmware.com>",
          "is_bot": false,
          "headline": "📖 Propagating taints from Cluster API to Nodes (#12329)",
          "author_name": "Nolan Brubaker",
          "author_login": "nrb",
          "committed_at": "2025-11-05T14:24:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96fbc8651e3e4a74f7aee8c26a0b0acb7e20e214",
          "body": "* Requeue for machine Available condition\n\n* Address feedback",
          "is_bot": false,
          "headline": "🌱 Requeue for Machine Available condition (#12953)",
          "author_name": "Fabrizio Pandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-11-05T13:08:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3278bbb800df201f18d440763a70c2062fd3d126",
          "body": "…e-checks-scaling-in-progress\n\n🌱 Rollout-planner improve checks for scalingOrInPlaceUpdateInProgress",
          "is_bot": false,
          "headline": "Merge pull request #12954 from fabriziopandini/rollout-planner-improv…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-05T12:44:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b7da19e171741044bf3f270ffe3b843613595eb",
          "body": null,
          "is_bot": false,
          "headline": "Address feedback",
          "author_name": "fabriziopandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-11-05T12:23:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a956f3e822baf8e29748f1b233cc162cdf0a869c",
          "body": null,
          "is_bot": false,
          "headline": "Rollout-planner improve checks for scalingOrInPlaceUpdateInProgress",
          "author_name": "fabriziopandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-11-04T18:56:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1f8f82a6d9347d2b3a9c54ba6c068472159183d",
          "body": "📖 Add ProviderID to Glossary.",
          "is_bot": false,
          "headline": "Merge pull request #12944 from guettli/tg/providerid-docs",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T17:52:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e7fcc61e862819988333632253b84ed2bed013b",
          "body": "…ta.0\n\n🚀 Release v1.12.0-beta.0",
          "is_bot": false,
          "headline": "Merge pull request #12952 from chandankumar4/release-notes-v1.12.0-be…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T16:22:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "031766afc8e465bff6544eff7d3806e84c671c3e",
          "body": "🚀 Release v1.11.3",
          "is_bot": false,
          "headline": "Merge pull request #12947 from Nordix/release-notes-v1.11.3",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T16:22:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d68269c95dc085defaabd2d6b5a3a4f049f670a",
          "body": "🚀 Release v1.10.8",
          "is_bot": false,
          "headline": "Merge pull request #12946 from Nordix/release-notes-v1.10.8",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T16:08:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee3265ba53a07f0a39bd4480e66cb7e0a1c8fa56",
          "body": "Signed-off-by: chandankumar4 <chandan.kr404@gmail.com>",
          "is_bot": false,
          "headline": "🚀 Release v1.12.0-beta.0",
          "author_name": "chandankumar4",
          "author_login": "chandankumar4",
          "committed_at": "2025-11-04T15:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2bc65992a5516df2dcad336f3f24bbaf430bfd7",
          "body": "Signed-off-by: peppi-lotta <peppi-lotta.saari@est.tech>",
          "is_bot": false,
          "headline": "🚀 Release v1.11.3",
          "author_name": "peppi-lotta",
          "author_login": "peppi-lotta",
          "committed_at": "2025-11-04T11:50:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82bec50c088ee5d9cd5aeaa4f538adf62fb8383d",
          "body": "Signed-off-by: peppi-lotta <peppi-lotta.saari@est.tech>",
          "is_bot": false,
          "headline": "🚀 Release v1.10.8",
          "author_name": "peppi-lotta",
          "author_login": "peppi-lotta",
          "committed_at": "2025-11-04T11:43:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c85a7560a2db5cef8603c6f207d442b5315dd899",
          "body": null,
          "is_bot": false,
          "headline": ":book: Add ProviderID to Glossary.",
          "author_name": "Thomas Güttler",
          "author_login": "guettli",
          "committed_at": "2025-11-04T11:02:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d7fffc61804dd287b0fca672022c1f7ff407279",
          "body": "📖 Fix godoc in e2e test specs",
          "is_bot": false,
          "headline": "Merge pull request #12942 from sbueringer/pr-fix-e2e-test-godoc",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T10:00:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0059cab6a504f550dfc839babe93fe4c012b8911",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Fix godoc in e2e test specs",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-11-04T08:46:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6de38ddf28594521f4bb1b2d1067b2762aadb3ff",
          "body": "…an-handler\n\n✨ Implement GenerateUpgradePlan handler",
          "is_bot": false,
          "headline": "Merge pull request #12927 from sivchari/implement-generate-upgrade-pl…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-04T08:38:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01ec43b9af334a1516553f556830cbea0d3d4fb9",
          "body": "Signed-off-by: sivchari <shibuuuu5@gmail.com>",
          "is_bot": false,
          "headline": "implement GenerateUpgradePlan handler",
          "author_name": "sivchari",
          "author_login": "sivchari",
          "committed_at": "2025-11-04T02:37:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba6b0c04d4e7a5e2c5ab6201726d25a41d6d4b58",
          "body": "✨ Implement e2e test for in-place updates",
          "is_bot": false,
          "headline": "Merge pull request #12938 from sbueringer/pr-in-place-e2e",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T21:00:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad899044b483684c887e1a0a9fd28c6765ca9162",
          "body": "🌱 Implement Updating Machine phase",
          "is_bot": false,
          "headline": "Merge pull request #12940 from sbueringer/pr-machine-updating-phase",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T20:38:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e15d774b8eb0c16f92b55019b3a10e7753e6ad2",
          "body": "* add-in-place-to-machineset-controller\n\n* Fix review findings\n\nSigned-off-by: Stefan Büringer buringerst@vmware.com\n\n* Address comments\n\n---------\n\nSigned-off-by: Stefan Büringer buringerst@vmware.com\nCo-authored-by: Stefan Bueringer <buringerst@vmware.com>",
          "is_bot": false,
          "headline": "🌱 Add in-place to machineset controller (#12906)",
          "author_name": "Fabrizio Pandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-11-03T19:52:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d08a59d2f2db1be3f1797959dd3e5a566f218fac",
          "body": "…e-ready\n\n🌱 Consider updating condition when computing Machine's ready condition",
          "is_bot": false,
          "headline": "Merge pull request #12939 from fabriziopandini/add-updating-to-machin…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T18:22:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d67371e62c15ccb4ec03b1174b711738c0cd30f",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Implement Updating Machine phase",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-11-03T18:09:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "372aee00d218733c56e1c6ca5e459f415298d2d7",
          "body": null,
          "is_bot": false,
          "headline": "Consider updating condition when computing Machine's ready condition",
          "author_name": "fabriziopandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-11-03T17:18:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dcfbaf5c6d027941e7707296436a7e97167efa9",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Implement e2e test for in-place updates",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-11-03T16:30:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c59755f1c1fb8a23500288beaae668dcde1e230",
          "body": "✨ Add in-place updates support for machine controller",
          "is_bot": false,
          "headline": "Merge pull request #12831 from alexander-demicev/machinecontroller",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T16:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68b0e0ceb13179d2f8d1c2e902cb98c7469c493d",
          "body": "…all-go-mod-patch-and-minor-a3eca44266\n\n:seedling: Bump the all-go-mod-patch-and-minor group across 3 directories with 3 updates",
          "is_bot": false,
          "headline": "Merge pull request #12937 from kubernetes-sigs/dependabot/go_modules/…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T15:42:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74df86c8bc322c61e4792d848476481d5074e77b",
          "body": ":seedling: Check for error before checking reconcile result",
          "is_bot": false,
          "headline": "Merge pull request #12935 from Karthik-K-N/error-check",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-03T15:02:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ade7b2a3eb9fc57ee3913d410c004cd099b1550",
          "body": "…ries with 3 updates\n\nBumps the all-go-mod-patch-and-minor group with 1 update in the / directory: [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime).\nBumps the all-go-mod-patch-and-minor group with 3 updates in the /hack/tools directory: [sigs.k8s.io/controller-\n[…]\n-version: 0.22.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: all-go-mod-patch-and-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": ":seedling: Bump the all-go-mod-patch-and-minor group across 3 directo…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-03T15:00:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c315bcf3c70103dad71bceacd0e4e0c831de6a81",
          "body": "Signed-off-by: Alexandr Demicev <alexandr.demicev@suse.com>",
          "is_bot": false,
          "headline": "Add in-place updates support for machine controller",
          "author_name": "Alexandr Demicev",
          "author_login": "alexander-demicev",
          "committed_at": "2025-11-03T12:20:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "838f044fe16bcfadab38835c6c2106645b25bad2",
          "body": null,
          "is_bot": false,
          "headline": "Handle error check first before checking reconcile result",
          "author_name": "Karthik Bhat",
          "author_login": "Karthik-K-N",
          "committed_at": "2025-11-03T12:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "313199c4f88a05afe3c6543a4fd854de7fbba9a7",
          "body": "🌱 Add items to cache immediately after apply",
          "is_bot": false,
          "headline": "Merge pull request #12877 from Nordix/lentzi90/ssa-cache-after-apply",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-02T13:36:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87d9768daa45d3bcb712d93c17643e709e6762da",
          "body": ":sparkles: Add EncryptionAlgorithm to Kubeadmconfig",
          "is_bot": false,
          "headline": "Merge pull request #12859 from Karthik-K-N/rsa-key",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-02T13:36:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b520b137c9502766147d3a7fc18b3fa71b16666",
          "body": "📖 Document e2e test timeout changes in v1.11-to-v1.12 migration doc",
          "is_bot": false,
          "headline": "Merge pull request #12917 from sbueringer/pr-migration-doc-timeouts",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-11-02T10:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c76d86180d1d267da1654493ba468ea350c138c",
          "body": null,
          "is_bot": false,
          "headline": "Address review comme",
          "author_name": "Karthik Bhat",
          "author_login": "Karthik-K-N",
          "committed_at": "2025-10-31T14:44:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6384bca8fa2ab27661485402ebdbeb723a7f74a0",
          "body": "…er-if-not-running\n\n🌱 CAPD: recreate container if we re-enter reconciliation and it exists but is not running",
          "is_bot": false,
          "headline": "Merge pull request #12923 from chrischdi/pr-e2e-capd-recreate-contain…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-31T14:42:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a3fabb775eec5877bf10e20c741bfc999a64f6d",
          "body": "🌱 machinehealthcheck: no longer requeue when remediation is not allowed",
          "is_bot": false,
          "headline": "Merge pull request #12924 from schrej/fix/continous-mhc-reconcile",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-31T13:02:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "decc0c318576da9f9d89faa95532e809a690a0aa",
          "body": "🌱 add DisableCertPrivateKey function for clustercache for test flake",
          "is_bot": false,
          "headline": "Merge pull request #12921 from ivelichkovich/privatekeyflake",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-31T12:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57a2fa47c06b6dc0705160702f63debf62f8db9d",
          "body": null,
          "is_bot": false,
          "headline": "machinehealthcheck: no longer requeue when remediation is not allowed",
          "author_name": "Jakob Schrettenbrunner",
          "author_login": "schrej",
          "committed_at": "2025-10-31T12:14:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c66738981a0b2fb71c32cb667f40f984fc3f8cc",
          "body": "* call GenerateUpgradePlanRequest Runtime Extension\n\nSigned-off-by: sivchari <shibuuuu5@gmail.com>\n\n* add unit test for UpgradePlan extension\n\nSigned-off-by: sivchari <shibuuuu5@gmail.com>\n\n* fix lint error\n\nSigned-off-by: sivchari <shibuuuu5@gmail.com>\n\n* fix review findings\n\nSigned-off-by: sivchari <shibuuuu5@gmail.com>\n\n---------\n\nSigned-off-by: sivchari <shibuuuu5@gmail.com>",
          "is_bot": false,
          "headline": "✨ Call GenerateUpgradePlanRequest Runtime Extension (#12903)",
          "author_name": "sivchari",
          "author_login": "sivchari",
          "committed_at": "2025-10-31T12:14:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bfdc0e45627d1165494d76d9f7dbd09eceaef36",
          "body": "…but is not running",
          "is_bot": false,
          "headline": "CAPD: recreate container if we re-enter reconciliation and it exists …",
          "author_name": "Christian Schlotter",
          "author_login": "chrischdi",
          "committed_at": "2025-10-31T11:46:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45159ffa212c5d2495b836eb9e2e504fe43849be",
          "body": "* Call new lifecycle hooks for chained-upgrades\n\n* Address comments\n\n* More feedback",
          "is_bot": false,
          "headline": "✨ Call new lifecycle hooks for chained-upgrades (#12891)",
          "author_name": "Fabrizio Pandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-10-31T09:44:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d3943ec91ae995f2334acd4ce10381fdb48db6d",
          "body": "Signed-off-by: Lennart Jern <lennart.jern@est.tech>",
          "is_bot": false,
          "headline": "Change ComputeRequestIdentifier parameters to clarify usage",
          "author_name": "Lennart Jern",
          "author_login": "lentzi90",
          "committed_at": "2025-10-31T07:02:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38268cb49d10c6f66a3b837bac8e3fb6c68df991",
          "body": null,
          "is_bot": false,
          "headline": "add disableprivatekey",
          "author_name": "Igor Velichkovich",
          "author_login": "ivelichkovich",
          "committed_at": "2025-10-30T22:37:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6df77ff90592dae24bdd16011057fcb29fa474d",
          "body": "🌱 Fix race conditions with global scheme in TestMachineSetReconciler_reconcileUnhealthyMachines",
          "is_bot": false,
          "headline": "Merge pull request #12919 from sbueringer/pr-fix-test-flake-race",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-30T16:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e3d61e9b16fc90828969e316c6bc2ee3c184867",
          "body": "🌱 Fix flakes in syncMachines unit test",
          "is_bot": false,
          "headline": "Merge pull request #12918 from sbueringer/pr-fix-sync-machines-flake",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-30T16:10:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed843a390651541c1ba501ba5ea2fb30b9f494e9",
          "body": "…concileUnhealthyMachines\n\nSigned-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Fix race conditions with global scheme in TestMachineSetReconciler_re…",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-30T15:47:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b93ae4168b23094a6ab0f88d823eac66c2cbd61",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Fix flakes in syncMachines unit test",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-30T15:34:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "575b37957cb0d9226ad22543cd91e5dc702e3436",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Document e2e test timeout changes in v1.11-to-v1.12 migration doc",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-30T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "caddc7d600e1cf1d9b21bf5927202acdf2b9bd7d",
          "body": "…-code\n\n🌱  Deduplicate extension filtering and response validation logic",
          "is_bot": false,
          "headline": "Merge pull request #12905 from furkatgofurov7/dedup-CallAllExtensions…",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-30T15:00:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76697d5bf2a746aa1bf942c88170692666bfcc5c",
          "body": "📖 docs: Update microvm provider URL",
          "is_bot": false,
          "headline": "Merge pull request #12896 from AaronDewes/patch-1",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-30T10:46:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f6a28b478e0690b4a777971d3ca6a8ffbd8d23f",
          "body": "📖 update machinehealthcheck activity diagram",
          "is_bot": false,
          "headline": "Merge pull request #12892 from schrej/update-mhc-flow-diagram",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-30T09:08:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08b15d92faf7cede17123a4bef0d281815419dde",
          "body": "🌱 e2e: fix self-hosted to actually read DOCKER_PRELOAD_IMAGES from the e2e config",
          "is_bot": false,
          "headline": "Merge pull request #12907 from chrischdi/pr-e2e-self-hosted-fix-preload",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-29T13:32:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cf463a903796898eafd824bb730a59f7cec36ef",
          "body": "…e2e config",
          "is_bot": false,
          "headline": "e2e: fix self-hosted to actually read DOCKER_PRELOAD_IMAGES from the …",
          "author_name": "Christian Schlotter",
          "author_login": "chrischdi",
          "committed_at": "2025-10-29T10:47:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2634ca39dc5c663abfa00472e906e7b21e7660d1",
          "body": "This improves the SSA helper by avoding a second no-op patch just to add\nitems to the cache. Instead we calculate the new request identifier and\nadd to the cache directly.\n\nSigned-off-by: Lennart Jern <lennart.jern@est.tech>",
          "is_bot": false,
          "headline": "Add items to cache immediately after apply",
          "author_name": "Lennart Jern",
          "author_login": "lentzi90",
          "committed_at": "2025-10-29T07:54:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f068d1ccb8bcb5f868a8e9d24c03fedde3152fa3",
          "body": "…#12827)\n\n* Add support for checking Machine conditions in MachineHealthCheck\n\nMachineHealthCheck currently only allows checking Node conditions to\nvalidate if a machine is healthy. However, machine conditions capture\nconditions that do not exist on nodes, for example, control plane node\nconditions \n[…]\new comments (Stefan)\n\nSigned-off-by: Furkat Gofurov <furkat.gofurov@suse.com>\n\n---------\n\nSigned-off-by: Furkat Gofurov <furkat.gofurov@suse.com>\nCo-authored-by: Justin Miron <justin.miron@reddit.com>",
          "is_bot": false,
          "headline": "✨ Add support for checking Machine conditions in MachineHealthCheck (…",
          "author_name": "Furkat Gofurov",
          "author_login": "furkatgofurov7",
          "committed_at": "2025-10-28T18:08:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06aae545c8a444aab5588793151524eb8ddde89e",
          "body": "🌱 kcp: enable websocket dialer with fallback to spdy",
          "is_bot": false,
          "headline": "Merge pull request #12902 from chrischdi/pr-kcp-dial-websocket",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-28T17:06:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f63f444362bad2a194eaaf8fce9632d8797e7b00",
          "body": "* KCP: implement trigger in-place update\n\nSigned-off-by: Stefan Büringer buringerst@vmware.com\n\n* Fix review findings\n\n---------\n\nSigned-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "✨ KCP: implement trigger in-place update (#12897)",
          "author_name": "Stefan Büringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-28T16:34:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "634bd3b2c82bf27abc8ab181ac80c56f16012bac",
          "body": "Signed-off-by: Furkat Gofurov <furkat.gofurov@suse.com>",
          "is_bot": false,
          "headline": "Refactor: Extract response status validation into helper function",
          "author_name": "Furkat Gofurov",
          "author_login": "furkatgofurov7",
          "committed_at": "2025-10-28T15:30:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aa1d99e15ab4e7db4ec21425718670007df4f96",
          "body": "… duplication\n\nPreviously, CallAllExtensions duplicated the extension filtering logic\n(namespace matching, registry listing, GVK lookup) that already existed\nin GetAllExtensions. This refactoring makes CallAllExtensions call\nGetAllExtensions to get the list of matching handlers.\n\nSigned-off-by: Furkat Gofurov <furkat.gofurov@suse.com>",
          "is_bot": false,
          "headline": "Refactor: Use GetAllExtensions in CallAllExtensions to eliminate code…",
          "author_name": "Furkat Gofurov",
          "author_login": "furkatgofurov7",
          "committed_at": "2025-10-28T15:25:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbdba20d011d1a02b0b86059d192c1acbd543374",
          "body": "🌱 Stop setting and relying on TypeMeta in typed objects",
          "is_bot": false,
          "headline": "Merge pull request #12533 from sbueringer/pr-stop-setting-typemeta",
          "author_name": "Kubernetes Prow Robot",
          "author_login": "k8s-ci-robot",
          "committed_at": "2025-10-28T12:51:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c94cdead1c40f9da48b5e0622c285c069f29612",
          "body": "* Add lifecycle hooks for chained-upgrade\n\n* Refactor hooks call in computeControlPlaneVersion, add Lifecycle hooks sequence tests\n\n* Drop duplicated UpgradeStep\n\n* Address feedback",
          "is_bot": false,
          "headline": "✨ Add lifecycle hooks for chained-upgrade (#12878)",
          "author_name": "Fabrizio Pandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-10-28T11:19:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee6cfc6465710a4b126069652d0d1c53a3c77bf1",
          "body": "* Add implementation notes to the in-place update proposal\n\n* Address feedback\n\n* More feedback",
          "is_bot": false,
          "headline": "📖 Add implementation notes to the in-place update proposal (#12880)",
          "author_name": "Fabrizio Pandini",
          "author_login": "fabriziopandini",
          "committed_at": "2025-10-28T10:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a010f05b37e800ced27153e9a4c7b34e406dafd",
          "body": "Signed-off-by: Stefan Büringer buringerst@vmware.com",
          "is_bot": false,
          "headline": "Stop setting TypeMeta in unit tests",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-28T09:54:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64052383e814f080a3d8d447c6a85fc57fb5bf32",
          "body": null,
          "is_bot": false,
          "headline": "Set GVK in env.PatchAndWait",
          "author_name": "Stefan Bueringer",
          "author_login": "sbueringer",
          "committed_at": "2025-10-28T09:12:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 510,
      "latest_release_at": "2026-02-17T22:21:25Z",
      "latest_release_tag": "v1.10.10-ncn.3",
      "releases_from_tags": false,
      "days_since_last_push": 159,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 159,
      "mean_days_between_releases": 34.1
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "sigs.k8s.io/cluster-api",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": null,
          "registry_url": "https://pkg.go.dev/sigs.k8s.io/cluster-api",
          "is_deprecated": false,
          "latest_version": "v1.13.4",
          "repository_url": null,
          "versions_count": 268,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:31:17Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 12
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "docs/book/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod",
        "hack/tools/go.mod",
        "test/go.mod"
      ],
      "largest_source_bytes": 368556,
      "source_files_sampled": 1431,
      "oversized_source_files": 52,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "test/go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/MakeNowJust/heredoc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/Masterminds/sprig/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.3.0"
        },
        {
          "name": "github.com/adrg/xdg",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.3"
        },
        {
          "name": "github.com/blang/semver/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.0.0"
        },
        {
          "name": "github.com/coredns/corefile-migration",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.29"
        },
        {
          "name": "github.com/davecgh/go-spew",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.2-0.20180830191138-d8f796af33cc"
        },
        {
          "name": "github.com/distribution/reference",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.0"
        },
        {
          "name": "github.com/drone/envsubst/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.0-20210730161058-179042472c46"
        },
        {
          "name": "github.com/evanphx/json-patch/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.9.11"
        },
        {
          "name": "github.com/fatih/color",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.18.0"
        },
        {
          "name": "github.com/flatcar/container-linux-config-transpiler",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.9.4"
        },
        {
          "name": "github.com/flatcar/ignition",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.36.2"
        },
        {
          "name": "github.com/go-logr/logr",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.3"
        },
        {
          "name": "github.com/gobuffalo/flect",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.3"
        },
        {
          "name": "github.com/google/cel-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.26.0"
        },
        {
          "name": "github.com/google/go-cmp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.7.0"
        },
        {
          "name": "github.com/google/go-github/v53",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v53.2.0"
        },
        {
          "name": "github.com/olekukonko/tablewriter",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.9"
        },
        {
          "name": "github.com/onsi/ginkgo/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.27.2"
        },
        {
          "name": "github.com/onsi/gomega",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.38.2"
        },
        {
          "name": "github.com/pkg/errors",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.9.1"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.22.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/spf13/pflag",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.10"
        },
        {
          "name": "github.com/spf13/viper",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.21.0"
        },
        {
          "name": "github.com/valyala/fastjson",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.4"
        },
        {
          "name": "go.etcd.io/etcd/api/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.6.5"
        },
        {
          "name": "go.etcd.io/etcd/client/pkg/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.6.5"
        },
        {
          "name": "go.etcd.io/etcd/client/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.6.5"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.27.0"
        },
        {
          "name": "golang.org/x/oauth2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.32.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.30.0"
        },
        {
          "name": "gomodules.xyz/jsonpatch/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.5.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.72.3"
        },
        {
          "name": "k8s.io/api",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/apiextensions-apiserver",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/apimachinery",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/apiserver",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/client-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/cluster-bootstrap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/component-base",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.1"
        },
        {
          "name": "k8s.io/klog/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.130.1"
        },
        {
          "name": "k8s.io/kube-openapi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250710124328-f3f2b991d03b"
        },
        {
          "name": "k8s.io/utils",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250604170112-4c0f3b243397"
        },
        {
          "name": "sigs.k8s.io/controller-runtime",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.22.4"
        },
        {
          "name": "sigs.k8s.io/randfill",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "sigs.k8s.io/yaml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 22,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "k8s-ci-robot",
          "commits": 5675,
          "avatar_url": "https://avatars.githubusercontent.com/u/20407524?v=4"
        },
        {
          "type": "User",
          "login": "sbueringer",
          "commits": 1112,
          "avatar_url": "https://avatars.githubusercontent.com/u/4662360?v=4"
        },
        {
          "type": "User",
          "login": "fabriziopandini",
          "commits": 722,
          "avatar_url": "https://avatars.githubusercontent.com/u/5013060?v=4"
        },
        {
          "type": "User",
          "login": "vincepri",
          "commits": 633,
          "avatar_url": "https://avatars.githubusercontent.com/u/3118335?v=4"
        },
        {
          "type": "User",
          "login": "killianmuldoon",
          "commits": 394,
          "avatar_url": "https://avatars.githubusercontent.com/u/47175296?v=4"
        },
        {
          "type": "User",
          "login": "chrischdi",
          "commits": 295,
          "avatar_url": "https://avatars.githubusercontent.com/u/417870?v=4"
        },
        {
          "type": "User",
          "login": "justinsb",
          "commits": 278,
          "avatar_url": "https://avatars.githubusercontent.com/u/100893?v=4"
        },
        {
          "type": "User",
          "login": "chuckha",
          "commits": 129,
          "avatar_url": "https://avatars.githubusercontent.com/u/98927?v=4"
        },
        {
          "type": "User",
          "login": "pipejakob",
          "commits": 108,
          "avatar_url": "https://avatars.githubusercontent.com/u/1605981?v=4"
        },
        {
          "type": "User",
          "login": "detiber",
          "commits": 105,
          "avatar_url": "https://avatars.githubusercontent.com/u/915544?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.485
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pr-dependabot.yaml",
        "pr-gh-workflow-approve.yaml",
        "pr-golangci-lint.yaml",
        "pr-md-link-check.yaml",
        "pr-verify.yaml",
        "release.yaml",
        "weekly-md-link-check.yaml",
        "weekly-security-scan.yaml",
        "weekly-test-release.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 48 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 4,
            "reason": "dependency not pinned by hash detected -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "53 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "83c8daeed4d94f0ebfd430f7dce4e892c234225f",
        "ran_at": "2026-07-27T01:17:58Z",
        "aggregate_score": 4.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-02-17T22:20:36Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-02-17T21:53:56Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/nutanix-cloud-native/cluster-api",
    "host": "github.com",
    "name": "cluster-api",
    "owner": "nutanix-cloud-native"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 46,
        "vitality": 56,
        "community": 12,
        "governance": 80,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 56,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "at_risk",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "commits_last_year": 510,
              "human_commit_share": 0.99,
              "days_since_last_push": 159,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 159 days ago",
                "points": 9.9,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 159
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "510 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 510
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v1.10.10-ncn.3",
              "releases_from_tags": false,
              "days_since_latest_release": 159,
              "mean_days_between_releases": 34.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 159 days ago",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 159
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~34.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 34.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 159,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 159 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 159
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 80,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 99,
              "top_contributor_share": 0.485
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 48% of commits",
                "points": 11.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 48
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 48 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "merged_prs": 22,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "22/22 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 22,
                      "decided": 22
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "followers": 94,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "nutanix-cloud-native",
              "public_repos": 71,
              "account_age_days": 1698
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "94 followers of nutanix-cloud-native",
                "points": 14.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 94,
                      "login": "nutanix-cloud-native"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "71 public repos, account ~4 yr old",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 71
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "sigs.k8s.io/cluster-api"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 12
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 12 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "268 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 268
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "9 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://cluster-api.sigs.k8s.io",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://cluster-api.sigs.k8s.io",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 46,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "16 out of 16 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 48 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "53 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 65,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.687,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "68 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 36.6,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 68,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "docs/book/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod",
                "hack/tools/go.mod",
                "test/go.mod"
              ],
              "dependency_bot_commit_share": 0.01
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, docs/book/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, docs/book/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "1 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 368556,
              "source_files_sampled": 1431,
              "oversized_source_files": 52
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "52/1431 source files over 60KB",
                "points": 53,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1431,
                      "oversized": 52
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T01:18:26.940023Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/nutanix-cloud-native/cluster-api.svg",
  "full_name": "nutanix-cloud-native/cluster-api",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsGo.