Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 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

GoKeine Lizenz erkannt★ 0 Sterne⑂ 0 Forksseit Juni 2026Auf GitHub ansehen ↗

Kong/kong-mesh-v3-readiness erreicht einen Gesundheitsindex von 56 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (83/100) ab, am schwächsten bei Community & Adoption (12/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

56
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

56
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

KongOrganisation
1.773 Follower581 öffentliche Reposseit Aug. 2011

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/Kong/kong-mesh-v3-readinessv0.4.0-4vor 30 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

68Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
14.7/18Commit-Volumen — 42 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year42
human_commit_share1
days_since_last_push0
active_weeks_last_year3
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 4 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 30 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0,7 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count4
latest_release_tagv0.4.0
releases_from_tagsnein
days_since_latest_release30
mean_days_between_releases0,7

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

12Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

63Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
38.2/38.3PR-Annahme — 28/28 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs28
open_issues0
closed_issues10
issue_closed_ratio1
closed_unmerged_prs0
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
23.4/25Reichweite des Inhabers — 1.773 Follower von Kong
25/25Kontohistorie — 581 öffentliche Repos, Kontoalter ca. 14 Jahre
Verwendete Eingangsdaten
followers1.773
owner_typeOrganization
is_verified
owner_loginKong
public_repos581
account_age_days5.467

Paketpflege

92Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 30 Tagen
12/20Versionshistorie — 4 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/Kong/kong-mesh-v3-readiness
ecosystemsgo
any_deprecatednein
min_days_since_publish30

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

83Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .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
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

85Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 1 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsteam-mesh
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

42Gefährdet · 16 % des Gesamtindex

Sicherheitslage

42Gefährdet
Wie die Bewertung erfolgt
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.5Lizenz — 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
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4,2

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

75Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 42 von 42 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3.731
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — mise.toml
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml
11/11Statische Typprüfung — Go (statisch typisiert)
0/10Reproduzierbare Umgebung
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 42
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_filesmise.toml
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/20 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes59.921
source_files_sampled20
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

0GitHub-Sterne
1Mitwirkende
42Commits, letzte 12 Monate
0Tage seit letztem Push
4Releases
1Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Weitere Details

OpenSSF Scorecard 4.2 / 10
4.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
Alle Abhängigkeiten 0

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 0 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies to assess

JSON-Rohbericht maschinenlesbar
{
  "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
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.