Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"hacktoberfest"
],
"is_fork": false,
"size_kb": 309,
"has_wiki": true,
"homepage": null,
"languages": {
"PHP": 152440,
"Shell": 81,
"Dockerfile": 215
},
"pushed_at": "2026-07-29T18:08:02Z",
"created_at": "2020-10-03T17:02:36Z",
"owner_type": "Organization",
"updated_at": "2026-07-29T18:08:33Z",
"description": "Collection of tools to import links from different sources and map them to a shlink-compliant format",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP"
]
},
"owner": {
"blog": "https://shlink.io",
"name": null,
"type": "Organization",
"login": "shlinkio",
"company": null,
"location": null,
"followers": 94,
"avatar_url": "https://avatars.githubusercontent.com/u/20341790?v=4",
"created_at": "2016-07-07T15:57:20Z",
"is_verified": null,
"public_repos": 36,
"account_age_days": 3674
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v5.8.0",
"kind": "minor",
"published_at": "2026-06-11T08:40:27Z"
},
{
"tag": "v5.7.0",
"kind": "minor",
"published_at": "2026-02-08T11:37:29Z"
},
{
"tag": "v5.6.0",
"kind": "minor",
"published_at": "2025-01-25T14:58:23Z"
},
{
"tag": "v5.5.0",
"kind": "minor",
"published_at": "2024-12-27T15:21:56Z"
},
{
"tag": "v5.4.0",
"kind": "minor",
"published_at": "2024-10-21T09:01:21Z"
},
{
"tag": "v5.3.2",
"kind": "patch",
"published_at": "2024-04-12T16:13:11Z"
},
{
"tag": "v5.3.1",
"kind": "patch",
"published_at": "2024-03-28T12:45:04Z"
},
{
"tag": "v5.3.0",
"kind": "minor",
"published_at": "2024-03-03T17:44:03Z"
},
{
"tag": "v5.2.1",
"kind": "patch",
"published_at": "2023-12-17T18:34:37Z"
},
{
"tag": "v5.2.0",
"kind": "minor",
"published_at": "2023-11-25T18:44:48Z"
},
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2023-04-22T10:03:21Z"
},
{
"tag": "v5.0.0",
"kind": "major",
"published_at": "2022-12-16T21:28:15Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2022-08-06T17:17:04Z"
},
{
"tag": "v3.0.0",
"kind": "major",
"published_at": "2022-04-23T17:25:09Z"
},
{
"tag": "v2.5.0",
"kind": "minor",
"published_at": "2021-12-12T16:07:18Z"
},
{
"tag": "v2.4.0",
"kind": "minor",
"published_at": "2021-12-02T19:36:55Z"
},
{
"tag": "v2.3.1",
"kind": "patch",
"published_at": "2021-08-02T16:15:36Z"
},
{
"tag": "v2.3.0",
"kind": "minor",
"published_at": "2021-05-22T19:58:58Z"
},
{
"tag": "v2.2.0",
"kind": "minor",
"published_at": "2021-02-06T19:43:41Z"
},
{
"tag": "v2.1.0",
"kind": "minor",
"published_at": "2020-12-04T17:38:54Z"
},
{
"tag": "v2.0.1",
"kind": "patch",
"published_at": "2020-10-25T10:43:12Z"
},
{
"tag": "v2.0.0",
"kind": "major",
"published_at": "2020-10-24T12:40:27Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2020-10-24T10:55:52Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2020-10-22T15:27:13Z"
}
],
"recent_commits": [
{
"oid": "f4fac82611648221e9920a2c6f34dd8421b0fe2a",
"body": "Migrate form PHPStan to Mago for code analysis",
"is_bot": false,
"headline": "Merge pull request #88 from acelaya-forks/mago-analyzer",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-07-29T18:08:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "632910f8bdf77406edb5ebf95d99e867f1ddc203",
"body": null,
"is_bot": false,
"headline": "Migrate form PHPStan to Mago for code analysis",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-07-29T18:06:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b92e48eda2a7970d06dc9a650c1ff0646ad045c9",
"body": null,
"is_bot": false,
"headline": "Add v5.8.0 to changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-06-11T08:40:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68e7def2958150df62f7b2ce2c39c1512cc85c60",
"body": "Migrate form PHP_CodeSniffer to Mago for code linting and formatting",
"is_bot": false,
"headline": "Merge pull request #87 from acelaya-forks/mago-migration",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-05-22T16:10:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8c47ca23f597f105ff5689341b16b17920bc26e",
"body": null,
"is_bot": false,
"headline": "Extend mago config from shlinkio/shlink-mago-config",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-05-22T16:04:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9221ec93c3a6079aa79c2984785cbdf941ab3adb",
"body": null,
"is_bot": false,
"headline": "Migrate form PHP_CodeSniffer to Mago for code linting and formatting",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-05-22T15:31:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e289854bf655486cf4f93ec4e2203468a1d15de9",
"body": "Update to PHPUnit 13",
"is_bot": false,
"headline": "Merge pull request #86 from acelaya-forks/phpunit-13",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-02-08T11:36:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5e15060fe3580d381b0586428a81add3e784c6a",
"body": null,
"is_bot": false,
"headline": "Update to PHPUnit 13",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-02-08T11:34:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63753cfe8c67e58b6b52ac6f800f9bb6b2ce0cca",
"body": "Remove dependency in ext-json",
"is_bot": false,
"headline": "Merge pull request #85 from acelaya-forks/remove-ext-json",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-01-07T18:43:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3f7d90005e22d6b0bdb164a9b690aa362d87a10",
"body": null,
"is_bot": false,
"headline": "Remove dependency in ext-json",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2026-01-07T18:39:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af03f6b5790b7255dbf0a80112485f135d080c07",
"body": "Fix PHPUnit notices around stubs and mock objects",
"is_bot": false,
"headline": "Merge pull request #84 from acelaya-forks/phpunit-notices",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-16T13:06:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "985e6e60e845e830a8b5510d92b720f91df47e7c",
"body": null,
"is_bot": false,
"headline": "Fix PHPUnit notices around stubs and mock objects",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-16T13:03:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ab5cd9a166946746fb141fcba303f2ccd7a7480",
"body": "Convert ImportCommand into invokable command",
"is_bot": false,
"headline": "Merge pull request #83 from acelaya-forks/symfony-cli-improvements",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-16T12:59:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8aac44441d17524399c94c2ac7c23b6d747427d",
"body": null,
"is_bot": false,
"headline": "Convert ImportCommand into invokable command",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-16T12:57:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4498f0aeea1b09b894ca0a6b607ffa5893594c58",
"body": "Add support for Symfony 8.0",
"is_bot": false,
"headline": "Merge pull request #82 from acelaya-forks/symfony-8.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-02T10:47:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eaeb40662684b9c5942a1c7a905ebf02b041fbc3",
"body": null,
"is_bot": false,
"headline": "Add support for Symfony 8.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-12-02T10:45:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e0637fe2f522b519dd7773d2345d78dd2191999",
"body": null,
"is_bot": false,
"headline": "Remove coverage-driver param in CI",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-11-02T08:12:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dabf2d7a02516b107e7b43184ad9b9c516322078",
"body": null,
"is_bot": false,
"headline": "Update coding standard",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-10-06T06:56:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "872ba26300465d4109affcf03ae3012f14063c73",
"body": "Update to PHPUnit 12",
"is_bot": false,
"headline": "Merge pull request #81 from acelaya-forks/feature/phpunit-12",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-02-13T20:43:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bacdd68b5798e5370d967e05e20b5affa3931394",
"body": null,
"is_bot": false,
"headline": "Update to PHPUnit 12",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-02-13T20:42:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cff0d47ec4db8c91ef11bb3ded28a0c8e7675447",
"body": "Support shlink-config 4.0",
"is_bot": false,
"headline": "Merge pull request #80 from acelaya-forks/feature/v5.6.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-01-25T14:57:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0703ecc2656bc44d6dff6d8e9362eacb43e2be95",
"body": null,
"is_bot": false,
"headline": "Support shlink-config 4.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-01-25T14:55:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca73d78348569fffb27a7fd8bc978f05b104f8f9",
"body": "Drop support for PHP 8.2",
"is_bot": false,
"headline": "Merge pull request #79 from acelaya-forks/feature/drop-php-8.2",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-01-15T09:03:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f981319bf9ca4c0481a283f4b91597ac05a1d5bd",
"body": null,
"is_bot": false,
"headline": "Drop support for PHP 8.2",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2025-01-15T09:00:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dccea037fd9709b5160f06831e34f9510537b039",
"body": "Add v5.5. to changelog and update dependencies",
"is_bot": false,
"headline": "Merge pull request #78 from acelaya-forks/feature/v5.5",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-27T15:20:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70c6d6ad1fc235d463678771e4be567572bd1a6f",
"body": null,
"is_bot": false,
"headline": "Add v5.5. to changelog and update dependencies",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-27T15:19:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c305ee26eaf1783edba78563c24510b07419e2f",
"body": "Add list of redirect rules to ImportedShlinkUrl model",
"is_bot": false,
"headline": "Merge pull request #77 from acelaya-forks/feature/import-redirect-rules",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-21T20:17:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d533f33ea78ee6fde6165678c02d8ccae49b6ae1",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-21T20:16:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0c4ae3bf779d57506cb533f932c6c97acc340cd",
"body": null,
"is_bot": false,
"headline": "Cover case when loading redirect rules return a 404",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-21T20:09:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d346fdcaf74a6cd4b36b7aa92815ce6b737fa522",
"body": null,
"is_bot": false,
"headline": "Fix ShlinkImporterTest",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-21T20:03:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a7bbe7903c911a996e998a0746b17f901516277",
"body": null,
"is_bot": false,
"headline": "Add logic to fetch and map redirect rules",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-21T10:12:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d308e6a0b9aa04fe3985b1b2aca9412fd43a0330",
"body": null,
"is_bot": false,
"headline": "Add list of redirect rules to ImportedShlinkUrl model",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-12-20T21:31:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "714ef42bbaf37150a85d25eeb80e2fa9ecf5e8ff",
"body": "Update to PHPStan 2.0",
"is_bot": false,
"headline": "Merge pull request #76 from acelaya-forks/feature/phpstan-2",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-11-12T08:51:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80841d2ce5770f256846ab241378126fae82f37c",
"body": null,
"is_bot": false,
"headline": "Update to PHPStan 2.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-11-12T08:49:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e854593cb1adf774928fbd1839654fe2129a9b16",
"body": "Update to PHP coding standard 2.4.0",
"is_bot": false,
"headline": "Merge pull request #75 from acelaya-forks/feature/update-coding-standard",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-28T08:50:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b006ca20749767a2611e1de73826c2ddbe03daeb",
"body": null,
"is_bot": false,
"headline": "Update to PHP coding standard 2.4.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-28T08:48:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e24443739ffd3db0593e53211b10c5f9fbe8302",
"body": null,
"is_bot": false,
"headline": "Simplify local dev env",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-27T07:57:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1d581697a2f0b2711989987ff2c8890199c55ad",
"body": null,
"is_bot": false,
"headline": "Add v5.4 to changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-21T09:00:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09309cae3fe31a1aa2fe8a222f55768775e7764a",
"body": "Switch to xdebug for code coverage reports",
"is_bot": false,
"headline": "Merge pull request #74 from acelaya-forks/feature/xdebug-coverage",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-21T08:59:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42d38f16c1bae4e18e62166c54e71e815e82acc6",
"body": null,
"is_bot": false,
"headline": "Switch to xdebug for code coverage reports",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-21T08:58:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "148a5adea205c8a3aed7e230dd45cff4835a5014",
"body": null,
"is_bot": false,
"headline": "Remove deprecated mutation-tests param from CI pipeline",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-10-17T12:38:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7e72b29fccff0c1affdecf9788f330a69a811cc",
"body": "Set empty string as escape character for CSVs to avoid deprecation warnings in PHP 8.4",
"is_bot": false,
"headline": "Merge pull request #73 from acelaya-forks/feature/csv-escape",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-08-26T17:53:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c01f8c2cfc06c5fbbc420af6114e437214d258f",
"body": "…rnings in PHP 8.4",
"is_bot": false,
"headline": "Set empty string as escape character for CSVs to avoid deprecation wa…",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-08-26T17:48:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "294f62a6b4bba6eac2b81ec9844e053653a20562",
"body": "Add --testdox-summary flag to phpunit executions",
"is_bot": false,
"headline": "Merge pull request #72 from acelaya-forks/feature/testdox-summary",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-08-04T11:29:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef968e5af4530cca82d0c1022e2fb3616f60ee01",
"body": null,
"is_bot": false,
"headline": "Add --testdox-summary flag to phpunit executions",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-08-04T11:25:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c813ad2dfad5f54f0d6c88ed6a697eaca41efa2",
"body": null,
"is_bot": false,
"headline": "Improve PHPStan config",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-07-31T17:53:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5f38d1f0938fc834541052522d0783b52255d38",
"body": "Feature/update deps",
"is_bot": false,
"headline": "Merge pull request #71 from acelaya-forks/feature/update-deps",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-07-22T08:10:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8962667647fca356a1a6c36ab38ecbf092796fd",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-07-22T08:07:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f4c714ae885f944c88e0863a45155fa72d3b145",
"body": null,
"is_bot": false,
"headline": "Add support for laminas-servicemanager 4",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-07-22T08:07:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b036da25b9208e600bbe6fbef36a39325aa91baa",
"body": null,
"is_bot": false,
"headline": "Update dependencies",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-07-22T08:05:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1cb05894d2211b1b1e18560ef4436470ee33800b",
"body": "Fix importing URLs with custom slugs from bitly",
"is_bot": false,
"headline": "Merge pull request #70 from acelaya-forks/feature/bitly-custom-slugs",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-04-12T16:12:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e62f1633c6cacbea842686794ad4bfb7ad93d15",
"body": null,
"is_bot": false,
"headline": "Fix importing URLs with custom slugs from bitly",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-04-12T16:09:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0c3607b720c721f485c85ca83eb9fe9965e7f47",
"body": "Fix errors when importing from Shlink >=4.0",
"is_bot": false,
"headline": "Merge pull request #69 from acelaya-forks/feature/support-shlink-4",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-03-28T12:44:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5915932c8a3f41cadad87a8bd494705b746af309",
"body": null,
"is_bot": false,
"headline": "Fix errors when importing from Shlink >=4.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-03-28T12:42:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e821b700008ade4f7456279f6446bccfa0b5a506",
"body": null,
"is_bot": false,
"headline": "Add v5.3",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-03-03T17:43:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8410abfa066857f21552777a18ca0431def43a00",
"body": "Remove dependency on infection and update to PHPUnit 11",
"is_bot": false,
"headline": "Merge pull request #66 from acelaya-forks/feature/phpunit-11",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-02-21T07:45:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41a115394f629dd31a47446a675f73f4d788a556",
"body": null,
"is_bot": false,
"headline": "Remove dependency on infection and update to PHPUnit 11",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-02-21T07:43:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65a9a30f28202db1995b5e95471f3d9e07ab2598",
"body": null,
"is_bot": false,
"headline": "Add support for shlink-config 3",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-02-17T09:50:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0a1f1da7a2d205724680c251152cfde271fea0a",
"body": "Update dependencies",
"is_bot": false,
"headline": "Merge pull request #65 from acelaya-forks/feature/update-deps",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-02-04T09:23:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f24a5702aa9a2a34abf119cb24e6404836be9734",
"body": null,
"is_bot": false,
"headline": "Update dependencies",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2024-02-04T09:22:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af3649721c788a5acb52ab6584b31c8ca72aa231",
"body": null,
"is_bot": false,
"headline": "Tag v5.2.1 in changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-12-17T18:33:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4616c54019c2228a9ea4ec1947184393b0476359",
"body": "Remove dependency on functional-php",
"is_bot": false,
"headline": "Merge pull request #64 from acelaya-forks/feature/remove-functional",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-11-28T19:16:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25054a7d87b0e5f60b94b6c5a72b72f3963d1b62",
"body": null,
"is_bot": false,
"headline": "Remove dependency on functional-php",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-11-28T19:13:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "647f3ffd3fdf42d55397fb3a419af0ba62edb056",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-11-25T18:44:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d621b20d20748c98ba09bbe8742e0f755c41b7cb",
"body": "Remove support for PHP 8.1 and add support to PHP 8.3",
"is_bot": false,
"headline": "Merge pull request #63 from acelaya-forks/feature/php-8.3",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-11-04T10:24:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f401b50ebd7a2e7371d7f68b6b24f39058eecdd8",
"body": null,
"is_bot": false,
"headline": "Remove support for PHP 8.1 and add support to PHP 8.3",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-11-04T10:20:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c5e42ce345d340e7fdb48bce36a53e08bfe3a09",
"body": null,
"is_bot": false,
"headline": "Use docker compose instead of docker-compose",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-08-01T21:41:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "245fa50b9bb036125b2ae078ce3e04c7815482a9",
"body": "Feature/improved csv import",
"is_bot": false,
"headline": "Merge pull request #62 from acelaya-forks/feature/improved-csv-import",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-22T10:02:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4c8e9c7ecd872cff55b0d6770d6c596bda07f4f",
"body": null,
"is_bot": false,
"headline": "Document support for shlink-web-client CSV format in README",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-22T09:59:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "924261d8488e4922e5f5faafadd7c5d039868251",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-22T09:56:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d09871e54a09e804705cdefe59893f2de238ff4b",
"body": "…from old shlink-web-client",
"is_bot": false,
"headline": "Enhanced CsvImporter so that it allows importing from CSVs generated …",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-22T09:55:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b63b124e01e0c007f53cbf04b62b635b9b55a9d",
"body": "Replace json_encode/json_decode functions by shlinkio/shlink-json",
"is_bot": false,
"headline": "Merge pull request #61 from acelaya-forks/feature/shlink-json",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-18T20:49:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f88b24f4103a5c75f4592a85b4314200f9a3b475",
"body": null,
"is_bot": false,
"headline": "Replace json_encode/json_decode functions by shlinkio/shlink-json",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-18T20:46:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "787b0f5b8f13c8c10b3480ad2330db8a3dbecb19",
"body": "Update to PHPUnit 10.1",
"is_bot": false,
"headline": "Merge pull request #60 from acelaya-forks/feature/phpunit-10.1",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-16T08:09:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b37cd9414ea046486d2886cb24a009b74a30e03",
"body": null,
"is_bot": false,
"headline": "Update to PHPUnit 10.1",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-04-16T08:06:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "abbb3c2c108c7a1f7abc6b60d4b1eaf61aabf197",
"body": null,
"is_bot": false,
"headline": "Remove coverage-driver in ci workflow",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-02-13T18:14:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a1e9e698a679e2483a7f4b81c9692ee93d3cad3",
"body": "Feature/phpunit 10",
"is_bot": false,
"headline": "Merge pull request #59 from acelaya-forks/feature/phpunit-10",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-02-08T18:03:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "784c039da4f697c865dd22eca7644d200beae309",
"body": null,
"is_bot": false,
"headline": "Update changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-02-08T17:57:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23428c95ddb0be9b38c879ebb89680b0af094e7c",
"body": null,
"is_bot": false,
"headline": "Migrate from PHPUnit annotations to native attributes",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-02-08T17:57:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f832a05629f463bf21700452c51b0287724acf1",
"body": null,
"is_bot": false,
"headline": "Update to PHPUnit 10",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-02-08T17:49:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56763de699d112f342c87972ae0d389591e7ee76",
"body": "Replace references to doma.in with s.test",
"is_bot": false,
"headline": "Merge pull request #58 from acelaya-forks/feature/domain",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-01-17T21:38:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "830bd9ee8887f0db4eefb9cc9e715b80369d4a48",
"body": null,
"is_bot": false,
"headline": "Replace references to doma.in with s.test",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2023-01-17T21:35:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9bc9f6e8e4fc181a09823572322aea90e837c64",
"body": null,
"is_bot": false,
"headline": "Fixed build badge in README",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-17T10:03:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6088044f1aa0d2733c7eafca52f1c3febf8137d1",
"body": null,
"is_bot": false,
"headline": "Removed deprecated workflow param",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-16T21:47:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75bcbed2003a9ecdf21756368f603f98fdca90aa",
"body": null,
"is_bot": false,
"headline": "Release 5.0.0",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-16T21:27:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c97662b0d62aaac1d5d435a7ab02ca748685bc19",
"body": "Feature/orphan visits",
"is_bot": false,
"headline": "Merge pull request #57 from acelaya-forks/feature/orphan-visits",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T11:23:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6616d92c889b6953deff9ea4037b19c99c6dddb2",
"body": null,
"is_bot": false,
"headline": "Updated changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T11:20:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58f8018aaf8c5637713832acf6d856144b51063c",
"body": null,
"is_bot": false,
"headline": "Added test for orphan visits in ShlinkImporter",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T11:17:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77bb3261e1f737701d3bfdb3176892cd42f6a816",
"body": null,
"is_bot": false,
"headline": "Added logic to import orphan visits from Shlink",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T10:31:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89ee8fd1cf0c5f30672a9d9068af8972269ef6c6",
"body": null,
"is_bot": false,
"headline": "Added logic to map Shlink orphan visits",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T10:14:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "544286812176cc9594350fa6f009e3c847e78c5a",
"body": "…ortResult object instead of an iterable",
"is_bot": false,
"headline": "Refactored import strategies and import processor to work with an Imp…",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T10:00:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8a71593ff94956a2ce7a9b1c0eb1c250a11f054",
"body": null,
"is_bot": false,
"headline": "Added orphan visits param to the common params object",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T09:40:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4826f6629fc3d7b9e65ac6e28d53fcc5ebd9c0d",
"body": null,
"is_bot": false,
"headline": "Added question to allow importing orphan visits on Shlink",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-12-04T09:27:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "386305ac13abf58f09a78c49cbc5376213a7d31b",
"body": "Added PHP 8.2 to pipeline",
"is_bot": false,
"headline": "Merge pull request #56 from acelaya-forks/feature/php-8.2",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-31T21:17:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5d5593cf25f3a0f5133c6395d3e084f1ab1fe6c",
"body": null,
"is_bot": false,
"headline": "Added PHP 8.2 to pipeline",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-31T21:15:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6d8d9cd2f5a8cea97f8b588e4742c1ba073872e",
"body": null,
"is_bot": false,
"headline": "Removed unused dependency",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-29T11:56:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddae4e7ccb23a1a66f0c98cc80dbdec3dac51dd2",
"body": "Feature/phpunit mocks",
"is_bot": false,
"headline": "Merge pull request #55 from acelaya-forks/feature/phpunit-mocks",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-29T11:04:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4257da1438a17e8641645c00ea6fe2ac3cc805c3",
"body": null,
"is_bot": false,
"headline": "Updated changelog",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-29T11:02:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d19bba11a53a4a2564e60c9c97c6eb791b7261a",
"body": null,
"is_bot": false,
"headline": "Added phpstan for tests",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-29T11:01:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b89b2f57a1c7ba7946b2dd17e3bf368e18073706",
"body": null,
"is_bot": false,
"headline": "Decreased requires MSI to 75%",
"author_name": "Alejandro Celaya",
"author_login": "acelaya",
"committed_at": "2022-10-29T10:52:48Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 24,
"commits_last_year": 16,
"latest_release_at": "2026-06-11T08:40:27Z",
"latest_release_tag": "v5.8.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 8,
"days_since_latest_release": 48,
"mean_days_between_releases": 103.2
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "shlinkio/shlink-importer",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/shlinkio/shlink-importer",
"is_deprecated": false,
"latest_version": "v5.8.0",
"repository_url": "https://github.com/shlinkio/shlink-importer",
"versions_count": 24,
"total_downloads": 74822,
"dependents_count": 1,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 2692,
"first_published_at": null,
"latest_published_at": "2026-06-11T08:40:01Z",
"latest_version_yanked": null,
"days_since_latest_publish": 48
}
]
},
"popularity": {
"forks": 2,
"stars": 6,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2020-10-03",
"count": 1
},
{
"date": "2022-04-13",
"count": 1
}
],
"complete": true,
"collected": 2,
"total_forks": 2
},
"star_history": null,
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 17402,
"source_files_sampled": 69,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"packagist"
],
"dependencies": [
{
"name": "laminas/laminas-servicemanager",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^4.5"
},
{
"name": "league/csv",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^9.28"
},
{
"name": "shlinkio/shlink-config",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^4.1"
},
{
"name": "shlinkio/shlink-json",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.3"
},
{
"name": "symfony/console",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^8.1"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 60,
"open_issues": 2,
"closed_ratio": 0.929,
"closed_issues": 26,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "acelaya",
"commits": 257,
"avatar_url": "https://avatars.githubusercontent.com/u/2719332?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish-release.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 5,
"reason": "7 out of 12 merged PRs checked by a CI test -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/15 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 3 contributing companies or organizations -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 5,
"reason": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"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": "f4fac82611648221e9920a2c6f34dd8421b0fe2a",
"ran_at": "2026-07-29T18:18:10Z",
"aggregate_score": 3.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-29T18:08:46Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-29T18:08:02Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 31,
"created_at": "2021-07-13T04:41:14Z",
"last_comment_at": "2022-12-04T07:59:14Z",
"last_comment_author": "acelaya"
},
{
"number": 67,
"created_at": "2024-03-12T07:06:40Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/shlinkio/shlink-importer",
"host": "github.com",
"name": "shlink-importer",
"owner": "shlinkio"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 33,
"vitality": 72,
"community": 39,
"governance": 64,
"engineering": 59
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 72,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"commits_last_year": 16,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "16 commits in the last year",
"points": 11.1,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 16
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"points": 5,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "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": 92,
"inputs": {
"releases_count": 24,
"latest_release_tag": "v5.8.0",
"releases_from_tags": false,
"days_since_latest_release": 48,
"mean_days_between_releases": 103.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "24 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 24
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 48 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 48
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~103.2 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 103.2
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "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": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 39,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 11,
"inputs": {
"forks": 2,
"stars": 6,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "6 stars",
"points": 11.3,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 6
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "2 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 2
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "at_risk",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"packages": [
"shlinkio/shlink-importer"
],
"dependents": 1,
"ecosystems": "packagist",
"total_downloads": 74822,
"monthly_downloads": 2692
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,692 downloads/month across packagist",
"points": 45.7,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2692,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "1 packages depend on it",
"points": 2,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 1
}
}
],
"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": 64,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 3 contributing companies or organizations -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"merged_prs": 60,
"open_issues": 2,
"closed_issues": 26,
"issue_closed_ratio": 0.929,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "93% of issues closed",
"points": 43.4,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 93
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "60/60 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 60,
"decided": 60
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/15 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"followers": 94,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "shlinkio",
"public_repos": 36,
"account_age_days": 3674
},
"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": "94 followers of shlinkio",
"points": 14.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 94,
"login": "shlinkio"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "36 public repos, account ~10 yr old",
"points": 23.4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 36
}
},
{
"code": "account_age_years",
"params": {
"years": 10
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"shlinkio/shlink-importer"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 48
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on packagist",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "packagist"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 48 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 48
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "24 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 24
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 59,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "7 out of 12 merged PRs checked by a CI test -- score normalized to 5",
"points": 10,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"topics": [
"hacktoberfest"
],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "1 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 1
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 33,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 33,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 14,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 4,
"scorecard_aggregate": 3.3
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "7 out of 12 merged PRs checked by a CI test -- score normalized to 5",
"points": 1.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/15 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 3 contributing companies or organizations -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"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": "at_risk",
"name": "AI Readiness",
"value": 31,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 17,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.32,
"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": "32 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 17.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 32,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "PHP",
"largest_source_bytes": 17402,
"source_files_sampled": 69,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "PHP without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "PHP"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/69 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 69,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-29T18:18:27.148748Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/shlinkio/shlink-importer.svg",
"full_name": "shlinkio/shlink-importer",
"license_state": "standard",
"license_spdx": "MIT"
}