Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-25 14:01 UTC

Kong / kong-mesh-v3-readiness

Kuma 3.0 upgrade readiness preflight CLI for Kong Mesh / Kuma 2.x control planes

GoNo license detected★ 0 stars⑂ 0 forkssince Jun 2026View on GitHub ↗

Kong/kong-mesh-v3-readiness holds a health index of 56 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (83/100) and lowest on Community & Adoption (12/100). It was last updated today. A single contributor accounts for most of its recent work.

56
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.

56
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

KongOrganization
1,773 followers581 public repossince Aug 2011

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gogithub.com/Kong/kong-mesh-v3-readinessv0.4.0-430 days ago

Metrics by category

Vitality

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

68Moderate · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
2.1/36Commit cadence — 3/52 weeks with commits
14.7/18Commit volume — 42 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year42
human_commit_share1
days_since_last_push0
active_weeks_last_year3
How it's scored
27/27Ships releases — 4 releases published
36/36Release recency — latest release 30 days ago
27/27Release cadence — a release every ~0.7 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count4
latest_release_tagv0.4.0
releases_from_tagsno
days_since_latest_release30
mean_days_between_releases0.7

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
22.5/22.5README
0/22.5License — no license file detected
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
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?

63Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
38.2/38.3PR acceptance — 28/28 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs28
open_issues0
closed_issues10
issue_closed_ratio1
closed_unmerged_prs0
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
23.4/25Owner reach — 1,773 followers of Kong
25/25Track record — 581 public repos, account ~14 yr old
Inputs used
followers1,773
owner_typeOrganization
is_verified
owner_loginKong
public_repos581
account_age_days5,467
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 30 days ago
12/20Version history — 4 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/Kong/kong-mesh-v3-readiness
ecosystemsgo
any_deprecatedno
min_days_since_publish30

Engineering Quality

Are baseline engineering and documentation practices in place?

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

Documentation

85Excellent
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 1 topics
10/10Wiki
Inputs used
topicsteam-mesh
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

42At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.2/2.5CI-Tests — 26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5License — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
5/5Pinned-Dependencies — all dependencies are pinned
4/5SAST — SAST tool is not run on all commits -- score normalized to 8
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
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4.2

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.

75Good · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 42 of 42 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3,731
How it's scored
18/18One-command bootstrap — mise.toml
22/22Automated tests
11/11Lint / format config — .golangci.yml
11/11Static type checking — Go (statically typed)
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 42
0/8Automated maintenance — no automated dependency updates observed
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_filesmise.toml
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Go (statically typed)
55/55Manageable file sizes — 0/20 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes59,921
source_files_sampled20
oversized_source_files0
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
1contributors
42commits, last 12 months
0days since last push
4releases
1bus factor
0open issues
Gopackage ecosystems

More detail

OpenSSF Scorecard 4.2 / 10
4.2aggregate

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-25 14:00 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
9CI-Tests26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
10Pinned-Dependenciesall dependencies are pinned
8SASTSAST tool is not run on all commits -- score normalized to 8
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
10Vulnerabilities0 existing vulnerabilities detected
All dependencies 0

Full resolved dependency set from the GitHub dependency graph: 0 direct and 0 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
Dependency advisories not assessed

