Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 198,
"has_wiki": false,
"homepage": "https://alt-design.net",
"languages": {
"PHP": 82013,
"Vue": 10441,
"Blade": 182,
"JavaScript": 583
},
"pushed_at": "2026-05-12T15:23:38Z",
"created_at": "2023-10-31T09:09:21Z",
"owner_type": "Organization",
"updated_at": "2026-05-12T16:29:37Z",
"description": "Redirect Addon For Statamic",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP",
"Vue"
]
},
"owner": {
"blog": "https://alt-design.net/",
"name": "Alt Design",
"type": "Organization",
"login": "alt-design",
"company": null,
"location": "Derby, UK",
"followers": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/5221940?v=4",
"created_at": "2013-08-13T13:24:39Z",
"is_verified": null,
"public_repos": 18,
"account_age_days": 4727
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2026-05-12T15:23:39Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2026-04-16T09:13:50Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-02-17T09:27:11Z"
},
{
"tag": "v1.6.4",
"kind": "patch",
"published_at": "2025-10-13T22:06:21Z"
},
{
"tag": "v1.6.3",
"kind": "patch",
"published_at": "2025-03-15T09:22:16Z"
},
{
"tag": "v1.6.2",
"kind": "patch",
"published_at": "2025-02-04T14:20:21Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2025-01-16T17:02:45Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2025-01-14T13:35:38Z"
},
{
"tag": "v1.5.2",
"kind": "patch",
"published_at": "2025-01-13T13:32:04Z"
},
{
"tag": "v1.5.1",
"kind": "patch",
"published_at": "2025-01-13T11:22:40Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2025-01-13T10:57:54Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2025-01-10T16:33:00Z"
},
{
"tag": "v1.3.3",
"kind": "patch",
"published_at": "2024-12-16T19:48:25Z"
},
{
"tag": "v1.3.2",
"kind": "patch",
"published_at": "2024-06-07T12:25:08Z"
},
{
"tag": "v1.3.1",
"kind": "patch",
"published_at": "2024-05-24T09:44:57Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2024-05-15T08:07:48Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2024-03-27T11:40:20Z"
},
{
"tag": "v1.1.9",
"kind": "patch",
"published_at": "2024-03-15T09:38:33Z"
},
{
"tag": "v1.1.8",
"kind": "patch",
"published_at": "2024-03-15T09:07:41Z"
},
{
"tag": "v1.1.7",
"kind": "patch",
"published_at": "2024-03-01T12:15:46Z"
},
{
"tag": "v1.1.6",
"kind": "patch",
"published_at": "2024-02-22T11:14:07Z"
},
{
"tag": "v1.1.5",
"kind": "patch",
"published_at": "2024-02-19T16:01:36Z"
},
{
"tag": "v1.1.4",
"kind": "patch",
"published_at": "2024-02-19T15:48:00Z"
},
{
"tag": "v1.1.3",
"kind": "patch",
"published_at": "2024-02-19T15:27:38Z"
},
{
"tag": "v1.1.2",
"kind": "patch",
"published_at": "2024-02-19T15:08:44Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2024-02-12T09:20:15Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2024-01-03T11:39:21Z"
},
{
"tag": "v1.0.10",
"kind": "patch",
"published_at": "2024-01-03T11:25:15Z"
},
{
"tag": "v1.0.9",
"kind": "patch",
"published_at": "2024-01-03T10:01:00Z"
},
{
"tag": "v1.0.8",
"kind": "patch",
"published_at": "2024-01-03T09:52:22Z"
},
{
"tag": "v1.0.7",
"kind": "patch",
"published_at": "2023-11-22T17:03:52Z"
},
{
"tag": "v1.0.6",
"kind": "patch",
"published_at": "2023-11-22T16:55:05Z"
},
{
"tag": "v1.0.5",
"kind": "patch",
"published_at": "2023-11-13T20:08:52Z"
},
{
"tag": "v1.0.4",
"kind": "patch",
"published_at": "2023-11-13T09:54:20Z"
},
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2023-11-06T09:03:32Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2023-11-06T08:54:28Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2023-11-06T08:51:49Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2023-11-03T15:47:40Z"
}
],
"recent_commits": [
{
"oid": "2f7d6bc9424230fbe85392c8bda08a7b57d2b983",
"body": "feat: per page options, pagination fix and build",
"is_bot": false,
"headline": "Merge pull request #46 from alt-design/feat/issue-#33-table-improvements",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2026-05-12T15:22:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69119fa6bfc5050e412c41e003b8af156b6a4bb4",
"body": null,
"is_bot": false,
"headline": "feat: per page options, pagination fix and build",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-05-12T14:44:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be160bad896efdb99a419bf590c98252cdfb6042",
"body": "Feat/boost tools",
"is_bot": false,
"headline": "Merge pull request #45 from alt-design/feat/boost-tools",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2026-04-16T09:12:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4cf693ce4d43410873fdf09ce8fce56c8d54e77",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' into feat/boost-tools",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-16T09:11:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ec76f952705711872ad3e0e784a4756ab74a6700",
"body": "Feat/issue #43 database redirects",
"is_bot": false,
"headline": "Merge pull request #44 from alt-design/feat/issue-#43-database-redirects",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2026-04-16T09:11:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "abaf686df5dcdb8576c08885e369be3f7d3a5c57",
"body": null,
"is_bot": false,
"headline": "fix: address failing tests",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T16:14:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96d5f70b51dbe7949d36ab5f62babe2983e376ca",
"body": null,
"is_bot": false,
"headline": "fix: address .installed issue",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T16:04:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f29cf6418e1654c7b99d93ad6dd09d8d87cba95c",
"body": null,
"is_bot": false,
"headline": "feat: better regex detection",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T15:57:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bee8bdb520a476d8f268ed9ca6c4a931fb597dcd",
"body": null,
"is_bot": false,
"headline": "fix: fix simple redirect regression",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T15:25:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "603e7473e7ea0310ad693a4b19ccb1a40d4023f1",
"body": null,
"is_bot": false,
"headline": "fix: database query strings issue",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T15:19:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d184b97ec5e9ac3c500d5884e0da4e0eabb25c6e",
"body": null,
"is_bot": false,
"headline": "fix: address ID issue",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T15:03:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d736859a3feb75ef20b04d222a527b991bf1da54",
"body": null,
"is_bot": false,
"headline": "feat: regex redirect flagging",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T13:20:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "431a3d3f780795105e84356cb80db1656640994e",
"body": null,
"is_bot": false,
"headline": "fix: addres query string installation and add test",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T12:43:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc59f28dff208662810117a2b74980d90637758e",
"body": null,
"is_bot": false,
"headline": "docs: readme update to include database redirect documentation",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T12:37:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4f9a0c70ef2e7607002ef167726ad56930f16a0",
"body": null,
"is_bot": false,
"headline": "feat: Laravel Boost Skill",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T12:26:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aea66fd2d8f951adbe025df8c6e323ce40f24456",
"body": null,
"is_bot": false,
"headline": "fix: 8.3 tests",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T10:04:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54fe008252aeaa1a9cb345ab1fff011d847980ab",
"body": null,
"is_bot": false,
"headline": "fix: actions issue",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T10:02:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d7e4ba1abc1baad09e7308128b2359bb1d18d4c",
"body": null,
"is_bot": false,
"headline": "feat: run pest in an action on MR",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:57:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea0dd1e3945587ed278288e2984bae320edc3661",
"body": null,
"is_bot": false,
"headline": "fix: addres sentry bug",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:57:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d9338f402f64b47c8ea7f86f985a99fe6223cbc",
"body": null,
"is_bot": false,
"headline": "tests: further test coverage",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:49:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e713ae087815b6611240076d49d4cff749ea8b9a",
"body": null,
"is_bot": false,
"headline": "tests: split tests to individual files",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:33:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad26fd504e2e00685948f64109244a00b6f5ff8c",
"body": null,
"is_bot": false,
"headline": "test: testing suite",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:26:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5562347789afa0d4bc878199e526ec5f369d6ac",
"body": null,
"is_bot": false,
"headline": "feat: implementation",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2026-04-09T09:08:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29ef77b29ca03c22d0001bad613677cb7758c3c7",
"body": "Statamic V6 Support",
"is_bot": false,
"headline": "Merge pull request #41 from Alt-Charlie/DEV-3170",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2026-02-17T09:26:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6a7cd3c6398c8e46d5fd08aa84deccb24539e97",
"body": null,
"is_bot": false,
"headline": "Remedials 4",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T16:59:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16a7cfe5d78348bfeb5eabb72ccb5964fcb53cfa",
"body": null,
"is_bot": false,
"headline": "Remedials 3",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T16:34:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37111271834b323d49d8e0869dcf8682d99c08c4",
"body": null,
"is_bot": false,
"headline": "Remedials 2",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T16:27:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "909932c833ce229642cc7f663460152158925ce7",
"body": null,
"is_bot": false,
"headline": "Remedials",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T16:17:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd48ca0a664c4c2a78aceaacf47648b4f74e6e5d",
"body": null,
"is_bot": false,
"headline": "Added return",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T16:10:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97cfa2a2f835cdc6e15d2b4d611f586ffa36739a",
"body": null,
"is_bot": false,
"headline": "Include prod assets",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T15:42:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0e4939d13269467de19b35fde86204f56c2073f",
"body": null,
"is_bot": false,
"headline": "Tweak assets",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T15:39:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e85ac22a29759959f98c031ce142104883dc1c5",
"body": null,
"is_bot": false,
"headline": "Statamic V6 support",
"author_name": "Alt-Charlie",
"author_login": "Alt-Charlie",
"committed_at": "2026-02-16T15:14:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd4a454873cd820293e1ea16e03cfbc253e8d1af",
"body": null,
"is_bot": false,
"headline": "Create SECURITY.md",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-10-13T22:35:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5dc6753c7151ac994c63e18914998991b1f65cbd",
"body": null,
"is_bot": false,
"headline": "Fix - CVE-2025-60868",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-10-13T22:01:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "451c5157972a3bfde12cda552efce062cf1b5b5c",
"body": null,
"is_bot": false,
"headline": "Remove default installation of query strings",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-03-15T09:20:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52d8bfd685394710bfd8a44fc8620d0c18bb10bc",
"body": "Uri encoding fix",
"is_bot": false,
"headline": "Merge pull request #30 from alt-design/URI-Encoding-Fix",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-02-04T12:09:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5567ad3f2fb6cc202c6310e92b04f3bb3351b8d",
"body": "…upport an optional $encoding_type param.\n\nThe encoding type is chosen by testing the full request URI for a + and then choosing the appropriate encoding so redirects with either %20 or + space encoding is now supported.",
"is_bot": false,
"headline": "URISupport.php - fullUrlWithoutQuery() and myArrQuery() methods now s…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-02-04T12:08:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e49d8c6f5952a51765493a3820bd8bc49699aefc",
"body": "…re clean.\n\nSwitched the fullUrlWithoutQuery function in request out for a custom implementation that uses the default HTTP encoding to fix a redirect issue with URIs that have + characters in them",
"is_bot": false,
"headline": "Moved URI function to a new URISupport.php class to keep the middlewa…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-02-04T11:24:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49d83f23902197368e4450e61709c5637ebdbfb0",
"body": null,
"is_bot": false,
"headline": "Update README.md",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-01-29T22:34:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98e428953c67ea8c2c67696c8e25be5c02563ec2",
"body": "New nav icon for darkmode support",
"is_bot": false,
"headline": "Merge pull request #29 from JonKaric/patch-1",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-01-29T15:08:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7db4e418a214a6beac90bba699a1df0e3412afbf",
"body": "- Removed unneeded stuff from the svg (`id`, `class` `<defs>`)\r\n- Added currentColor to support dark mode",
"is_bot": false,
"headline": "Cleaned up nav icon",
"author_name": "Jon",
"author_login": "JonKaric",
"committed_at": "2025-01-29T05:15:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12bdcabf2b63ca94c7fd0d535a8869afc9155500",
"body": "fix import Data instantiation",
"is_bot": false,
"headline": "Merge pull request #27 from stephencockerill/import-data-redirects",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2025-01-16T17:01:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9dde795fda0dd858773ba647a48cd83d2b349ebf",
"body": null,
"is_bot": false,
"headline": "fix import Data instantiation",
"author_name": "stephencockerill",
"author_login": "stephencockerill",
"committed_at": "2025-01-16T01:16:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85b22813e2aea1cfa1cf9ce53b8ac034376148a1",
"body": "Updated README.md",
"is_bot": false,
"headline": "Merge pull request #23 from alt-design/query-string-preserve",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T13:35:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb84ffb8c7df0b0f2ec19404cadce305157eeca6",
"body": null,
"is_bot": false,
"headline": "Updated README.md",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T13:34:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66fa24226d3d4cb7fdfc0a5cddc13517521ac002",
"body": "Flipped the preserve functionality to preserve by default with an opt…",
"is_bot": false,
"headline": "Merge pull request #22 from alt-design/query-string-preserve",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T13:27:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50b6aed8f16c5166d2c0d5e862b2f0f6c9306f1c",
"body": "…ion to strip query strings on the toggle.",
"is_bot": false,
"headline": "Flipped the preserve functionality to preserve by default with an opt…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T13:22:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf5356f145a0d8306c9f5d05081cb360820d9ed0",
"body": "Query string preservation functionality",
"is_bot": false,
"headline": "Merge pull request #21 from alt-design/query-string-preserve",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T12:01:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0de61da6bbb49c92a4b3da87d34689110b67df6b",
"body": null,
"is_bot": false,
"headline": "New asset build to include new changes",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T12:00:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b23dc755c3c068fc26af706f20da20e5e2ffb4a0",
"body": "…rect() function and allows us to slide in the preserved query string keys.\n\nMain functionality to preserve query strings is implemented",
"is_bot": false,
"headline": "Added new redirectWithPreservedParams() method which facades the redi…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T11:57:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e56e41d5059af39220bfc1d1fc69a45a48bcc686",
"body": "…ry string after the redirect\n\nAltRedirectController.php - Added toggle() to support toggling a key in a blueprint (and create it in the case it doesn't exist), It's a general purpose function (only supports query-strings atm but could easily support others) so should work with any key.\n\ncp.php - routes for new functionality\n\nData - added new getByKey function to help getting an item from the list by a key and value inside the item.\n\nquery-strings.yaml - Supporting blueprint changes",
"is_bot": false,
"headline": "AltRedirect.vue - Now supports the \"Preseve\" toggle to preserve a que…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-14T10:48:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6c80836c068bb3c97718ff6eb56ca1547ec40fd",
"body": "fixed uri function issue",
"is_bot": false,
"headline": "Merge pull request #19 from alt-design/ssg-redirects",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T13:30:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33f90c9bce42087aaa6bbf307e8087d9a07816c4",
"body": "…lteredQueryStrings() method",
"is_bot": false,
"headline": "CheckForRedirects.php - Fixed an issue with uri creation in uriWithFi…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T13:28:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7843137602de7fec89938d153d91ceed51a8b77",
"body": null,
"is_bot": false,
"headline": "fixed uri function issue",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T13:24:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5940bddac50a1b56c32a4a19aa2834b46d177f2",
"body": "Added missing new assets",
"is_bot": false,
"headline": "Merge pull request #18 from alt-design/ssg-redirects",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T11:21:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60299b744ad228bc0f0dadab6002a4510955cd14",
"body": null,
"is_bot": false,
"headline": "Added missing new assets",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T11:20:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "59190417761bfb4e8b56b567c329ea8b12bf81b1",
"body": "ServiceProvider.php - Tidying up, added new configureSSG method with …",
"is_bot": false,
"headline": "Merge pull request #17 from alt-design/ssg-redirects",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T10:47:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e159656254396037cbf5dba9c401879845b7b503",
"body": "…code from issue #15. (thanks for the contribution).\n\nssg.blade.php - View for redirects in the Static Site pages",
"is_bot": false,
"headline": "ServiceProvider.php - Tidying up, added new configureSSG method with …",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-13T10:45:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9acde12d18ff909e68f56589e9bba3ce7caa8f9a",
"body": "Query string filtering",
"is_bot": false,
"headline": "Merge pull request #16 from alt-design/query-string-filtering",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T16:31:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7e6e0aaf0c69b887c1e01d55a71a99653d42164",
"body": null,
"is_bot": false,
"headline": "AltRedirect.vue - Removed an unnecessary console.log()",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T15:59:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "676e3e7ad26fdd5081411237f2ebddfc9c9d604b",
"body": "…management pages.\n\nAltRedirectController.php - Supports instructions\n\nindex.blade.php - Supports instructions\n\nREADME.md - Readme changes to document new query string features",
"is_bot": false,
"headline": "AltRedirect.vue - Added an instructions <h2> below the page title on …",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T15:51:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8e68bebe97cd2770856bfb6f4f32308e5c0bfe4f",
"body": null,
"is_bot": false,
"headline": "Missing file",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T15:04:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e49058a78ad140bc04e93a72ef0b727392436eef",
"body": "…tripped.\n\nDefaultQueryStringsCommand.php - Added an artisan command \"alt-redirect:default-query-strings\" to force a re-seed (or seed if it fails for whatever reason) of the default query strings.\n\nServiceProvider.php - Functionality to support seeding default query strings on install. Refactoring methods called in bootAddon to use method chaining\n\nAltRedirectController.php - Fixed slight syntax error in delete() method",
"is_bot": false,
"headline": "DefaultQueryStrings.php - Class to seed default query strings to be s…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T15:03:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d4f7b5915343f520b48beec91a0882bece72807",
"body": "…not deleting Regex redirects.\n\nCheckForRedirects.php - Added new Query String functionality to filter out named query strings from URIs before they're processed by the pre-existing functionality",
"is_bot": false,
"headline": "AltRedirectController.php - General code tidy up. Fix to Delete code …",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-10T11:45:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "491b9a081e066dc753ef9ea5f55c964de8c6c30a",
"body": "…nctionality or original Redirect functionality.\n\nAltRedirectController.php - New functionality to support Query String\n\nServiceProvider.php - Added Nav Child for Query Strings page\n\nquery-strings.yaml - Added blueprint for query strings\n\nindex.blade.php - Modifications to Vue component props to sup\n[…]\ne of using File::files() on wanted directories to avoid the recursive behaviour of allFiles() pulling in data on the wrong page\n\ncp.php - New routes and general tidy up / commenting of existing routes",
"is_bot": false,
"headline": "AltRedirect.vue - New 'type' prop used for rendering query strings fu…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2025-01-09T17:20:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "65a2900667ff1a6a7a5066b5980c7460d1103e6d",
"body": null,
"is_bot": false,
"headline": "Update Composer",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-12-16T19:45:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e46c28db38d6a44afaf95acd312edd209826d868",
"body": null,
"is_bot": false,
"headline": "Another fix on import",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-06-07T12:24:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e2bb474ea445408dc433550f9ba6f4247b46b35",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-06-07T12:18:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed0de7d99d76a4e02104dccaa0deabb5c3fd3b04",
"body": null,
"is_bot": false,
"headline": "Fix for import",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-06-07T12:18:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef64224bf900c0dc08beb7caabe8c1798adc9574",
"body": "Update readme for headers",
"is_bot": false,
"headline": "Merge pull request #14 from martyf/fix/update-readme",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-05-28T07:18:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ded26b58c06490a1098768ff0c2dd8da5449650",
"body": null,
"is_bot": false,
"headline": "Update readme for headers",
"author_name": "Marty Friedel",
"author_login": "martyf",
"committed_at": "2024-05-26T23:08:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e39265477924d4c2d44a2366a0fe9997a8209d4f",
"body": "Add config support for headers to be included",
"is_bot": false,
"headline": "Merge pull request #13 from martyf/feature/support-headers-on-redirect",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-05-24T09:43:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0df64856eb6cca99d0aa3ae1a70430dc35e7676b",
"body": null,
"is_bot": false,
"headline": "Corrected grammar",
"author_name": "Marty Friedel",
"author_login": "martyf",
"committed_at": "2024-05-21T22:51:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79beb6a67a07040d189d01d2013d20cd6b3ddfcc",
"body": null,
"is_bot": false,
"headline": "Add config support for headers to be included",
"author_name": "Marty Friedel",
"author_login": "martyf",
"committed_at": "2024-05-21T21:57:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d4e8708dbc8676493d961606c8d0dd81ae50f820",
"body": "# Conflicts:\n#\tREADME.md",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-05-15T08:04:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "039cd92e6f242a81b67ae5b4d6fbb9a23bc68b19",
"body": null,
"is_bot": false,
"headline": "v5 Support",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-05-15T08:02:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b8bb12b4baa2f10989d2cb1c216215b6746e760",
"body": null,
"is_bot": false,
"headline": "Update README.md",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2024-05-13T14:43:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a9e982ccdcaee8d0cbf415aacb82842ac3566b0",
"body": "- Guarding in the create() method to throw a user friendly error when matching 'To' and 'From' addresses\n\n- Import will skip if it spots a matching \"To\" and \"From\" address",
"is_bot": false,
"headline": "AltRedirectController.php",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-04-17T08:57:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f84beee263a264f9d88d5101996c8bbd2af26acf",
"body": "…ries on in that case.",
"is_bot": false,
"headline": "Checks whether the redirect is to where we currently are and just car…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-04-16T16:35:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb36d83b8999cfd031455bf69fd2fe1002c8d0f1",
"body": "…cking the disk for both\n\nrefactored simple file checks to use a loop.",
"is_bot": false,
"headline": "Support for trailing / in urls by producing alternate version and che…",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-03-26T15:43:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e12b962cd710a7b6e39896f7355b44fd7ca587f4",
"body": null,
"is_bot": false,
"headline": "Update manifest",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-03-15T09:37:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18043dcf5c26d1ad2d5ff2e95e9afa75dd096249",
"body": "# Conflicts:\n#\tresources/dist/build/manifest.json",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-03-14T11:42:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1502300c97e01cb964e53652c19adf1486b572dc",
"body": null,
"is_bot": false,
"headline": "New npm build for next release=",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-03-14T11:41:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de9b5cb01a991b00f8f04f4556eee317381f9baa",
"body": "Feature: Add missing permission function",
"is_bot": false,
"headline": "Merge pull request #10 from ceesvanegmond/feature/permission",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2024-03-14T11:40:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55523f1aaad5603cd2bbb589515bd80f9b905719",
"body": null,
"is_bot": false,
"headline": "Feature: Add missing permission function",
"author_name": "Cees van Egmond",
"author_login": "ceesvanegmond",
"committed_at": "2024-03-13T13:55:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79ab7a855b4eec79d8a0d8603aadf6ea6be9ef1a",
"body": "added ->can to the nav extend to allow the addon button to be hidden …",
"is_bot": false,
"headline": "Merge pull request #9 from alt-design/update",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2024-03-01T12:13:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96bcf96954cd6a46bb7523a04c1a4191cb8383a1",
"body": "…with permissions",
"is_bot": false,
"headline": "added ->can to the nav extend to allow the addon button to be hidden …",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-03-01T12:08:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ed919588825cbc21e9cd541100b4160dcfc7127",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-22T11:12:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f682793fb84b9dcaf8f922b8e8bb3cab14db5940",
"body": null,
"is_bot": false,
"headline": "Performance boost for sites with lots of redirects",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-22T11:12:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fd959754accb7f8b98612e95451971a6ec7109f",
"body": "Fix for js",
"is_bot": false,
"headline": "Merge pull request #8 from alt-design/update",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-19T16:01:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afece023e4a318215651464cebb08ba40996b23c",
"body": null,
"is_bot": false,
"headline": "Fix for js",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-19T15:59:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ad87898583429876c0775a4d925998aa99b53a5",
"body": "built new JS",
"is_bot": false,
"headline": "Merge pull request #7 from alt-design/update",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-19T15:47:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f958e520749ec261d7fbb272cfd3e65c2028910b",
"body": null,
"is_bot": false,
"headline": "built new JS",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-19T15:46:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b3f324a3127b8e32256e7929987f0f8e3ddb9ed6",
"body": "Update",
"is_bot": false,
"headline": "Merge pull request #6 from alt-design/update",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-19T15:26:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc594f756fe80ab3e5a37e0a47a5416f0f4f5fb0",
"body": null,
"is_bot": false,
"headline": "Ensuring Operator precedence",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-19T15:23:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "805d7e6636ada53f3a25d6c805181f6b50dcd59a",
"body": null,
"is_bot": false,
"headline": "Fixed multisite code causing errors on single sites",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-19T15:22:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0462058860f1529ca6f2f2dd43ab2e3fff000919",
"body": "Fix for Eloquent Driver sites",
"is_bot": false,
"headline": "Merge pull request #5 from alt-design/update",
"author_name": "Ben Harvey",
"author_login": "Alt-Ben",
"committed_at": "2024-02-19T15:08:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b2bd2ee82c77c4d2cb9aab0d774e08b06193d36",
"body": null,
"is_bot": false,
"headline": "Fixed an issue with DB based sites not having a blueprint directory",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-19T15:04:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b20dad316e74c7d984ab9c8e57cc35b6e4631399",
"body": null,
"is_bot": false,
"headline": "no message",
"author_name": "benammi",
"author_login": "benmAltDesign",
"committed_at": "2024-02-05T15:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aaef2ae4775da954ce7be6a8f05fabee697ec574",
"body": "Make redirects multisite compatible",
"is_bot": false,
"headline": "Merge pull request #3 from kevinmeijer97/main",
"author_name": "benmAltDesign",
"author_login": "benmAltDesign",
"committed_at": "2024-02-05T12:53:24Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 38,
"commits_last_year": 34,
"latest_release_at": "2026-05-12T15:23:39Z",
"latest_release_tag": "v1.8.1",
"releases_from_tags": false,
"days_since_last_push": 72,
"active_weeks_last_year": 5,
"days_since_latest_release": 72,
"mean_days_between_releases": 53.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "alt-design/alt-redirect",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/alt-design/alt-redirect",
"is_deprecated": false,
"latest_version": "v1.8.1",
"repository_url": "https://github.com/alt-design/Alt-Redirect-Addon",
"versions_count": 38,
"total_downloads": 48735,
"dependents_count": 0,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 2239,
"first_published_at": null,
"latest_published_at": "2026-05-12T15:22:48Z",
"latest_version_yanked": null,
"days_since_latest_publish": 72
}
]
},
"popularity": {
"forks": 12,
"stars": 12,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2024-01-05",
"count": 1
},
{
"date": "2024-03-13",
"count": 1
},
{
"date": "2024-05-21",
"count": 1
},
{
"date": "2025-01-29",
"count": 1
},
{
"date": "2025-07-23",
"count": 1
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-10-14",
"count": 1
},
{
"date": "2026-02-05",
"count": 1
},
{
"date": "2026-02-10",
"count": 1
},
{
"date": "2026-02-12",
"count": 1
}
],
"complete": true,
"collected": 11,
"total_forks": 12
},
"star_history": null,
"open_issues_and_prs": 8
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"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": 13233,
"source_files_sampled": 35,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json",
"package.json"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 8,
"direct_affected_count": 0
},
"ecosystems": [
"npm",
"packagist"
],
"dependencies": [
{
"name": "statamic/cms",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^6.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "statamic/cms",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "laravel-vite-plugin",
"direct": false,
"version": "^2.0.1",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^7.3.1",
"ecosystem": "npm"
},
{
"name": "laravel/pint",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "orchestra/testbench",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "pestphp/pest",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "pestphp/pest-plugin-laravel",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 8,
"direct_count": 1,
"indirect_count": 7
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 24,
"open_issues": 4,
"closed_ratio": 0.778,
"closed_issues": 14,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "benmAltDesign",
"commits": 72,
"avatar_url": "https://avatars.githubusercontent.com/u/149595159?v=4"
},
{
"type": "User",
"login": "Alt-Ben",
"commits": 41,
"avatar_url": "https://avatars.githubusercontent.com/u/12431318?v=4"
},
{
"type": "User",
"login": "Alt-Charlie",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/260397567?v=4"
},
{
"type": "User",
"login": "martyf",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/1491079?v=4"
},
{
"type": "User",
"login": "ceesvanegmond",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/883497?v=4"
},
{
"type": "User",
"login": "JonKaric",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/8028521?v=4"
},
{
"type": "User",
"login": "kevinmeijer97",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/9716909?v=4"
},
{
"type": "User",
"login": "nat-alt",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/100426312?v=4"
},
{
"type": "User",
"login": "stephencockerill",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/14827659?v=4"
}
],
"contributors_sampled": 9,
"top_contributor_share": 0.558
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"pest.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": 7,
"reason": "3 out of 4 merged PRs checked by a CI test -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 7,
"reason": "Found 3/4 approved changesets -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 3,
"reason": "2 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 3",
"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": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "2f7d6bc9424230fbe85392c8bda08a7b57d2b983",
"ran_at": "2026-07-23T18:09:54Z",
"aggregate_score": 4.7,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-05-12T15:22:51Z",
"oldest_open_prs": [
{
"number": 32,
"created_at": "2025-04-11T11:29:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 35,
"created_at": "2025-07-23T09:47:23Z",
"last_comment_at": "2026-05-12T15:31:26Z",
"last_comment_author": "benmAltDesign"
},
{
"number": 38,
"created_at": "2025-09-08T15:22:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 39,
"created_at": "2025-10-14T18:54:24Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-05-12T15:22:49Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 31,
"created_at": "2025-02-05T11:16:55Z",
"last_comment_at": "2025-02-12T07:41:41Z",
"last_comment_author": "tobinski"
},
{
"number": 34,
"created_at": "2025-07-07T14:49:29Z",
"last_comment_at": "2025-09-03T10:48:09Z",
"last_comment_author": "leewillis77"
},
{
"number": 36,
"created_at": "2025-08-11T11:49:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 37,
"created_at": "2025-09-04T08:50:24Z",
"last_comment_at": "2025-09-08T15:24:31Z",
"last_comment_author": "jpgorman"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/alt-design/Alt-Redirect-Addon",
"host": "github.com",
"name": "Alt-Redirect-Addon",
"owner": "alt-design"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": "The weighted overall 55 is calibrated to 57 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 55,
"calibrated": 57,
"calibration": "2026-08-02"
}
}
],
"value": 57,
"inputs": {
"security": 47,
"vitality": 60,
"community": 39,
"governance": 67,
"calibration": "2026-08-02",
"engineering": 59,
"ai_readiness": 30,
"weighted_overall_raw": 55
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 60,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "weak",
"name": "Development activity",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"commits_last_year": 34,
"human_commit_share": 1,
"days_since_last_push": 72,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 72 days ago",
"points": 18,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 72
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "34 commits in the last year",
"points": 13.9,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 34
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "2 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 3",
"points": 3,
"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": 38,
"latest_release_tag": "v1.8.1",
"releases_from_tags": false,
"days_since_latest_release": 72,
"mean_days_between_releases": 53.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "38 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 38
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 72 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 72
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~53.8 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 53.8
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "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": 82,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 82 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 82
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "weak",
"name": "Community & Adoption",
"value": 39,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 26,
"inputs": {
"forks": 12,
"stars": 12,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "12 stars",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 12
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "12 forks",
"points": 8.7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 12
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "2 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 2
}
}
],
"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": "weak",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 45,
"inputs": {
"packages": [
"alt-design/alt-redirect"
],
"dependents": 0,
"ecosystems": "packagist",
"total_downloads": 48735,
"monthly_downloads": 2239
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,239 downloads/month across packagist",
"points": 44.7,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2239,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "0 packages depend on it",
"points": 0,
"status": "missed",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 0
}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 67,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "weak",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 37,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 9,
"top_contributor_share": 0.558
},
"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 56% of commits",
"points": 9.9,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 56
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "9 contributors",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 9
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"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": 84,
"inputs": {
"merged_prs": 24,
"open_issues": 4,
"closed_issues": 14,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.778,
"closed_unmerged_prs": 0,
"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": "78% of issues closed",
"points": 32.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 78
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "24/24 decided PRs merged",
"points": 30,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 24,
"decided": 24
}
}
],
"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 3/4 approved changesets -- score normalized to 7",
"points": 10.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"followers": 7,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "alt-design",
"public_repos": 18,
"account_age_days": 4727
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "7 followers of alt-design",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 7,
"login": "alt-design"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "18 public repos, account ~12 yr old",
"points": 21.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 18
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"alt-design/alt-redirect"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 72
},
"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 72 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 72
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "38 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 38
}
}
],
"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.19,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "3 out of 4 merged PRs checked by a CI test -- score normalized to 7",
"points": 14,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": "https://alt-design.net",
"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://alt-design.net",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "weak",
"name": "Security",
"value": 47,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 47,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.7
},
"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": "3 out of 4 merged PRs checked by a CI test -- score normalized to 7",
"points": 1.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 3/4 approved changesets -- score normalized to 7",
"points": 5.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "2 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 3",
"points": 2.2,
"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 detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "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": 10
},
"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": 30,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 28,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.53,
"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": "53 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 28.3,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 53,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 22,
"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
},
"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 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": 13233,
"source_files_sampled": 35,
"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/35 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 35,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"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)."
}
],
"metrics_version": "2.1.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-07-23T18:10:18.390622Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/alt-design/Alt-Redirect-Addon.svg",
"full_name": "alt-design/Alt-Redirect-Addon",
"license_state": "standard",
"license_spdx": "MIT"
}