Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"metal"
],
"is_fork": false,
"size_kb": 1421,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 179617,
"Shell": 610,
"Makefile": 1216,
"Dockerfile": 332,
"Go Template": 16384
},
"pushed_at": "2026-07-23T07:22:54Z",
"created_at": "2020-02-17T06:44:44Z",
"owner_type": "Organization",
"updated_at": "2026-07-17T10:59:26Z",
"description": "Middleware for pixiecore and switch access",
"is_archived": false,
"is_disabled": false,
"license_spdx": "AGPL-3.0",
"default_branch": "master",
"license_spdx_raw": "AGPL-3.0",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "https://metal-stack.io",
"name": "metal-stack",
"type": "Organization",
"login": "metal-stack",
"company": null,
"location": "Munich Germany",
"followers": 126,
"avatar_url": "https://avatars.githubusercontent.com/u/58738008?v=4",
"created_at": "2019-12-10T14:31:56Z",
"is_verified": null,
"public_repos": 99,
"account_age_days": 2418
},
"license": {
"state": "standard",
"spdx_id": "AGPL-3.0",
"raw_spdx": "AGPL-3.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.17.0",
"kind": "minor",
"published_at": "2026-07-17T11:00:02Z"
},
{
"tag": "v0.16.1",
"kind": "patch",
"published_at": "2026-06-17T07:41:09Z"
},
{
"tag": "v0.16.0",
"kind": "minor",
"published_at": "2026-05-29T07:24:54Z"
},
{
"tag": "v0.15.3",
"kind": "patch",
"published_at": "2026-04-29T09:09:29Z"
},
{
"tag": "v0.15.2",
"kind": "patch",
"published_at": "2026-03-16T08:05:03Z"
},
{
"tag": "v0.15.1",
"kind": "patch",
"published_at": "2026-01-23T10:38:41Z"
},
{
"tag": "v0.15.0",
"kind": "minor",
"published_at": "2026-01-14T10:52:20Z"
},
{
"tag": "v0.14.1",
"kind": "patch",
"published_at": "2025-12-02T14:25:11Z"
},
{
"tag": "v0.14.0",
"kind": "minor",
"published_at": "2025-11-28T15:01:43Z"
},
{
"tag": "v0.13.5",
"kind": "patch",
"published_at": "2025-10-22T13:10:24Z"
},
{
"tag": "v0.13.4",
"kind": "patch",
"published_at": "2025-10-07T13:01:32Z"
},
{
"tag": "v0.13.3",
"kind": "patch",
"published_at": "2025-10-02T06:26:43Z"
},
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2025-09-18T17:58:41Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2025-09-08T16:25:38Z"
},
{
"tag": "v0.13.0",
"kind": "minor",
"published_at": "2025-08-20T12:41:28Z"
},
{
"tag": "v0.12.5",
"kind": "patch",
"published_at": "2025-03-03T14:03:14Z"
},
{
"tag": "v0.12.4",
"kind": "patch",
"published_at": "2025-02-11T14:53:18Z"
},
{
"tag": "v0.12.3",
"kind": "patch",
"published_at": "2025-01-23T14:47:47Z"
},
{
"tag": "v0.12.2",
"kind": "patch",
"published_at": "2025-01-07T15:26:15Z"
},
{
"tag": "v0.12.1",
"kind": "patch",
"published_at": "2024-10-18T08:55:58Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2024-09-11T08:54:54Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2024-05-07T11:06:26Z"
},
{
"tag": "v0.10.2",
"kind": "patch",
"published_at": "2024-04-16T09:38:29Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2024-04-16T08:48:07Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2023-09-04T09:28:32Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2023-07-05T12:09:10Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2023-05-16T08:12:57Z"
},
{
"tag": "v0.8.3",
"kind": "patch",
"published_at": "2023-03-02T17:26:18Z"
},
{
"tag": "v0.8.2",
"kind": "patch",
"published_at": "2022-08-18T11:49:02Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2022-06-27T12:26:18Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2022-06-15T09:32:41Z"
},
{
"tag": "v0.7.10",
"kind": "patch",
"published_at": "2022-04-26T11:31:11Z"
},
{
"tag": "v0.7.9",
"kind": "patch",
"published_at": "2022-04-21T12:32:32Z"
},
{
"tag": "v0.7.8",
"kind": "patch",
"published_at": "2022-04-21T12:27:29Z"
},
{
"tag": "v0.7.7",
"kind": "patch",
"published_at": "2022-01-11T15:04:14Z"
},
{
"tag": "v0.7.6",
"kind": "patch",
"published_at": "2021-11-18T10:15:48Z"
},
{
"tag": "v0.7.5",
"kind": "patch",
"published_at": "2021-11-18T10:09:09Z"
},
{
"tag": "v0.7.4",
"kind": "patch",
"published_at": "2021-08-17T07:06:18Z"
},
{
"tag": "v0.7.3",
"kind": "patch",
"published_at": "2021-07-21T06:52:35Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2021-07-19T16:28:43Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2021-06-21T11:33:19Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2021-06-11T11:29:48Z"
},
{
"tag": "v0.6.4",
"kind": "patch",
"published_at": "2021-04-08T10:27:34Z"
},
{
"tag": "v0.6.3",
"kind": "patch",
"published_at": "2020-11-21T08:06:00Z"
},
{
"tag": "v0.6.2",
"kind": "patch",
"published_at": "2020-11-20T06:56:56Z"
},
{
"tag": "v0.6.1",
"kind": "patch",
"published_at": "2020-10-23T07:18:54Z"
},
{
"tag": "v0.5.3",
"kind": "patch",
"published_at": "2020-07-10T10:52:39Z"
}
],
"recent_commits": [
{
"oid": "a61ab583b07793fae6585bd72eb8ca0f559e7e4e",
"body": null,
"is_bot": false,
"headline": "check admin status instead of actual status (#197)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-07-17T10:58:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbd83dbd90d0241c306e2015f0e5c5f04efa2147",
"body": null,
"is_bot": false,
"headline": "Migrate to valkey-go (#184)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2026-06-17T07:40:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d909fa5947f70926c4d16acd0f00ab70779bac2e",
"body": null,
"is_bot": false,
"headline": "Fix SetSrcLoopback Config (#192)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-05-29T07:23:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cfd3a29ab1db7a22990db0fc7a6bc31a14870813",
"body": "…ory (#190)\n\nBumps the go_modules group with 1 update in the / directory: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go).\n\n\nUpdates `go.opentelemetry.io/otel` from 1.40.0 to 1.41.0\n- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)\n- [Chang\n[…]\nff-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ilja Rotar <77339620+iljarotar@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump go.opentelemetry.io/otel in the go_modules group across 1 direct…",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-19T09:48:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4d9671ad4fc2aeea38bf7f2a41a42c70a545b06e",
"body": "add test for bgp-state parsing ( frr_test.go )",
"is_bot": false,
"headline": "Merge pull request #191 from metal-stack/add-frr-parsing-test",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2026-05-07T07:05:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8feae3de23f5def6d3a708286e2ccc3060dca5e2",
"body": "Co-authored-by: GitHub Copilot <copilot@github.com>\n\nCo-authored-by: Copilot <copilot@github.com>",
"is_bot": false,
"headline": "add test for bgp-state parsing ( frr_test.go )",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2026-05-06T10:21:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b3c08c7c27da86b9257affd19bec219c7e9df738",
"body": "…les group across 1 directory (#188)\n\n* Bump github.com/go-jose/go-jose/v4\n\nBumps the go_modules group with 1 update in the / directory: [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose).\n\n\nUpdates `github.com/go-jose/go-jose/v4` from 4.1.3 to 4.1.4\n- [Release notes](https://github\n[…]\ny\n\n---------\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ilja Rotar <kontakt@ilja-rotar.de>",
"is_bot": true,
"headline": "Bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in the go_modu…",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-04-17T13:44:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec98bd1fa6e77a51ce6aaf485f388ae92ad41985",
"body": null,
"is_bot": false,
"headline": "add flag to allow or disallow setting loopback as default src (#187)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-03-31T10:44:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a86cd3a579fda0b60e9e36266d7a20a595259325",
"body": "…y (#186)\n\nBumps the go_modules group with 1 update in the / directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go).\n\n\nUpdates `google.golang.org/grpc` from 1.79.1 to 1.79.3\n- [Release notes](https://github.com/grpc/grpc-go/releases)\n- [Commits](https://github.com/grpc/grpc-go/compare/\n[…]\nency-type: direct:production\n dependency-group: go_modules\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump google.golang.org/grpc in the go_modules group across 1 director…",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-03-19T06:27:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c1432add8436e9f4bf65bbce656f5b3eb9ac24a1",
"body": null,
"is_bot": false,
"headline": "Update to go-1.26 (#181)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2026-03-10T13:33:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "444eba1da8a63a63f5f76949ab27201b410d60a2",
"body": null,
"is_bot": false,
"headline": "Check ctx.Done() in dbus Reload and Start (#183)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-03-10T12:54:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce7c10387a9e668c357d176c741ab20fc6135806",
"body": null,
"is_bot": false,
"headline": "Ignore spine uplinks when evaluating down ports (#182)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-03-09T09:32:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b869a900c3599bfa3aa6409fc87b407599851ac",
"body": "… reconfigure (#180)",
"is_bot": false,
"headline": "Use topmost parent context for all subsequent functions during switch…",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-02-03T15:12:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6663b23618b35cf4c4990f0f07b30e52ecc33191",
"body": null,
"is_bot": false,
"headline": "Fix waitgroup panics with negative counter (#179)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2026-01-21T07:48:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ef16f69eb065f25893b7d4d32654eba1b1fe7cb",
"body": null,
"is_bot": false,
"headline": "Get ports from running config (#177)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2026-01-12T13:43:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c16bee0ee2c5be93c8f600eed6defce8346aab0",
"body": null,
"is_bot": false,
"headline": "log error if lldp discovery fails (#175)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-12-02T14:49:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f5eb56d8e70b37d8a2d390c7b68612e1bf8ba4f",
"body": null,
"is_bot": false,
"headline": "Fix ethernet packet overflow (#176)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2025-12-02T14:24:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bdd3f9571185582faa15ad98b37c225b380f792d",
"body": null,
"is_bot": false,
"headline": "Update go dependencies (#174)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2025-11-28T15:00:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aec7a9db7505f70d25e21fc0676820e56d0fbc81",
"body": null,
"is_bot": false,
"headline": "Allow different VTEP name than `vtep` (#163)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-11-28T14:51:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8bcc4d1756beaf46f008a5e94452d9844e67689",
"body": null,
"is_bot": false,
"headline": "Do not try to cleanup default VRF (#170)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-11-28T14:31:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "130977b6be316e253ff6fc78e0ae4d8812b62937",
"body": "…Leaves (#168)",
"is_bot": false,
"headline": "Set Loopback0 address as default source address in frr.conf on SONiC …",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-10-22T13:10:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22999b42c91ba55feab074f4c7762892c6f93874",
"body": null,
"is_bot": false,
"headline": "Revert \"Set loopback as source address in SONiC frr.conf (#159)\" (#167)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-10-07T13:01:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "780435b01adcb5bff822fb64f1f17ed9add4d36f",
"body": null,
"is_bot": false,
"headline": "Revert \"Redistribute loopback address on SONiC (#165)\" (#166)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-10-02T11:44:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "671a3da2f100255e0cae3943a9d7418b1fed099e",
"body": null,
"is_bot": false,
"headline": "Redistribute loopback address on SONiC (#165)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-10-02T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8e8098742758e77258688c3535ec88d81b3ec6e",
"body": null,
"is_bot": false,
"headline": "Set loopback as source address in SONiC frr.conf (#159)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-09-09T07:57:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "930704c89b2aa0d1ed5274b792705ad0e35a6a99",
"body": "* Update to go-1.25 and alpine 3.22\n\n* Satisfy linter",
"is_bot": false,
"headline": "Update to go-1.25 and alpine 3.22 (#162)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2025-09-08T16:25:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7026a8f17b20399bb027fc9dbce48f4441c52f59",
"body": null,
"is_bot": false,
"headline": "Add vrf to vni mapping (#144)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-08-20T12:07:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f527c294083ea2b6b638414de9eb5fd24a0a0fb",
"body": null,
"is_bot": false,
"headline": "Read SONiC interfaces from ConfigDB (#161)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-08-18T07:29:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61699161ebff58c087bdaf44d60ff46da3bcf8cf",
"body": null,
"is_bot": false,
"headline": "Cleanup VLANs and VRFs on SONiC (#155)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2025-08-04T10:06:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "acc3d3e11a42401210580143e7332653ddbb756c",
"body": null,
"is_bot": false,
"headline": "Graceful shutdown (#109)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2025-07-03T11:38:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47dcbfbb6b5c6023017d5dc07e395b35369d23f6",
"body": null,
"is_bot": false,
"headline": "Include SBOM in container image (#157)",
"author_name": "Marcel Arndt",
"author_login": "mac641",
"committed_at": "2025-06-05T14:37:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ac5091a247eea420d4231e7c3ac533fbee3ca9f",
"body": "Bumps [golang.org/x/net](https://github.com/golang/net) from 0.35.0 to 0.38.0.\n- [Commits](https://github.com/golang/net/compare/v0.35.0...v0.38.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/net\n dependency-version: 0.38.0\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump golang.org/x/net from 0.35.0 to 0.38.0 (#154)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-04-17T05:36:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6dd04cf495f08cf09f7f90bea1fd231d21c367dc",
"body": null,
"is_bot": false,
"headline": "update to go-1.24 and all go modules (#146)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2025-03-03T14:02:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8dace5d164f65846e8d2bacd1220f6df216fe37",
"body": null,
"is_bot": false,
"headline": "Update go dependencies and alpine image (#141)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2025-01-23T15:31:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00cd1c59fc3a9fb4be3ad2dd5b789689ee247bc8",
"body": null,
"is_bot": false,
"headline": "Support authentication against Redis (#137)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2025-01-23T14:55:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d99dfe4c81a109f734d6488edefa24c6e05ecc43",
"body": "* feat: report bgp states of connected neighbors\n\n* remove debug log\n\n* pin metal-go",
"is_bot": false,
"headline": "feat: report bgp states of connected neighbors (#136)",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2025-01-23T14:45:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96bc55b600f2e340866ec38fb96499e63b21fb35",
"body": null,
"is_bot": false,
"headline": "Add agentx for sonic (#107)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2024-12-13T14:35:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8c102dc36e43c4d937568e89ae9a68d26ace294",
"body": null,
"is_bot": false,
"headline": "Remove the additional route map cidr default value (#134)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2024-11-25T14:12:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcbe18bb2f8ba06f4ebe8353fd1792c8d975c052",
"body": null,
"is_bot": false,
"headline": "Handle failing reloader on SONiC (#108)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2024-10-16T13:38:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4be4306096d9d039bf13426a5943e98fb18c4db1",
"body": null,
"is_bot": false,
"headline": "Remove fec config from sonic applier (#132)",
"author_name": "Ilja Rotar",
"author_login": "iljarotar",
"committed_at": "2024-10-16T12:43:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ab8042f779d0baffb76a346bf45e96a2629919b",
"body": null,
"is_bot": false,
"headline": "IPv6 Support (#127)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2024-09-11T08:51:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7aca726b3693a5d7d6c47336294266fd5c3b63d6",
"body": null,
"is_bot": false,
"headline": "Update go modules, alpine, github actions (#130)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2024-07-26T11:33:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5a384dc700fac5add871f6baf6d7d58287af382",
"body": null,
"is_bot": false,
"headline": "Make PXE VLAN configurable (#126)",
"author_name": "Simon Mayer",
"author_login": "simcod",
"committed_at": "2024-07-18T05:39:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c19070a8c043415d4d6b69683e2991cc34220aae",
"body": null,
"is_bot": false,
"headline": "fix: nil pointer (#128)",
"author_name": "Valentin Knabel",
"author_login": "vknabel",
"committed_at": "2024-07-12T12:36:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "782fd9d299bf8a1be8e0fdbd3f48981f81dbfecc",
"body": null,
"is_bot": false,
"headline": "support for switch port toggle on/off (#119)",
"author_name": "Ulrich Schreiner",
"author_login": "ulrichSchreiner",
"committed_at": "2024-05-07T11:05:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7453ba104e9967c8626de1a6496c7bee30d88d1",
"body": null,
"is_bot": false,
"headline": "Dependency updates and linter fixes. (#123)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2024-04-16T09:38:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d2270644fcf1593164a997e7212a0124bb01be4",
"body": null,
"is_bot": false,
"headline": "Support for new linters introduced in golangci-lint 1.55 (#113)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-11-06T16:44:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da98043ddb22068768fd5bdda703088eaeda88e8",
"body": null,
"is_bot": false,
"headline": "Show unit name on failing reload (#105)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-09-21T08:26:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "723da4a0035893add8c3a00af856a63ae0892a41",
"body": null,
"is_bot": false,
"headline": "Set the administrative status of the ports to up on SONiC (#104)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-09-20T11:24:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afda7ce0173670109b3c3b417e323efeb4613c8d",
"body": null,
"is_bot": false,
"headline": "Remove outdated architecture document. (#103)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2023-09-06T07:05:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32b105ad07c1539e9f0631d5cc9ba7372e8a4633",
"body": null,
"is_bot": false,
"headline": "Fix for PXE Vlan (#99)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-09-04T09:26:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68c548637686d3a61a8a4885a1459aa2ac93a189",
"body": null,
"is_bot": false,
"headline": "Migrate to go-1.21 also replace zap with slog (#100)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-08-31T10:49:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d5e42ea5fa4e5968819930b021dc55bf5d12692",
"body": null,
"is_bot": false,
"headline": "Report metal-core version (#98)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-07-05T12:08:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf318246c175299b12125687b76f085a76864807",
"body": null,
"is_bot": false,
"headline": "Sonic redis with serialized interface reconfiguration (#81)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-05-16T08:04:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5275e9cc39747da178371e76d02f7a30d1a6bf96",
"body": null,
"is_bot": false,
"headline": "add error counter to metal-core metrics (#93)",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2023-03-23T09:48:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b0eb240f7f074ded5e5a560c1a9566a1b881576",
"body": null,
"is_bot": false,
"headline": "Introduce a common applier object and validate only on changes (#90)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-03-02T17:19:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b17e6c5b777da6b52b7961e85d250f040e04cc10",
"body": null,
"is_bot": false,
"headline": "Add switch OS and Management IP reporting (#88)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-02-27T12:59:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78e0f2c80e258fde8b1674c42cfec8dfc3d61915",
"body": null,
"is_bot": false,
"headline": "Update go lldpd (#87)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-02-27T12:26:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7db73aea534f94bae3f5d1476d516a6c148d5b5c",
"body": "* introduce new package structure in switcher\r\n\r\n* reorder imports",
"is_bot": false,
"headline": "introduce new package structure in switcher (#85)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-02-24T13:16:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c8257b69d7917010241049c7920c778e47503cb",
"body": null,
"is_bot": false,
"headline": "add linter target to Makefile (#86)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2023-02-24T06:56:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5773f5b4f52b5beb234fd1c2d6ce43b6610dd526",
"body": null,
"is_bot": false,
"headline": "Spineuplinks as string slice (#84)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-02-23T12:04:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a57f7a8ed5b29089a404a4a92d2e8df82fb72919",
"body": null,
"is_bot": false,
"headline": "Simplify CI, update go/modules/alpine (#83)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2023-02-23T10:48:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efa5adfd94c54e342670ec59a9f44dce27042fd5",
"body": null,
"is_bot": false,
"headline": "Introduce Cumulus NOS (#68)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2022-09-20T13:13:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f70a05d51b45ef1844c6262754d71ce8e24a63f2",
"body": null,
"is_bot": false,
"headline": "Inline stuff from metal-networker and refactor (#70)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2022-09-20T10:33:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "096390ec05f0ddfbe480c98c3025560a0f18198c",
"body": null,
"is_bot": false,
"headline": "Make compile work locally (#74)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-08-18T11:46:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81d6960d8a199b5f61c8e9ec59f7918d5c0de75d",
"body": null,
"is_bot": false,
"headline": "bmc functionality moves to bmc-catcher (#72)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-06-27T12:23:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cbdf67bf2706a47a8ad3a3444a5187cc9defda1",
"body": null,
"is_bot": false,
"headline": "Remove unused functionality (#69)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-06-15T09:27:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "257daceba4db269a17d7065b6b50e9bc5c89bd48",
"body": null,
"is_bot": false,
"headline": "Grpc events (#63)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-06-13T13:02:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d292cd329f022db04c5eed037d755acb4a059494",
"body": null,
"is_bot": false,
"headline": "go-lldpd requires a flag to get the lldp.client package built (#59)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-06-10T07:37:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b5a2cb935ec6f0f02ba2b71bce5ec8c39959ca3",
"body": null,
"is_bot": false,
"headline": "Remove vagrant leftover (#66)",
"author_name": "Robert Volkmann",
"author_login": "robertvolkmann",
"committed_at": "2022-06-09T05:44:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "febbebdccd44ddc1e266604e28a72e4ca1d54921",
"body": null,
"is_bot": false,
"headline": "Remove powerreset on certain events (#64)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-06-02T09:03:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f26cff730398c64bcfc81e2f434195435d92642",
"body": null,
"is_bot": false,
"headline": "raise timers (#61)",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2022-04-26T11:27:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b276d52a8dacc98bddeacbb81551e31f8ec1c7aa",
"body": null,
"is_bot": false,
"headline": "Send phoned home events in batched mode (#60)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-04-21T12:29:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8bca91f41551808127ee324031e4d89749e27ce5",
"body": null,
"is_bot": false,
"headline": "Update deps, fix one new linter issue (#58)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-02-24T14:17:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b2d3687e2fb9cb8895c0a19ee2235f4e571cdef",
"body": null,
"is_bot": false,
"headline": "Remove zapup (#57)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-01-27T13:28:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c961c861387cc44f0a7d1545f38779aed8c7d7a",
"body": null,
"is_bot": false,
"headline": "Update metal-networker (#56)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-01-26T10:03:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe306e8444eb22ef35fed7f3c761971d1fb34d0a",
"body": "…t (#54)",
"is_bot": false,
"headline": "Move lldpd client logic to go-lldpd and use this, add Hint on contrac…",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-01-26T09:33:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23a64ae3f52239117c3d0b065100fe4ab5c0c156",
"body": null,
"is_bot": false,
"headline": "Use go-embed for templates instead multiline strings (#53)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2022-01-10T13:03:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7735339f6a1ca15601cbfd14acaaf26bfc4f75c0",
"body": null,
"is_bot": false,
"headline": "Spec generation now possible in docker (#52)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2021-12-03T10:19:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "380a9d5d943c9e875ee72e27f5d17858553f267d",
"body": null,
"is_bot": false,
"headline": "Update dependencies, recreate swagger spec (#50)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2021-11-18T10:11:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19cdedd665418929ca9f192da3e8184a53d83109",
"body": null,
"is_bot": false,
"headline": "Don't power off LED when registering a machine. (#49)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2021-11-18T09:20:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eaf44addfb69a125617693d3ad1b94ad8ace1987",
"body": null,
"is_bot": false,
"headline": "Machine Firmware and Bios update (#38)",
"author_name": "Sandro Koll",
"author_login": null,
"committed_at": "2021-08-17T06:37:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0085a7fdb9e598560ad126f0ed78790c0967e6d",
"body": null,
"is_bot": false,
"headline": "expose ipmi.PowerCycleMachine (#47)",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2021-07-21T06:47:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ec42cc2db38dd519c7c1199b600aa4e15ad9cb17",
"body": "Remove sequence numbers from prefix lists",
"is_bot": false,
"headline": "Merge pull request #46 from metal-stack/no-seq-in-prefix-list",
"author_name": "Michael Reiger",
"author_login": "mreiger",
"committed_at": "2021-07-19T14:31:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81f79f0f99acc26b71c15e0085a443af66eef0ab",
"body": "…n on every changed prefix",
"is_bot": false,
"headline": "Do not generate sequence numbers in prefix list to prevent route chur…",
"author_name": "mreiger",
"author_login": "mreiger",
"committed_at": "2021-07-14T11:47:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5350575bf5243d836923a3051c0b99066871885f",
"body": null,
"is_bot": false,
"headline": "Update dependencies. (#43)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2021-06-21T09:40:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36228508f3eb68254d7949a76f4c7783e67c2f64",
"body": null,
"is_bot": false,
"headline": "MEP-8 (#42)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2021-06-11T11:25:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca7c0b8b503d1d9b4886303839e16ec58eee8b24",
"body": "* Don't buffer phoned home events.\r\n\r\n* Cleanup.\r\n\r\n* Send away events for phoned home async with small timeout.",
"is_bot": false,
"headline": "Don't buffer phoned home events. (#40)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2021-04-08T08:34:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "399b74af99ad2c2ac45b6a28fa609ea71d8f554c",
"body": "Allow 2 occurences of own AS in path to account for paths involving D…",
"is_bot": false,
"headline": "Merge pull request #41 from metal-stack/increase-allowas-in",
"author_name": "mwindower",
"author_login": "mwindower",
"committed_at": "2021-04-08T06:28:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0da4ba02b5f8b221d463c6143b2482ac7ff6196a",
"body": "…MZ firewalls",
"is_bot": false,
"headline": "Allow 2 occurences of own AS in path to account for paths involving D…",
"author_name": "mreiger",
"author_login": "mreiger",
"committed_at": "2021-04-07T17:43:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb9c08966250582486d50fa1035ffb06ccca786d",
"body": null,
"is_bot": false,
"headline": "add metalctl machine power pxe/disk (#34)",
"author_name": "Markus Wennrich",
"author_login": "mwennrich",
"committed_at": "2020-11-30T12:57:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "367992dc0ac3f49d2e012606b46389d595447be3",
"body": "Move metal-core to ghcr.",
"is_bot": false,
"headline": "Merge pull request #36 from metal-stack/move-to-ghcr",
"author_name": "mwindower",
"author_login": "mwindower",
"committed_at": "2020-11-20T14:19:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b7085d671df67564dc3a88d1ab17a679d03f0d8",
"body": null,
"is_bot": false,
"headline": "Correction.",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2020-11-20T08:58:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46bedaf79214ab3655c1fd923820d8c89010e1ee",
"body": null,
"is_bot": false,
"headline": "Remove branches action.",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2020-11-20T08:42:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa6a3698b0516b46cc767419e1019a327dd71c62",
"body": null,
"is_bot": false,
"headline": "Move metal-core to ghcr.",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2020-11-20T08:41:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ca11c1e0f943dd01e4d2332b6817f124247cb6e",
"body": null,
"is_bot": false,
"headline": "do not block map (#35)",
"author_name": "Sandro Koll",
"author_login": null,
"committed_at": "2020-11-20T06:50:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fec5bc71d1595d9069536ffd31434e3c7dfc413c",
"body": null,
"is_bot": false,
"headline": "Update go-hal and metal-go (#33)",
"author_name": "Stefan Majer",
"author_login": "majst01",
"committed_at": "2020-11-19T05:59:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96cbce5dd66a957bf6b429fe6148441bdeba38e7",
"body": null,
"is_bot": false,
"headline": "Bump go hal to v0.2.1 (#31)",
"author_name": "Sandro Koll",
"author_login": null,
"committed_at": "2020-11-04T10:03:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f57e55ef191afacec04dafeead526aa51edf82bd",
"body": null,
"is_bot": false,
"headline": "Correcting release build trigger. (#30)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2020-10-28T08:59:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b5b881e2d66f46c637be21704d1f7c1cb62d11f",
"body": null,
"is_bot": false,
"headline": "Add release drafter. (#29)",
"author_name": "Gerrit",
"author_login": "Gerrit91",
"committed_at": "2020-10-22T11:19:17Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 47,
"commits_last_year": 29,
"latest_release_at": "2026-07-17T11:00:02Z",
"latest_release_tag": "v0.17.0",
"releases_from_tags": false,
"days_since_last_push": 1,
"active_weeks_last_year": 20,
"days_since_latest_release": 7,
"mean_days_between_releases": 29.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "github.com/metal-stack/metal-core",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/metal-stack/metal-core",
"is_deprecated": false,
"latest_version": "v0.17.0",
"repository_url": "https://github.com/metal-stack/metal-core",
"versions_count": 67,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-17T10:58:56Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
}
]
},
"popularity": {
"forks": 0,
"stars": 12,
"watchers": 7,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 10
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 40700,
"source_files_sampled": 52,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.81.1",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 9.1,
"advisory_ids": [
"GHSA-hrxh-6v49-42gf"
],
"fixed_version": "1.82.1",
"advisory_count": 1,
"oldest_advisory_days": 3
},
{
"name": "golang.org/x/text",
"direct": true,
"version": "v0.38.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5970"
],
"fixed_version": "0.39.0",
"advisory_count": 1,
"oldest_advisory_days": 10
},
{
"name": "golang.org/x/crypto",
"direct": false,
"version": "v0.53.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5932"
],
"fixed_version": null,
"advisory_count": 1,
"oldest_advisory_days": 17
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"unknown": 2,
"critical": 1
},
"advisory_count": 3,
"affected_count": 3,
"assessed_count": 85,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 2
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/alicebob/miniredis/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.37.0"
},
{
"name": "github.com/avast/retry-go/v4",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v4.7.0"
},
{
"name": "github.com/coreos/go-systemd/v22",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v22.7.0"
},
{
"name": "github.com/google/go-cmp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.7.0"
},
{
"name": "github.com/kelseyhightower/envconfig",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.0"
},
{
"name": "github.com/metal-stack/go-lldpd",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.12"
},
{
"name": "github.com/metal-stack/metal-api",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.45.0"
},
{
"name": "github.com/metal-stack/metal-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.45.0"
},
{
"name": "github.com/metal-stack/metal-lib",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.25.1"
},
{
"name": "github.com/metal-stack/v",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.3"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/valkey-io/valkey-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.74"
},
{
"name": "github.com/vishvananda/netlink",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.1"
},
{
"name": "go4.org/netipx",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20231129151722-fdeea329fbba"
},
{
"name": "golang.org/x/text",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.38.0"
},
{
"name": "google.golang.org/grpc",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.81.1"
},
{
"name": "google.golang.org/protobuf",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.36.11"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/alicebob/miniredis/v2",
"direct": true,
"version": "v2.37.0",
"ecosystem": "go"
},
{
"name": "github.com/avast/retry-go/v4",
"direct": true,
"version": "v4.7.0",
"ecosystem": "go"
},
{
"name": "github.com/coreos/go-systemd/v22",
"direct": true,
"version": "v22.7.0",
"ecosystem": "go"
},
{
"name": "github.com/google/go-cmp",
"direct": true,
"version": "v0.7.0",
"ecosystem": "go"
},
{
"name": "github.com/kelseyhightower/envconfig",
"direct": true,
"version": "v1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/go-lldpd",
"direct": true,
"version": "v0.4.12",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/metal-api",
"direct": true,
"version": "v0.45.0",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/metal-go",
"direct": true,
"version": "v0.45.0",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/metal-lib",
"direct": true,
"version": "v0.25.1",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/v",
"direct": true,
"version": "v1.0.3",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/client_golang",
"direct": true,
"version": "v1.23.2",
"ecosystem": "go"
},
{
"name": "github.com/stretchr/testify",
"direct": true,
"version": "v1.11.1",
"ecosystem": "go"
},
{
"name": "github.com/valkey-io/valkey-go",
"direct": true,
"version": "v1.0.74",
"ecosystem": "go"
},
{
"name": "github.com/vishvananda/netlink",
"direct": true,
"version": "v1.3.1",
"ecosystem": "go"
},
{
"name": "go4.org/netipx",
"direct": true,
"version": "v0.0.0-20231129151722-fdeea329fbba",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": true,
"version": "v0.38.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.81.1",
"ecosystem": "go"
},
{
"name": "google.golang.org/protobuf",
"direct": true,
"version": "v1.36.11",
"ecosystem": "go"
},
{
"name": "gopkg.in/yaml.v3",
"direct": true,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "github.com/beorn7/perks",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/cespare/xxhash/v2",
"direct": false,
"version": "v2.3.0",
"ecosystem": "go"
},
{
"name": "github.com/coreos/go-oidc/v3",
"direct": false,
"version": "v3.19.0",
"ecosystem": "go"
},
{
"name": "github.com/davecgh/go-spew",
"direct": false,
"version": "v1.1.2-0.20180830191138-d8f796af33cc",
"ecosystem": "go"
},
{
"name": "github.com/decred/dcrd/dcrec/secp256k1/v4",
"direct": false,
"version": "v4.4.1",
"ecosystem": "go"
},
{
"name": "github.com/go-jose/go-jose/v4",
"direct": false,
"version": "v4.1.4",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/logr",
"direct": false,
"version": "v1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/stdr",
"direct": false,
"version": "v1.2.2",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/analysis",
"direct": false,
"version": "v0.25.2",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/errors",
"direct": false,
"version": "v0.22.8",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/jsonpointer",
"direct": false,
"version": "v0.23.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/jsonreference",
"direct": false,
"version": "v0.21.6",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/loads",
"direct": false,
"version": "v0.24.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/runtime",
"direct": false,
"version": "v0.32.4",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/runtime/server-middleware",
"direct": false,
"version": "v0.30.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/spec",
"direct": false,
"version": "v0.22.6",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/strfmt",
"direct": false,
"version": "v0.26.3",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag",
"direct": false,
"version": "v0.26.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/cmdutils",
"direct": false,
"version": "v0.26.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/conv",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/fileutils",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/jsonname",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/jsonutils",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/loading",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/mangling",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/netutils",
"direct": false,
"version": "v0.26.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/stringutils",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/typeutils",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/yamlutils",
"direct": false,
"version": "v0.26.1",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/validate",
"direct": false,
"version": "v0.26.0",
"ecosystem": "go"
},
{
"name": "github.com/go-viper/mapstructure/v2",
"direct": false,
"version": "v2.5.0",
"ecosystem": "go"
},
{
"name": "github.com/goccy/go-json",
"direct": false,
"version": "v0.10.6",
"ecosystem": "go"
},
{
"name": "github.com/godbus/dbus/v5",
"direct": false,
"version": "v5.2.2",
"ecosystem": "go"
},
{
"name": "github.com/golang-jwt/jwt/v5",
"direct": false,
"version": "v5.3.1",
"ecosystem": "go"
},
{
"name": "github.com/google/gopacket",
"direct": false,
"version": "v1.1.19",
"ecosystem": "go"
},
{
"name": "github.com/google/uuid",
"direct": false,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/gorilla/mux",
"direct": false,
"version": "v1.8.1",
"ecosystem": "go"
},
{
"name": "github.com/lestrrat-go/blackmagic",
"direct": false,
"version": "v1.0.4",
"ecosystem": "go"
},
{
"name": "github.com/lestrrat-go/httpcc",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/lestrrat-go/httprc/v3",
"direct": false,
"version": "v3.0.6",
"ecosystem": "go"
},
{
"name": "github.com/lestrrat-go/jwx/v3",
"direct": false,
"version": "v3.1.1",
"ecosystem": "go"
},
{
"name": "github.com/lestrrat-go/option/v2",
"direct": false,
"version": "v2.0.0",
"ecosystem": "go"
},
{
"name": "github.com/mdlayher/ethernet",
"direct": false,
"version": "v0.0.0-20220221185849-529eae5b6118",
"ecosystem": "go"
},
{
"name": "github.com/mdlayher/lldp",
"direct": false,
"version": "v0.0.0-20150915211757-afd9f83164c5",
"ecosystem": "go"
},
{
"name": "github.com/metal-stack/security",
"direct": false,
"version": "v0.9.6",
"ecosystem": "go"
},
{
"name": "github.com/munnerz/goautoneg",
"direct": false,
"version": "v0.0.0-20191010083416-a7dc8b61c822",
"ecosystem": "go"
},
{
"name": "github.com/oklog/ulid/v2",
"direct": false,
"version": "v2.1.1",
"ecosystem": "go"
},
{
"name": "github.com/pmezard/go-difflib",
"direct": false,
"version": "v1.0.1-0.20181226105442-5d4384ee4fb2",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/client_model",
"direct": false,
"version": "v0.6.2",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/common",
"direct": false,
"version": "v0.69.0",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/procfs",
"direct": false,
"version": "v0.20.1",
"ecosystem": "go"
},
{
"name": "github.com/segmentio/asm",
"direct": false,
"version": "v1.2.1",
"ecosystem": "go"
},
{
"name": "github.com/valyala/fastjson",
"direct": false,
"version": "v1.6.10",
"ecosystem": "go"
},
{
"name": "github.com/vishvananda/netns",
"direct": false,
"version": "v0.0.5",
"ecosystem": "go"
},
{
"name": "github.com/yuin/gopher-lua",
"direct": false,
"version": "v1.1.2",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/auto/sdk",
"direct": false,
"version": "v1.2.1",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel",
"direct": false,
"version": "v1.44.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/metric",
"direct": false,
"version": "v1.44.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/trace",
"direct": false,
"version": "v1.44.0",
"ecosystem": "go"
},
{
"name": "go.yaml.in/yaml/v3",
"direct": false,
"version": "v3.0.4",
"ecosystem": "go"
},
{
"name": "golang.org/x/crypto",
"direct": false,
"version": "v0.53.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.56.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/oauth2",
"direct": false,
"version": "v0.36.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sync",
"direct": false,
"version": "v0.21.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.46.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/rpc",
"direct": false,
"version": "v0.0.0-20260622175928-b703f567277d",
"ecosystem": "go"
}
],
"collected": true,
"truncated": false,
"total_count": 85,
"direct_count": 19,
"indirect_count": 66
}
},
"maintainership": {
"issues": {
"open_prs": 3,
"merged_prs": 110,
"open_issues": 7,
"closed_ratio": 0.816,
"closed_issues": 31,
"closed_unmerged_prs": 47
},
"bus_factor": 2,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "majst01",
"commits": 136,
"avatar_url": "https://avatars.githubusercontent.com/u/410110?v=4"
},
{
"type": "User",
"login": "mwindower",
"commits": 96,
"avatar_url": "https://avatars.githubusercontent.com/u/1819933?v=4"
},
{
"type": "User",
"login": "Gerrit91",
"commits": 56,
"avatar_url": "https://avatars.githubusercontent.com/u/15035165?v=4"
},
{
"type": "User",
"login": "ulrichSchreiner",
"commits": 26,
"avatar_url": "https://avatars.githubusercontent.com/u/1642951?v=4"
},
{
"type": "User",
"login": "iljarotar",
"commits": 19,
"avatar_url": "https://avatars.githubusercontent.com/u/77339620?v=4"
},
{
"type": "User",
"login": "robertvolkmann",
"commits": 13,
"avatar_url": "https://avatars.githubusercontent.com/u/20912167?v=4"
},
{
"type": "User",
"login": "suckowbiz",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/13817930?v=4"
},
{
"type": "User",
"login": "mwennrich",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/1422442?v=4"
},
{
"type": "User",
"login": "mreiger",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/47994873?v=4"
},
{
"type": "User",
"login": "mac641",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/33572038?v=4"
}
],
"contributors_sampled": 12,
"top_contributor_share": 0.371
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"docker.yaml",
"release-drafter.yaml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 9,
"reason": "28 out of 29 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": 10,
"reason": "all changesets reviewed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 6 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 5,
"reason": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"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": 7,
"reason": "3 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "a61ab583b07793fae6585bd72eb8ca0f559e7e4e",
"ran_at": "2026-07-25T03:30:39Z",
"aggregate_score": 6,
"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-17T11:01:07Z",
"oldest_open_prs": [
{
"number": 169,
"created_at": "2025-10-14T09:55:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 171,
"created_at": "2025-10-27T13:39:34Z",
"last_comment_at": "2026-03-18T08:41:35Z",
"last_comment_author": "iljarotar"
},
{
"number": 193,
"created_at": "2026-06-12T11:52:57Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-17T10:58:57Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 55,
"created_at": "2022-01-26T09:32:36Z",
"last_comment_at": "2025-07-18T08:52:48Z",
"last_comment_author": "majst01"
},
{
"number": 101,
"created_at": "2023-09-04T09:26:31Z",
"last_comment_at": "2025-06-18T15:49:52Z",
"last_comment_author": "mwindower"
},
{
"number": 156,
"created_at": "2025-05-28T13:38:24Z",
"last_comment_at": "2026-05-05T19:54:31Z",
"last_comment_author": "iljarotar"
},
{
"number": 172,
"created_at": "2025-11-18T10:39:36Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 189,
"created_at": "2026-04-20T08:57:35Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 199,
"created_at": "2026-07-09T07:45:20Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 200,
"created_at": "2026-07-23T08:02:46Z",
"last_comment_at": "2026-07-23T09:14:17Z",
"last_comment_author": "mwindower"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/metal-stack/metal-core",
"host": "github.com",
"name": "metal-core",
"owner": "metal-stack"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 67 is calibrated to 78 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 67,
"calibrated": 78,
"calibration": "2026-08-02"
}
}
],
"value": 78,
"inputs": {
"security": 61,
"vitality": 81,
"community": 47,
"governance": 77,
"calibration": "2026-08-02",
"engineering": 64,
"ai_readiness": 65,
"weighted_overall_raw": 67
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 81,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"commits_last_year": 29,
"human_commit_share": 0.96,
"days_since_last_push": 1,
"active_weeks_last_year": 20
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "20/52 weeks with commits",
"points": 13.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 20
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "29 commits in the last year",
"points": 13.3,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 29
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"points": 5,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "exceptional",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 47,
"latest_release_tag": "v0.17.0",
"releases_from_tags": false,
"days_since_latest_release": 7,
"mean_days_between_releases": 29.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "47 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 47
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~29.8 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 29.8
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 16,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 16 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 16
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "weak",
"name": "Community & Adoption",
"value": 47,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 21,
"inputs": {
"forks": 0,
"stars": 12,
"watchers": 7,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "12 stars",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 12
}
}
],
"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": "7 watchers",
"points": 4.3,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 7
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (AGPL-3.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "AGPL-3.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"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": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 77,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 12,
"top_contributor_share": 0.371
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 37% of commits",
"points": 14.2,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 37
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "12 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 12
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 81,
"inputs": {
"merged_prs": 110,
"open_issues": 7,
"closed_issues": 31,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.816,
"closed_unmerged_prs": 47,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "82% of issues closed",
"points": 34.3,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 82
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "110/157 decided PRs merged",
"points": 21,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 110,
"decided": 157
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "all changesets reviewed",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"followers": 126,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "metal-stack",
"public_repos": 99,
"account_age_days": 2418
},
"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": "126 followers of metal-stack",
"points": 15.1,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 126,
"login": "metal-stack"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "99 public repos, account ~6 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 99
}
},
{
"code": "account_age_years",
"params": {
"years": 6
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/metal-stack/metal-core"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 7
},
"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 7 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 7
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "67 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 67
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 64,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "28 out of 29 merged PRs checked by a CI test -- score normalized to 9",
"points": 18,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"topics": [
"metal"
],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"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": 0,
"status": "missed",
"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": "moderate",
"name": "Security",
"value": 61,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "28 out of 29 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": "all changesets reviewed",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"points": 3.8,
"status": "partial",
"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": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": "3 existing vulnerabilities detected",
"points": 5.2,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "good",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 85 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 85
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 65,
"inputs": {
"source": "osv",
"advisories": 3,
"affected_packages": 3,
"assessed_packages": 85,
"unassessed_packages": 0,
"affected_by_severity": "critical 1, unknown 2",
"direct_affected_packages": 2
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "2 affected: google.golang.org/grpc v1.81.1 (critical 9.1), golang.org/x/text v0.38.0 (unknown)",
"points": 8.9,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 2,
"packages": "google.golang.org/grpc v1.81.1 (critical 9.1), golang.org/x/text v0.38.0 (unknown)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 85,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "exceptional",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 10
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 65,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "weak",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.917,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "88 of 96 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 88,
"sampled": 96
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.01,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0.04
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "1 of the last 100 commits agent-authored or agent-credited",
"points": 2,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "4 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 4,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 40700,
"source_files_sampled": 52,
"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/52 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 52,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"metrics_version": "2.1.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-25T03:31:01.408303Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/metal-stack/metal-core.svg",
"full_name": "metal-stack/metal-core",
"license_state": "standard",
"license_spdx": "AGPL-3.0"
}