Advisory matching could not run for this report: No resolved dependencies to assess

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "team-mesh"
      ],
      "is_fork": false,
      "size_kb": 311,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 273658
      },
      "pushed_at": "2026-07-24T14:38:50Z",
      "created_at": "2026-06-17T12:14:37Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T14:38:52Z",
      "description": "Kuma 3.0 upgrade readiness preflight CLI for Kong Mesh / Kuma 2.x control planes",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://konghq.com",
      "name": "Kong",
      "type": "Organization",
      "login": "Kong",
      "company": null,
      "location": "San Francisco",
      "followers": 1773,
      "avatar_url": "https://avatars.githubusercontent.com/u/962416?v=4",
      "created_at": "2011-08-06T02:08:16Z",
      "is_verified": null,
      "public_repos": 581,
      "account_age_days": 5467
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-25T11:42:04Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-24T17:05:59Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-24T15:11:00Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-23T12:32:33Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "987787ed98b2c69bf047ecf97d872c14083aa54e",
          "body": "* refactor(audit): prune and refine 3.0 checks\n\nAudit-side changes for the 3.0 preflight report:\n\n- Remove the Gateway-in-Dataplane check: it fires for delegated\n  gateways too, so it is not a 3.0 signal.\n- Remove the container-resources and Gateway-API/GAMMA manual\n  checks.\n- Stop emitting the wor\n[…]\nd), and a comment referenced a\nnon-existent categoryRemoved identifier.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(audit): prune and refine 3.0 checks (#37)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-07-24T14:38:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "deb593fb3c97e2a7060a623865f3d98996d80c60",
          "body": "* ci(actions): block merge on stale example reports\n\nRe-render examples/html from the committed JSON fixtures in CI and fail if\nthe result differs from what is checked in, so a template change that\nskips regeneration cannot merge.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(acti\n[…]\nendered HTML\nfails the gate; a bare `git diff` ignores untracked files.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): block merge on stale example reports (#26)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T09:38:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8abb37085a9a057f1e2dbf86e72580841f612cc",
          "body": "MeshGlobalRateLimit is a Kong Mesh enterprise policy removed entirely in\n3.0 with no replacement, but the preflight had no check for it, so a CP\ncarrying these policies got a clean report.\n\nAdd checkRemovedEnterprisePolicies: list meshglobalratelimits and flag\nevery instance as a blocker. List via l\n[…]\nrage gap that flips the run to\ninconclusive.\n\nFix the deprecated-features doc row that wrongly claimed only the legacy\nOPA policy is removed.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): flag removed MeshGlobalRateLimit (#25)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T08:48:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a8bc6cfcac5a2da23a81363e388948c20f1f1ac",
          "body": "* feat(report): redesign report + example gallery\n\nRebuild the embedded HTML report (html.go) to stay readable on large\nmulti-mesh estates, and add a static example gallery rendered from\ncommitted fixtures.\n\nReport:\n- sticky sidebar table-of-contents with live per-severity/per-group\n  counts and scr\n[…]\n CLI's own error) only when the render fails; a normal run stays quiet.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): redesign report + example gallery (#24)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T08:06:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e9527adae41408d3366b6ece401333a94a45784",
          "body": "* refactor(report): share JSON render helper\n\nrenderJSON and renderClassificationJSON were byte-identical;\nextract marshalIndentJSON(any) and drop the now-unused\nencoding/json import from classify_model.go.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* docs(examples): drop stale mark\n[…]\ninstall does not force\nCGO_ENABLED=0) in favor of the stdlib-only fact.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "chore(repo): prune stale docs/examples, simplify README (#23)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T06:57:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07074f4fdf03638f0df820f3f19259ee29702297",
          "body": "* fix(client): clearer error for non-Kuma endpoint\n\nA 200 with a non-JSON body (HTML login/ingress page, wrong subpath\nlike /gui) decoded as the CP index leaked a raw \"invalid character\n'<'\" error. Treat a 200 whose body is not a JSON index as not-a-Kuma\nCP so audit() reports the friendly message. C\n[…]\nate the\nrest with their distinct message. Add a body-read-timeout test.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(client): clearer error for non-Kuma endpoint (#22)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T06:26:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aab484ee3e0f3d0bb1567c94690b90efbb147fa4",
          "body": "* feat(report): link blockers to Kong Mesh 3.0 docs\n\nEach blocker finding now carries a doc URL pointing at the Kong\nMesh page that explains its 3.0 replacement API/feature, surfaced\nin the JSON contract (doc, omitempty) and as a gated hyperlink on\nevery HTML finding card.\n\nNew addDoc() carries the \n[…]\n a whitespace-tolerant regex so spacing variants can't\nevade the guard.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): link blockers to Kong Mesh 3.0 docs (#21)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T04:37:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6dbf4f767b938b45c013a9048c84a19d5c165ce1",
          "body": "Add .golangci.yml modeled on kumahq/kuma (same pinned 2.12.2),\ntrimmed for this stdlib-only single-package CLI: drop Kuma-only\nlinters/rules (protobuf depguard, importas aliases, ginkgolinter,\nloggercheck, tracing forbidigo), use gomodguard_v2, point gci/gofumpt\nat this module. Gofumpt+gci formattin\n[…]\nuiltin\nshadow), drop always-constant targetMinor param (unparam), unname\nreturns, modernize loops (slices.Backward/Contains, range-int, min).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "build(lint): kuma golangci config + nilaway gate (#20)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:48:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d33e0fd00c62c763d8926d5b27c1e5a6eb24964a",
          "body": "Add detail + kubectl/jq detector command to the Gateway\nAPI / GAMMA manual check, and gate it on observed\nKubernetes: the dropped support is gateway.networking.k8s.io\nCRDs, absent on Universal.\n\nCommand lists Kuma GatewayClasses, the Gateways bound to\nthem and Service-attached (GAMMA) HTTPRoutes; empty output\nmeans nothing to migrate. Refresh golden reports.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): enrich gateway-api manual check (#17)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de1b3685f51da84d724333cd00bf9cf950b682de",
          "body": "Detail + endpoint code block for the old-inspect-API card.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): inspect-API manual check detail (#19)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:38:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a56440b61210102ad9fe124ec1491de8ced6457c",
          "body": "* feat(report): HMAC256 signing-key detector card\n\nWire a detail + dual-platform (kubectl/kumactl) detector script into\nthe HMAC256 signing-key manual check, which was title-only. The script\nreads the token-signing-key Secrets and classifies each as RSA or a\nlegacy HMAC256 key; it never prints key m\n[…]\nhole\nscript is safe to paste in either a Kubernetes or Universal shell.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): HMAC256 signing-key detector card (#18)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:27:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "506cb625a49a6a635ef8edba6dc276d61a1b9393",
          "body": "Read the coredns dependency kuma-dp reports in\n/dataplanes+insights (already fetched by checkDataplaneVersions)\nand block any proxy still on the legacy embedded-DNS path. This\ndetection is free and covers every connected proxy.\n\nDrop the DNS manual-check item (now auto-detected) and keep\n--inspect-dataplanes as the deep Envoy-config confirmation.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): auto-detect legacy CoreDNS dataplanes (#16)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:01:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fae2afed055bc6bb31c8cf0fb1af46ad07a94b58",
          "body": "Move \"Pod resources instead of container resources\" off the\nalways-on list into the Kubernetes-gated cards (report.k8sObserved),\nadding an explanation and a kubectl version self-check command via\nthe manualCheck{title,detail,command} mechanism from #14. Universal\nand non-k8s runs no longer show it.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): pod-resources k8s manual check card (#12)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T18:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e6173b5f35d43a817ef415614fd41865b56e7c2",
          "body": "* feat(report): k8s mesh-label manual check card\n\nAdd a Kubernetes-only manual check for the kuma.io/mesh\nannotation->label deprecation, rendered as a warning-style\ncard with an explanation and a copyable kubectl validation\ncommand (clipboard API + execCommand fallback for file://).\n\nManual checks b\n[…]\ns render as\nNamespace/<name> instead of an ambiguous Namespace//<name>.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): k8s mesh-label manual check card (#14)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:20:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8140a30d31ed033c8b41f523411885c8e562831d",
          "body": "ZoneIngress/ZoneEgress are replaced by the unified Zone Proxy in\n3.0, so their presence is an actionable upgrade item, not an\ninformational count. Elevate the \"Zone proxies\" finding from info\nto blocker (gates CI, exit 1) and make the detail actionable.\n\nRemaining info findings are non-actionable co\n[…]\nled-dataplane inspection coverage; no-zones-connected).\n\nUpdate render/classify tests, golden ref, severity-rule table,\nREADME and test docs.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): flag zone proxies as blocker (#15)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:16:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "835d0304deca8dd6f0eb35885e287e363fdb3a76",
          "body": "* feat(report): tables + global group in classify\n\nClassify report repeated the same cross-cutting fixes (inline mTLS,\nshared MeshTimeout/MeshTrafficPermission defaults) in nearly every\nsuite, drowned in per-row emojis.\n\n- Lift recurring non-removable fixes (>=3 suites) into one Global\n  migrations \n[…]\n. Word as\n\"when present\" to match the renderer (len(m.Global)==0 skip).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): tables + global group in classify (#13)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:04:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c23e9bc67c7ce69dc55c8af1b21d4dd8672d3d64",
          "body": "Convert the manual \"adopt Workload for proxy grouping\" item into\nauto-detected findings from CP config and Dataplane labels:\n\n- k8s: warn when runtime.kubernetes.workloadLabels is unset\n  (kuma.io/workload falls back to the pod ServiceAccount)\n- Universal: blocker for a Dataplane missing the kuma.io\n[…]\ng < info) that\ndoes not gate CI; a run with only warnings stays clean (exit 0).\nRender it across JSON + HTML; summary gains a warnings count.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): detect Workload grouping readiness (#10)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T16:39:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f34eb3aa053d4a65a66f3d846efa37559c0e1db4",
          "body": "* refactor(audit): drop zone-pinned manual check\n\nEvery legacy ExternalService is already flagged a blocker by\ncheckLegacyResources, so the manual reminder added no coverage.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* refactor(audit): drop observability manual check\n\nRemove the 'install observability' manual reminder from the\nmanual-checks list.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(audit): drop redundant manual checks (#11)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T16:29:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f87cc90320c5112eb0335c7a6a392a594016cb74",
          "body": "Flag any control plane (and, on a global, every connected zone) not on\nthe latest 2.14 patch — the only supported 3.0 upgrade source. Latest\npatch resolved from kumahq/kuma GitHub releases (Link-paginated, on its\nown timeout); --latest-version overrides for offline/deterministic runs.",
          "is_bot": false,
          "headline": "feat(audit): check control plane patch version (#9)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T15:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04697df6949d2e4fe4d5c7c68a03c70ab916078e",
          "body": "* ci(actions): auto-bump+tag, allow manual version\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(actions): tighten semver prerelease regex\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): auto-bump+tag, allow manual version (#8)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T15:09:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "675231835f27bceb85188fdf3bd85dd551576059",
          "body": "Prettify the --classify markdown (the Kuma e2e job summary): wrap\neach env in a collapsible <details open> with headline counts, nest\neach test suite in its own <details>, add a per-recommendation summary\ntable, and mark severity (remove/rewrite) and category with emoji. The\n~2,000-line job summary \n[…]\nay: --classify\ningests the audit's per-spec JSON snapshots. The JSON contract for both\nreports is unchanged. Tests and docs updated to match.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): collapsible emoji classify report (#7)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T14:57:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b79e0b030790920445d9b58821c6b6daaee9e018",
          "body": "to[].targetRef.kind: Mesh is valid in Kuma 3.0 (canonical\nall-outbound form, and the only kind permitted for\nMeshGateway-targeted policies); MeshHTTPRoute is valid too. The\naudit flagged both as removed, producing false-positive blockers\non the CP's own auto-generated default policies (verified agai\n[…]\nven ones with no finding. Make ref() pure and count via\ncountSystem only when a resource actually yields a finding\n(tracked by report.total).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(audit): allow to[] targetRef Mesh kind (#6)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T14:42:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81232b7921e7bc7d118110f548fd38aef806a784",
          "body": "* feat(report): group findings into sections\n\nFindings are organized into six top-level groups above the existing\ncategory subheadings: Control plane, Mesh object, Policies, Removed\nresources, Data plane & workloads, Other. Each category maps to one\ngroup via a single table; an unmapped category fal\n[…]\nender identically. Adds a regression test for\nthe group-less load path.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): group findings into sections (#5)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T13:52:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e173b2e8af58d9c5ee0368c2bc1fde5aa3d14c7",
          "body": "* feat(html): clickable mesh chips filter findings\n\nMesh chips in the report header become toggle buttons; clicking one\nfilters the findings list to that mesh, narrowing each finding's\nexamples and counts. Control-plane-wide findings (no mesh) stay\nvisible under any mesh filter since they apply to e\n[…]\nops the earlier per-mesh floor marker,\nwhich understated the same case.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(html): clickable mesh chips filter findings (#4)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T13:18:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a8066f0f52e8029f4ddc137d151042dd155d2eb",
          "body": "* feat(preflight): add e2e classification mode\n\nAdd a --classify mode that reuses the deprecation catalog (legacyMeshScoped, audit.go) to classify an e2e test tree by which Kuma-3.0-removed features each test exercises: static source scan + optional per-spec snapshot ingestion, grouped into remove/r\n[…]\natch.\n- Skip (do not abort on) a non-report .json in the snapshots dir.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add e2e classification + release (#2)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-23T12:29:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02ca07b77f06679cf764b51776c9e858ac717c90",
          "body": "* ci(actions): lint, test, build on PR and main\n\nAdd a CI workflow that runs gofmt, go vet, golangci-lint, go test,\nand go build on every pull request and on pushes to main. Tooling is\npinned via mise (go + golangci-lint).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(actions): go\n[…]\nfmt already recurses; this just\nwidens coverage and removes ambiguity.)\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): lint, test, build on PR and main (#3)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-23T12:19:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dea659c5c852719dc4cfa181f710f4c26c4e400f",
          "body": "Remove the warning severity tier; every actionable finding is now a\nblocker (exit 1). Only blocker + info remain. Drop summary.warnings and\nbump reportSchema to v2 (incompatible JSON change).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): treat all warnings as blockers (#1)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-22T11:11:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d09c2cac2564869cf3c24b7ac97b89e9532406c",
          "body": "Detect global mode from /config and source each zone's control-plane\nconfig from /zones+insights (ZoneInsight), so one run against the\nglobal covers the whole multizone estate. The global keeps only the\nglobal-on-k8s blocker; data-plane config checks run per zone, tagged\n\"zone <name>\". The CP mode (\n[…]\n failures (auth, timeout) to\ncoverage gaps instead of aborting the run, and document --token for\nKong Mesh CPs that gate /config behind RBAC.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): audit all zones from global CP",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-22T09:13:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f6b2f7d9cd49e64eab382f094210dfb530e3b76",
          "body": "- CLI README: add --inspect-dataplanes flag and new checks.\n- test-setup §6 + test-plan B-15..B-17: cover /config, dataplane\n  version/metrics, and opt-in Envoy DNS-filter inspection.\n- adding-checks rule: refresh the severity table.\n- Add a captured HTML example report (examples/html).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(preflight): document API-derived checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-19T08:11:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec342f4289a576eea46e3a846a0049860ed2a17b",
          "body": "Audit settings the CP exposes that the resource scan can't see:\n\n- checkControlPlaneConfig (GET /config): blockers for global-on-k8s,\n  autoReachableServices, eBPF, unified-naming off, inbound-tags\n  enabled; warnings for deltaXds/KDS-watchdog/sidecar off.\n- checkDataplaneVersions (/dataplanes+insig\n[…]\nplanes N: opt-in Envoy config-dump scan for the\n  legacy envoy.filters.udp.dns_filter.\n- Promote meshServices.mode != Exclusive to a blocker.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add CP config + dataplane checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-19T08:11:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fbef182bf9ddecb615ecffdef2a1d3b55fea7a0",
          "body": "- drop countBlockers; use count(blocker)\n- audit() check chain -> slice loop\n- failureContent delegates to renderFormat\n- add listIfServed (404 = not-applicable, not a gap)\n- add unmarshalSpec parse-error guard\n- table-drive Mesh hasJSON blockers\n\nNo behavior change; tests/vet/gofmt/lint clean.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(preflight): dedupe audit + render helpers",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:32:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "295c74747bb842eed43a4a9925ddd6cd175639da",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): parametrize dataplane checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:15:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93ee8bde283a3308c247f95fc227bb5212a9dcd6",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): parametrize mesh deprecations",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:02:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15133cfed14aba69f9d45f215fd5c442376336ae",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(claude): document golden test harness",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:47:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "021828e3d8344bb9fcf9cbe479a72608f8203d2a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): add mock-CP golden JSON tests",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9524b6a590f619d4a19ef93d7bfd963ca419696d",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(module): rename module path",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bde102c0d6a82b81c769d8a294015ce298d001b2",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(claude): add project instructions and rules",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3a7c1a34b903140c42c7c4251b2919fbbe93c4a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "build(mise): add build, test, check tasks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1762328946d9856ce8ed7411e1593769d3841f5a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add model + HTML/JSON renderers",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e107c9270b7f5e26717ceea06b9149e7911d3de",
          "body": "Blocker count is already in the header and the Blockers section\nlists them; the redundant banner line is removed. Examples\nregenerated. Adds mise.toml toolchain pin.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(report): drop blocker banner from summary",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:28:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea7d16e51009cc4fe061e93874024cb1a111ed0",
          "body": "Captured against live 2.x CPs with the test-setup fixtures. Shows the\nk8s-vs-universal policy-role:system labeling difference.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(examples): add real k8s + universal reports",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "809ee7b6b9689fed31311a063738d68d58fdd25e",
          "body": "Standalone repo for the Kuma 2.x -> 3.0 upgrade pre-flight CLI\nand its manual test plan/results/setup. stdlib-only; audits a CP\nover REST and reports blockers/warnings/manual checks. Verified\nagainst k3d (k8s) and a local universal CP.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): import v3-readiness audit tool",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:15:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 42,
      "latest_release_at": "2026-06-25T11:42:04Z",
      "latest_release_tag": "v0.4.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 30,
      "mean_days_between_releases": 0.7
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/Kong/kong-mesh-v3-readiness",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/Kong/kong-mesh-v3-readiness",
          "is_deprecated": false,
          "latest_version": "v0.4.0",
          "repository_url": "https://github.com/Kong/kong-mesh-v3-readiness",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-25T09:38:19Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 30
        }
      ]
    },
    "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": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "mise.toml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 59921,
      "source_files_sampled": 20,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3731
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "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": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 28,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 10,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "Automaat",
          "commits": 42,
          "avatar_url": "https://avatars.githubusercontent.com/u/9156357?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": 3,
            "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": 9,
            "reason": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
            "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": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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": 0,
            "reason": "no 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 8,
            "reason": "SAST tool is not run on all commits -- score normalized to 8",
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "987787ed98b2c69bf047ecf97d872c14083aa54e",
        "ran_at": "2026-07-25T14:00:51Z",
        "aggregate_score": 4.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T14:39:50Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-24T14:38:48Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Kong/kong-mesh-v3-readiness",
    "host": "github.com",
    "name": "kong-mesh-v3-readiness",
    "owner": "Kong"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 56,
      "inputs": {
        "security": 42,
        "vitality": 68,
        "community": 12,
        "governance": 63,
        "engineering": 83
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "commits_last_year": 42,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "42 commits in the last year",
                "points": 14.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.4.0",
              "releases_from_tags": false,
              "days_since_latest_release": 30,
              "mean_days_between_releases": 0.7
            },
            "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 30 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.7
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "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": true,
              "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": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 28,
              "open_issues": 0,
              "closed_issues": 10,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "28/28 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 28,
                      "decided": 28
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "followers": 1773,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Kong",
              "public_repos": 581,
              "account_age_days": 5467
            },
            "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": "1,773 followers of Kong",
                "points": 23.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1773,
                      "login": "Kong"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "581 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 581
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/Kong/kong-mesh-v3-readiness"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 30
            },
            "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 30 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": 83,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "team-mesh"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "1 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 4.2
            },
            "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": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "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": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 2
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3731
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "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": "42 of 42 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 42,
                      "sampled": 42
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "mise.toml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "mise.toml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "mise.toml"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 42",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 42
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 59921,
              "source_files_sampled": 20,
              "oversized_source_files": 0
            },
            "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": "0/20 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 20,
                      "oversized": 0
                    }
                  }
                ],
                "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": [],
  "report_type": "repository",
  "generated_at": "2026-07-25T14:01:07.062624Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/Kong/kong-mesh-v3-readiness.svg",
  "full_name": "Kong/kong-mesh-v3-readiness",
  "license_state": "absent",
  "license_spdx": null
}

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.