原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 165,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 200427,
"Makefile": 1427
},
"pushed_at": "2026-07-03T15:47:55Z",
"created_at": "2026-03-13T17:15:48Z",
"owner_type": "Organization",
"updated_at": "2026-07-03T15:47:59Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "Wahrwelt",
"type": "Organization",
"login": "wahrwelt-kit",
"company": null,
"location": null,
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/269768113?v=4",
"created_at": "2026-03-20T16:16:43Z",
"is_verified": null,
"public_repos": 8,
"account_age_days": 127
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2026-07-03T15:49:17Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2026-07-03T10:32:13Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2026-05-04T17:28:20Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2026-04-18T19:19:05Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-03-28T12:04:55Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2026-03-24T13:15:16Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-03-19T20:33:33Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-03-16T17:13:09Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-03-16T16:48:49Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-03-15T09:50:26Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-03-14T21:42:30Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-03-13T21:34:43Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-03-13T18:08:39Z"
}
],
"recent_commits": [
{
"oid": "9b4e0ad070a470c37e1e309d7c28cfd430b7c51f",
"body": null,
"is_bot": false,
"headline": "refactor: switch logging api to slog",
"author_name": "TakuyaYagam1",
"author_login": "TakuyaYagam1",
"committed_at": "2026-07-03T15:47:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "743e697ec1384522c23d4a16c659e20b67192307",
"body": null,
"is_bot": false,
"headline": "feat: harden http utilities",
"author_name": "TakuyaYagam1",
"author_login": "TakuyaYagam1",
"committed_at": "2026-07-03T10:30:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a4312b86ae20608a3a8e79af955cc220760c476",
"body": "Bumps [golang.org/x/text](https://github.com/golang/text) from 0.37.0 to 0.38.0.\n- [Release notes](https://github.com/golang/text/releases)\n- [Commits](https://github.com/golang/text/compare/v0.37.0...v0.38.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/text\n dependency-version: 0.38\n[…]\nirect:production\n update-type: version-update:semver-minor\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": "chore(deps): bump golang.org/x/text from 0.37.0 to 0.38.0 (#8)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-16T17:45:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1831c862582a367ea7fe5f38037026bc79cc70a1",
"body": "Bumps [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) from 10.30.2 to 10.30.3.\n- [Release notes](https://github.com/go-playground/validator/releases)\n- [Commits](https://github.com/go-playground/validator/compare/v10.30.2...v10.30.3)\n\n---\nupdated-dependencies:\n- \n[…]\nirect:production\n update-type: version-update:semver-patch\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": "chore(deps): bump github.com/go-playground/validator/v10 (#7)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-01T10:58:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f4ab438ef5496cfc11a063b00dac7631f2e9f533",
"body": "Bumps [github.com/go-chi/chi/v5](https://github.com/go-chi/chi) from 5.2.5 to 5.3.0.\n- [Release notes](https://github.com/go-chi/chi/releases)\n- [Changelog](https://github.com/go-chi/chi/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/go-chi/chi/compare/v5.2.5...v5.3.0)\n\n---\nupdated-depende\n[…]\nirect:production\n update-type: version-update:semver-minor\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": "chore(deps): bump github.com/go-chi/chi/v5 from 5.2.5 to 5.3.0 (#6)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-25T06:37:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "04ef2392073f5865db12b48d5505fff3c1603800",
"body": "Bumps [golang.org/x/text](https://github.com/golang/text) from 0.36.0 to 0.37.0.\n- [Release notes](https://github.com/golang/text/releases)\n- [Commits](https://github.com/golang/text/compare/v0.36.0...v0.37.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/text\n dependency-version: 0.37\n[…]\nirect:production\n update-type: version-update:semver-minor\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": "chore(deps): bump golang.org/x/text from 0.36.0 to 0.37.0 (#5)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-11T10:49:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca048fd345166773d4cd2586ab15e49ea05c0650",
"body": "…nt issues\n\n- pin golangci-lint to v2.12.1 in CI to avoid surprise breaks on linter upgrades\n- bump go-logkit from v0.4.1 to v0.5.0 (transitive: zerolog, mattn/go-isatty, sys)\n- extract httperr error code constants into httperr/codes.go (public contract)\n- extract httputil shared message constants i\n[…]\nrors.As to errors.AsType (Go 1.26)\n- modernize backward loop to slices.Backward (Go 1.23)\n- pin gosec G120 with rationale; body is bounded by http.MaxBytesReader\n- disable deprecated gomodguard linter",
"is_bot": false,
"headline": "chore: pin golangci-lint to v2.12.1, bump go-logkit to v0.5.0, fix li…",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-05-04T17:26:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "701b1295903a96928efc8ba1cc2f27b84337fd18",
"body": "errgroup ran fetchFn and countFn in parallel goroutines sharing the\nsame context. when a pgx.Tx was stored in that context (e.g. inside a\nTM.ReadOnly closure) both goroutines resolved to the same transaction\nconnection, causing the second query to fail with \"conn busy\". removed\nerrgroup and execute fetch then count sequentially — safe for both pool\nand transaction callers. no regression for non-tx usage since sequential\npool calls each borrow their own connection.",
"is_bot": false,
"headline": "fix(httputil): run FetchPage queries sequentially to avoid conn busy",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-04-18T19:17:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "108117d074c4b352625a3bdc248e76eec2a9721a",
"body": "Bumps [golang.org/x/text](https://github.com/golang/text) from 0.35.0 to 0.36.0.\n- [Release notes](https://github.com/golang/text/releases)\n- [Commits](https://github.com/golang/text/compare/v0.35.0...v0.36.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/text\n dependency-version: 0.36\n[…]\nirect:production\n update-type: version-update:semver-minor\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": "chore(deps): bump golang.org/x/text from 0.35.0 to 0.36.0 (#3)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-04-14T19:35:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ee24e33f6ae36095cfe64c2400df04793ac1398d",
"body": "Bumps [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) from 10.30.1 to 10.30.2.\n- [Release notes](https://github.com/go-playground/validator/releases)\n- [Commits](https://github.com/go-playground/validator/compare/v10.30.1...v10.30.2)\n\n---\nupdated-dependencies:\n- \n[…]\nirect:production\n update-type: version-update:semver-patch\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": "chore(deps): bump github.com/go-playground/validator/v10 (#2)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-04-06T06:18:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a5022130d942cb1667b26ade4a3c6bbf126ec3e9",
"body": null,
"is_bot": false,
"headline": "fix: replace gci with goimports for import formatting",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-28T18:05:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4c734cb43a557f173ce1d91e5e065e972ac7b3b",
"body": null,
"is_bot": false,
"headline": "fix: resolve lint issues from strict golangci-lint config migration",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-28T16:02:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82dda7c23133e36ef82531083aa97dff675064e8",
"body": null,
"is_bot": false,
"headline": "chore: bump go-logkit to v0.4.1",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-28T12:49:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b08dd1ec97f6c48193d64ab96c42ad0c0146c0d",
"body": "- Add I18n middleware with Accept-Language header, query param, and\n cookie language resolution (priority: cookie > query > header)\n- Add GetLocalizer and Localize context helpers\n- Add golangci-lint v2 configuration with curated linter set",
"is_bot": false,
"headline": "feat: add i18n middleware, golangci-lint",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-28T12:05:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc036ad13de6766a67e27d99b631858909562b66",
"body": null,
"is_bot": false,
"headline": "chore: update go.mod and go.sum",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-24T12:58:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70c7644ea7292d2a37128c04d8a3494abe9b3546",
"body": null,
"is_bot": false,
"headline": "chore: sync workspace",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-24T12:47:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a88b9e5475a07a5ff21daaa1cc0138e009bbc5d",
"body": null,
"is_bot": false,
"headline": "fix: remove local replace directive for go-logkit",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-20T17:40:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7dea0ed4992fe946b27489ca3cf8a813aecb243a",
"body": null,
"is_bot": false,
"headline": "refactor: migrate module path to takuya-go-kit org",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-20T16:36:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fcea75bf06c03b0985435eb392981aa3e1dcc0a",
"body": null,
"is_bot": false,
"headline": "docs(httpkit): add CI, Go Reference, Go Report Card badges",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-19T20:43:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca8d32abd4db278868b83a8ba63ca2eede170e57",
"body": "…dleware tests",
"is_bot": false,
"headline": "feat(httpkit): statusWriter, DecodeOption, expanded error/request/mid…",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-19T20:32:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47649b56ac241f5b3ea0f6ba77e625c956e63e11",
"body": null,
"is_bot": false,
"headline": "fix(ci): run workflow on push to main (drop paths and working-directory)",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-16T17:20:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31b0b3697b37a4f77a22984e69fb7852f655a997",
"body": null,
"is_bot": false,
"headline": "test(go-httpkit): use go-logkit MockLogger in logger middleware tests",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-16T17:06:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fc081a145e0be295f794e2211205fb42c64ffec",
"body": null,
"is_bot": false,
"headline": "chore: drop golangci-lint from kit libs (Makefile + CI)",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-16T16:56:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49d67dac87a5015c208392ae392677a3b96de2b2",
"body": "- httputil/doc.go, middleware/doc.go: sectioned package docs (errors, pagination, client IP, SSE, health, TimeoutWithLimit, ValidationHTTPError, GetClientIP deprecated, ErrInvalidContentType, etc.).\n- SSE: NewSSEWriterWithLimit, MaxEventBytes, ErrSSEPayloadTooLarge; health: HealthOnEncodeError, Heal\n[…]\neBodyTooLarge; Recoverer/RequestID/SecurityHeaders/Metrics updates.\n- httputil: Paginated/FetchPage, error/validation shapes, request/response tweaks.\n- .github/workflows/ci.yml, dependabot, Makefile.",
"is_bot": false,
"headline": "feat(httpkit): structured docs, SSE/health/download, middleware, CI",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-16T16:47:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "963155c2e818e1e51ab96e1429059e17a56988b2",
"body": null,
"is_bot": false,
"headline": "feat(httpkit): update go.mod",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-15T11:11:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a22e9a7d48633ab09800e7b48a6a771b884d5ab1",
"body": "- httperr: add sentinels (Forbidden, NotFound, Conflict, Gone, UnprocessableEntity, TooManyRequests, ServiceUnavailable); CodeFromStatus 422/503\n- httputil: ParseBoolQuery, ParseEnumQuery, ParseSortQuery, ParseTimeQuery; SSEWriter, ErrSSEClosed; Checker, HealthHandler\n- middleware: Recoverer(log), S\n[…]\nRequestID; Metrics AlreadyRegisteredError handling\n- ErrorHandler nil Logger check; DecodeAndValidateE IsExpected; multipart error wrap; EscapeILIKE truncate without full []rune; validation doc; tests",
"is_bot": false,
"headline": "feat(httpkit): query, SSE, health, middleware; error/logging fixes",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-15T09:49:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "197a001578be2c90dbd1c2fc7ea9d525b77bf02d",
"body": "…Meta, IsExpectedClientError",
"is_bot": false,
"headline": "feat(go-httpkit): ErrorHandler with go-logkit, TotalPages, Pagination…",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-14T21:41:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a528a6df8c16d787e67b4fa4ef0917a7b1498a9",
"body": null,
"is_bot": false,
"headline": "feat(httperr): add IsExpected, re-export types from consumer",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-13T21:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4f331973133f9301bf00981177a2f01da25ec50",
"body": null,
"is_bot": false,
"headline": "feat: add httperr, httputil and Prometheus middleware",
"author_name": "takuya",
"author_login": "TakuyaYagam1",
"committed_at": "2026-03-13T17:25:22Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 13,
"commits_last_year": 29,
"latest_release_at": "2026-07-03T15:49:17Z",
"latest_release_tag": "v0.7.0",
"releases_from_tags": false,
"days_since_last_push": 22,
"active_weeks_last_year": 13,
"days_since_latest_release": 22,
"mean_days_between_releases": 12.2
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"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/wahrwelt-kit/go-httpkit",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/wahrwelt-kit/go-httpkit",
"is_deprecated": false,
"latest_version": "v0.7.0",
"repository_url": "https://github.com/wahrwelt-kit/go-httpkit",
"versions_count": 15,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-03T15:47:41Z",
"latest_version_yanked": null,
"days_since_latest_publish": 22
},
{
"name": "github.com/wahrwelt-kit/go-httpkit/metrics",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/wahrwelt-kit/go-httpkit/metrics",
"is_deprecated": false,
"latest_version": "v0.7.0",
"repository_url": "https://github.com/wahrwelt-kit/go-httpkit",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-03T15:47:41Z",
"latest_version_yanked": null,
"days_since_latest_publish": 22
},
{
"name": "github.com/wahrwelt-kit/go-httpkit/localization",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/wahrwelt-kit/go-httpkit/localization",
"is_deprecated": false,
"latest_version": "v0.7.0",
"repository_url": "https://github.com/wahrwelt-kit/go-httpkit",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-03T15:47:41Z",
"latest_version_yanked": null,
"days_since_latest_publish": 22
}
]
},
"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": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod",
"localization/go.mod",
"metrics/go.mod"
],
"largest_source_bytes": 13533,
"source_files_sampled": 65,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"go.mod",
"localization/go.mod",
"metrics/go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/go-playground/validator/v10",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v10.30.3"
},
{
"name": "github.com/google/uuid",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/nicksnyder/go-i18n/v2",
"manifest": "localization/go.mod",
"ecosystem": "go",
"version_constraint": "v2.6.1"
},
{
"name": "github.com/stretchr/testify",
"manifest": "localization/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "golang.org/x/text",
"manifest": "localization/go.mod",
"ecosystem": "go",
"version_constraint": "v0.38.0"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "metrics/go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "metrics/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 6,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 2
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "TakuyaYagam1",
"commits": 23,
"avatar_url": "https://avatars.githubusercontent.com/u/145888123?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": false,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 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": 10,
"reason": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/23 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": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 10,
"reason": "project is 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": "7 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": null,
"reason": "packaging workflow not 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": "9b4e0ad070a470c37e1e309d7c28cfd430b7c51f",
"ran_at": "2026-07-25T19:23:41Z",
"aggregate_score": 5.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T02:13:31Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-06-16T17:45:57Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/wahrwelt-kit/go-httpkit",
"host": "github.com",
"name": "go-httpkit",
"owner": "wahrwelt-kit"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"security": 53,
"vitality": 74,
"community": 24,
"governance": 47,
"engineering": 66
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 74,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"commits_last_year": 29,
"human_commit_share": 0.793,
"days_since_last_push": 22,
"active_weeks_last_year": 13
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 22 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 22
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "13/52 weeks with commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 13
}
}
],
"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": "7 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": "excellent",
"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": 13,
"latest_release_tag": "v0.7.0",
"releases_from_tags": false,
"days_since_latest_release": 22,
"mean_days_between_releases": 12.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "13 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 13
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 22 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 22
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~12.2 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 12.2
}
}
],
"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": "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": 24,
"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": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"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": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"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": "at_risk",
"name": "Sustainability & Governance",
"value": 47,
"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": "moderate",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 54,
"inputs": {
"merged_prs": 6,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 2
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "6/8 decided PRs merged",
"points": 28.7,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 6,
"decided": 8
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"followers": 0,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "wahrwelt-kit",
"public_repos": 8,
"account_age_days": 127
},
"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": "0 followers of wahrwelt-kit",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "wahrwelt-kit"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "8 public repos, account ~0 yr old",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 8
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/wahrwelt-kit/go-httpkit",
"github.com/wahrwelt-kit/go-httpkit/metrics",
"github.com/wahrwelt-kit/go-httpkit/localization"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 22
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "3 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 3,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 22 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 22
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "15 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 15
}
}
],
"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": 66,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "at_risk",
"name": "Documentation",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": false
},
"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": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 53,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 53,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 5.3
},
"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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/23 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": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is fuzzed",
"points": 5,
"status": "met",
"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": "7 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 not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 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
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 69,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"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": "23 of 23 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 23,
"sampled": 23
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 80,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod",
"localization/go.mod",
"metrics/go.mod"
],
"dependency_bot_commit_share": 0.207
},
"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": ".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": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 29",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 29
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "6 of the last 29 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 6,
"sampled": 29
}
}
],
"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": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 13533,
"source_files_sampled": 65,
"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/65 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 65,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"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": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-25T19:23:48.610597Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wahrwelt-kit/go-httpkit.svg",
"full_name": "wahrwelt-kit/go-httpkit",
"license_state": "standard",
"license_spdx": "MIT"
}