Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"image",
"lazy-loading",
"php",
"thumbhash"
],
"is_fork": false,
"size_kb": 90,
"has_wiki": false,
"homepage": "https://srwiez.com/open-source",
"languages": {
"PHP": 23525
},
"pushed_at": "2026-08-01T07:45:48Z",
"created_at": "2023-03-23T11:52:34Z",
"owner_type": "User",
"updated_at": "2026-08-01T07:45:50Z",
"description": "Thumbhash implementation in PHP",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP"
]
},
"owner": {
"blog": "https://srwiez.com",
"name": "Eser DENIZ",
"type": "User",
"login": "SRWieZ",
"company": "@unolia ",
"location": "Rouen, France",
"followers": 77,
"avatar_url": "https://avatars.githubusercontent.com/u/1408020?v=4",
"created_at": "2012-02-04T13:42:24Z",
"is_verified": null,
"public_repos": 29,
"account_age_days": 5291
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.5.1",
"kind": "patch",
"published_at": "2026-05-19T06:09:21Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2025-11-27T16:04:40Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2025-05-26T17:55:24Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2024-10-16T06:12:11Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2024-02-11T11:28:54Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2023-05-10T15:08:20Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2023-03-24T16:12:11Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2023-03-24T16:10:07Z"
}
],
"recent_commits": [
{
"oid": "e856a5062af2e1514a0e0b5ea448733f35ed0599",
"body": null,
"is_bot": true,
"headline": "chore(deps): bump actions/checkout in the github-actions group (#22)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-08-01T07:45:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4f34e11182651f7bd06171218780be692693de2",
"body": null,
"is_bot": true,
"headline": "chore(deps): bump the github-actions group with 2 updates (#21)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-01T07:13:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d9f6b40c65eb3e2981c8ca350f8a5767bad0afb",
"body": null,
"is_bot": false,
"headline": "Add Dependabot cooldown of 5 days",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2026-06-04T08:01:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb7e3fd0e4dbbd3443e4e24fe3fc333b248f8047",
"body": "Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 4.3.1 to 6.0.2\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits\n[…]\nsion-update:semver-major\n dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump actions/checkout in the github-actions group (#20)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-05-19T06:11:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "65aa97704b9d3e242d16bc8115ffbb8fb6ed8177",
"body": "* Harden GitHub Actions workflows against token disclosure\n\n- Pin every action to a commit SHA (with version comment)\n- Top-level permissions: contents: read\n- persist-credentials: false on actions/checkout\n- Add .github/dependabot.yml (monthly, grouped, labelled)\n- Add .github/CODEOWNERS so future \n[…]\nons on PHP 8.1\n\nPest resolves to a version using PHPUnit 9.x on PHP 8.1 (Pest 3.x\nrequires PHP 8.2+), and PHPUnit 9 does not support\n--display-deprecations. Group PHP 8.1 with the no-flag run instead.",
"is_bot": false,
"headline": "Harden GitHub Actions workflows against token disclosure (#19)",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2026-05-19T06:06:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "56f4ed1ca361ba39b243b33e5f47867a833b4973",
"body": "* feat: add support for PHP 8.5 in test matrix\n\n* fix: update branch references in test configuration\n\n* fix: update branch references from main to master in test configuration\n\n* fix: update test commands for PHP version-specific deprecation handling\n\n* fix: update test commands for PHP version-specific deprecation handling",
"is_bot": false,
"headline": "feat: add support for PHP 8.5 (#18)",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2025-11-27T16:03:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f54551c06ccef9e53fd9bc716ae743b122bfde6",
"body": null,
"is_bot": false,
"headline": "fix: correct average color format in dataset",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2025-05-26T17:58:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c84f0b3768bca785636b95999c25f86f46e5b5c6",
"body": null,
"is_bot": false,
"headline": "refactor: rename color conversion methods for clarity and consistency",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2025-05-26T17:51:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13b50d485cc7c9052f17bff81f081e39a3c393e3",
"body": "…h (#17)\n\n* feat: Add method to convert ThumbHash to an average color hex string\n\nIntroduce `toAverageColor` function to generate a hex color string in the `#AARRGGBB` format based on the average color of a ThumbHash. This complements the existing functionality by providing a more user-friendly colo\n[…]\nThumbhash correctly calculates the average color, using a new dataset `images_average_color`. The dataset includes various images with expected average color values, including those with transparency.",
"is_bot": false,
"headline": " Add `toAverageColor` method to extract average color from a ThumbHas…",
"author_name": "Riajul Islam",
"author_login": "iamriajul",
"committed_at": "2025-05-26T17:37:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b04938eb8166b5c1f18f0e8434a3e5e6cec90084",
"body": null,
"is_bot": false,
"headline": "docs: added a not on image size",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2025-02-17T11:06:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83323cbcb8775f4d8f650d72de1b0f441f0daa89",
"body": "* feat: show deprecations on tests + all pest version support\r\n\r\n* fix: remove fail-fast\r\n\r\n* fix: pest versions\r\n\r\n* fix: --display-deprecations",
"is_bot": false,
"headline": "feat: test suite more robust (#12)",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2024-11-26T22:37:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2cf47ba06366476837ed7ae28e66b8a5e5b9620",
"body": null,
"is_bot": false,
"headline": "Create FUNDING.yml",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2024-11-21T10:23:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3983c6f1aec32d8a037cc66175c0550f12c3f9e2",
"body": "* php 8.4 supports\r\n\r\n* fix workflow",
"is_bot": false,
"headline": "PHP 8.4 supports (#11)",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2024-10-16T06:10:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b47579bb31b7dcd11ab3cb78e7c857d6a2a2dce7",
"body": "fix ci deprecation",
"is_bot": false,
"headline": "chore: add testrun for PHP 7.4,",
"author_name": "Christopher Georg",
"author_login": "Chris8934",
"committed_at": "2024-03-15T14:54:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d5c6237fb16b79e9bd5d0d2a1571f9d6d3f1f66",
"body": "* fix: throw an Exception when GD can't decode the image data\r\n\r\nThis throws a more descriptive exception when GD fails to decode the image, which is likely to be because GD doesn't have support for that image type. Before, it would just fail on the subsequent call to imagesx().\r\n\r\n* Tests\r\n\r\n---------\r\n\r\nCo-authored-by: Eser DENIZ <srwiez@gmail.com>",
"is_bot": false,
"headline": "fix: throw an Exception when GD can't decode the image data (#8)",
"author_name": "Jim Winstead",
"author_login": "jimwins",
"committed_at": "2024-02-11T11:22:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c893e0bf435e7f7d2e8c3791e9a30b2ca20fe6af",
"body": null,
"is_bot": false,
"headline": "Create LICENSE",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2024-02-07T16:59:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2635af8105741c2015d948de1371864d86b957df",
"body": null,
"is_bot": false,
"headline": "8.3 tests",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-10-28T12:47:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70a4c48e3fa055ce7010641634ab1ea1b8d7ce81",
"body": null,
"is_bot": false,
"headline": "Added extract_size_and_pixels_with_imagick_pixel_iterator helper",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-05-10T15:02:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc15fcb254d1a9eb566c6babc909a8aa01997c3e",
"body": "Ignore unneccessary files from being downloaded by packagist",
"is_bot": false,
"headline": "Merge pull request #7 from tobimori/master-1",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-05-10T15:01:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce834741a4cd2fe1075cda0c7e55b6b1da941a91",
"body": null,
"is_bot": false,
"headline": "Ignore unneccessary files from being downloaded by packagist",
"author_name": "Tobias Möritz",
"author_login": "tobimori",
"committed_at": "2023-05-06T21:16:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83c32d85d38a9137975830da0f1ef1efa7cc1760",
"body": null,
"is_bot": false,
"headline": "changelog.md",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-24T16:11:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eae467fa06c6aeb96c6910dc1ccb71af21cc1dca",
"body": null,
"is_bot": false,
"headline": "changelog.md",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-24T16:07:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "027c930b9c6d59b0d5eec18f8119077239e722a1",
"body": null,
"is_bot": false,
"headline": "Added PHP ^7.3",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-24T16:00:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79203b1c694820a7aa65c1fa721de7c79612ffe0",
"body": null,
"is_bot": false,
"headline": "Thumbhash::encode -> Thumbhash::RGBAToHash",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-24T15:28:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb4076ac6c4b54edb96510f57b85b5cace97889c",
"body": null,
"is_bot": false,
"headline": "Merge pull request #1 from marconett/patch-1",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-24T14:04:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fa9d589ff1c67df6e2f66ea95d66fd581ed258e",
"body": null,
"is_bot": false,
"headline": "convertStringToHash",
"author_name": "Marco Nett",
"author_login": "marconett",
"committed_at": "2023-03-24T10:57:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cfc7043967530b5a7e9289f46d661261e7a9158",
"body": null,
"is_bot": false,
"headline": "readme.md",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T19:46:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "151141ecd833b6c1a325b71a21e54e40c0b19236",
"body": null,
"is_bot": false,
"headline": "readme.md",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T19:46:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db1a0231c11f874fa4a77405156650a84727b0bb",
"body": null,
"is_bot": false,
"headline": "Fix workflow",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T19:36:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97bd8f3d7721b4745f6ba45c4a68bc22462a64da",
"body": null,
"is_bot": false,
"headline": "Fix workflow",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T19:32:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2438cf3c8096d1479d7491d444ff5ae48a216523",
"body": null,
"is_bot": false,
"headline": "First version",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T19:22:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be4411bf997cf240b18b47388b4675d066d02c98",
"body": null,
"is_bot": false,
"headline": "Initial commit",
"author_name": "Eser DENIZ",
"author_login": "SRWieZ",
"committed_at": "2023-03-23T11:52:50Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 8,
"commits_last_year": 5,
"latest_release_at": "2026-05-19T06:09:21Z",
"latest_release_tag": "v1.5.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 4,
"days_since_latest_release": 74,
"mean_days_between_releases": 164.5
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "srwiez/thumbhash",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/srwiez/thumbhash",
"is_deprecated": false,
"latest_version": "v1.5.1",
"repository_url": "https://github.com/SRWieZ/thumbhash",
"versions_count": 8,
"total_downloads": 137450,
"dependents_count": 13,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 8777,
"first_published_at": null,
"latest_published_at": "2026-05-19T06:06:49Z",
"latest_version_yanked": null,
"days_since_latest_publish": 74
}
]
},
"popularity": {
"forks": 8,
"stars": 163,
"watchers": 3,
"fork_history": {
"days": [
{
"date": "2023-03-26",
"count": 1
},
{
"date": "2023-03-27",
"count": 1
},
{
"date": "2024-01-29",
"count": 1
},
{
"date": "2024-06-02",
"count": 1
},
{
"date": "2025-02-16",
"count": 1
},
{
"date": "2025-05-22",
"count": 1
},
{
"date": "2026-03-20",
"count": 1
}
],
"complete": true,
"collected": 7,
"total_forks": 8
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 14698,
"source_files_sampled": 9,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.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": 4,
"direct_affected_count": 0
},
"ecosystems": [
"packagist"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "ext-gd",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "ext-imagick",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "pestphp/pest",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 4,
"direct_count": 0,
"indirect_count": 4
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 12,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 8,
"closed_unmerged_prs": 2
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "SRWieZ",
"commits": 24,
"avatar_url": "https://avatars.githubusercontent.com/u/1408020?v=4"
},
{
"type": "User",
"login": "Chris8934",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/44963939?v=4"
},
{
"type": "User",
"login": "jimwins",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/329264?v=4"
},
{
"type": "User",
"login": "marconett",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/3315507?v=4"
},
{
"type": "User",
"login": "iamriajul",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/24244379?v=4"
},
{
"type": "User",
"login": "tobimori",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/29142128?v=4"
}
],
"contributors_sampled": 6,
"top_contributor_share": 0.828
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"test.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"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": 3,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 4,
"reason": "5 out of 12 merged PRs checked by a CI test -- score normalized to 4",
"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": 2,
"reason": "Found 5/25 approved changesets -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 4 contributing companies or organizations",
"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": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 4,
"reason": "5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4",
"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": null,
"reason": "no dependencies found",
"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": "e856a5062af2e1514a0e0b5ea448733f35ed0599",
"ran_at": "2026-08-01T07:48:18Z",
"aggregate_score": 5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-08-01T07:46:14Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-08-01T07:45:40Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/SRWieZ/thumbhash",
"host": "github.com",
"name": "thumbhash",
"owner": "SRWieZ"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": "The weighted overall 57 is calibrated to 60 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 57,
"calibrated": 60,
"calibration": "2026-08-02"
}
}
],
"value": 60,
"inputs": {
"security": 50,
"vitality": 64,
"community": 50,
"governance": 64,
"calibration": "2026-08-02",
"engineering": 60,
"ai_readiness": 34,
"weighted_overall_raw": 57
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 64,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"commits_last_year": 5,
"human_commit_share": 0.906,
"days_since_last_push": 0,
"active_weeks_last_year": 4
},
"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": "4/52 weeks with commits",
"points": 2.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 4
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "5 commits in the last year",
"points": 7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 5
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4",
"points": 4,
"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": 84,
"inputs": {
"releases_count": 8,
"latest_release_tag": "v1.5.1",
"releases_from_tags": false,
"days_since_latest_release": 74,
"mean_days_between_releases": 164.5
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "8 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 8
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 74 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 74
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~164.5 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 164.5
}
}
],
"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": 61,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 61 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 61
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 50,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "weak",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"forks": 8,
"stars": 163,
"watchers": 3,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "163 stars",
"points": 35.8,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 163
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "8 forks",
"points": 7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 8
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "3 watchers",
"points": 1.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 3
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"packages": [
"srwiez/thumbhash"
],
"dependents": 13,
"ecosystems": "packagist",
"total_downloads": 137450,
"monthly_downloads": 8777
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "8,777 downloads/month across packagist",
"points": 52.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 8777,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "13 packages depend on it",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 13
}
}
],
"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.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 31,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 6,
"top_contributor_share": 0.828
},
"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 83% of commits",
"points": 3.9,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 83
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "6 contributors",
"points": 8.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 6
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 4 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 81,
"inputs": {
"merged_prs": 12,
"open_issues": 0,
"closed_issues": 8,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 2,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 42,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "12/14 decided PRs merged",
"points": 25.7,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 12,
"decided": 14
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 5/25 approved changesets -- score normalized to 2",
"points": 3,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 58,
"inputs": {
"followers": 77,
"owner_type": "User",
"is_verified": null,
"owner_login": "SRWieZ",
"public_repos": 29,
"account_age_days": 5291
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "77 followers of SRWieZ",
"points": 13.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 77,
"login": "SRWieZ"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "29 public repos, account ~14 yr old",
"points": 22.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 29
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"srwiez/thumbhash"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 74
},
"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 74 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 74
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "8 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 8
}
}
],
"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": 60,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "5 out of 12 merged PRs checked by a CI test -- score normalized to 4",
"points": 8,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [
"image",
"lazy-loading",
"php",
"thumbhash"
],
"has_wiki": false,
"homepage": "https://srwiez.com/open-source",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://srwiez.com/open-source",
"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": "4 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 4
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 50,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 50,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 5
},
"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 is not maximal on development and all release branches",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "5 out of 12 merged PRs checked by a CI test -- score normalized to 4",
"points": 1,
"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 5/25 approved changesets -- score normalized to 2",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 4 contributing companies or organizations",
"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": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4",
"points": 3,
"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": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": "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": 19
},
"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": 34,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 22,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.414,
"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": "12 of 29 human commits state their intent (structured subject or explanatory body)",
"points": 22.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 12,
"sampled": 29
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 33,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"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.094
},
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 32",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 32
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "3 of the last 32 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 3,
"sampled": 32
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": 14698,
"source_files_sampled": 9,
"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/9 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 9,
"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
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:packagist",
"weight": 6
}
],
"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-01T07:48:29.522587Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/SRWieZ/thumbhash.svg",
"full_name": "SRWieZ/thumbhash",
"license_state": "standard",
"license_spdx": "MIT"
}