JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"api-client",
"commodity-prices",
"energy-data",
"go",
"oil-prices"
],
"is_fork": false,
"size_kb": 305,
"has_wiki": false,
"homepage": "https://pkg.go.dev/github.com/OilpriceAPI/oilpriceapi-go",
"languages": {
"Go": 274351,
"Shell": 2404
},
"pushed_at": "2026-07-25T17:44:31Z",
"created_at": "2026-02-14T14:25:11Z",
"owner_type": "Organization",
"updated_at": "2026-07-25T17:44:34Z",
"description": "Source-timestamped OilPriceAPI energy data for Go with typed errors and tested production quickstarts.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "https://www.oilpriceapi.com",
"name": "OilPriceAPI",
"type": "Organization",
"login": "OilpriceAPI",
"company": null,
"location": "United States of America",
"followers": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/152923419?v=4",
"created_at": "2023-12-04T20:40:00Z",
"is_verified": null,
"public_repos": 18,
"account_age_days": 965
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-07-19T14:32:31Z"
},
{
"tag": "v1.3.1",
"kind": "patch",
"published_at": "2026-07-03T14:13:34Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-07-03T13:17:59Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-06-21T21:14:38Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2026-06-21T17:13:22Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-06-21T16:41:26Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-06-20T22:17:02Z"
}
],
"recent_commits": [
{
"oid": "ec129a181ba4e2b4020f71625a748675d21dd9e6",
"body": null,
"is_bot": false,
"headline": "docs: add MIT license (#25)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-25T17:44:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24cb4e9f174d2eabf1a6b6aef86bad184f415ec3",
"body": "* feat: well-production client + fix stale drilling types (#17)\n\nAdds client.WellProduction() covering all seven /v1/well-production*\nendpoints (national summary, state summaries, state history, well\nhistory, top producers, cycle-time, cycle-time cohorts) with typed\nresponses, WithProduction* functi\n[…]\n against production.\n\nCloses #17\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* docs: clarify Go well-production coverage\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: well-production client + fix stale drilling types (#17) (#21)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-19T19:45:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f613f31f10afa6e713fc3428470cc54878d14bf9",
"body": null,
"is_bot": false,
"headline": "fix: align latest-price quickstart with production (#24)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-19T14:32:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8b0954f22bb7c4f32cf1f32ba8cba0a24b6ffefb",
"body": "…ing (#4175) (#19)\n\nSource fields are already free-string typed (no venue enum to loosen); this\naligns example/fixture source values with the API switch to market_reporting\nmasked labels (government labels like EIA/opec.org unchanged). Version bumped\n(patch, unpublished).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: drop venue-typed source enums; align examples with market_report…",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-10T14:20:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d2a3018eb02bf83d122fb2e2acfe485b88eceb53",
"body": "Co-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: link interactive API explorer + OpenAPI spec (#16)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-03T14:12:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "355517209005fc4d36e540e0020f24fe887cfda2",
"body": "Apply the shared registry-storefront formula from the PHP SDK:\n- hero line (oil/gas/LNG/carbon/fuels in under 60 seconds) + audience line + 2M+ requests/month\n- nav line with utm_source=go-sdk and quick-start jump link (existing go.dev + goreportcard badges kept)\n- \"What can you get?\" 10-commodity t\n[…]\nhole OilPriceAPI toolbox\" cross-SDK table before Support\n\nNo version files touched; v1.3.1 will be tagged after merge so pkg.go.dev picks it up.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: registry storefront README (#15)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-03T13:59:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0012d5cb02160195b56c148737951f515962af76",
"body": "Add (*Client).Raw(ctx, method, path, query, v) so any API endpoint the\nSDK does not wrap with a typed method is still reachable. Raw reuses the\nexisting doRequest helper, so it gets the same Token authentication,\nUser-Agent, retry/backoff (429 + 5xx with Retry-After support), and\ntyped error handlin\n[…]\ns are first-class and that everything else goes through Raw(),\nwith deeper typed coverage landing based on demand.\n\nRefs #12 (surface-gap half).\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add Raw() escape hatch for unwrapped API endpoints (#14)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-03T13:17:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5c20835dc16672b79bdb1b4e12f7edc7c36a21de",
"body": "…ow (#12) (#13)\n\ntest.yml was rejected by GitHub since Jun 21 (secrets context is not\navailable in step-level if:), so no unit tests, vet, or race detector\nran for v1.2.0 or any commit since. Guard moved into the shell.\nVerified locally: go test ./... passes, go vet clean.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: revive CI — secrets context in step if invalidated entire workfl…",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-07-03T11:01:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "eb77a3d46c904fc20ddf4f804515cc4c5edaa84d",
"body": "The live tests (//go:build live) share a single ~1 req/sec CI key across\nSDK repos. Cross-repo contention can return HTTP 429 even when the SDK\ncode under test is correct, which red-flags otherwise-green changes.\n\nAdd a skipIfRateLimited(t, err) helper that t.Skips on a *RateLimitError\n(HTTP 429) an\n[…]\n limit produces a SKIP instead of\na FAIL. Existing OILPRICEAPI_TEST_KEY skip and the >=1.1s liveRateLimit()\nspacing are preserved.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: skip live tests on 429 (shared-key rate-limit resilience) (#11)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-22T09:11:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e30f2fc50ea26b7a49a601822e337e1458a1275",
"body": "Add Go SDK methods for the now-live #3245 endpoints:\n\n- GetMarketBrief(ctx, codes, ...MarketBriefOption) with WithNarrative\n- GetSubscriptions, CreateSubscription, DeleteSubscription,\n GetSubscriptionEvents (WithSince/WithEventLimit/WithEventWatchID)\n- ParseInterval helper (\"5m\"/\"1h\"/seconds -> int\n[…]\narket-brief and\nsubscriptions that t.Skip without OILPRICEAPI_TEST_KEY. README documents the\nnew methods. Version bumped to 1.2.0.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: market-brief + agent-subscription methods (#10)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T21:14:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "97e2a64c84036e847aa5e709a70153e94ae1acf7",
"body": "Replace legacy tier names (Reservoir Mastery / Production Boost) in\ncustomer-facing doc comments, the README, and the StreamRejectedError\nmessage with current billing language:\n- Streaming/WebSocket -> Professional+ plan ($99/mo)\n- Webhooks -> Starter plan ($49/mo) or higher\n- Premium EI data + anal\n[…]\nssional+\" token so the\nexisting rejection test still matches. Comments/strings only; no\nfunctional code or endpoint paths changed.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: normalize legacy plan names to current tiers (#9)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T17:27:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b064a88938960fb51585bdac7c8ef4455fce6b08",
"body": "* fix: correct futures latest/curve paths (404) + live CI tests\n\nThe v1.1.0 Go SDK built /v1/futures/latest?contract=%s and\n/v1/futures/curve?contract=%s. Neither route exists — there is no generic\n?contract= futures route — so GetFuturesLatest and GetFuturesCurve 404 against\nthe live API.\n\nCorrect \n[…]\nelds.\n\nVersion unchanged (1.1.1). Coverage 85.3%.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: correct futures latest/curve paths (404) + live CI tests (#8)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T17:12:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7842f188496044f13b8c7e8a9b98f35f85379e9c",
"body": "Add a real-time WebSocket/streaming client to the Go SDK, closing the\nlast streaming gap (Node and Python SDKs already ship one).\n\nProtocol (confirmed against the Rails source):\n- Endpoint wss://<host>/cable, derived from the REST base URL (https->wss).\n- ActionCable JSON subprotocol: connect -> tra\n[…]\name tolerance, backoff.\ngo test -cover: 85.2% (race-clean). README + runnable example updated, with\na Professional+ ($99/mo) note.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: WebSocket streaming client (#7)",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T15:36:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6c421dd5f31214b27ea1f812770453bf6b0d77a8",
"body": "…intelligence (#6)\n\nBrings the Go SDK to fuller parity with the Node/Python SDKs by adding four\nresource groups, each with typed structs, table-driven httptest tests, and\nREADME docs.\n\n- Price alerts: GetAlerts, CreateAlert, GetAlert, UpdateAlert, DeleteAlert,\n GetAlertTriggers (/v1/alerts, /v1/ale\n[…]\nd errors, and zero external dependencies. WebSocket streaming is\nintentionally out of scope.\n\ngo test -cover: 83.5% of statements.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: parity round 2 — alerts, full webhooks CRUD, analytics, energy …",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T15:23:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "223330c3b14fc0065e55c89e48c0ea9e3aa9f2b5",
"body": "…e (#5)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: fix README drift + add date-range historical, forecasts, storag…",
"author_name": "karlwaldman",
"author_login": "karlwaldman",
"committed_at": "2026-06-21T14:52:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "748dbdf74d09e58581d465455e20d6d4b80660c7",
"body": "Enable attribution tracking for Go SDK channel by adding\nutm_source=github&utm_medium=sdk_go&utm_campaign=readme to all signup\nand pricing links. Added \"Also Available As\" cross-promotion section.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add UTM tracking parameters to all signup and pricing links",
"author_name": "Karl Waldman",
"author_login": "karlwaldman",
"committed_at": "2026-03-08T10:37:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "80d6843dcb30664a0e8ac30a550e72ca90210fcf",
"body": "Add pricing CTA with Bloomberg comparison, badges (Go Reference, Go Report\nCard, Tests, License), comprehensive feature list, expanded code examples\nfor futures/storage/rig counts, and Why OilPriceAPI section.\n\nCloses #1604\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: Rewrite README to match Python SDK quality",
"author_name": "Karl Waldman",
"author_login": "karlwaldman",
"committed_at": "2026-03-08T09:29:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "27eb1590f35bd551e009cb9a27fe616d40740122",
"body": "…ing, and webhooks\n\nAdd 9 new API methods with full test coverage (44 tests). Implement retry\nwith exponential backoff via doRequest helper. Add functional options\n(WithPeriod, WithContract, WithPage, WithPerPage) with input validation.\n\nRefactor GetDemoPrices to use doRequest for consistent retry behavior.\nValidate period parameter against allowed values (day/week/month/year).\n\nResolves #1, #2, #3, #4\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Add historical prices, futures, marine fuels, rig counts, drill…",
"author_name": "Karl Waldman",
"author_login": "karlwaldman",
"committed_at": "2026-02-25T00:38:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3b95dd7c5ce6671e5f4d2b2d6c76ddd8c7329d99",
"body": "Run go test with race detector and coverage, plus go vet, on every\npush/PR across three Go versions.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: Add test pipeline for Go 1.21/1.22/1.23",
"author_name": "Karl Waldman",
"author_login": "karlwaldman",
"committed_at": "2026-02-14T14:24:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0e1c44c0bea1c5e3c938da72302f1881d664a5ea",
"body": "Complete Go SDK for OilPriceAPI with comprehensive test coverage.\n\nFeatures:\n- Client with functional options pattern (WithBaseURL, WithTimeout, WithRetries)\n- Demo prices endpoint (no auth required)\n- Latest prices endpoint with commodity filtering\n- Commodities list endpoint\n- Full context support\n[…]\nNotFoundError, ServerError)\n\nTests: 17 passing tests covering all functionality\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Initial Go SDK with TDD (#1074)",
"author_name": "Karl Waldman",
"author_login": "karlwaldman",
"committed_at": "2026-01-10T16:27:37Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 7,
"commits_last_year": 20,
"latest_release_at": "2026-07-19T14:32:31Z",
"latest_release_tag": "v1.4.0",
"releases_from_tags": false,
"days_since_last_push": 1,
"active_weeks_last_year": 10,
"days_since_latest_release": 7,
"mean_days_between_releases": 4.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/OilpriceAPI/oilpriceapi-go",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/OilpriceAPI/oilpriceapi-go",
"is_deprecated": false,
"latest_version": "v1.4.0",
"repository_url": "https://github.com/OilpriceAPI/oilpriceapi-go",
"versions_count": 7,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-19T14:32:11Z",
"latest_version_yanked": null,
"days_since_latest_publish": 7
}
]
},
"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": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 54312,
"source_files_sampled": 21,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"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/gorilla/websocket",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.3"
}
],
"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": 15,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 9,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "karlwaldman",
"commits": 20,
"avatar_url": "https://avatars.githubusercontent.com/u/12957260?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"test.yml"
],
"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": 7,
"reason": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"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/20 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "15 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "ec129a181ba4e2b4020f71625a748675d21dd9e6",
"ran_at": "2026-07-27T02:09:26Z",
"aggregate_score": 4.4,
"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-25T17:45:14Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-25T17:44:31Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/OilpriceAPI/oilpriceapi-go",
"host": "github.com",
"name": "oilpriceapi-go",
"owner": "OilpriceAPI"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 44,
"vitality": 79,
"community": 24,
"governance": 57,
"engineering": 63
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 79,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"commits_last_year": 20,
"human_commit_share": 1,
"days_since_last_push": 1,
"active_weeks_last_year": 10
},
"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": "10/52 weeks with commits",
"points": 6.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 10
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "20 commits in the last year",
"points": 11.9,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 20
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "15 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"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": 7,
"latest_release_tag": "v1.4.0",
"releases_from_tags": false,
"days_since_latest_release": 7,
"mean_days_between_releases": 4.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "7 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 7
}
}
],
"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 ~4.8 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 4.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": "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": "moderate",
"name": "Sustainability & Governance",
"value": 57,
"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": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"merged_prs": 15,
"open_issues": 0,
"closed_issues": 9,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 1
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "15/16 decided PRs merged",
"points": 35.9,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 15,
"decided": 16
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/20 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"followers": 7,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "OilpriceAPI",
"public_repos": 18,
"account_age_days": 965
},
"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": "7 followers of OilpriceAPI",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 7,
"login": "OilpriceAPI"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "18 public repos, account ~2 yr old",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 18
}
},
{
"code": "account_age_years",
"params": {
"years": 2
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/OilpriceAPI/oilpriceapi-go"
],
"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": "7 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 7
}
}
],
"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": 63,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 62,
"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": "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": 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": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"points": 14,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [
"api-client",
"commodity-prices",
"energy-data",
"go",
"oil-prices"
],
"has_wiki": false,
"homepage": "https://pkg.go.dev/github.com/OilpriceAPI/oilpriceapi-go",
"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": "https://pkg.go.dev/github.com/OilpriceAPI/oilpriceapi-go",
"points": 15,
"status": "met",
"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": "5 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 5
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 44,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"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": 44,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 4.4
},
"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": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"points": 1.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/20 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "15 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"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": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 59,
"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": "20 of 20 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 20,
"sampled": 20
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.9,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "go.mod"
}
}
],
"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": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "18 of the last 20 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 18,
"sampled": 20
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "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": 54312,
"source_files_sampled": 21,
"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/21 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 21,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-27T02:09:37.072813Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/OilpriceAPI/oilpriceapi-go.svg",
"full_name": "OilpriceAPI/oilpriceapi-go",
"license_state": "standard",
"license_spdx": "MIT"
}