Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"shell",
"bash",
"testing",
"bats",
"tap",
"testing-tools",
"junit",
"xunit"
],
"is_fork": false,
"size_kb": 2747,
"has_wiki": true,
"homepage": "https://bats-core.readthedocs.io/",
"languages": {
"Shell": 383696,
"Dockerfile": 2439
},
"pushed_at": "2026-07-26T21:15:40Z",
"created_at": "2017-09-19T21:28:20Z",
"owner_type": "Organization",
"updated_at": "2026-08-03T15:00:15Z",
"description": "Bash Automated Testing System",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Shell",
"significant_languages": [
"Shell"
]
},
"owner": {
"blog": null,
"name": "Bats",
"type": "Organization",
"login": "bats-core",
"company": null,
"location": null,
"followers": 119,
"avatar_url": "https://avatars.githubusercontent.com/u/32112113?v=4",
"created_at": "2017-09-19T21:14:27Z",
"is_verified": null,
"public_repos": 11,
"account_age_days": 3239
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.14.0",
"kind": "minor",
"published_at": "2026-07-21T19:55:47Z"
},
{
"tag": "v1.13.0",
"kind": "minor",
"published_at": "2025-11-07T16:12:34Z"
},
{
"tag": "v1.12.0",
"kind": "minor",
"published_at": "2025-05-18T21:07:00Z"
},
{
"tag": "v1.11.1",
"kind": "patch",
"published_at": "2024-11-29T22:33:30Z"
},
{
"tag": "v1.11.0",
"kind": "minor",
"published_at": "2024-03-24T15:05:20Z"
},
{
"tag": "v1.11.0-RC2",
"kind": "prerelease",
"published_at": "2024-02-21T12:49:49Z"
},
{
"tag": "v1.11.0-RC1",
"kind": "prerelease",
"published_at": "2024-01-27T19:01:38Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2023-07-15T22:03:05Z"
},
{
"tag": "v1.9.0",
"kind": "minor",
"published_at": "2023-02-12T12:36:35Z"
},
{
"tag": "v1.8.2",
"kind": "patch",
"published_at": "2022-10-19T21:38:44Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2022-10-19T20:32:51Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2022-09-14T23:38:51Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2022-05-14T00:19:39Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2022-05-13T22:23:11Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2022-02-24T14:33:01Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2021-10-22T08:09:48Z"
},
{
"tag": "v1.4.1",
"kind": "patch",
"published_at": "2021-07-23T22:57:24Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2021-07-23T21:55:30Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2021-03-15T21:38:41Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2020-07-06T14:10:09Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2020-04-25T19:23:50Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2018-07-09T01:17:35Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2018-06-18T21:58:01Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2018-06-10T03:43:42Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2018-06-08T17:33:48Z"
}
],
"recent_commits": [
{
"oid": "ae4b94d7cc35f62468297791aa4ab8c3af7377ba",
"body": "docs: remove outdated claim that suite-wide setup does not exist",
"is_bot": false,
"headline": "Merge pull request #1213 from natejswenson/docs/faq-setup-suite-outdated",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-26T21:15:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff8cb795e12585d1b210acea37df0f4abbd9fc5a",
"body": "The changelog CI check requires PRs without the \"no changelog\" label to\nreference their number in docs/CHANGELOG.md.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add CHANGELOG entry for the FAQ fix",
"author_name": "Nate Swenson",
"author_login": "natejswenson",
"committed_at": "2026-07-26T02:46:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5612c7e5268d000d437a73674cb212ec1ec427a8",
"body": "The FAQ answer on sharing common setup still stated \"There is no suite\nwide setup functionality yet\", which contradicts the later FAQ entry and\nthe setup and teardown docs, both of which document setup_suite.\n\nDrop the stale clause and add a pointer distinguishing per-file/per-test\nsetup from suite-\n[…]\n\": a reStructuredText inline-markup end-string must be\nfollowed by whitespace or punctuation, so the trailing \"d\" caused the\nmarkup to run together and render as a single mangled reference.\n\nRefs #715",
"is_bot": false,
"headline": "docs: remove outdated claim that suite-wide setup does not exist",
"author_name": "Nate Swenson",
"author_login": "natejswenson",
"committed_at": "2026-07-26T02:46:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d22e41faad59f5fd942a88c992b4913a27a460c4",
"body": "…fault-anymore\n\nfix: make pretty formatter the default in interactive shells again",
"is_bot": false,
"headline": "Merge pull request #1220 from martin-schulze-vireso/fix/pretty-not-de…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-24T19:57:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ea0a19286d57412f086ae0fa7af87164ace0f87",
"body": "- install script command\n- use platformspecific invocations",
"is_bot": false,
"headline": "CI: fix (type)script based tests",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-23T21:11:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d420f3b5dc4a9d13ae36382806660ebdb52eb0c9",
"body": "fixes #1219",
"is_bot": false,
"headline": "fix: make pretty formatter the default in interactive shells again",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T21:11:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c880b081813d7f7afbdd7edb43b05fadb186ddc1",
"body": "…ions/dependency-review-action-5.0.0\n\nbuild(deps): bump actions/dependency-review-action from 4.8.1 to 5.0.0",
"is_bot": false,
"headline": "Merge pull request #1221 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T20:40:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2533866a480efcf28973aaef6a730e7f2778e1f",
"body": "…ker/login-action-4.4.0\n\nbuild(deps): bump docker/login-action from 3.6.0 to 4.4.0",
"is_bot": false,
"headline": "Merge pull request #1224 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T20:10:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4bd7377f59a87aebea7b0ad176d17b93e818e910",
"body": "…ions/upload-artifact-7.0.1\n\nbuild(deps): bump actions/upload-artifact from 5.0.0 to 7.0.1",
"is_bot": false,
"headline": "Merge pull request #1223 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T19:39:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7749c11f995c3e1e524ffcaa694e5ffc5ce4459a",
"body": "Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 4.4.0.\n- [Release notes](https://github.com/docker/login-action/releases)\n- [Commits](https://github.com/docker/login-action/compare/5e57cd118135c172c3672efd75eb46360885c0ef...af1e73f918a031802d376d3c8bbc3fe56130a9b0)\n\n[…]\nependency-name: docker/login-action\n dependency-version: 4.4.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump docker/login-action from 3.6.0 to 4.4.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-22T19:02:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e26c10895a5ab197626e0f8695b78009de5f45cc",
"body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5.0.0 to 7.0.1.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/330a01c490aca151604b8cf639adc76d48f6c5d4...043fb46d1a93c77aae656e7c1c\n[…]\ndency-name: actions/upload-artifact\n dependency-version: 7.0.1\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/upload-artifact from 5.0.0 to 7.0.1",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-22T19:02:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "784094b4e25f589fe63381f563d5d95fe6a50299",
"body": "Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4.8.1 to 5.0.0.\n- [Release notes](https://github.com/actions/dependency-review-action/releases)\n- [Commits](https://github.com/actions/dependency-review-action/compare/40c09b7dc99638e5ddb0bfd91c1673eff\n[…]\ne: actions/dependency-review-action\n dependency-version: 5.0.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/dependency-review-action from 4.8.1 to 5.0.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-22T19:02:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "04be47a4fc98c0469e07ac26270ead656d8c1bda",
"body": "…ker/setup-qemu-action-4.2.0\n\nbuild(deps): bump docker/setup-qemu-action from 3.6.0 to 4.2.0",
"is_bot": false,
"headline": "Merge pull request #1217 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T09:51:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cce03071d6dc408b18441a07575ad990b20bc105",
"body": "…ker/build-push-action-7.3.0\n\nbuild(deps): bump docker/build-push-action from 6.15.0 to 7.3.0",
"is_bot": false,
"headline": "Merge pull request #1216 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T09:41:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b6c2d0afa30cdd9ad36269bb19cfaf94e3f70ab",
"body": "…ker/setup-buildx-action-4.2.0\n\nbuild(deps): bump docker/setup-buildx-action from 3.7.1 to 4.2.0",
"is_bot": false,
"headline": "Merge pull request #1215 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T09:40:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0978233a6a0c5cada36bcf6987e7c15c03e8afde",
"body": "…ions/checkout-7.0.1\n\nbuild(deps): bump actions/checkout from 5.0.0 to 7.0.1",
"is_bot": false,
"headline": "Merge pull request #1214 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-22T09:26:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb7f42f8d608ac693d7a4b67474f6714ea68cfc5",
"body": null,
"is_bot": false,
"headline": "feat: release Bats v1.14.0",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-21T19:53:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74c7f3f8322fee9442e7e374e40a8e0c75137b31",
"body": "Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.6.0 to 4.2.0.\n- [Release notes](https://github.com/docker/setup-qemu-action/releases)\n- [Commits](https://github.com/docker/setup-qemu-action/compare/29109295f81e9208d7d86ff1c6c12d2833863392...96fe6ef7f33517b61c61be\n[…]\nency-name: docker/setup-qemu-action\n dependency-version: 4.2.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump docker/setup-qemu-action from 3.6.0 to 4.2.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T19:03:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "09c2083703acd1a2b1abed6085f87d89afeb2db9",
"body": "Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.15.0 to 7.3.0.\n- [Release notes](https://github.com/docker/build-push-action/releases)\n- [Commits](https://github.com/docker/build-push-action/compare/471d1dc4e07e5cdedd4c2171150001c434f0b7a4...53b7df96c91f9c12dcc8a\n[…]\nency-name: docker/build-push-action\n dependency-version: 7.3.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump docker/build-push-action from 6.15.0 to 7.3.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T19:03:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8385015a0cc66f8a8f553b0b30119ade65d4fdb5",
"body": "Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.7.1 to 4.2.0.\n- [Release notes](https://github.com/docker/setup-buildx-action/releases)\n- [Commits](https://github.com/docker/setup-buildx-action/compare/c47758b77c9736f4b2ef4073d4d51994fabfe349...bb05f3f5519dd8\n[…]\ncy-name: docker/setup-buildx-action\n dependency-version: 4.2.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump docker/setup-buildx-action from 3.7.1 to 4.2.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T19:03:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d341fe46a2a6dfe82d8dbc038370356712bd25f8",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 7.0.1.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f8\n[…]\n- dependency-name: actions/checkout\n dependency-version: 7.0.1\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/checkout from 5.0.0 to 7.0.1",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-20T19:02:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4655374237cb7223b9dc7708e2ee49bd5cbb6fec",
"body": "Error on empty test file paths",
"is_bot": false,
"headline": "Merge pull request #1212 from martin-schulze-vireso/fix/empty-path",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-19T16:56:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7bf2408e60836e4f9c42a00b86cc881e912cdd79",
"body": "docs(gotchas): add entry for declare scoping in load-ed helpers (#973)",
"is_bot": false,
"headline": "Merge pull request #1202 from mvanhorn/docs-gotchas-declare-load-973",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:54:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c497e04032a5135ff8e1a6dfd365875cf88c7c2",
"body": "docs: fix minor typos in writing-tests.md",
"is_bot": false,
"headline": "Merge pull request #1196 from hcartiaux/fixdoc",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:48:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f91d1842eb2f43214c08c84c972007066cd7c98",
"body": "…espell-project/actions-codespell-2.2\n\nbuild(deps): bump codespell-project/actions-codespell from 2.1 to 2.2",
"is_bot": false,
"headline": "Merge pull request #1170 from bats-core/dependabot/github_actions/cod…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:46:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c6cde7bdeaaea8ba597d359f11acffc688a7ed3",
"body": "feat: exit 1 on empty suite",
"is_bot": false,
"headline": "Merge pull request #1211 from martin-schulze-vireso/feat/empty-suite",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:39:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8587f0c5d1d1d2211d8df3ec07bedd242ee75e36",
"body": null,
"is_bot": false,
"headline": "fix: fail with error when passing \"\" as test file path",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:28:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbd904bebbad6b209242e07693d306e5420996b0",
"body": "so far, an empty suite returned exit code 0. This is problematic as accidentally filtering away all tests can miss \"wanted\" failures.\nTherefore, the new default is to fail on an empty suite unless explicitly turned on via --allow-empty-suite.",
"is_bot": false,
"headline": "feat: exit 1 on empty suite",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:28:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70cb64bd309bbcadb50ad344bf2cffe254bbf463",
"body": null,
"is_bot": false,
"headline": "chore: exclude auto generated files from codespell check",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a93d7d6b591e4ba48c6cfe231ffb6ce04636863",
"body": "so far, an empty suite returned exit code 0. This is problematic as accidentally filtering away all tests can miss \"wanted\" failures.\nTherefore, the new default is to fail on an empty suite unless explicitly turned on via --allow-empty-suite.",
"is_bot": false,
"headline": "feat: exit 1 on empty suite",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-18T20:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c18b2f7a7e56dde24b4a6ae706a4ecee3ec824ad",
"body": "Avoid overwriting $_ by the DEBUG and ERR traps set by Bats",
"is_bot": false,
"headline": "Merge pull request #1208 from akinomyoga/preserve-lastarg",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-07T18:15:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "40d6222b3cff4c08b4531c02ec69adcbc65e9262",
"body": null,
"is_bot": false,
"headline": "Avoid overwriting $_ by the DEBUG and ERR traps set by Bats",
"author_name": "Koichi Murase",
"author_login": "akinomyoga",
"committed_at": "2026-07-07T17:18:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ead10b9e00ea94f6847ca258c2f4f25a0954ca63",
"body": "CI: fix broken BSD action",
"is_bot": false,
"headline": "Merge pull request #1210 from martin-schulze-vireso/fix/ci/bsd",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-07T17:13:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9bc520ab708b84ab8c8177a84456ad05c0d298b",
"body": "Installing pkg-2.6.2_1...\nNewer FreeBSD version for package pkg:\nTo ignore this error set IGNORE_OSVERSION=yes\n- package: 1404000\n- running userland: 1403000\nIgnore the mismatch and continue? [y/N]:\nFailed to install the following 1 package(s): /tmp//pkg.pkg.Hjlc0D\npkg: Attempted to fetch pkg+https:\n[…]\nng signature with trusted certificate pkg.freebsd.org.2013102301... done\nBootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:14:amd64/kmods_quarterly_3, please wait...\nScript exited with code 1",
"is_bot": false,
"headline": "CI: fix broken BSD action",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-07-07T16:47:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5a7db7a98951d9d89b3b5e7800037e655a93345f",
"body": "docs(man): add four flags missing from bats(1) OPTIONS",
"is_bot": false,
"headline": "Merge pull request #1201 from truffle-dev/docs/man-add-missing-flags",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-06-15T14:58:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8e121487ac1ad54f4edb370c9685f3b10023fda9",
"body": "The Gotchas page did not reference the existing writing-tests note on\ndeclare scoping. Users running into 'why is my variable from the loaded\nfile undefined' had no path from the symptom to the explanation without\nreading the full writing-tests guide.\n\nMirror the writing-tests note as a focused gotc\n[…]\ns inside a function so declare\ncreates function-local variables, and point at declare -g as the fix.\nLink back to the writing-tests section for readers who want the deeper\nBash background.\n\nFixes #973",
"is_bot": false,
"headline": "docs(gotchas): add entry for declare scoping in load-ed helpers (#973)",
"author_name": "Matt Van Horn",
"author_login": "mvanhorn",
"committed_at": "2026-04-21T10:14:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1228550d66501b75afec2d3bbf7b7db12b4c7f1",
"body": "The bats(1) man page is missing OPTIONS entries for four flags\nthat exist in `bats --help` and have working implementations in\n`libexec/bats-core/bats`:\n\n * `--abort` (added 2025-10-12, commit 2153e6a)\n * `--errexit` (added 2025-07-26, commit 185f268)\n * `--negativ\n[…]\nched. `bats.1` was not regenerated\nbecause the toolchain version available locally would have\nintroduced unrelated header noise; happy to regen with a specific\nRonn-NG version if a maintainer prefers.",
"is_bot": false,
"headline": "docs(man): add four flags missing from bats(1) OPTIONS",
"author_name": "truffle (AI agent)",
"author_login": "truffle-dev",
"committed_at": "2026-04-20T06:06:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b5d6eb55a331545711a08c021b67ccb5f15a4e15",
"body": null,
"is_bot": false,
"headline": "docs: fix minor typos in writing-tests.md",
"author_name": "Hyacinthe Cartiaux",
"author_login": "hcartiaux",
"committed_at": "2026-03-13T15:48:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9faff0d7bc32e7adebc6552446f978118d3ab3b",
"body": "…ive-color\n\nfeat: add CI compatible non-interactive mode for pretty formatter",
"is_bot": false,
"headline": "Merge pull request #1191 from martin-schulze-vireso/feat/non-interact…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-15T17:19:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c676d165f7db5811226d5752c3699477e6d6621b",
"body": null,
"is_bot": false,
"headline": "CI: use non-interactive pretty formatter",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-15T16:14:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e88a6565c18bf3cc5a4f3ee461db9ae94c5d567",
"body": "fixes #1094",
"is_bot": false,
"headline": "feat: add CI compatible non-interactive mode for pretty formatter",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-15T16:14:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2664c9d813d11b68952598bcbe61b7c90bd1f6d",
"body": "…ed-tests\n\nfix(junit-formatter): skipped tests outputs reported as <system-err>",
"is_bot": false,
"headline": "Merge pull request #1177 from lucas-p-bernardes/fix-trace-junit-skipp…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-15T06:41:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8d11007e4a08523974b17e81ae259c4d5224314",
"body": "Add --errexit flag to enable errexit in run commands",
"is_bot": false,
"headline": "Merge pull request #1118 from jandubois/errexit",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-13T18:26:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e7d33fbe8cf69fb5de4d426676111402bb7403f",
"body": null,
"is_bot": false,
"headline": "docs: provide help for broken usecases",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-13T16:53:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f941879635a4493098e3d058b60240e21650470f",
"body": "by preventing the ERR trap from triggering inside run",
"is_bot": false,
"headline": "fix: run leaking BATS_ERROR_STATUS and BATS_DEBUG_STACK_TRACE_VALID",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-13T16:52:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "038761356e6adf70bb230eced8076f82a35d29a2",
"body": null,
"is_bot": false,
"headline": "chore: simplify run errexit handling",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-13T16:52:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33ffbedd2760e51c74040bb9a45b970a463615da",
"body": "Signed-off-by: Jan Dubois <jan@jandubois.com>",
"is_bot": false,
"headline": "Make sure tmpdir exists in case run() is called outside a @test",
"author_name": "Jan Dubois",
"author_login": "jandubois",
"committed_at": "2026-02-13T16:52:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "185f26825f10bcb005d4180b940a482987a63a53",
"body": "Set BATS_RUN_ERREXIT environment variable when flag is provided.\nWrite $? to a temp file when errexit is enabled.\n\nFixes #719\nFixes #748\n\nSigned-off-by: Jan Dubois <jan@jandubois.com>",
"is_bot": false,
"headline": "Add --errexit flag to enable errexit in run commands",
"author_name": "Jan Dubois",
"author_login": "jandubois",
"committed_at": "2026-02-13T16:52:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "722d86a68f05f741e8e0e1861a42355e0cfcd1f8",
"body": "Signed-off-by: Lucas Bernardes <lucas.bernardes@toradex.com>",
"is_bot": false,
"headline": "Update CHANGELOG.md",
"author_name": "Lucas Bernardes",
"author_login": "lucas-p-bernardes",
"committed_at": "2026-02-11T04:37:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6892ceb149b1874fd903c85315773b56117e16c8",
"body": "Fixes #1190\n\nPreviously, output from skipped tests was not explicitly handled in the\n'bats_tap_stream_comment()' function of 'bats-format-junit'. As a result,\nthese comments fell into the catch-all '*' case, which routes output to\nthe standard error stream via 'log_system_err'.\n\nWhile PR #1181 previ\n[…]\now correctly reported within\n'<system-out>', aligning its behavior with passing tests and ensuring\nsemantically correct JUnit XML reports.\n\nSigned-off-by: Lucas Bernardes <lucas.bernardes@toradex.com>",
"is_bot": false,
"headline": "fix(junit-formatter): skipped tests outputs reported as <system-err>",
"author_name": "Lucas Bernardes",
"author_login": "lucas-p-bernardes",
"committed_at": "2026-02-11T04:35:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "53adbc664609bb5af8781a95e9125ceb39aab1ec",
"body": "JUnit formatter reported last skipped test as failure if teardown_suite logs to fd3",
"is_bot": false,
"headline": "Merge pull request #1181 from Peter-Darton-i2/robustify-junit-formatter",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-09T21:40:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2461378600a745c6208def551f976f958e600e9a",
"body": null,
"is_bot": false,
"headline": "chore: add changelog entry",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-09T21:40:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ab14d5093d112e4bf0c6d9f055707d6a913a4a2",
"body": null,
"is_bot": false,
"headline": "Add unit-test to demonstrate the issue",
"author_name": "Peter Darton",
"author_login": "Peter-Darton-i2",
"committed_at": "2026-02-09T21:39:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa5e3a823d80a41b4bab9e8cc7d0fa15e53b5e96",
"body": null,
"is_bot": false,
"headline": "Reduce unnecessary changes",
"author_name": "Peter Darton",
"author_login": "Peter-Darton-i2",
"committed_at": "2026-02-09T21:39:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "115f3e51d7f7fb993fa7f3ccd34e35d69f5156a1",
"body": null,
"is_bot": false,
"headline": "Add unit-test suite that demonstrates the issue",
"author_name": "Peter Darton",
"author_login": "Peter-Darton-i2",
"committed_at": "2026-02-09T21:39:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2add24c4063ce419c61e7c904b863d26891270a",
"body": null,
"is_bot": false,
"headline": "Ensure we only output a test-failure when the test failed",
"author_name": "Peter Darton",
"author_login": "Peter-Darton-i2",
"committed_at": "2026-02-09T21:39:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f31696537504464d711b9b2e219723da65b8a92",
"body": "…n-cd-issue\n\nFix --gather-test-outputs-in fails when tests change directory",
"is_bot": false,
"headline": "Merge pull request #1183 from jnasbyupgrade/fix-gather-test-outputs-i…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-09T21:35:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "387115fced86fe5fd6dc585f05b8c3e936bc7a16",
"body": "Document dynamic test registration via bats_test_function",
"is_bot": false,
"headline": "Merge pull request #1187 from joeymarianer-calendly/patch-1",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-02-09T20:50:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0563ea2dcfe84870ffa060d1206a9f440ab7ed4e",
"body": null,
"is_bot": false,
"headline": "docs: add changelog entry for fix when tests change directory (#1183)",
"author_name": "jnasbyupgrade",
"author_login": "jnasbyupgrade",
"committed_at": "2026-02-09T20:48:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c2f5ef6d4d228f5fcebeb6ad57a4e4c9a0e7ea9",
"body": "Fixes #1132\n\nConvert relative paths to absolute when processing --gather-test-outputs-in\nto ensure paths remain valid when tests change directory with 'cd'.\n\nAlso add defensive check for BATS_OUT existence before copying.",
"is_bot": false,
"headline": "Fix --gather-test-outputs-in fails when tests change directory",
"author_name": "jnasbyupgrade",
"author_login": "jnasbyupgrade",
"committed_at": "2026-02-09T20:48:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "157bcc587e2b9343e4c4ff6d933e9c691d377c45",
"body": null,
"is_bot": false,
"headline": "Dynamic test names section in tutorial.rst",
"author_name": "joeymarianer-calendly",
"author_login": "joeymarianer-calendly",
"committed_at": "2026-02-09T20:18:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f12b3172105a0f26bce629ff8ae0ac76c4bd61e",
"body": "chore(devcontainer): update default bash version to 5.3",
"is_bot": false,
"headline": "Merge pull request #1184 from Marukome0743/chore/docker",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2026-01-21T07:03:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06bb7835b28522359a171066de0c33b6ef3b70a6",
"body": null,
"is_bot": false,
"headline": "chore(devcontainer): update default bash version to 5.3",
"author_name": "Marukome0743",
"author_login": "Marukome0743",
"committed_at": "2026-01-09T02:57:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33ae8862cd058e004f9f04e1f9ad6197763a1cb2",
"body": "…-characters\n\nfix(junit-formatter): remove control characters",
"is_bot": false,
"headline": "Merge pull request #1176 from martin-schulze-vireso/fix/junit-control…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-25T07:48:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5f3f4ea0e597148f388ec51cf5595bc2398142c",
"body": null,
"is_bot": false,
"headline": "fix(junit-formatter): remove control characters (fixes #1171)",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-24T23:20:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afd16437571ac0237f5372a6db51c06f38a0d4a3",
"body": "…erferece\n\nfix(junit-formatter): shield internals from env",
"is_bot": false,
"headline": "Merge pull request #1175 from martin-schulze-vireso/fix/junit-env-int…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-24T23:04:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b71cbc1fee6da3b5995cbd370ecf5a1c9e85ae60",
"body": null,
"is_bot": false,
"headline": "fix(junit-formatter): shield internals from env (fixes #1174)",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-24T22:20:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "332afd09bfd166297b329cb12a0faee4eb3807c3",
"body": null,
"is_bot": false,
"headline": "remove accidentally commited files",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-24T21:39:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d384abc52c0c937aceff70bca40c3759556a034",
"body": "Removed duplicate `test` suite runs",
"is_bot": false,
"headline": "Merge pull request #1172 from fearphage/dedupe-suite-runs",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-24T21:01:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6658e9144fb314474a3bdcaf02180392320b39d",
"body": null,
"is_bot": false,
"headline": "run test suite once per PR instead of twice",
"author_name": "Phred",
"author_login": "fearphage",
"committed_at": "2025-11-11T16:57:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f0c8bb06601b856ad006f5981f2ad5a8e03fbfb",
"body": "Bumps [codespell-project/actions-codespell](https://github.com/codespell-project/actions-codespell) from 2.1 to 2.2.\n- [Release notes](https://github.com/codespell-project/actions-codespell/releases)\n- [Commits](https://github.com/codespell-project/actions-codespell/compare/406322ec52dd7b488e48c1c4b\n[…]\ncodespell-project/actions-codespell\n dependency-version: '2.2'\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump codespell-project/actions-codespell from 2.1 to 2.2",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-11-07T19:06:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bb747498675a7429fb7ecdcb177fd035fa23c325",
"body": null,
"is_bot": false,
"headline": "chore: Add unreleased section to changelog",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T16:13:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bca150ec86275d6d9d5a4fd7d48ab8b6c6f3d87",
"body": null,
"is_bot": false,
"headline": "feat: release Bats v1.13.0",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T16:09:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a366df836808da1938dc8283266de03a81d057f",
"body": "Fix issue 1106 - JUnit formatter crashes if test errors in setup_suite",
"is_bot": false,
"headline": "Merge pull request #1125 from Peter-Darton-i2/pr/fix-issue-1106",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T14:20:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35a53624ef4a6ce52c30938db5bdfd220961223d",
"body": null,
"is_bot": false,
"headline": "chore: add changelog entry for #1125",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T13:14:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1af5d498fb297aa8eadaf20e643ef89ca389412d",
"body": null,
"is_bot": false,
"headline": "Catch setup-suite issues",
"author_name": "Peter Darton",
"author_login": "Peter-Darton-i2",
"committed_at": "2025-11-07T13:12:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5e51768ab392524debbeb1b56b5c44b5bed6f73",
"body": null,
"is_bot": false,
"headline": "Add unit-test to show the problem",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T13:12:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86c5eff8c50e3c1d7781724e5eca4ac29f1ef082",
"body": "…ions/setup-node-6.0.0\n\nbuild(deps): bump actions/setup-node from 5.0.0 to 6.0.0",
"is_bot": false,
"headline": "Merge pull request #1168 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-07T06:25:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb85fd4637068c152d58843a00fa06ac9295b5bf",
"body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5.0.0 to 6.0.0.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/a0853c24544627f65ddf259abe73b1d18a591444...2028fbc5c25fe9cf00d9f06a71cc4710d4507903)\n\n---\n[…]\ndependency-name: actions/setup-node\n dependency-version: 6.0.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/setup-node from 5.0.0 to 6.0.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-11-06T12:38:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d8893cca06ee20d093eae102b3ded5f254b1311e",
"body": "…ions/checkout-5.0.0\n\nbuild(deps): bump actions/checkout from 4.1.1 to 5.0.0",
"is_bot": false,
"headline": "Merge pull request #1165 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-06T12:34:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "20cada926d93c7b9ce2a3d508cb3a8f495d5bec0",
"body": "…EOUT_run\n\nfix: timeout not working with run",
"is_bot": false,
"headline": "Merge pull request #1160 from martin-schulze-vireso/fix/BATS_TEST_TIM…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-06T12:33:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76bcf70a7c2d1f2ceed0cf7910f76aab5a1d0569",
"body": null,
"is_bot": false,
"headline": "fix BATS_TEST_TIMEOUT prolonging runtime of skipped tests (fixes #1067)",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-04T23:48:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5e1bd25598ff2acff07414ca4fcf51cbad9bccf",
"body": "- MSYS does not have -o\n- MSYS has no specific order\n- alpine requires -o to get PPID",
"is_bot": false,
"headline": "fix: get ps working across platforrms",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-04T23:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbf2095fcaaaf7e07c58a66e55b59478458c7ccd",
"body": null,
"is_bot": false,
"headline": "fix: shellcheck warnings",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-04T23:08:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64064e510ebbb24c4623f5e0e79152ee8b3d9ef1",
"body": null,
"is_bot": false,
"headline": "fix(timeout): kill process under run as well",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-04T23:08:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "886e5dd2635d8a871c335927c61c9ee5d165f07a",
"body": null,
"is_bot": false,
"headline": "fix(CI): macos-13 is deprecated and fails due to brownout",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-04T23:08:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e22abb6eb8d5052d126ad839c2b639e32ff17b9a",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 5.0.0.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53b\n[…]\n- dependency-name: actions/checkout\n dependency-version: 5.0.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/checkout from 4.1.1 to 5.0.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-11-03T19:32:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f423e846b22f37d4c04045ad76181a9232e58208",
"body": "…ker/login-action-3.6.0\n\nbuild(deps): bump docker/login-action from 3.3.0 to 3.6.0",
"is_bot": false,
"headline": "Merge pull request #1148 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-02T23:02:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcd4a74ac0ac1f358eeee46cfd9b78d383973510",
"body": "…f/scorecard-action-2.4.3\n\nbuild(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.3",
"is_bot": false,
"headline": "Merge pull request #1151 from bats-core/dependabot/github_actions/oss…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-02T23:02:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0df0d5a2bdf19e9e0e98578e4f0b79d3bed60e25",
"body": "…ions/dependency-review-action-4.8.1\n\nbuild(deps): bump actions/dependency-review-action from 4.5.0 to 4.8.1",
"is_bot": false,
"headline": "Merge pull request #1156 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-02T23:01:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2c38ded8be0906d73c619a90248ef29c5323e7f",
"body": "…ker/setup-qemu-action-3.6.0\n\nbuild(deps): bump docker/setup-qemu-action from 3.0.0 to 3.6.0",
"is_bot": false,
"headline": "Merge pull request #1157 from bats-core/dependabot/github_actions/doc…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-02T23:00:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52e5aed04bc71764959bc49bd1c1b8eef0dafd2d",
"body": "…ions/upload-artifact-5.0.0\n\nbuild(deps): bump actions/upload-artifact from 4.6.1 to 5.0.0",
"is_bot": false,
"headline": "Merge pull request #1162 from bats-core/dependabot/github_actions/act…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-02T23:00:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "052dc39fe761a84097ec2fa4cfc718a375524edc",
"body": "Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 3.0.0 to 3.6.0.\n- [Release notes](https://github.com/docker/setup-qemu-action/releases)\n- [Commits](https://github.com/docker/setup-qemu-action/compare/68827325e0b33c7199eb31dd4e31fbe9023e06e3...29109295f81e9208d7d86f\n[…]\nency-name: docker/setup-qemu-action\n dependency-version: 3.6.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump docker/setup-qemu-action from 3.0.0 to 3.6.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-11-02T21:00:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d4371431fbce12025b9bfaba2007e5c1c38f4c61",
"body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.1 to 5.0.0.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1...330a01c490aca151604b8cf639\n[…]\ndency-name: actions/upload-artifact\n dependency-version: 5.0.0\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "build(deps): bump actions/upload-artifact from 4.6.1 to 5.0.0",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-11-02T21:00:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "832b216d86ae90e922674560f19fd092a44f51c9",
"body": "CI: use less fragile freebsd vm",
"is_bot": false,
"headline": "Merge pull request #1163 from martin-schulze-vireso/fix/freebsd-runner",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-01T08:21:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d84686bae329102e0c65e53bd1a952bb608c7e91",
"body": null,
"is_bot": false,
"headline": "CI: remove deprecated macos-13 runner",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-01T08:20:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b424745a09da4fc321de5d5026ea7267538fd20",
"body": null,
"is_bot": false,
"headline": "CI: use less fragile freebsd vm",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-11-01T08:12:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1807c8bd5a7b03e53444c230460caecb882a0b3d",
"body": "…n-ci\n\nfix(CI): flaky tests",
"is_bot": false,
"headline": "Merge pull request #1161 from martin-schulze-vireso/fix/flaky-tests-o…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-10-16T17:05:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fe527f1ca12f5dff3851eef82add926cf1296fa",
"body": null,
"is_bot": false,
"headline": "fix(CI): flaky tests",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-10-16T11:31:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6aee49bd671e4a29ec680866388e3133d96c784b",
"body": "…ction-requires-sorted-tags\n\nfix: bats_test_function requires --tags to be sorted",
"is_bot": false,
"headline": "Merge pull request #1158 from martin-schulze-vireso/fix/bats_test_fun…",
"author_name": "Martin Schulze",
"author_login": "martin-schulze-vireso",
"committed_at": "2025-10-15T18:10:24Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 25,
"commits_last_year": 122,
"latest_release_at": "2026-07-21T19:55:47Z",
"latest_release_tag": "v1.14.0",
"releases_from_tags": false,
"days_since_last_push": 7,
"active_weeks_last_year": 24,
"days_since_latest_release": 13,
"mean_days_between_releases": 152.3
},
"artifacts": {
"collected": true,
"structure": [
"tree.compose",
"tree.dockerfile"
],
"declarations": []
},
"community": {
"has_readme": true,
"has_license": true,
"readme_badges": {
"hosts": [
"github.com",
"readthedocs.org",
"shields.io"
],
"total": 5,
"header": 5,
"collected": true,
"has_inspect_badge": false
},
"has_description": true,
"has_contributing": true,
"health_percentage": 100,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "bats",
"exists": true,
"license": "MIT",
"keywords": [
"bats",
"bash",
"shell",
"test",
"unit"
],
"ecosystem": "npm",
"categories": [],
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/bats",
"declared_type": null,
"is_deprecated": false,
"latest_version": "1.13.0",
"repository_url": "https://github.com/bats-core/bats-core",
"versions_count": 26,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 3,
"monthly_downloads": 1275285,
"first_published_at": "2015-11-02T23:20:59.873000Z",
"latest_published_at": "2025-11-07T16:17:56.231000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 269
}
]
},
"popularity": {
"forks": 488,
"stars": 6191,
"watchers": 47,
"fork_history": {
"days": [
{
"date": "2017-09-22",
"count": 1
},
{
"date": "2017-09-25",
"count": 2
},
{
"date": "2017-09-26",
"count": 1
},
{
"date": "2017-09-30",
"count": 1
},
{
"date": "2017-10-02",
"count": 1
},
{
"date": "2017-10-09",
"count": 1
},
{
"date": "2017-10-11",
"count": 2
},
{
"date": "2017-10-21",
"count": 1
},
{
"date": "2017-10-24",
"count": 1
},
{
"date": "2017-10-29",
"count": 1
},
{
"date": "2017-10-31",
"count": 2
},
{
"date": "2017-11-01",
"count": 1
},
{
"date": "2017-11-03",
"count": 1
},
{
"date": "2017-11-24",
"count": 2
},
{
"date": "2017-11-25",
"count": 1
},
{
"date": "2017-12-13",
"count": 1
},
{
"date": "2017-12-18",
"count": 1
},
{
"date": "2017-12-27",
"count": 1
},
{
"date": "2017-12-29",
"count": 1
},
{
"date": "2018-01-01",
"count": 1
},
{
"date": "2018-01-05",
"count": 1
},
{
"date": "2018-01-09",
"count": 1
},
{
"date": "2018-01-27",
"count": 1
},
{
"date": "2018-03-11",
"count": 1
},
{
"date": "2018-03-31",
"count": 1
},
{
"date": "2018-04-13",
"count": 1
},
{
"date": "2018-04-21",
"count": 1
},
{
"date": "2018-06-01",
"count": 1
},
{
"date": "2018-06-02",
"count": 1
},
{
"date": "2018-06-09",
"count": 1
},
{
"date": "2018-06-12",
"count": 1
},
{
"date": "2018-06-15",
"count": 1
},
{
"date": "2018-06-28",
"count": 1
},
{
"date": "2018-07-02",
"count": 1
},
{
"date": "2018-07-13",
"count": 1
},
{
"date": "2018-07-24",
"count": 1
},
{
"date": "2018-07-25",
"count": 1
},
{
"date": "2018-07-31",
"count": 2
},
{
"date": "2018-08-04",
"count": 1
},
{
"date": "2018-08-05",
"count": 1
},
{
"date": "2018-08-15",
"count": 1
},
{
"date": "2018-08-22",
"count": 1
},
{
"date": "2018-08-24",
"count": 1
},
{
"date": "2018-08-26",
"count": 1
},
{
"date": "2018-09-24",
"count": 1
},
{
"date": "2018-09-30",
"count": 1
},
{
"date": "2018-10-11",
"count": 1
},
{
"date": "2018-10-12",
"count": 2
},
{
"date": "2018-10-17",
"count": 1
},
{
"date": "2018-11-07",
"count": 1
},
{
"date": "2018-11-13",
"count": 1
},
{
"date": "2018-11-24",
"count": 1
},
{
"date": "2018-12-04",
"count": 1
},
{
"date": "2018-12-07",
"count": 1
},
{
"date": "2018-12-14",
"count": 1
},
{
"date": "2018-12-16",
"count": 1
},
{
"date": "2018-12-22",
"count": 1
},
{
"date": "2018-12-27",
"count": 1
},
{
"date": "2019-01-15",
"count": 1
},
{
"date": "2019-01-21",
"count": 1
},
{
"date": "2019-01-28",
"count": 1
},
{
"date": "2019-02-02",
"count": 1
},
{
"date": "2019-02-06",
"count": 1
},
{
"date": "2019-02-11",
"count": 1
},
{
"date": "2019-02-12",
"count": 1
},
{
"date": "2019-02-15",
"count": 1
},
{
"date": "2019-02-17",
"count": 1
},
{
"date": "2019-02-18",
"count": 1
},
{
"date": "2019-02-20",
"count": 1
},
{
"date": "2019-02-26",
"count": 1
},
{
"date": "2019-03-04",
"count": 1
},
{
"date": "2019-03-08",
"count": 1
},
{
"date": "2019-03-23",
"count": 1
},
{
"date": "2019-04-03",
"count": 1
},
{
"date": "2019-04-16",
"count": 1
},
{
"date": "2019-04-18",
"count": 1
},
{
"date": "2019-04-19",
"count": 1
},
{
"date": "2019-04-21",
"count": 1
},
{
"date": "2019-05-04",
"count": 1
},
{
"date": "2019-05-07",
"count": 1
},
{
"date": "2019-05-20",
"count": 2
},
{
"date": "2019-05-22",
"count": 1
},
{
"date": "2019-05-27",
"count": 1
},
{
"date": "2019-06-03",
"count": 1
},
{
"date": "2019-06-12",
"count": 1
},
{
"date": "2019-06-16",
"count": 1
},
{
"date": "2019-06-17",
"count": 2
},
{
"date": "2019-06-19",
"count": 1
},
{
"date": "2019-06-26",
"count": 1
},
{
"date": "2019-07-17",
"count": 1
},
{
"date": "2019-07-24",
"count": 1
},
{
"date": "2019-07-29",
"count": 1
},
{
"date": "2019-07-30",
"count": 1
},
{
"date": "2019-08-04",
"count": 1
},
{
"date": "2019-08-09",
"count": 2
},
{
"date": "2019-08-11",
"count": 1
},
{
"date": "2019-09-13",
"count": 1
},
{
"date": "2019-11-01",
"count": 1
},
{
"date": "2019-11-04",
"count": 1
},
{
"date": "2019-11-05",
"count": 1
},
{
"date": "2019-11-11",
"count": 1
},
{
"date": "2019-11-15",
"count": 1
},
{
"date": "2019-11-27",
"count": 1
},
{
"date": "2019-11-29",
"count": 1
},
{
"date": "2019-12-06",
"count": 1
},
{
"date": "2019-12-18",
"count": 1
},
{
"date": "2019-12-20",
"count": 1
},
{
"date": "2020-01-13",
"count": 1
},
{
"date": "2020-02-02",
"count": 1
},
{
"date": "2020-02-29",
"count": 1
},
{
"date": "2020-03-05",
"count": 1
},
{
"date": "2020-03-17",
"count": 1
},
{
"date": "2020-03-25",
"count": 1
},
{
"date": "2020-04-01",
"count": 1
},
{
"date": "2020-04-06",
"count": 1
},
{
"date": "2020-04-07",
"count": 1
},
{
"date": "2020-04-11",
"count": 1
},
{
"date": "2020-04-13",
"count": 1
},
{
"date": "2020-04-17",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-04-21",
"count": 1
},
{
"date": "2020-04-23",
"count": 1
},
{
"date": "2020-04-26",
"count": 1
},
{
"date": "2020-04-29",
"count": 1
},
{
"date": "2020-05-01",
"count": 1
},
{
"date": "2020-05-03",
"count": 2
},
{
"date": "2020-05-04",
"count": 1
},
{
"date": "2020-05-11",
"count": 1
},
{
"date": "2020-05-13",
"count": 1
},
{
"date": "2020-05-15",
"count": 1
},
{
"date": "2020-05-24",
"count": 1
},
{
"date": "2020-05-25",
"count": 1
},
{
"date": "2020-06-09",
"count": 1
},
{
"date": "2020-06-10",
"count": 1
},
{
"date": "2020-06-12",
"count": 1
},
{
"date": "2020-06-17",
"count": 2
},
{
"date": "2020-06-22",
"count": 1
},
{
"date": "2020-07-01",
"count": 1
},
{
"date": "2020-07-06",
"count": 1
},
{
"date": "2020-07-12",
"count": 1
},
{
"date": "2020-07-14",
"count": 1
},
{
"date": "2020-07-22",
"count": 1
},
{
"date": "2020-07-23",
"count": 1
},
{
"date": "2020-07-27",
"count": 1
},
{
"date": "2020-08-04",
"count": 1
},
{
"date": "2020-08-12",
"count": 1
},
{
"date": "2020-08-14",
"count": 2
},
{
"date": "2020-08-16",
"count": 1
},
{
"date": "2020-08-17",
"count": 1
},
{
"date": "2020-08-22",
"count": 1
},
{
"date": "2020-09-02",
"count": 1
},
{
"date": "2020-09-13",
"count": 1
},
{
"date": "2020-09-24",
"count": 1
},
{
"date": "2020-10-05",
"count": 1
},
{
"date": "2020-10-12",
"count": 1
},
{
"date": "2020-10-19",
"count": 1
},
{
"date": "2020-10-28",
"count": 1
},
{
"date": "2020-11-13",
"count": 1
},
{
"date": "2020-11-20",
"count": 1
},
{
"date": "2020-11-24",
"count": 1
},
{
"date": "2020-11-25",
"count": 1
},
{
"date": "2020-12-01",
"count": 2
},
{
"date": "2020-12-02",
"count": 1
},
{
"date": "2020-12-17",
"count": 1
},
{
"date": "2021-01-03",
"count": 1
},
{
"date": "2021-01-05",
"count": 1
},
{
"date": "2021-01-10",
"count": 1
},
{
"date": "2021-01-12",
"count": 1
},
{
"date": "2021-01-18",
"count": 1
},
{
"date": "2021-01-23",
"count": 1
},
{
"date": "2021-01-27",
"count": 1
},
{
"date": "2021-02-02",
"count": 1
},
{
"date": "2021-02-06",
"count": 1
},
{
"date": "2021-02-07",
"count": 2
},
{
"date": "2021-02-08",
"count": 1
},
{
"date": "2021-02-16",
"count": 1
},
{
"date": "2021-02-18",
"count": 1
},
{
"date": "2021-02-25",
"count": 1
},
{
"date": "2021-03-01",
"count": 2
},
{
"date": "2021-03-04",
"count": 2
},
{
"date": "2021-03-17",
"count": 1
},
{
"date": "2021-03-26",
"count": 1
},
{
"date": "2021-04-13",
"count": 1
},
{
"date": "2021-04-17",
"count": 1
},
{
"date": "2021-04-21",
"count": 1
},
{
"date": "2021-05-03",
"count": 2
},
{
"date": "2021-05-06",
"count": 1
},
{
"date": "2021-05-09",
"count": 1
},
{
"date": "2021-05-11",
"count": 1
},
{
"date": "2021-05-21",
"count": 1
},
{
"date": "2021-05-23",
"count": 1
},
{
"date": "2021-06-03",
"count": 1
},
{
"date": "2021-06-05",
"count": 1
},
{
"date": "2021-06-10",
"count": 2
},
{
"date": "2021-06-30",
"count": 1
},
{
"date": "2021-07-16",
"count": 1
},
{
"date": "2021-07-19",
"count": 1
},
{
"date": "2021-07-20",
"count": 1
},
{
"date": "2021-08-04",
"count": 1
},
{
"date": "2021-08-09",
"count": 1
},
{
"date": "2021-08-10",
"count": 2
},
{
"date": "2021-09-24",
"count": 1
},
{
"date": "2021-09-29",
"count": 1
},
{
"date": "2021-10-11",
"count": 1
},
{
"date": "2021-10-27",
"count": 2
},
{
"date": "2021-10-31",
"count": 1
},
{
"date": "2021-11-02",
"count": 1
},
{
"date": "2021-11-07",
"count": 1
},
{
"date": "2021-11-09",
"count": 1
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2021-11-15",
"count": 1
},
{
"date": "2021-12-04",
"count": 1
},
{
"date": "2021-12-07",
"count": 1
},
{
"date": "2021-12-13",
"count": 1
},
{
"date": "2021-12-14",
"count": 1
},
{
"date": "2021-12-22",
"count": 1
},
{
"date": "2021-12-30",
"count": 1
},
{
"date": "2022-01-01",
"count": 1
},
{
"date": "2022-01-02",
"count": 1
},
{
"date": "2022-01-09",
"count": 1
},
{
"date": "2022-01-11",
"count": 1
},
{
"date": "2022-01-13",
"count": 1
},
{
"date": "2022-01-21",
"count": 1
},
{
"date": "2022-02-04",
"count": 1
},
{
"date": "2022-02-21",
"count": 2
},
{
"date": "2022-02-22",
"count": 1
},
{
"date": "2022-02-28",
"count": 1
},
{
"date": "2022-03-02",
"count": 1
},
{
"date": "2022-03-06",
"count": 1
},
{
"date": "2022-03-07",
"count": 1
},
{
"date": "2022-03-17",
"count": 1
},
{
"date": "2022-03-25",
"count": 1
},
{
"date": "2022-03-27",
"count": 1
},
{
"date": "2022-04-04",
"count": 1
},
{
"date": "2022-04-08",
"count": 1
},
{
"date": "2022-04-22",
"count": 1
},
{
"date": "2022-04-23",
"count": 1
},
{
"date": "2022-04-25",
"count": 1
},
{
"date": "2022-05-02",
"count": 1
},
{
"date": "2022-05-07",
"count": 1
},
{
"date": "2022-05-11",
"count": 1
},
{
"date": "2022-05-18",
"count": 1
},
{
"date": "2022-05-21",
"count": 1
},
{
"date": "2022-05-25",
"count": 1
},
{
"date": "2022-06-02",
"count": 2
},
{
"date": "2022-06-03",
"count": 1
},
{
"date": "2022-06-07",
"count": 1
},
{
"date": "2022-06-20",
"count": 1
},
{
"date": "2022-06-21",
"count": 1
},
{
"date": "2022-06-29",
"count": 1
},
{
"date": "2022-07-06",
"count": 1
},
{
"date": "2022-07-08",
"count": 1
},
{
"date": "2022-07-11",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-07-30",
"count": 1
},
{
"date": "2022-08-04",
"count": 1
},
{
"date": "2022-08-09",
"count": 1
},
{
"date": "2022-08-10",
"count": 1
},
{
"date": "2022-08-15",
"count": 1
},
{
"date": "2022-08-25",
"count": 1
},
{
"date": "2022-09-01",
"count": 1
},
{
"date": "2022-09-11",
"count": 1
},
{
"date": "2022-09-25",
"count": 1
},
{
"date": "2022-09-28",
"count": 1
},
{
"date": "2022-09-30",
"count": 1
},
{
"date": "2022-10-05",
"count": 1
},
{
"date": "2022-10-06",
"count": 1
},
{
"date": "2022-10-07",
"count": 1
},
{
"date": "2022-10-18",
"count": 1
},
{
"date": "2022-10-27",
"count": 1
},
{
"date": "2022-10-29",
"count": 1
},
{
"date": "2022-10-31",
"count": 1
},
{
"date": "2022-11-15",
"count": 1
},
{
"date": "2022-11-22",
"count": 1
},
{
"date": "2022-12-06",
"count": 1
},
{
"date": "2022-12-12",
"count": 2
},
{
"date": "2022-12-14",
"count": 1
},
{
"date": "2022-12-21",
"count": 1
},
{
"date": "2023-01-06",
"count": 1
},
{
"date": "2023-01-13",
"count": 1
},
{
"date": "2023-01-19",
"count": 1
},
{
"date": "2023-01-20",
"count": 1
},
{
"date": "2023-01-23",
"count": 1
},
{
"date": "2023-02-04",
"count": 1
},
{
"date": "2023-02-20",
"count": 1
},
{
"date": "2023-02-26",
"count": 2
},
{
"date": "2023-02-28",
"count": 1
},
{
"date": "2023-03-04",
"count": 1
},
{
"date": "2023-03-07",
"count": 1
},
{
"date": "2023-03-22",
"count": 1
},
{
"date": "2023-04-01",
"count": 1
},
{
"date": "2023-04-03",
"count": 1
},
{
"date": "2023-04-06",
"count": 1
},
{
"date": "2023-04-14",
"count": 2
},
{
"date": "2023-04-19",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-26",
"count": 1
},
{
"date": "2023-05-01",
"count": 1
},
{
"date": "2023-05-22",
"count": 1
},
{
"date": "2023-05-24",
"count": 1
},
{
"date": "2023-05-29",
"count": 1
},
{
"date": "2023-06-09",
"count": 1
},
{
"date": "2023-06-22",
"count": 1
},
{
"date": "2023-06-23",
"count": 1
},
{
"date": "2023-07-02",
"count": 1
},
{
"date": "2023-07-05",
"count": 1
},
{
"date": "2023-07-06",
"count": 1
},
{
"date": "2023-07-19",
"count": 1
},
{
"date": "2023-07-24",
"count": 2
},
{
"date": "2023-08-01",
"count": 1
},
{
"date": "2023-08-07",
"count": 1
},
{
"date": "2023-08-09",
"count": 1
},
{
"date": "2023-08-21",
"count": 1
},
{
"date": "2023-08-23",
"count": 1
},
{
"date": "2023-08-25",
"count": 1
},
{
"date": "2023-09-03",
"count": 2
},
{
"date": "2023-09-09",
"count": 1
},
{
"date": "2023-09-19",
"count": 1
},
{
"date": "2023-10-05",
"count": 1
},
{
"date": "2023-10-16",
"count": 1
},
{
"date": "2023-10-17",
"count": 1
},
{
"date": "2023-11-05",
"count": 1
},
{
"date": "2023-11-07",
"count": 2
},
{
"date": "2023-11-15",
"count": 1
},
{
"date": "2023-11-21",
"count": 1
},
{
"date": "2023-11-29",
"count": 1
},
{
"date": "2023-12-03",
"count": 1
},
{
"date": "2023-12-04",
"count": 1
},
{
"date": "2023-12-15",
"count": 1
},
{
"date": "2023-12-19",
"count": 1
},
{
"date": "2023-12-20",
"count": 1
},
{
"date": "2023-12-26",
"count": 1
},
{
"date": "2024-01-09",
"count": 1
},
{
"date": "2024-01-19",
"count": 1
},
{
"date": "2024-01-22",
"count": 1
},
{
"date": "2024-01-24",
"count": 1
},
{
"date": "2024-01-26",
"count": 1
},
{
"date": "2024-02-05",
"count": 2
},
{
"date": "2024-02-15",
"count": 1
},
{
"date": "2024-03-01",
"count": 1
},
{
"date": "2024-03-02",
"count": 1
},
{
"date": "2024-03-07",
"count": 1
},
{
"date": "2024-03-12",
"count": 1
},
{
"date": "2024-03-27",
"count": 1
},
{
"date": "2024-03-31",
"count": 1
},
{
"date": "2024-04-07",
"count": 1
},
{
"date": "2024-04-17",
"count": 1
},
{
"date": "2024-04-23",
"count": 1
},
{
"date": "2024-04-27",
"count": 1
},
{
"date": "2024-05-01",
"count": 1
},
{
"date": "2024-05-03",
"count": 1
},
{
"date": "2024-05-08",
"count": 1
},
{
"date": "2024-05-10",
"count": 1
},
{
"date": "2024-06-16",
"count": 1
},
{
"date": "2024-06-22",
"count": 1
},
{
"date": "2024-07-02",
"count": 1
},
{
"date": "2024-07-18",
"count": 1
},
{
"date": "2024-07-25",
"count": 1
},
{
"date": "2024-08-21",
"count": 1
},
{
"date": "2024-08-30",
"count": 1
},
{
"date": "2024-09-03",
"count": 1
},
{
"date": "2024-09-07",
"count": 1
},
{
"date": "2024-09-09",
"count": 1
},
{
"date": "2024-09-12",
"count": 1
},
{
"date": "2024-10-10",
"count": 1
},
{
"date": "2024-10-19",
"count": 1
},
{
"date": "2024-10-24",
"count": 1
},
{
"date": "2024-10-27",
"count": 1
},
{
"date": "2024-11-19",
"count": 1
},
{
"date": "2024-11-24",
"count": 1
},
{
"date": "2024-11-30",
"count": 1
},
{
"date": "2024-12-26",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-01-06",
"count": 1
},
{
"date": "2025-01-18",
"count": 1
},
{
"date": "2025-01-25",
"count": 1
},
{
"date": "2025-02-06",
"count": 1
},
{
"date": "2025-02-14",
"count": 1
},
{
"date": "2025-03-15",
"count": 1
},
{
"date": "2025-03-26",
"count": 1
},
{
"date": "2025-04-16",
"count": 1
},
{
"date": "2025-04-18",
"count": 1
},
{
"date": "2025-04-20",
"count": 1
},
{
"date": "2025-06-06",
"count": 1
},
{
"date": "2025-06-09",
"count": 1
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-15",
"count": 1
},
{
"date": "2025-07-16",
"count": 1
},
{
"date": "2025-07-23",
"count": 1
},
{
"date": "2025-07-26",
"count": 1
},
{
"date": "2025-07-28",
"count": 1
},
{
"date": "2025-08-03",
"count": 1
},
{
"date": "2025-08-14",
"count": 1
},
{
"date": "2025-08-27",
"count": 1
},
{
"date": "2025-08-29",
"count": 1
},
{
"date": "2025-08-30",
"count": 1
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-16",
"count": 1
},
{
"date": "2025-09-19",
"count": 1
},
{
"date": "2025-09-20",
"count": 1
},
{
"date": "2025-09-26",
"count": 1
},
{
"date": "2025-10-01",
"count": 1
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-11-01",
"count": 1
},
{
"date": "2025-11-10",
"count": 1
},
{
"date": "2025-11-13",
"count": 1
},
{
"date": "2025-11-22",
"count": 1
},
{
"date": "2025-11-23",
"count": 1
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-04",
"count": 1
},
{
"date": "2025-12-10",
"count": 1
},
{
"date": "2025-12-28",
"count": 1
},
{
"date": "2025-12-31",
"count": 1
},
{
"date": "2026-01-10",
"count": 1
},
{
"date": "2026-01-26",
"count": 1
},
{
"date": "2026-02-13",
"count": 1
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-02-16",
"count": 1
},
{
"date": "2026-02-17",
"count": 1
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-03-10",
"count": 2
},
{
"date": "2026-03-11",
"count": 2
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-16",
"count": 4
},
{
"date": "2026-03-23",
"count": 1
},
{
"date": "2026-04-05",
"count": 1
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-20",
"count": 1
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-05-08",
"count": 1
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-12",
"count": 1
},
{
"date": "2026-06-21",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-11",
"count": 1
},
{
"date": "2026-07-14",
"count": 1
},
{
"date": "2026-07-20",
"count": 1
},
{
"date": "2026-07-24",
"count": 1
},
{
"date": "2026-07-27",
"count": 1
},
{
"date": "2026-07-29",
"count": 2
},
{
"date": "2026-08-01",
"count": 1
},
{
"date": "2026-08-02",
"count": 1
}
],
"complete": true,
"collected": 479,
"total_forks": 488
},
"star_history": null,
"open_issues_and_prs": 120
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [
"docs/Makefile",
"man/Makefile"
],
"api_schema_files": [],
"has_devcontainer": true,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 2504,
"source_files_sampled": 2,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 2,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "recommonmark",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "sphinxcontrib-programoutput",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 2,
"direct_count": 0,
"indirect_count": 2
}
},
"maintainership": {
"issues": {
"open_prs": 19,
"merged_prs": 404,
"open_issues": 101,
"closed_ratio": 0.804,
"closed_issues": 414,
"closed_unmerged_prs": 246
},
"bus_factor": 1,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "martin-schulze-vireso",
"commits": 1145,
"avatar_url": "https://avatars.githubusercontent.com/u/37703201?v=4"
},
{
"type": "User",
"login": "mbland",
"commits": 140,
"avatar_url": "https://avatars.githubusercontent.com/u/301547?v=4"
},
{
"type": "User",
"login": "sublimino",
"commits": 106,
"avatar_url": "https://avatars.githubusercontent.com/u/134117?v=4"
},
{
"type": "User",
"login": "sstephenson",
"commits": 92,
"avatar_url": "https://avatars.githubusercontent.com/u/2603?v=4"
},
{
"type": "User",
"login": "qec-pconner",
"commits": 32,
"avatar_url": "https://avatars.githubusercontent.com/u/97137029?v=4"
},
{
"type": "User",
"login": "cdevinesr",
"commits": 30,
"avatar_url": "https://avatars.githubusercontent.com/u/4370934?v=4"
},
{
"type": "User",
"login": "brokenpip3",
"commits": 26,
"avatar_url": "https://avatars.githubusercontent.com/u/40476330?v=4"
},
{
"type": "User",
"login": "jsoref",
"commits": 24,
"avatar_url": "https://avatars.githubusercontent.com/u/2119212?v=4"
},
{
"type": "User",
"login": "jasonkarns",
"commits": 22,
"avatar_url": "https://avatars.githubusercontent.com/u/119972?v=4"
},
{
"type": "User",
"login": "rockandska",
"commits": 18,
"avatar_url": "https://avatars.githubusercontent.com/u/24546770?v=4"
}
],
"contributors_sampled": 98,
"top_contributor_share": 0.607
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"codespell.yml",
"dependency-review.yml",
"release.yml",
"release_dockerhub.yml",
"scorecard.yml",
"tests.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": true
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 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": 8,
"reason": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 2,
"reason": "badge detected: InProgress",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 4,
"reason": "Found 3/7 approved changesets -- score normalized to 4",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 36 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 6 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": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 7,
"reason": "dependency not pinned by hash detected -- score normalized to 7",
"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": 9,
"reason": "security policy file 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": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"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": "ae4b94d7cc35f62468297791aa4ab8c3af7377ba",
"ran_at": "2026-08-03T20:15:26Z",
"aggregate_score": 7.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"recent_prs": {
"merged_7d": 0,
"decided_7d": 0,
"merged_30d": 8,
"authors_30d": 7,
"decided_30d": 10,
"sample_size": 60,
"window_days": 30,
"sample_exhausted": false,
"authors_probed_30d": 7,
"newcomer_merged_30d": 3,
"bot_prs_excluded_30d": 11,
"newcomer_authors_30d": 5,
"newcomer_decided_30d": 5
},
"ci_last_run_at": "2026-08-03T19:02:54Z",
"oldest_open_prs": [
{
"number": 196,
"created_at": "2019-03-05T10:21:04Z",
"last_comment_at": "2019-05-01T21:39:09Z",
"last_comment_author": "cyphar"
},
{
"number": 275,
"created_at": "2020-04-13T10:09:30Z",
"last_comment_at": "2022-01-11T10:02:17Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 826,
"created_at": "2023-12-12T02:36:09Z",
"last_comment_at": "2025-10-14T16:42:09Z",
"last_comment_author": "cyphar"
},
{
"number": 882,
"created_at": "2024-03-07T18:08:59Z",
"last_comment_at": "2024-09-14T15:25:02Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 968,
"created_at": "2024-08-03T21:09:43Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1133,
"created_at": "2025-08-21T13:31:08Z",
"last_comment_at": "2025-08-21T13:37:49Z",
"last_comment_author": "github-actions"
},
{
"number": 1167,
"created_at": "2025-11-03T19:32:15Z",
"last_comment_at": "2025-11-03T20:31:00Z",
"last_comment_author": "github-actions"
},
{
"number": 1179,
"created_at": "2025-12-10T08:58:02Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1193,
"created_at": "2026-02-16T13:35:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1194,
"created_at": "2026-02-16T21:24:22Z",
"last_comment_at": "2026-02-19T02:32:17Z",
"last_comment_author": "jzacsh"
},
{
"number": 1209,
"created_at": "2026-06-21T18:23:36Z",
"last_comment_at": "2026-08-01T19:29:18Z",
"last_comment_author": "c0da-ricon"
},
{
"number": 1222,
"created_at": "2026-07-22T19:02:50Z",
"last_comment_at": "2026-07-22T19:27:13Z",
"last_comment_author": "github-actions"
},
{
"number": 1226,
"created_at": "2026-07-22T19:49:08Z",
"last_comment_at": "2026-07-22T19:49:54Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 1227,
"created_at": "2026-07-23T19:03:00Z",
"last_comment_at": "2026-07-23T19:05:06Z",
"last_comment_author": "github-actions"
},
{
"number": 1228,
"created_at": "2026-07-23T19:03:11Z",
"last_comment_at": "2026-07-23T19:09:57Z",
"last_comment_author": "github-actions"
},
{
"number": 1229,
"created_at": "2026-07-23T19:03:14Z",
"last_comment_at": "2026-07-23T19:12:04Z",
"last_comment_author": "github-actions"
},
{
"number": 1231,
"created_at": "2026-07-29T15:31:40Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1232,
"created_at": "2026-07-29T15:34:58Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1234,
"created_at": "2026-08-02T13:44:44Z",
"last_comment_at": "2026-08-03T19:07:49Z",
"last_comment_author": "henning-schild"
}
],
"last_merged_pr_at": "2026-07-26T21:15:40Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 18,
"created_at": "2017-10-02T16:36:33Z",
"last_comment_at": "2025-11-24T21:20:52Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 36,
"created_at": "2017-11-08T21:18:45Z",
"last_comment_at": "2021-01-27T19:40:55Z",
"last_comment_author": "rockandska"
},
{
"number": 44,
"created_at": "2017-12-06T15:34:08Z",
"last_comment_at": "2023-05-27T23:23:21Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 80,
"created_at": "2018-05-10T19:03:51Z",
"last_comment_at": "2022-08-20T12:24:00Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 131,
"created_at": "2018-07-31T12:59:18Z",
"last_comment_at": "2018-08-10T08:12:57Z",
"last_comment_author": "vikin91"
},
{
"number": 147,
"created_at": "2018-08-29T07:23:35Z",
"last_comment_at": "2022-05-13T14:43:46Z",
"last_comment_author": "mmetc"
},
{
"number": 150,
"created_at": "2018-09-25T02:25:38Z",
"last_comment_at": "2021-10-24T07:30:56Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 162,
"created_at": "2018-11-22T16:26:38Z",
"last_comment_at": "2019-01-15T17:16:23Z",
"last_comment_author": "bruce-szalwinski"
},
{
"number": 189,
"created_at": "2019-02-23T05:37:23Z",
"last_comment_at": "2021-10-23T20:21:52Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 199,
"created_at": "2019-03-16T00:01:48Z",
"last_comment_at": "2022-06-03T22:13:27Z",
"last_comment_author": "nylen"
},
{
"number": 200,
"created_at": "2019-03-23T00:48:50Z",
"last_comment_at": "2022-03-16T10:16:16Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 241,
"created_at": "2019-08-06T16:20:31Z",
"last_comment_at": "2026-05-25T17:13:33Z",
"last_comment_author": "jakub-bochenski"
},
{
"number": 305,
"created_at": "2020-05-04T18:29:39Z",
"last_comment_at": "2020-05-13T07:47:03Z",
"last_comment_author": "sublimino"
},
{
"number": 382,
"created_at": "2020-11-20T01:24:13Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 388,
"created_at": "2020-12-17T20:28:28Z",
"last_comment_at": "2021-09-23T20:56:04Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 401,
"created_at": "2021-01-23T20:39:15Z",
"last_comment_at": "2022-02-21T09:10:55Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 414,
"created_at": "2021-03-04T19:08:55Z",
"last_comment_at": "2021-04-26T07:51:23Z",
"last_comment_author": null
},
{
"number": 418,
"created_at": "2021-03-16T18:41:20Z",
"last_comment_at": "2021-03-31T20:56:33Z",
"last_comment_author": "abathur"
},
{
"number": 493,
"created_at": "2021-08-27T01:07:41Z",
"last_comment_at": "2021-09-13T12:17:17Z",
"last_comment_author": "martin-schulze-vireso"
},
{
"number": 505,
"created_at": "2021-10-19T03:19:35Z",
"last_comment_at": "2021-10-23T17:25:10Z",
"last_comment_author": "martin-schulze-vireso"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/bats-core/bats-core",
"host": "github.com",
"name": "bats-core",
"owner": "bats-core"
},
"metrics": {
"overall": {
"key": "overall",
"band": "exceptional",
"name": "Overall health",
"note": "The weighted overall 81 is calibrated to 94 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 81,
"calibrated": 94,
"calibration": "2026-08-02"
}
}
],
"value": 94,
"inputs": {
"security": 79,
"vitality": 82,
"community": 92,
"governance": 63,
"calibration": "2026-08-02",
"engineering": 98,
"ai_readiness": 57,
"weighted_overall_raw": 81
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 82,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"commits_last_year": 122,
"human_commit_share": 0.88,
"days_since_last_push": 7,
"active_weeks_last_year": 24
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "24/52 weeks with commits",
"points": 16.6,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 24
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "122 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 122
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 6 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": 84,
"inputs": {
"releases_count": 25,
"latest_release_tag": "v1.14.0",
"releases_from_tags": false,
"days_since_latest_release": 13,
"mean_days_between_releases": 152.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "25 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 25
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 13 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 13
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~152.3 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 152.3
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 8,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 8 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 8
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "excellent",
"name": "Community & Adoption",
"value": 92,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "excellent",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"forks": 488,
"stars": 6191,
"watchers": 47,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "6,191 stars",
"points": 60,
"status": "met",
"details": [
{
"code": "stars",
"params": {
"count": 6191
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "488 forks",
"points": 22.4,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 488
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "47 watchers",
"points": 9.2,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 47
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": 5,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"readme_badge_services": [
"github.com",
"readthedocs.org",
"shields.io"
],
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "exceptional",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"packages": [
"bats"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 1275285
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "1,275,285 downloads/month across npm",
"points": 80,
"status": "met",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 1275285,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 63,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "weak",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 41,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 98,
"top_contributor_share": 0.607
},
"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 61% of commits",
"points": 8.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 61
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "98 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 98
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 36 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"merged_prs": 404,
"open_issues": 101,
"closed_issues": 414,
"prs_merged_7d": 0,
"prs_decided_7d": 0,
"prs_merged_30d": 8,
"prs_decided_30d": 10,
"issue_closed_ratio": 0.804,
"closed_unmerged_prs": 246,
"first_time_authors_30d": 5,
"first_time_prs_merged_30d": 3,
"first_time_prs_decided_30d": 5
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "80% of issues closed",
"points": 33.8,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 80
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "404/650 decided PRs merged",
"points": 18.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 404,
"decided": 650
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "3/5 first-time contributors' PRs merged in 30d",
"points": 7.8,
"status": "partial",
"details": [
{
"code": "newcomer_prs_merged",
"params": {
"days": 30,
"merged": 3,
"decided": 5
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 3/7 approved changesets -- score normalized to 4",
"points": 6,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"followers": 119,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "bats-core",
"public_repos": 11,
"account_age_days": 3239
},
"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": "119 followers of bats-core",
"points": 14.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 119,
"login": "bats-core"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "11 public repos, account ~8 yr old",
"points": 19.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 11
}
},
{
"code": "account_age_years",
"params": {
"years": 8
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 91,
"inputs": {
"packages": [
"bats"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 269
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 269 days ago",
"points": 26,
"status": "partial",
"details": [
{
"code": "publish_recency",
"params": {
"days": 269
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "26 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 26
}
}
],
"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": "exceptional",
"name": "Engineering Quality",
"value": 98,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "exceptional",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": true
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "6 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 6
}
}
],
"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": 16,
"status": "met",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 9.6,
"status": "met",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
"points": 16,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "exceptional",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"shell",
"bash",
"testing",
"bats",
"tap",
"testing-tools",
"junit",
"xunit"
],
"has_wiki": true,
"homepage": "https://bats-core.readthedocs.io/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://bats-core.readthedocs.io/",
"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": "8 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 8
}
}
],
"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": "good",
"name": "Security",
"value": 79,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "good",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 79,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 7.9
},
"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": "12 out of 14 merged PRs checked by a CI test -- score normalized to 8",
"points": 2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "badge detected: InProgress",
"points": 0.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 3/7 approved changesets -- score normalized to 4",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 36 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 6 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 detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 3.5,
"status": "partial",
"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 detected",
"points": 4.5,
"status": "partial",
"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": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"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": "exceptional",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 15
},
"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": 57,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "weak",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.818,
"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": "72 of 88 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 72,
"sampled": 88
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [
"docs/Makefile",
"man/Makefile"
],
"has_devcontainer": true,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.01,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.12
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "docs/Makefile, man/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "docs/Makefile, man/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 11,
"status": "met",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "devcontainer, Dockerfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "devcontainer, Dockerfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "1 of the last 100 commits agent-authored or agent-credited",
"points": 2,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "12 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 12,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 7,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Shell",
"largest_source_bytes": 2504,
"source_files_sampled": 2,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Shell without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Shell"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/2 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 2,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "weak",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"top": [
"library"
],
"labels": [
"library"
],
"scores": {
"library": 6,
"network-service": 3
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:npm",
"weight": 6
},
{
"tier": "structure",
"label": "network-service",
"source": "tree.compose",
"weight": 3
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": false,
"consumed_by_code": true
},
"metrics_version": "2.5.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-08-03T20:15:53.292172Z",
"schema_version": "0.30.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/bats-core/bats-core.svg",
"full_name": "bats-core/bats-core",
"license_state": "custom",
"license_spdx": null
}