JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"cakephp",
"php",
"mvc-framework",
"psr-7",
"orm",
"mvc",
"validation",
"rest-api",
"web",
"web-framework",
"rapid-development",
"form-builder",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 118115,
"has_wiki": true,
"homepage": "http://cakephp.org",
"languages": {
"CSS": 15730,
"PHP": 12735507,
"HTML": 9674,
"Hack": 486,
"Shell": 1355,
"Python": 211653,
"Makefile": 7017,
"JavaScript": 173
},
"pushed_at": "2026-07-22T00:26:42Z",
"created_at": "2010-05-08T14:38:22Z",
"owner_type": "Organization",
"updated_at": "2026-07-22T00:39:29Z",
"description": "CakePHP: The Rapid Development Framework for PHP - Official Repository",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "5.x",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP"
]
},
"owner": {
"blog": "http://cakephp.org",
"name": "CakePHP",
"type": "Organization",
"login": "cakephp",
"company": null,
"location": null,
"followers": 286,
"avatar_url": "https://avatars.githubusercontent.com/u/23666?v=4",
"created_at": "2008-09-08T15:21:00Z",
"is_verified": null,
"public_repos": 83,
"account_age_days": 6525
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "5.4.0",
"kind": "minor",
"published_at": "2026-07-19T16:08:59Z"
},
{
"tag": "5.1.10",
"kind": "patch",
"published_at": "2026-07-16T04:39:12Z"
},
{
"tag": "5.2.15",
"kind": "patch",
"published_at": "2026-07-16T04:39:40Z"
},
{
"tag": "5.1.9",
"kind": "patch",
"published_at": "2026-07-16T04:38:50Z"
},
{
"tag": "4.5.12",
"kind": "patch",
"published_at": "2026-07-15T03:47:47Z"
},
{
"tag": "4.6.5",
"kind": "patch",
"published_at": "2026-07-15T03:41:17Z"
},
{
"tag": "5.2.14",
"kind": "patch",
"published_at": "2026-07-14T03:55:45Z"
},
{
"tag": "5.1.8",
"kind": "patch",
"published_at": "2026-07-14T03:49:22Z"
},
{
"tag": "5.3.7",
"kind": "patch",
"published_at": "2026-07-14T03:24:00Z"
},
{
"tag": "5.4.0-RC2",
"kind": "prerelease",
"published_at": "2026-06-28T03:16:48Z"
},
{
"tag": "5.3.6",
"kind": "patch",
"published_at": "2026-05-23T16:59:57Z"
},
{
"tag": "5.3.5",
"kind": "patch",
"published_at": "2026-05-09T03:36:11Z"
},
{
"tag": "5.4.0-RC1",
"kind": "prerelease",
"published_at": "2026-04-27T21:05:55Z"
},
{
"tag": "5.3.4",
"kind": "patch",
"published_at": "2026-04-17T15:10:03Z"
},
{
"tag": "5.3.3",
"kind": "patch",
"published_at": "2026-03-19T02:58:53Z"
},
{
"tag": "5.3.2",
"kind": "patch",
"published_at": "2026-02-25T04:29:45Z"
},
{
"tag": "5.2.12",
"kind": "patch",
"published_at": "2026-01-15T03:49:52Z"
},
{
"tag": "5.3.1",
"kind": "patch",
"published_at": "2026-01-15T02:47:34Z"
},
{
"tag": "5.3.0",
"kind": "minor",
"published_at": "2026-01-10T04:59:29Z"
},
{
"tag": "5.2.11",
"kind": "patch",
"published_at": "2026-01-09T04:38:56Z"
},
{
"tag": "5.3.0-RC2",
"kind": "prerelease",
"published_at": "2025-12-14T05:27:40Z"
},
{
"tag": "5.2.10",
"kind": "patch",
"published_at": "2025-12-05T22:40:15Z"
},
{
"tag": "4.6.3",
"kind": "patch",
"published_at": "2025-12-01T16:54:37Z"
},
{
"tag": "5.3.0-RC1",
"kind": "prerelease",
"published_at": "2025-11-09T04:31:16Z"
},
{
"tag": "5.2.9",
"kind": "patch",
"published_at": "2025-10-17T03:27:49Z"
},
{
"tag": "5.2.8",
"kind": "patch",
"published_at": "2025-09-24T03:05:20Z"
},
{
"tag": "5.2.7",
"kind": "patch",
"published_at": "2025-08-31T02:36:51Z"
},
{
"tag": "5.2.6",
"kind": "patch",
"published_at": "2025-08-02T03:28:13Z"
},
{
"tag": "4.6.2",
"kind": "patch",
"published_at": "2025-07-27T03:45:28Z"
},
{
"tag": "5.2.5",
"kind": "patch",
"published_at": "2025-06-21T03:46:32Z"
},
{
"tag": "5.2.4",
"kind": "patch",
"published_at": "2025-05-17T03:15:06Z"
},
{
"tag": "4.6.1",
"kind": "patch",
"published_at": "2025-04-26T22:48:43Z"
},
{
"tag": "5.2.3",
"kind": "patch",
"published_at": "2025-04-24T03:05:17Z"
},
{
"tag": "5.2.2",
"kind": "patch",
"published_at": "2025-04-18T04:20:10Z"
},
{
"tag": "5.2.1",
"kind": "patch",
"published_at": "2025-04-06T21:11:48Z"
},
{
"tag": "5.2.0",
"kind": "minor",
"published_at": "2025-03-29T17:36:25Z"
},
{
"tag": "4.6.0",
"kind": "minor",
"published_at": "2025-03-23T03:08:14Z"
},
{
"tag": "4.5.10",
"kind": "patch",
"published_at": "2025-03-22T03:13:50Z"
},
{
"tag": "5.2.0-RC1",
"kind": "prerelease",
"published_at": "2025-03-01T22:33:08Z"
},
{
"tag": "5.1.6",
"kind": "patch",
"published_at": "2025-02-23T20:26:16Z"
},
{
"tag": "4.6.0-RC1",
"kind": "prerelease",
"published_at": "2025-02-10T03:48:59Z"
},
{
"tag": "5.1.5",
"kind": "patch",
"published_at": "2025-01-17T04:31:36Z"
},
{
"tag": "4.5.9",
"kind": "patch",
"published_at": "2025-01-05T03:49:45Z"
},
{
"tag": "5.1.4",
"kind": "patch",
"published_at": "2024-12-13T04:22:22Z"
},
{
"tag": "4.5.8",
"kind": "patch",
"published_at": "2024-11-25T03:56:58Z"
},
{
"tag": "5.1.2",
"kind": "patch",
"published_at": "2024-11-10T04:19:09Z"
},
{
"tag": "5.1.1",
"kind": "patch",
"published_at": "2024-10-04T03:08:07Z"
},
{
"tag": "4.5.7",
"kind": "patch",
"published_at": "2024-09-21T03:10:37Z"
},
{
"tag": "5.1.0",
"kind": "minor",
"published_at": "2024-09-14T02:53:46Z"
},
{
"tag": "5.0.11",
"kind": "patch",
"published_at": "2024-09-13T02:15:32Z"
},
{
"tag": "5.1.0-RC2",
"kind": "prerelease",
"published_at": "2024-08-08T03:15:20Z"
},
{
"tag": "5.0.10",
"kind": "patch",
"published_at": "2024-07-28T17:07:37Z"
},
{
"tag": "5.0.9",
"kind": "patch",
"published_at": "2024-06-24T03:01:39Z"
},
{
"tag": "4.5.6",
"kind": "patch",
"published_at": "2024-06-23T02:54:53Z"
},
{
"tag": "5.1.0-RC1",
"kind": "prerelease",
"published_at": "2024-05-21T03:35:13Z"
},
{
"tag": "5.0.8",
"kind": "patch",
"published_at": "2024-05-11T03:08:33Z"
},
{
"tag": "4.5.5",
"kind": "patch",
"published_at": "2024-04-28T03:09:02Z"
},
{
"tag": "5.0.7",
"kind": "patch",
"published_at": "2024-04-06T03:01:21Z"
},
{
"tag": "5.0.6",
"kind": "patch",
"published_at": "2024-03-09T04:09:04Z"
},
{
"tag": "4.5.4",
"kind": "patch",
"published_at": "2024-03-02T03:33:51Z"
},
{
"tag": "5.0.5",
"kind": "patch",
"published_at": "2024-01-28T04:23:58Z"
},
{
"tag": "4.5.3",
"kind": "patch",
"published_at": "2024-01-20T03:28:05Z"
},
{
"tag": "5.0.4",
"kind": "patch",
"published_at": "2023-12-28T00:10:11Z"
},
{
"tag": "4.5.2",
"kind": "patch",
"published_at": "2023-12-15T03:28:39Z"
},
{
"tag": "5.0.3",
"kind": "patch",
"published_at": "2023-11-28T04:00:44Z"
},
{
"tag": "4.5.1",
"kind": "patch",
"published_at": "2023-11-12T03:38:58Z"
},
{
"tag": "5.0.2",
"kind": "patch",
"published_at": "2023-10-29T03:40:48Z"
},
{
"tag": "4.5.0",
"kind": "minor",
"published_at": "2023-10-15T02:47:50Z"
},
{
"tag": "5.0.1",
"kind": "patch",
"published_at": "2023-09-29T23:42:44Z"
},
{
"tag": "4.4.18",
"kind": "patch",
"published_at": "2023-09-28T04:52:40Z"
},
{
"tag": "5.0.0",
"kind": "major",
"published_at": "2023-09-10T03:14:24Z"
},
{
"tag": "4.4.17",
"kind": "patch",
"published_at": "2023-08-20T03:02:22Z"
},
{
"tag": "4.4.16",
"kind": "patch",
"published_at": "2023-08-05T15:42:16Z"
},
{
"tag": "4.5.0-RC1",
"kind": "prerelease",
"published_at": "2023-07-17T02:49:46Z"
},
{
"tag": "5.0.0-RC2",
"kind": "prerelease",
"published_at": "2023-07-15T03:25:06Z"
},
{
"tag": "4.4.15",
"kind": "patch",
"published_at": "2023-07-02T02:55:28Z"
},
{
"tag": "5.0.0-RC1",
"kind": "prerelease",
"published_at": "2023-06-07T03:22:57Z"
},
{
"tag": "4.4.14",
"kind": "patch",
"published_at": "2023-05-23T03:04:12Z"
},
{
"tag": "4.4.13",
"kind": "patch",
"published_at": "2023-04-23T02:44:43Z"
},
{
"tag": "5.0.0-beta2",
"kind": "prerelease",
"published_at": "2023-04-08T04:39:48Z"
},
{
"tag": "4.4.12",
"kind": "patch",
"published_at": "2023-03-24T01:39:32Z"
},
{
"tag": "4.4.11",
"kind": "patch",
"published_at": "2023-02-11T01:15:00Z"
},
{
"tag": "4.2.12",
"kind": "patch",
"published_at": "2023-01-07T01:00:41Z"
},
{
"tag": "4.4.10",
"kind": "patch",
"published_at": "2023-01-06T03:22:52Z"
},
{
"tag": "4.3.11",
"kind": "patch",
"published_at": "2023-01-06T03:23:26Z"
},
{
"tag": "4.2.11",
"kind": "patch",
"published_at": "2023-01-06T03:23:52Z"
},
{
"tag": "3.10.5",
"kind": "patch",
"published_at": "2023-01-02T03:02:50Z"
},
{
"tag": "4.4.9",
"kind": "patch",
"published_at": "2022-12-30T02:57:51Z"
},
{
"tag": "5.0.0-beta1",
"kind": "prerelease",
"published_at": "2022-12-19T18:02:09Z"
},
{
"tag": "4.4.8",
"kind": "patch",
"published_at": "2022-12-02T02:50:26Z"
},
{
"tag": "4.4.7",
"kind": "patch",
"published_at": "2022-10-30T02:34:55Z"
},
{
"tag": "4.4.6",
"kind": "patch",
"published_at": "2022-10-02T00:08:00Z"
},
{
"tag": "4.4.5",
"kind": "patch",
"published_at": "2022-08-29T00:38:23Z"
},
{
"tag": "4.4.4",
"kind": "patch",
"published_at": "2022-08-08T02:44:56Z"
},
{
"tag": "4.4.3",
"kind": "patch",
"published_at": "2022-07-27T01:00:39Z"
},
{
"tag": "4.4.2",
"kind": "patch",
"published_at": "2022-07-06T02:36:24Z"
},
{
"tag": "4.4.1",
"kind": "patch",
"published_at": "2022-06-13T17:29:35Z"
},
{
"tag": "4.4.0",
"kind": "minor",
"published_at": "2022-06-07T02:53:21Z"
},
{
"tag": "4.3.10",
"kind": "patch",
"published_at": "2022-06-03T02:37:33Z"
},
{
"tag": "3.10.4",
"kind": "patch",
"published_at": "2022-05-21T19:53:53Z"
}
],
"recent_commits": [
{
"oid": "7b7b4059fdc4e6684911569c5a639e096221ba3c",
"body": "…le (#19560)\n\n* add readme for container package\n* add container subpackage to Makefile",
"is_bot": false,
"headline": "add readme for container package + add container subpackage to makefi…",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-07-21T20:51:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a20fe7c56115ef3b56d2e1c9baaef9f908980584",
"body": null,
"is_bot": false,
"headline": "fix postgres eager loading alias bug (#19552)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-07-20T19:39:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82328ac6bfd47cf7fb62fdba1aa30425c74be6ca",
"body": null,
"is_bot": false,
"headline": "Update version number to 5.4.0",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-19T15:31:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ee2d9ccc25cfc44a653eb036d9152a2fe0c76d7",
"body": "Update split package version constraints and branch aliases to 5.5",
"is_bot": false,
"headline": "Update version constraints and branch aliases",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-19T15:27:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "097d5fe0936d442ffe3a8f95e5991e602211fd81",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.next' into 5.x",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-19T15:17:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6a9e4f83c27abf6f8880ee428caa4dd4a6845c4",
"body": "* Improve type inference\n\n* Fix flaky time related test",
"is_bot": false,
"headline": "Improve type inference (#19545)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-07-19T03:27:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f063eb92a3f8cc11ec6bfddb5606a6567be27a2",
"body": null,
"is_bot": false,
"headline": "add command instances to the event manager by default (#19540)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-07-17T06:05:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49ceb6fe76222c14aae363543e677c1b75f66d4c",
"body": "…ms (#19544)\n\nadd a safety step before releasing to check obvious PHP syntax",
"is_bot": false,
"headline": "add a safety step before releasing to check obvious PHP syntax proble…",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-07-17T03:01:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21858737264fb6b86447c8c54fe57f18481b6091",
"body": "# Conflicts:\n#\tVERSION.txt\n#\tsrc/ORM/Association/Loader/SelectLoader.php",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/5.x' into merge-5x-into-5next",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-07-14T21:35:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fccd79655091b3db1f5fe8f11f1d8291b61bafd",
"body": "* Fix assertLogMessageContains() to support partial matches\n\nThe level prefix was prepended to the expected message before the\nstr_contains() check, so partial matches only worked when the expected\nstring happened to be at the start of the logged message.\n\nNow the level prefix is checked separately \n[…]\nomparing\nagainst the actual logged message, for both exact and partial matching.\nThe failure message reports level and expected message separately.\n\n* Extract match check into variable for readability",
"is_bot": false,
"headline": "Fix assertLogMessageContains() to support partial matches (#19534)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-07-14T09:15:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c0d21e0da4216d51268691af3ad803f0eecb3a11",
"body": null,
"is_bot": false,
"headline": "Update version number to 5.3.7",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-14T03:04:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f95aebdbc508882f658ad450e2a8fa5edf0814a1",
"body": "Currently path prefix matching does not treat %2f as /, and `Route` has\nan option for it. In the past we've made changes in this area\n(#18050, #16110) to make urldecoding optional, and to intentionally\ndecode urlencoding in path segments to support non-ascii applications.\n\nWe got a report on the sec\n[…]\nbetween RouteCollection\nand Route with a new shared internal function. I thought a function was\nbetter than exposing a static method on a public class.\n\nThanks to Rotem Reiss for reporting this issue.",
"is_bot": false,
"headline": "Handle %2f in routing more consistently (#19537)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-14T03:03:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "542ca682ed7c97a1cb7a885a1ca13e83e939acfe",
"body": "…9538)\n\n_subqueryFields() collects the ORDER BY fields through iterateParts(), which\nrebuilds the expression from whatever the callback returns. The callback\nreturned nothing, so every part was dropped - and since it runs against the\ncaller's query rather than a clone, the query itself was left with\n[…]\n the wrong rows, so any hasMany\nafter the first one silently returned no results at all.\n\n* Add closure param type for rector\n\n* Fix CS\n\n---------\n\nCo-authored-by: Mark Scherer <dereuromark@gmail.com>",
"is_bot": false,
"headline": "Keep the ORDER BY intact when building a subquery strategy filter (#1…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-07-13T18:12:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "753a70254c3f8c6e20635445c2b6b7b3e2939523",
"body": "…536)",
"is_bot": false,
"headline": "Mark $config argument in Driver's methods as sensitive parameter (#19…",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-07-11T17:09:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "767457bbbc70aa6f3505917aac6c021472b4d5c4",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-07-09T18:29:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57a81452e4c8d11d2587766704241ffccddaa6bc",
"body": "…9531)",
"is_bot": false,
"headline": "Mark sensitive parameter using the `SensitiveParamater` attribute (#1…",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-07-09T15:04:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c56cca991747b2934451a6abe181ca739422d357",
"body": "* Add maskRegex and maskPartialRegex\n\n* Improve doc comments\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>\n\n* Improve doc comment\n\n* Fix examples\n\n* Add parameter typehints to closures\n\n* Fix indentation\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Add maskRegex and maskPartialRegex (#19526)",
"author_name": "Graham Watson",
"author_login": "PhantomWatson",
"committed_at": "2026-07-09T07:44:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6548976d15066e395b4d8e7f003b947a051b5379",
"body": "This makes the code now match the docblock of Debugger::exportArray()\nwhich states that values for keys like login, password etc. are replaced by ***s",
"is_bot": false,
"headline": "Set default value for `exportMask` config of Debugger. (#19532)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-07-09T03:21:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "138f2f61486532c29ee4d106da2a9848c1ff1ab3",
"body": "The postgres driver needs to transforms jsonValue function calls to\nrename the function and apply postgres specific cast operations. If the\ncurrent implementation is provided a user-controlled path expression,\nthe generated query can be manipulated.\n\nThanks to Himanshu Anand for reporting this",
"is_bot": false,
"headline": "Fix weakness in FunctionsBuilder::jsonValue() with postgres (#19530)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-09T03:06:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab608711674ac662af7315c5cdf1e0fbe2000e45",
"body": "Fix weakness in FunctionsBuilder\n\nSeveral methods did not explicity label their parameters as unsafe, so\nit is possible for an application developer to mistakenly supply user\ncontrolled data into these parameters creating a SQL injection vector.\n\nThank you to Himanshu Anand for reporting this issue.",
"is_bot": false,
"headline": "Fix parameter handling in FunctionsBuilder (#19520)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-07-01T16:37:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ffe279203cab7a3c6c9cf0d5ce4aba0313699eb",
"body": "Bumps [actions/cache](https://github.com/actions/cache) from 6 to 6.1.0.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v6...v6.1.0)\n\n---\nupdated-dependencies:\n- d\n[…]\nirect:production\n update-type: version-update:semver-minor\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": "Bump actions/cache from 6 to 6.1.0 (#19522)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-30T14:37:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "92443254f7643921959fdf72173023372334614d",
"body": "zizmore CI cleanup",
"is_bot": false,
"headline": "zizmor CI cleanup (#19517)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-06-30T07:24:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9a8942f1703e245d84cf493854830a2443fd310",
"body": "Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n update-type: version-update:semver-major\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": "Bump actions/cache from 5 to 6 (#19519)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-30T02:37:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "744ebd7141f582ba72c9f19189b41659a30da64c",
"body": "* Fix docblock type\n\n* Simplify code",
"is_bot": false,
"headline": "Fix docblock type (#19515)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-28T15:07:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c405323b58efc15230cb4c8b836c3f1124abe17",
"body": "…he config (#19516)",
"is_bot": false,
"headline": "chore: Bump structarmed to ^0.14 and use new expanded +LayerName in t…",
"author_name": "Abdul Malik Ikhsan",
"author_login": "samsonasik",
"committed_at": "2026-06-28T15:03:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6485773b2438e0213dcff6a23839ad7851bbe2f6",
"body": null,
"is_bot": false,
"headline": "Update version number to 5.4.0-RC2",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-06-28T02:28:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd06945619b609ad3237b199b064c101be0fba83",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-06-28T02:27:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fbd156ea2430a2dcb5b3a40b280c914c6cdcb1f",
"body": null,
"is_bot": false,
"headline": "Include enum class name in the deprecation message (#19514)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-27T10:16:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c988ea3036c7fb6aa8552316cdd54785630c8835",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-26T18:21:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c78f2009cf68e0a28d4d600f1881e7a5c63e2ed",
"body": "Strip CRLF from message headers in SmtpTransport",
"is_bot": false,
"headline": "Merge pull request #19512 from cakephp/smtp-transport-newline",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-26T08:57:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e09dae6cbdc983754fa3a8e6aae74da102a3ea1",
"body": "Strip CRLF bytes from message headers when delivering mail by\nSmtpTransport. This prevents header injection should userland code\nsupply user data into messages headers.\n\nThank you to Himanshu Anand for reporting this issue.",
"is_bot": false,
"headline": "Strip CRLF from message headers in SmtpTransport",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-06-26T04:03:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a78e88ee56c111ef44bc6016754fae477f573ca",
"body": null,
"is_bot": false,
"headline": "Fix missing trailing backtick",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-24T19:22:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b2b38a4e8c34e2211d2c83e3e685452b695fb8dc",
"body": "…ons/checkout-7\n\nBump actions/checkout from 6 to 7",
"is_bot": false,
"headline": "Merge pull request #19510 from cakephp/dependabot/github_actions/acti…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-22T21:20:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "012bf70df93233b41a8de34271dac4e5d15764e6",
"body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n dependency-version: '7'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump actions/checkout from 6 to 7",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-22T16:42:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f802f3ec3ad691a4aa1e26550228feed75df07cb",
"body": "* Respect curl.cainfo php.ini setting in Curl adapter\n\nWhen no `ssl_cafile` option is given, the Curl client adapter hardcoded the\nCA bundle shipped with composer/ca-bundle, ignoring an explicitly configured\n`curl.cainfo` in php.ini. This broke enterprise/containerized environments\nthat inject a cus\n[…]\nled CA file.\nAn explicitly passed `ssl_cafile` option still takes highest priority.\n\n* Minimize inline comment\n\n* Apply suggestion from @ADmad\n\n---------\n\nCo-authored-by: ADmad <admad.coder@gmail.com>",
"is_bot": false,
"headline": "Respect curl.cainfo php.ini setting in Curl adapter (#19507)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-19T03:11:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b4c307e61e1f85dece09c6dd0b964930652d10f5",
"body": "… (#19467)",
"is_bot": false,
"headline": "Add phpcs sniff to report namespace to filename mismatch as per PSR-4…",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-13T02:59:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1cf19b90cd16cf316cc5d3dbdab13019cb34de7",
"body": "…mmand check (#19492)\n\n* CLI: exempt commands with positional arguments from the sibling-subcommand check\n\nThe sibling-subcommand guard added for 5.4 rejects an unknown token after a\ncommand that has registered subcommands, treating it as a mistyped subcommand.\nThat assumption is wrong for commands \n[…]\n parser cannot be inspected, assume the command may take\npositional arguments and skip the sibling-subcommand check, so a valid\ncommand runs instead of being rejected with an unknown-subcommand error.",
"is_bot": false,
"headline": "CLI: exempt commands with positional arguments from the sibling-subco…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-09T14:46:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "786fe293cc7d28ac822cefa169356de92312fdc1",
"body": "…ject Injection (#19485)\n\n* security: add allowedClasses config to prevent PHP Object Injection in cache unserialize()\n\nRedisEngine and FileEngine both call unserialize() on data fetched from their\nrespective backends without restricting the allowed_classes option. An attacker\nwho can write to the c\n[…]\n to match the convention used for every other config key.\n\n---------\n\nCo-authored-by: XananasX7 <xananasX7@users.noreply.github.com>\nCo-authored-by: Mark Scherer <dereuromark@users.noreply.github.com>",
"is_bot": false,
"headline": "[Security] Add allowedClasses config to RedisEngine to prevent PHP Ob…",
"author_name": "XananasX",
"author_login": "XananasX7",
"committed_at": "2026-06-09T03:31:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "95e6af3d5f8b251374a5adce9bf8794ccc05cba4",
"body": "* Add value types for registry array docblocks\n\n* Fix covariance and normalizeArray for tightened registry array types\n\nTightening the registry array docblocks made child overrides and the\nnormalizer body inconsistent with the new value types:\n\n- Narrow the child helper property docblocks to a strin\n[…]\nbclasses may extend the\nhelpers list with array config entries such as\n['Url', 'Html', 'Foo' => ['some' => 'config']]. Use the same value type\nas the parent property so those overrides stay covariant.",
"is_bot": false,
"headline": "Add value types for registry array docblocks (#19500)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-09T03:15:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "10314999a3af6314916dce99f890888059963a1f",
"body": "…cov/codecov-action-7\n\nBump codecov/codecov-action from 6 to 7",
"is_bot": false,
"headline": "Merge pull request #19502 from cakephp/dependabot/github_actions/code…",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-08T17:49:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61331b2aff7bc562a82bda4b221d3c00bf721d91",
"body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\npendency-name: codecov/codecov-action\n dependency-version: '7'\n dependency-type: direct:production\n update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump codecov/codecov-action from 6 to 7",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-06-08T16:42:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b3b9b1ae2a16e48b249319ea2cefc1aef8840b06",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-08T04:24:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "191076a5be5e542d2f4853a9d455e7885b1db54b",
"body": null,
"is_bot": false,
"headline": "Remove phpstan prefixed annotations. (#19499)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-07T21:44:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "397e28d80ad2cd664bef5b07e5adcedcd2eb6ff6",
"body": "…498)\n\nThe split-package PHPStan validation requires sibling cakephp packages as\n`5.4.*@dev`. That constraint also matches already-published RC/stable tags,\nand composer prefers those tags over the dev branch. As a result the\nvalidation ran against released code that lags behind the monorepo: after\n\n[…]\nfore installing so composer resolves the dev-<branch>\nmirror of each sibling, matching the current source. The per-package cleanup\nalready restores composer.json, so the config toggles do not persist.",
"is_bot": false,
"headline": "Validate split packages against dev branches of sibling packages (#19…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-07T14:20:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b0ecc89fd24ee0d2a5bc3545faefd23b95e75700",
"body": "…classes. (#19495)\n\n* Move InstanceConfigTrait into TranslateStrategyTrait from individual classes.\n\nThis makes LSPs like intelephense stop complaining about the use of $this->_config\nin TranslateStrategyTrait.\n\n* Add InstanceConfigTrait to StringTemplateTrait",
"is_bot": false,
"headline": "Move InstanceConfigTrait into TranslateStrategyTrait from individual …",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-07T13:52:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61d7335eee1383644fd3ae254a2799e4c47aeb53",
"body": "- The definition lookups are now O(1) instead of O(n) iteration.\n- Calling add() multiple times with same id but different definition resolves to the\n last definition set instead of the 1st.",
"is_bot": false,
"headline": "Fix implementation of DefinitionAggregrate (#19497)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-07T13:51:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1bd2b967767cb8960183a725be70df72f2f56de",
"body": null,
"is_bot": false,
"headline": "Improve type declaration/inference (#19496)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-07T11:46:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3076e4c01ecec3a51baa16136054102007ac01e0",
"body": "…outes (#19494)\n\nWhen a named route is found but matching fails (e.g. a passed parameter\ndoes not satisfy the route's regex patterns), the exception now lists the\nparameters that were passed. Previously the message only stated that\nmatching failed, giving no hint about which value was wrong.\n\nThe passed parameters are json-encoded; any percent signs are escaped so\nthe message survives CakeException's vsprintf() formatting unchanged.",
"is_bot": false,
"headline": "Include passed parameters in MissingRouteException for failed named r…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-06T18:19:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "903dc08b05d04fb6dfd4f339c584411b9e4cd16b",
"body": "# Conflicts:\n#\tsrc/Database/phpstan.neon.dist",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/5.x' into 5.next",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-03T16:03:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c15736dff34f7a33533f34e20f4e2262bc4b472f",
"body": "Bump structarmed version to ^0.11",
"is_bot": false,
"headline": "Bump StructArmed version to ^0.11 (#19490)",
"author_name": "Abdul Malik Ikhsan",
"author_login": "samsonasik",
"committed_at": "2026-06-03T16:01:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a345a41abb31935626b1bea14f5ef37fdb7b2b5a",
"body": "* Update supported version list\n\nWhen I was doing the last round of security releases, I noticed that our\npolicy document is missing several versions and needs to be updated as\ntime has passed.\n\nI've also moved 4.3 to dropped support. Looking at the recent usage\ndata, there is a low minority of usage for this release, with the bulk\nof the 4.3 usage coming from 4.4 and 4.6.\n\n* Update policy doc to link to github",
"is_bot": false,
"headline": "Update supported version list (#19480)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-06-01T18:21:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8f68fd65b66f18c5bf191aadd3ed6b283a4a30c",
"body": "* Add Datasource architecture check\n\n* Add green split package boundary rules\n\n* add strict structarmed ruleset (#19478)\n\n---------\n\nCo-authored-by: Kevin Pfeifer <info@pfiff.me>",
"is_bot": false,
"headline": "Add Datasource and split package architecture rules (#19468)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-01T16:52:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f53c05ae6a0bf838af9555a36f98cc80334ddbb3",
"body": "Clarify ServerRequest::referer() $local docblock",
"is_bot": false,
"headline": "Merge pull request #19487 from cakephp/docblock-referer-local",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-06-01T16:31:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f4fe7dd605a33ff624457df834a9e28622402b1",
"body": null,
"is_bot": false,
"headline": "Fix parameter list in beforeRedirect method documentation (#19489)",
"author_name": "othercorey",
"author_login": "othercorey",
"committed_at": "2026-06-01T13:00:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46a2d260535abfb583651d8220273a49675b6928",
"body": "* Remove stale PHPStan ignores from Database split package config\n\nnotIdentical.alwaysTrue and catch.neverThrown no longer match any\nreported errors when PHPStan runs against the isolated cakephp/database\npackage, so reportUnmatchedIgnoredErrors fails the \"Static Analysis for\nSplit Packages\" CI job.\n[…]\nnd not others. Re-add the ignore with reportUnmatched:\nfalse (and without count) so the split-package analysis passes whether or\nnot the error is reported, instead of flapping red in either direction.",
"is_bot": false,
"headline": "Remove stale PHPStan ignores from Database split package config (#19488)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-01T12:31:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "43e846de5ca95a5022a95272c2c5e51956523cf4",
"body": "The $local param was documented as an attempt to return a local address,\nimplying a soft fallback. It is actually a hard contract: when true, a\nnon-same-origin referer returns null rather than the raw value. Reword the\ndocblock to describe both modes accurately.",
"is_bot": false,
"headline": "Clarify ServerRequest::referer() $local docblock",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-06-01T11:35:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "631b24a2221af53bcd86365faeb1435f162555a6",
"body": null,
"is_bot": false,
"headline": "improve psalm taint handling (#19477)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-05-30T21:16:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "21d140b88f2849a58771af0133f3dcf66c1da9b9",
"body": null,
"is_bot": false,
"headline": "adjust content type negotation to use HTMLView over XMLView (#19483)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-05-30T21:12:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6df4808778865a2c366ba45111a7a4687377936a",
"body": "…on-hydrated reads (#19441)\n\n* Add Table::findArray() and ArrayQuery for type-safe non-hydrated reads\n\nSplits hydrated and non-hydrated query paths at the source instead of\nmodeling both shapes in one SelectQuery<TEntity|array> union. Common\ncallers stay on find() and get SelectQuery<TEntity>; the r\n[…]\nhydrated` prefix still avoids the\nfind('unhydrated') dispatch collision.\n\nLow-level seam (unhydratedSelectQuery() / QueryFactory::unhydratedSelect())\nand the UnhydratedSelectQuery class are unchanged.",
"is_bot": false,
"headline": "Add Table::findUnhydrated() and UnhydratedSelectQuery for type-safe n…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-29T07:17:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f77b1f78ef774e9a7db16d8afdee9fee980801a0",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-28T19:37:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db156093a091bfd7767013dcfc17f47830e4117f",
"body": null,
"is_bot": false,
"headline": "Exclude unneeded files from git archive (#19476)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-28T19:03:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5a5cfd43e4deae58ea4abda9cb637590ce7baf0",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-28T17:04:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fcf190e1cb32148221e430055e467998e1aaaae3",
"body": null,
"is_bot": false,
"headline": "Bump phpstan to 2.2.0 (#19475)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-28T16:57:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67ffec99dbaf96bdeb1c9a9d519e40c1e921339f",
"body": "PluginApplicationInterface lost its `@template TSubject` in ba510db\n(\"Simplify generics template for event subject\"), but #19437\nreintroduced `PluginApplicationInterface<mixed>` in\nBasePlugin::registerEvents() during the subsequent merge.\n\nphpstan errors with `generics.notGeneric` on 5.next CI because the\ninterface no longer declares a template.",
"is_bot": false,
"headline": "Drop generic annotation from PluginApplicationInterface param (#19472)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-27T19:46:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b17c42d2f84eec7ffb00577a030ad88acb0834e",
"body": "Shorten name",
"is_bot": false,
"headline": "5.x Release: Shorten name (#19471)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-27T14:53:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df7042ff8fd0b468365453d3be785047bf8f0317",
"body": "* add DI capability to event listener registration\n\n* add ability to adjust plugin defined default event listeners\n\n* rename EventListenerRegistrationTrait\n\n* rework event DI feature\n\n* Simplify events registration (#19455)\n\nEvent registration for the app and plugins is now part of their\nrespective bootstrapping process itself.\n\n* Remove unused property\n\n* Optimize code\n\n---------\n\nCo-authored-by: ADmad <admad.coder@gmail.com>",
"is_bot": false,
"headline": "5.next: add DI capability to event listener registration (#19437)",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-05-27T06:25:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6d8ab7da5f8a10ea5a4617216044108d81c4334",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-26T06:57:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37e10d87848903e63015c6c12ec7c40d8c1541a4",
"body": "Skip SafeDeclareStrictTypesRector and RemoveUselessTernaryRector, which newly\nfire under rector 2.4: the former adds declare(strict_types=1) to test\nfixtures/config, the latter rewrites `$x ?: []` in ways that can change\nbehavior on undefined/empty values. Keeps the bump behavior-neutral.",
"is_bot": false,
"headline": "Bump rector to ~2.4 (#19465)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-24T15:52:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b194ffb1429cdc5da394350b3bdf611e81ec9dbd",
"body": "* Re-enable SimplifyUselessVariableRector with only_direct_assign\n\nThe rule was fully skipped. The only_direct_assign option restricts it to\nthe safe `$x = expr; return $x;` simplification and avoids the riskier\ncompound-assignment rewrites, so it can be enabled again. Applies the two\nresulting simp\n[…]\nplifyUselessVariableRector across test files\n\nThe rule runs on all configured paths (config/contrib/src/tests); applying the\nremaining test-file simplifications so the rector dry-run gate stays clean.",
"is_bot": false,
"headline": "Re-enable SimplifyUselessVariableRector with only_direct_assign (#19464)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-24T15:52:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cdaca8c3b710789e8545bff5a83194a6b19cad46",
"body": null,
"is_bot": false,
"headline": "Update version number to 5.3.6",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-05-23T16:55:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5718ced25a76993832b3bbb04f43342d256497a",
"body": "* Prototype: CommandCollection::discoverDirectory()\n\nAlternative direction to exposing CommandScanner as public API.\n\nAdds a focused, intention-revealing public method on CommandCollection\nfor registering every command in a custom directory/namespace (e.g.\nsrc/Command/Maintenance) from Application::\n[…]\n* Remove comments on directory path normalization\n\nRemoved comments about normalizing file paths.\n\n* Apply review feedback: drop redundant separator in scanPlugin and reword discoverDirectory docblock",
"is_bot": false,
"headline": "CommandCollection::discoverDirectory() (alternative to #19400) (#19453)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-23T11:59:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bd0c242f99a9f0828fea03bc2333953b0e5ec2b2",
"body": "Simplify generics template for event subject",
"is_bot": false,
"headline": "Merge pull request #19462 from cakephp/5.next-phpstan",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-22T04:49:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba510db0818d9b7b984aa2a11d900de7bdef156b",
"body": null,
"is_bot": false,
"headline": "Simplify generics template for event subject",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T22:05:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc0d6c5cd2b5b44c800fa63cbdc4f451b61e4d39",
"body": "…19419)\n\n* Add LoggedQuery::setRedactor() to scrub sensitive params from logs\n\nApps that bind cryptographic keys, passwords, or auth tokens as query\nparameters currently have those values rendered into every log surface\nthat consumes a LoggedQuery — file logs via __toString(), structured\nloggers via\n[…]\nceptions from the closure now propagate; a malformed return raises\na RuntimeException naming the offending type. Docblocks updated; the\ntwo prior fallback tests replaced with expectException variants.",
"is_bot": false,
"headline": "Add LoggedQuery::setRedactor() to scrub sensitive params from logs (#…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-21T20:55:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a2006bd1f5e0d8058b3cb0fb2066b29aa9054d17",
"body": "Allow a configured default `order` to use builder, alias and combined\nsort keys (e.g. `'order' => ['best-deal' => 'asc']`). The default order\nis resolved through the same SortableFieldsBuilder as click-driven\nsorting, so locked SortFields and direction inversion behave identically.\n\nKeys the builder\n[…]\n the existing order de-duplication symmetric for prefixed vs\nunprefixed field names so a requested sort is not overridden by the\nresolved default.\n\nCo-authored-by: Mark Scherer <dereuromark@gmail.com>",
"is_bot": false,
"headline": "Resolve default order through SortableFieldsBuilder (#19446)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-21T20:54:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bbb22cbd76f1dd181c1315d67ed4a976941174a3",
"body": null,
"is_bot": false,
"headline": "Supress phpstan error",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T20:01:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d09f811134b42e3e7d9c36b4b68056c224961fea",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T19:39:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fdb57bbed2ad57e70ce018e8391f547ae701de37",
"body": "Update phpstan",
"is_bot": false,
"headline": "Merge pull request #19460 from cakephp/phpstan",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T19:38:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5ccddd12e3303dd2c222e14f3f9d38353a38d80",
"body": null,
"is_bot": false,
"headline": "Update phpstan",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T19:15:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8c983cd5d83f0a7a5409b2edfb736e6667706c6",
"body": "Relax template path checking for all types to be restricted to not\nescaping the base template path for the plugin scope. This should be\nmore lenient than before as we're not restricting elements and layouts\nto their specific directories.\n\nRefs #19447",
"is_bot": false,
"headline": "Improve tolerance of path checking in View (#19459)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-05-21T09:58:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "360fb1224aec06260e2f66ae50a47b16ab30b017",
"body": "Move association property name clash check to getter instead of setter.",
"is_bot": false,
"headline": "Merge pull request #19457 from cakephp/issue-19449",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T06:34:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b763beb3e4f7f05b09412d574aba12b9bc606b5",
"body": "Doing the check in the setter causes problems when the db connection\nhasn't been setup yet. Refs #19449",
"is_bot": false,
"headline": "Move association property name clash check to getter instead of setter.",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-21T06:33:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be31a476eefbe72ce38972aa1e76c5ce89e1012f",
"body": "* Add Connection.afterCommit event dispatched on outermost commit\n\nProvides an event-based hook for listeners that need to run only after\nthe outermost transaction commits, regardless of how many ORM operations\nparticipated in it. This is the supported replacement for code that\npreviously relied on \n[…]\nn now implements EventDispatcherInterface and uses\nEventDispatcherTrait, with cakephp/event added as a database package\ndependency.\n\n* Trim editorializing sentence from Connection.afterCommit docblock",
"is_bot": false,
"headline": "Add Connection.afterCommit event for outermost-commit hooks (#19429)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-21T04:22:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "08019f5234a8976597823abdb771c33a72fd8c83",
"body": "* Fix a potential file handling weakness in element()\n\nIf View::element() is supplied request data, element names can be\nmanipulated to include files outside of a view template path.\n\nThis could be leveraged to expose secrets, or application code.\n\nThank you to Nguyen Danh Quan (@z3moo) and Ta Quoc \n[…]\nth. The starts_with() guard still fires for the case it\nmatters: a traversal that actually resolves to an existing file\noutside the base path.\n\n---------\n\nCo-authored-by: mscherer <dereuromark@web.de>",
"is_bot": false,
"headline": "Fix a potential file handling weakness in element() (#19447)",
"author_name": "Mark Story",
"author_login": "markstory",
"committed_at": "2026-05-20T17:39:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a3743c7185d8c0d5de4e6d3d4ad9fc5eb5fe959c",
"body": null,
"is_bot": false,
"headline": "Allow setting custom plural rules (#19454)",
"author_name": "gillux",
"author_login": "jiru",
"committed_at": "2026-05-20T12:41:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6f32e0c2f6072ebb793bb58c980fd4340716bbb",
"body": null,
"is_bot": false,
"headline": "Improve error message for duplicate rule names (#19456)",
"author_name": "Stuart",
"author_login": "stuart897",
"committed_at": "2026-05-20T10:27:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75b02a8f8032098303d40ce80d4db169f29b06fb",
"body": "Fix malformed file path in CommandScanner::scanPlugin()",
"is_bot": false,
"headline": "Merge pull request #19452 from cakephp/fix-command-scanner-plugin-path",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-20T03:17:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d7143e586326ab8a6da45abaec4bdf8bba60d30",
"body": null,
"is_bot": false,
"headline": "Document trailing directory separator requirement for scanDir() path",
"author_name": "mscherer",
"author_login": "dereuromark",
"committed_at": "2026-05-20T02:44:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b3cfe556b0eb98df726d2db64322b11c14952dd",
"body": "scanPlugin() concatenated the `Command` directory to the plugin class\npath without a trailing separator, so scanned plugin commands carried a\n`file` value like `.../src/CommandFooCommand.php` instead of\n`.../src/Command/FooCommand.php`.\n\nThe value is currently not consumed by the framework itself (command\nresolution only uses name/class), so this is an internal correctness\nfix with no behavior change for command execution. Add a focused\nregression test covering the scanned file path.",
"is_bot": false,
"headline": "Fix malformed file path in CommandScanner::scanPlugin()",
"author_name": "mscherer",
"author_login": "dereuromark",
"committed_at": "2026-05-19T17:04:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "944660ce3ef0153da5366b8a0a0b3010407e3344",
"body": null,
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "mscherer",
"author_login": "dereuromark",
"committed_at": "2026-05-18T15:26:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc13ed0794dfad5596ece442924e8282949cd215",
"body": "…t (#19440)\n\nNarrow Table::find() to SelectQuery<TEntity> and make TSubject covariant\n\n`Table::find()` was annotated `SelectQuery<TEntity|array>` to model\nthe option of switching to array rows via disableHydration(). In\npractice the array half is rarely used and forces every caller of\nfind() — which\n[…]\nto the parameter type.\n\nCombined with #19439 (typing SelectQuery::first()/firstOrFail() via\nTSubject), this lets `find()->first()` resolve to `TEntity|null` end\nto end without caller-side annotations.",
"is_bot": false,
"headline": "Narrow Table::find() to SelectQuery<TEntity> + make TSubject covarian…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-18T07:58:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "16c1175f3649ec695c90ea17be8d0b7d6048efdd",
"body": "* Add Lock component for distributed locking\n\nIntroduces a new Lock component that provides distributed locking\nmechanisms to prevent race conditions when multiple processes access\nshared resources.\n\nFeatures:\n- LockInterface defines the contract for lock engines\n- LockInstance value object represen\n[…]\nEngine: the\nengine now accepts Redis|RedisCluster, and cluster mode is enabled by\npassing nodes (and optionally clusterName). All Lua scripts use a\nsingle key so cluster hash-slot rules are preserved.",
"is_bot": false,
"headline": "5.next: Add Lock component for distributed locking (#19370)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-15T03:38:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "68a58c36440f8939e2260a085ca92b2cb8b3a55d",
"body": null,
"is_bot": false,
"headline": "Fix `@see` annotations (#19443)",
"author_name": "ADmad",
"author_login": "ADmad",
"committed_at": "2026-05-15T03:31:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42d929dffea5d848e70d9017312d28454f2a263c",
"body": "…9439)\n\nThe ORM SelectQuery already declares `@template TSubject of EntityInterface|array`\nand propagates that template through `all()`, `findAll()` and (after #19388 /\n#19438) through Table::find()/findOrCreate()/loadInto() and the class-level\nTEntity. But the two most common consumption points — f\n[…]\nhod's `EntityInterface` return. Switching\nto `if (!$node instanceof EntityInterface)` preserves the existing runtime\nbehavior (TreeBehavior never calls disableHydration) and makes the intent\nexplicit.",
"is_bot": false,
"headline": "Type SelectQuery::first()/firstOrFail() via the TSubject template (#1…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-14T10:28:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1772b2d139df8175a58418d7ba66f6421ee28b02",
"body": "# Conflicts:\n#\tsrc/ORM/Table.php",
"is_bot": false,
"headline": "Merge branch '5.x' into 5.next",
"author_name": "Kevin Pfeifer",
"author_login": "LordSimal",
"committed_at": "2026-05-14T07:37:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d44be48e3ed5c37812062cb5c42d601ea3a0c5fb",
"body": "…9438)\n\n* Wire find()/findOrCreate() return types to the Table entity template\n\nThe class-level entity template (TEntity, added on 5.x ahead of 5.4) is\nnot yet propagated to the find-family return annotations. find() and\nfindOrCreate() (and the related findList/findThreaded/subquery/\nfindOrCreate he\n[…]\nonly fires when no\nModel/Entity class is discovered, at which point the typed contract\nis degraded anyway.\n\nphpunit ORM + Association tests green (435), composer stan and\ncomposer cs-check both clean.",
"is_bot": false,
"headline": "Propagate TEntity to find()/findOrCreate()/loadInto() and friends (#1…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-14T06:44:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e6ad0dfa4657f94b79c9d06df785d7d124fde26e",
"body": "* 5.next: Extract AbstractStreamResponse from JsonStreamResponse\n\nPull the streaming lifecycle (CallbackStream wiring, output/flush\nprimitives, X-Accel-Buffering header, charset resolution, flush-threshold\ncounter, PSR-7 withStreamOptions / getStreamOptions, optional Log shim)\ninto a new abstract ba\n[…]\nm PHPUnit without manipulating\nbuffers the runner owns. The same lines were uncovered in the original\nJsonStreamResponse PR #19367 (97.26% patch coverage) and accepted; this\nPR follows that precedent.",
"is_bot": false,
"headline": "5.next: Extract AbstractStreamResponse from JsonStreamResponse (#19431)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-13T02:36:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c3f22be9db3040059474e09bfa95d51eb96f0cd8",
"body": "The Cake\\ORM\\Query class is a class_alias for Cake\\ORM\\Query\\SelectQuery\non 5.x, so the existing references still resolve. Retarget see-tags and\nprose at the concrete SelectQuery class for clarity. The BC autoload\ntrigger at the bottom of src/ORM/Query/SelectQuery.php is intentionally\nkept (the alias still needs loading on 5.x).\n\nDocblock-only; no behavior change.",
"is_bot": false,
"headline": "Update ORM Query docblock references to SelectQuery (#19436)",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-12T14:43:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d45b48aae8ee8839d87451ddbb38b88c91936aa",
"body": "…19425)\n\nReject unknown tokens after a command that has sibling subcommands\n\nPreviously, running e.g. `bin/cake i18n nonsense` silently invoked\nI18nCommand because `i18n` is a registered command, and the leftover\ntoken `nonsense` was passed through as a positional argument that the\nparser silently s\n[…]\nt\nin CommandRunner with a message that lists the available subcommands.\n\nCommands without siblings, commands with declared positional arguments,\nand option-like tokens (`--help`, `-v`) are unaffected.",
"is_bot": false,
"headline": "CLI: reject unknown tokens after a parent command with subcommands (#…",
"author_name": "Mark Scherer",
"author_login": "dereuromark",
"committed_at": "2026-05-12T12:20:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c6a65ea18fc28d58a964f213fc5dcf55adee1410",
"body": "The previous wording 'returns the right entity' is misleading: the test\nactually verifies that the PersistenceFailedException raised by\ndeleteOrFail() carries the failing entity.",
"is_bot": false,
"headline": "Fix stale docblock on testDeleteOrFailGetEntity",
"author_name": "mscherer",
"author_login": "dereuromark",
"committed_at": "2026-05-12T11:19:10Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 806,
"latest_release_at": "2026-07-19T16:08:59Z",
"latest_release_tag": "5.4.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 52,
"days_since_latest_release": 2,
"mean_days_between_releases": 2.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 75,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "cakephp/cakephp",
"exists": true,
"license": "MIT",
"keywords": [
"framework",
"orm",
"form",
"mvc",
"validation",
"dry",
"psr-7",
"rapid-development",
"conventions over configuration"
],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/cakephp/cakephp",
"is_deprecated": false,
"latest_version": "5.4.0",
"repository_url": "https://github.com/cakephp/cakephp",
"versions_count": 456,
"total_downloads": 19814486,
"dependents_count": 1968,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 403000,
"first_published_at": null,
"latest_published_at": "2026-07-19T15:31:30Z",
"latest_version_yanked": null,
"days_since_latest_publish": 2
}
]
},
"popularity": {
"forks": 3378,
"stars": 8794,
"watchers": 515,
"fork_history": {
"days": [
{
"date": "2017-04-25",
"count": 2
},
{
"date": "2017-04-26",
"count": 1
},
{
"date": "2017-04-29",
"count": 3
},
{
"date": "2017-04-30",
"count": 1
},
{
"date": "2017-05-01",
"count": 1
},
{
"date": "2017-05-02",
"count": 1
},
{
"date": "2017-05-04",
"count": 2
},
{
"date": "2017-05-05",
"count": 1
},
{
"date": "2017-05-06",
"count": 1
},
{
"date": "2017-05-07",
"count": 1
},
{
"date": "2017-05-09",
"count": 1
},
{
"date": "2017-05-11",
"count": 1
},
{
"date": "2017-05-12",
"count": 2
},
{
"date": "2017-05-13",
"count": 1
},
{
"date": "2017-05-16",
"count": 2
},
{
"date": "2017-05-17",
"count": 1
},
{
"date": "2017-05-18",
"count": 2
},
{
"date": "2017-05-23",
"count": 1
},
{
"date": "2017-05-25",
"count": 1
},
{
"date": "2017-05-26",
"count": 1
},
{
"date": "2017-05-29",
"count": 4
},
{
"date": "2017-05-30",
"count": 1
},
{
"date": "2017-06-01",
"count": 1
},
{
"date": "2017-06-03",
"count": 1
},
{
"date": "2017-06-05",
"count": 1
},
{
"date": "2017-06-06",
"count": 2
},
{
"date": "2017-06-08",
"count": 5
},
{
"date": "2017-06-11",
"count": 1
},
{
"date": "2017-06-13",
"count": 1
},
{
"date": "2017-06-14",
"count": 1
},
{
"date": "2017-06-16",
"count": 2
},
{
"date": "2017-06-19",
"count": 1
},
{
"date": "2017-06-21",
"count": 1
},
{
"date": "2017-06-22",
"count": 2
},
{
"date": "2017-06-23",
"count": 1
},
{
"date": "2017-06-26",
"count": 1
},
{
"date": "2017-06-27",
"count": 1
},
{
"date": "2017-06-28",
"count": 1
},
{
"date": "2017-06-29",
"count": 2
},
{
"date": "2017-06-30",
"count": 2
},
{
"date": "2017-07-01",
"count": 1
},
{
"date": "2017-07-02",
"count": 1
},
{
"date": "2017-07-03",
"count": 2
},
{
"date": "2017-07-04",
"count": 1
},
{
"date": "2017-07-06",
"count": 1
},
{
"date": "2017-07-07",
"count": 1
},
{
"date": "2017-07-08",
"count": 3
},
{
"date": "2017-07-10",
"count": 1
},
{
"date": "2017-07-11",
"count": 1
},
{
"date": "2017-07-12",
"count": 1
},
{
"date": "2017-07-17",
"count": 1
},
{
"date": "2017-07-18",
"count": 1
},
{
"date": "2017-07-19",
"count": 1
},
{
"date": "2017-07-22",
"count": 1
},
{
"date": "2017-07-25",
"count": 2
},
{
"date": "2017-07-27",
"count": 2
},
{
"date": "2017-07-28",
"count": 2
},
{
"date": "2017-07-31",
"count": 1
},
{
"date": "2017-08-02",
"count": 1
},
{
"date": "2017-08-03",
"count": 3
},
{
"date": "2017-08-04",
"count": 4
},
{
"date": "2017-08-06",
"count": 1
},
{
"date": "2017-08-07",
"count": 1
},
{
"date": "2017-08-09",
"count": 2
},
{
"date": "2017-08-10",
"count": 2
},
{
"date": "2017-08-11",
"count": 2
},
{
"date": "2017-08-12",
"count": 2
},
{
"date": "2017-08-14",
"count": 1
},
{
"date": "2017-08-15",
"count": 2
},
{
"date": "2017-08-16",
"count": 1
},
{
"date": "2017-08-18",
"count": 1
},
{
"date": "2017-08-19",
"count": 1
},
{
"date": "2017-08-21",
"count": 1
},
{
"date": "2017-08-22",
"count": 1
},
{
"date": "2017-08-23",
"count": 1
},
{
"date": "2017-08-24",
"count": 1
},
{
"date": "2017-08-26",
"count": 1
},
{
"date": "2017-08-29",
"count": 1
},
{
"date": "2017-08-30",
"count": 1
},
{
"date": "2017-08-31",
"count": 1
},
{
"date": "2017-09-01",
"count": 1
},
{
"date": "2017-09-02",
"count": 1
},
{
"date": "2017-09-04",
"count": 1
},
{
"date": "2017-09-09",
"count": 1
},
{
"date": "2017-09-13",
"count": 1
},
{
"date": "2017-09-14",
"count": 1
},
{
"date": "2017-09-15",
"count": 1
},
{
"date": "2017-09-19",
"count": 4
},
{
"date": "2017-09-20",
"count": 1
},
{
"date": "2017-09-21",
"count": 4
},
{
"date": "2017-09-24",
"count": 1
},
{
"date": "2017-09-26",
"count": 1
},
{
"date": "2017-09-27",
"count": 1
},
{
"date": "2017-09-30",
"count": 1
},
{
"date": "2017-10-04",
"count": 1
},
{
"date": "2017-10-05",
"count": 1
},
{
"date": "2017-10-06",
"count": 2
},
{
"date": "2017-10-09",
"count": 2
},
{
"date": "2017-10-10",
"count": 1
},
{
"date": "2017-10-19",
"count": 3
},
{
"date": "2017-10-21",
"count": 1
},
{
"date": "2017-10-24",
"count": 1
},
{
"date": "2017-10-26",
"count": 1
},
{
"date": "2017-10-27",
"count": 1
},
{
"date": "2017-10-30",
"count": 1
},
{
"date": "2017-11-01",
"count": 2
},
{
"date": "2017-11-02",
"count": 1
},
{
"date": "2017-11-05",
"count": 1
},
{
"date": "2017-11-07",
"count": 1
},
{
"date": "2017-11-11",
"count": 2
},
{
"date": "2017-11-16",
"count": 2
},
{
"date": "2017-11-17",
"count": 1
},
{
"date": "2017-11-18",
"count": 1
},
{
"date": "2017-11-27",
"count": 1
},
{
"date": "2017-11-28",
"count": 1
},
{
"date": "2017-12-01",
"count": 1
},
{
"date": "2017-12-05",
"count": 1
},
{
"date": "2017-12-06",
"count": 1
},
{
"date": "2017-12-07",
"count": 1
},
{
"date": "2017-12-15",
"count": 2
},
{
"date": "2017-12-16",
"count": 2
},
{
"date": "2017-12-20",
"count": 1
},
{
"date": "2017-12-21",
"count": 2
},
{
"date": "2017-12-29",
"count": 1
},
{
"date": "2017-12-31",
"count": 1
},
{
"date": "2018-01-02",
"count": 1
},
{
"date": "2018-01-05",
"count": 1
},
{
"date": "2018-01-08",
"count": 1
},
{
"date": "2018-01-09",
"count": 2
},
{
"date": "2018-01-15",
"count": 2
},
{
"date": "2018-01-18",
"count": 1
},
{
"date": "2018-01-21",
"count": 1
},
{
"date": "2018-01-23",
"count": 1
},
{
"date": "2018-01-24",
"count": 1
},
{
"date": "2018-01-31",
"count": 1
},
{
"date": "2018-02-01",
"count": 1
},
{
"date": "2018-02-05",
"count": 1
},
{
"date": "2018-02-08",
"count": 1
},
{
"date": "2018-02-09",
"count": 1
},
{
"date": "2018-02-11",
"count": 1
},
{
"date": "2018-02-13",
"count": 2
},
{
"date": "2018-02-14",
"count": 1
},
{
"date": "2018-02-15",
"count": 1
},
{
"date": "2018-02-16",
"count": 1
},
{
"date": "2018-02-17",
"count": 1
},
{
"date": "2018-02-19",
"count": 2
},
{
"date": "2018-02-22",
"count": 1
},
{
"date": "2018-02-23",
"count": 3
},
{
"date": "2018-02-27",
"count": 1
},
{
"date": "2018-02-28",
"count": 2
},
{
"date": "2018-03-01",
"count": 1
},
{
"date": "2018-03-04",
"count": 1
},
{
"date": "2018-03-05",
"count": 1
},
{
"date": "2018-03-06",
"count": 1
},
{
"date": "2018-03-08",
"count": 1
},
{
"date": "2018-03-10",
"count": 1
},
{
"date": "2018-03-12",
"count": 1
},
{
"date": "2018-03-13",
"count": 1
},
{
"date": "2018-03-14",
"count": 1
},
{
"date": "2018-03-15",
"count": 2
},
{
"date": "2018-03-17",
"count": 1
},
{
"date": "2018-03-18",
"count": 1
},
{
"date": "2018-03-20",
"count": 1
},
{
"date": "2018-03-21",
"count": 1
},
{
"date": "2018-03-22",
"count": 2
},
{
"date": "2018-03-23",
"count": 2
},
{
"date": "2018-03-28",
"count": 2
},
{
"date": "2018-03-29",
"count": 2
},
{
"date": "2018-03-31",
"count": 1
},
{
"date": "2018-04-02",
"count": 5
},
{
"date": "2018-04-04",
"count": 1
},
{
"date": "2018-04-07",
"count": 1
},
{
"date": "2018-04-08",
"count": 1
},
{
"date": "2018-04-10",
"count": 1
},
{
"date": "2018-04-12",
"count": 1
},
{
"date": "2018-04-15",
"count": 1
},
{
"date": "2018-04-16",
"count": 1
},
{
"date": "2018-04-18",
"count": 1
},
{
"date": "2018-04-19",
"count": 1
},
{
"date": "2018-04-23",
"count": 1
},
{
"date": "2018-04-26",
"count": 1
},
{
"date": "2018-05-06",
"count": 1
},
{
"date": "2018-05-09",
"count": 2
},
{
"date": "2018-05-17",
"count": 1
},
{
"date": "2018-05-19",
"count": 1
},
{
"date": "2018-05-20",
"count": 1
},
{
"date": "2018-05-23",
"count": 2
},
{
"date": "2018-05-24",
"count": 3
},
{
"date": "2018-05-28",
"count": 1
},
{
"date": "2018-05-30",
"count": 1
},
{
"date": "2018-05-31",
"count": 3
},
{
"date": "2018-06-01",
"count": 1
},
{
"date": "2018-06-02",
"count": 1
},
{
"date": "2018-06-04",
"count": 1
},
{
"date": "2018-06-06",
"count": 1
},
{
"date": "2018-06-08",
"count": 1
},
{
"date": "2018-06-09",
"count": 1
},
{
"date": "2018-06-11",
"count": 1
},
{
"date": "2018-06-12",
"count": 1
},
{
"date": "2018-06-14",
"count": 3
},
{
"date": "2018-06-17",
"count": 1
},
{
"date": "2018-06-18",
"count": 2
},
{
"date": "2018-06-21",
"count": 1
},
{
"date": "2018-06-24",
"count": 1
},
{
"date": "2018-06-26",
"count": 1
},
{
"date": "2018-07-05",
"count": 1
},
{
"date": "2018-07-07",
"count": 1
},
{
"date": "2018-07-15",
"count": 1
},
{
"date": "2018-07-18",
"count": 1
},
{
"date": "2018-07-19",
"count": 2
},
{
"date": "2018-07-20",
"count": 1
},
{
"date": "2018-07-23",
"count": 1
},
{
"date": "2018-08-06",
"count": 1
},
{
"date": "2018-08-07",
"count": 2
},
{
"date": "2018-08-08",
"count": 1
},
{
"date": "2018-08-09",
"count": 1
},
{
"date": "2018-08-10",
"count": 1
},
{
"date": "2018-08-11",
"count": 1
},
{
"date": "2018-08-14",
"count": 1
},
{
"date": "2018-08-15",
"count": 1
},
{
"date": "2018-08-20",
"count": 1
},
{
"date": "2018-08-23",
"count": 1
},
{
"date": "2018-08-27",
"count": 3
},
{
"date": "2018-09-01",
"count": 1
},
{
"date": "2018-09-07",
"count": 1
},
{
"date": "2018-09-11",
"count": 1
},
{
"date": "2018-09-13",
"count": 1
},
{
"date": "2018-09-14",
"count": 1
},
{
"date": "2018-09-18",
"count": 1
},
{
"date": "2018-09-19",
"count": 2
},
{
"date": "2018-09-22",
"count": 1
},
{
"date": "2018-09-23",
"count": 2
},
{
"date": "2018-09-25",
"count": 1
},
{
"date": "2018-09-27",
"count": 1
},
{
"date": "2018-09-28",
"count": 1
},
{
"date": "2018-10-06",
"count": 1
},
{
"date": "2018-10-07",
"count": 1
},
{
"date": "2018-10-10",
"count": 1
},
{
"date": "2018-10-11",
"count": 2
},
{
"date": "2018-10-14",
"count": 1
},
{
"date": "2018-10-16",
"count": 2
},
{
"date": "2018-10-18",
"count": 1
},
{
"date": "2018-10-20",
"count": 2
},
{
"date": "2018-10-22",
"count": 1
},
{
"date": "2018-10-24",
"count": 1
},
{
"date": "2018-10-25",
"count": 1
},
{
"date": "2018-10-28",
"count": 2
},
{
"date": "2018-10-29",
"count": 1
},
{
"date": "2018-11-02",
"count": 2
},
{
"date": "2018-11-08",
"count": 1
},
{
"date": "2018-11-09",
"count": 3
},
{
"date": "2018-11-12",
"count": 1
},
{
"date": "2018-11-21",
"count": 1
},
{
"date": "2018-11-26",
"count": 1
},
{
"date": "2018-11-28",
"count": 1
},
{
"date": "2018-11-29",
"count": 1
},
{
"date": "2018-11-30",
"count": 2
},
{
"date": "2018-12-01",
"count": 1
},
{
"date": "2018-12-09",
"count": 1
},
{
"date": "2018-12-10",
"count": 1
},
{
"date": "2018-12-11",
"count": 1
},
{
"date": "2018-12-13",
"count": 1
},
{
"date": "2018-12-14",
"count": 1
},
{
"date": "2018-12-16",
"count": 1
},
{
"date": "2018-12-17",
"count": 2
},
{
"date": "2018-12-18",
"count": 1
},
{
"date": "2018-12-19",
"count": 1
},
{
"date": "2018-12-20",
"count": 1
},
{
"date": "2019-01-02",
"count": 2
},
{
"date": "2019-01-03",
"count": 1
},
{
"date": "2019-01-04",
"count": 1
},
{
"date": "2019-01-05",
"count": 2
},
{
"date": "2019-01-07",
"count": 1
},
{
"date": "2019-01-08",
"count": 2
},
{
"date": "2019-01-09",
"count": 1
},
{
"date": "2019-01-11",
"count": 1
},
{
"date": "2019-01-16",
"count": 1
},
{
"date": "2019-01-17",
"count": 1
},
{
"date": "2019-01-22",
"count": 1
},
{
"date": "2019-01-23",
"count": 3
},
{
"date": "2019-01-25",
"count": 1
},
{
"date": "2019-01-26",
"count": 1
},
{
"date": "2019-01-30",
"count": 1
},
{
"date": "2019-01-31",
"count": 1
},
{
"date": "2019-02-06",
"count": 1
},
{
"date": "2019-02-07",
"count": 3
},
{
"date": "2019-02-13",
"count": 1
},
{
"date": "2019-02-15",
"count": 1
},
{
"date": "2019-02-19",
"count": 1
},
{
"date": "2019-02-21",
"count": 2
},
{
"date": "2019-02-26",
"count": 1
},
{
"date": "2019-02-27",
"count": 2
},
{
"date": "2019-02-28",
"count": 1
},
{
"date": "2019-03-01",
"count": 1
},
{
"date": "2019-03-03",
"count": 1
},
{
"date": "2019-03-04",
"count": 1
},
{
"date": "2019-03-05",
"count": 1
},
{
"date": "2019-03-06",
"count": 1
},
{
"date": "2019-03-08",
"count": 1
},
{
"date": "2019-03-09",
"count": 2
},
{
"date": "2019-03-10",
"count": 1
},
{
"date": "2019-03-11",
"count": 1
},
{
"date": "2019-03-12",
"count": 2
},
{
"date": "2019-03-13",
"count": 2
},
{
"date": "2019-03-14",
"count": 2
},
{
"date": "2019-03-19",
"count": 2
},
{
"date": "2019-03-21",
"count": 1
},
{
"date": "2019-03-25",
"count": 1
},
{
"date": "2019-03-26",
"count": 1
},
{
"date": "2019-04-01",
"count": 1
},
{
"date": "2019-04-04",
"count": 2
},
{
"date": "2019-04-14",
"count": 1
},
{
"date": "2019-04-16",
"count": 2
},
{
"date": "2019-04-23",
"count": 1
},
{
"date": "2019-04-28",
"count": 1
},
{
"date": "2019-05-02",
"count": 1
},
{
"date": "2019-05-03",
"count": 1
},
{
"date": "2019-05-06",
"count": 2
},
{
"date": "2019-05-07",
"count": 1
},
{
"date": "2019-05-08",
"count": 1
},
{
"date": "2019-05-10",
"count": 1
},
{
"date": "2019-05-12",
"count": 1
},
{
"date": "2019-05-13",
"count": 1
},
{
"date": "2019-05-14",
"count": 1
},
{
"date": "2019-05-15",
"count": 1
},
{
"date": "2019-05-31",
"count": 1
},
{
"date": "2019-06-03",
"count": 1
},
{
"date": "2019-06-10",
"count": 1
},
{
"date": "2019-06-12",
"count": 2
},
{
"date": "2019-06-18",
"count": 2
},
{
"date": "2019-06-19",
"count": 1
},
{
"date": "2019-06-24",
"count": 1
},
{
"date": "2019-06-25",
"count": 1
},
{
"date": "2019-06-27",
"count": 1
},
{
"date": "2019-07-05",
"count": 2
},
{
"date": "2019-07-08",
"count": 2
},
{
"date": "2019-07-09",
"count": 1
},
{
"date": "2019-07-16",
"count": 1
},
{
"date": "2019-07-18",
"count": 1
},
{
"date": "2019-07-20",
"count": 1
},
{
"date": "2019-07-23",
"count": 1
},
{
"date": "2019-07-24",
"count": 1
},
{
"date": "2019-07-25",
"count": 1
},
{
"date": "2019-07-26",
"count": 2
},
{
"date": "2019-07-29",
"count": 1
},
{
"date": "2019-07-30",
"count": 1
},
{
"date": "2019-08-03",
"count": 1
},
{
"date": "2019-08-05",
"count": 1
},
{
"date": "2019-08-13",
"count": 1
},
{
"date": "2019-08-16",
"count": 1
},
{
"date": "2019-08-17",
"count": 1
},
{
"date": "2019-08-19",
"count": 1
},
{
"date": "2019-08-20",
"count": 1
},
{
"date": "2019-08-21",
"count": 1
},
{
"date": "2019-08-22",
"count": 2
},
{
"date": "2019-08-25",
"count": 1
},
{
"date": "2019-08-26",
"count": 2
},
{
"date": "2019-08-28",
"count": 2
},
{
"date": "2019-08-30",
"count": 1
},
{
"date": "2019-09-03",
"count": 1
},
{
"date": "2019-09-04",
"count": 3
},
{
"date": "2019-09-06",
"count": 1
},
{
"date": "2019-09-10",
"count": 1
},
{
"date": "2019-09-14",
"count": 1
},
{
"date": "2019-09-17",
"count": 1
},
{
"date": "2019-09-23",
"count": 1
},
{
"date": "2019-09-24",
"count": 1
},
{
"date": "2019-09-25",
"count": 3
},
{
"date": "2019-09-26",
"count": 1
},
{
"date": "2019-09-30",
"count": 1
},
{
"date": "2019-10-01",
"count": 1
},
{
"date": "2019-10-02",
"count": 1
},
{
"date": "2019-10-05",
"count": 1
},
{
"date": "2019-10-07",
"count": 2
},
{
"date": "2019-10-09",
"count": 1
},
{
"date": "2019-10-10",
"count": 1
},
{
"date": "2019-10-12",
"count": 1
},
{
"date": "2019-10-14",
"count": 2
},
{
"date": "2019-10-18",
"count": 1
},
{
"date": "2019-10-29",
"count": 1
},
{
"date": "2019-10-31",
"count": 1
},
{
"date": "2019-11-02",
"count": 1
},
{
"date": "2019-11-06",
"count": 2
},
{
"date": "2019-11-10",
"count": 1
},
{
"date": "2019-11-13",
"count": 1
},
{
"date": "2019-11-17",
"count": 1
},
{
"date": "2019-11-19",
"count": 1
},
{
"date": "2019-11-20",
"count": 1
},
{
"date": "2019-11-23",
"count": 1
},
{
"date": "2019-11-26",
"count": 1
},
{
"date": "2019-11-28",
"count": 1
},
{
"date": "2019-11-29",
"count": 1
},
{
"date": "2019-12-01",
"count": 1
},
{
"date": "2019-12-05",
"count": 1
},
{
"date": "2019-12-06",
"count": 1
},
{
"date": "2019-12-09",
"count": 1
},
{
"date": "2019-12-11",
"count": 1
},
{
"date": "2019-12-13",
"count": 1
},
{
"date": "2019-12-16",
"count": 1
},
{
"date": "2019-12-18",
"count": 1
},
{
"date": "2019-12-19",
"count": 1
},
{
"date": "2019-12-20",
"count": 2
},
{
"date": "2019-12-23",
"count": 1
},
{
"date": "2019-12-24",
"count": 1
},
{
"date": "2019-12-30",
"count": 2
},
{
"date": "2020-01-03",
"count": 1
},
{
"date": "2020-01-04",
"count": 1
},
{
"date": "2020-01-08",
"count": 1
},
{
"date": "2020-01-09",
"count": 1
},
{
"date": "2020-01-11",
"count": 1
},
{
"date": "2020-01-14",
"count": 1
},
{
"date": "2020-01-17",
"count": 1
},
{
"date": "2020-01-22",
"count": 1
},
{
"date": "2020-01-23",
"count": 2
},
{
"date": "2020-01-24",
"count": 1
},
{
"date": "2020-01-27",
"count": 1
},
{
"date": "2020-01-28",
"count": 1
},
{
"date": "2020-01-30",
"count": 1
},
{
"date": "2020-01-31",
"count": 1
},
{
"date": "2020-02-06",
"count": 1
},
{
"date": "2020-02-10",
"count": 2
},
{
"date": "2020-02-13",
"count": 1
},
{
"date": "2020-02-19",
"count": 1
},
{
"date": "2020-02-20",
"count": 1
},
{
"date": "2020-02-24",
"count": 1
},
{
"date": "2020-02-25",
"count": 1
},
{
"date": "2020-02-27",
"count": 1
},
{
"date": "2020-02-28",
"count": 1
},
{
"date": "2020-03-01",
"count": 1
},
{
"date": "2020-03-04",
"count": 1
},
{
"date": "2020-03-05",
"count": 1
},
{
"date": "2020-03-09",
"count": 1
},
{
"date": "2020-03-13",
"count": 1
},
{
"date": "2020-03-17",
"count": 1
},
{
"date": "2020-03-28",
"count": 1
},
{
"date": "2020-03-30",
"count": 1
},
{
"date": "2020-04-01",
"count": 1
},
{
"date": "2020-04-05",
"count": 1
},
{
"date": "2020-04-14",
"count": 1
},
{
"date": "2020-04-16",
"count": 1
},
{
"date": "2020-04-21",
"count": 1
},
{
"date": "2020-04-26",
"count": 2
},
{
"date": "2020-04-27",
"count": 1
},
{
"date": "2020-04-28",
"count": 1
},
{
"date": "2020-05-03",
"count": 1
},
{
"date": "2020-05-05",
"count": 1
},
{
"date": "2020-05-12",
"count": 1
},
{
"date": "2020-05-20",
"count": 1
},
{
"date": "2020-05-22",
"count": 1
},
{
"date": "2020-05-27",
"count": 1
},
{
"date": "2020-05-29",
"count": 1
},
{
"date": "2020-06-07",
"count": 1
},
{
"date": "2020-06-14",
"count": 1
},
{
"date": "2020-06-17",
"count": 2
},
{
"date": "2020-06-20",
"count": 1
},
{
"date": "2020-06-21",
"count": 1
},
{
"date": "2020-06-30",
"count": 2
},
{
"date": "2020-07-01",
"count": 1
},
{
"date": "2020-07-05",
"count": 3
},
{
"date": "2020-07-08",
"count": 1
},
{
"date": "2020-07-14",
"count": 2
},
{
"date": "2020-07-20",
"count": 1
},
{
"date": "2020-07-27",
"count": 1
},
{
"date": "2020-07-29",
"count": 1
},
{
"date": "2020-07-30",
"count": 1
},
{
"date": "2020-07-31",
"count": 2
},
{
"date": "2020-08-01",
"count": 1
},
{
"date": "2020-08-05",
"count": 1
},
{
"date": "2020-08-08",
"count": 2
},
{
"date": "2020-08-12",
"count": 1
},
{
"date": "2020-08-14",
"count": 1
},
{
"date": "2020-08-20",
"count": 1
},
{
"date": "2020-08-21",
"count": 1
},
{
"date": "2020-08-23",
"count": 1
},
{
"date": "2020-08-25",
"count": 1
},
{
"date": "2020-08-26",
"count": 1
},
{
"date": "2020-09-05",
"count": 1
},
{
"date": "2020-09-11",
"count": 1
},
{
"date": "2020-09-17",
"count": 1
},
{
"date": "2020-09-18",
"count": 1
},
{
"date": "2020-09-23",
"count": 1
},
{
"date": "2020-10-01",
"count": 2
},
{
"date": "2020-10-02",
"count": 1
},
{
"date": "2020-10-06",
"count": 1
},
{
"date": "2020-10-07",
"count": 2
},
{
"date": "2020-10-10",
"count": 1
},
{
"date": "2020-10-12",
"count": 1
},
{
"date": "2020-10-16",
"count": 2
},
{
"date": "2020-10-21",
"count": 1
},
{
"date": "2020-10-28",
"count": 1
},
{
"date": "2020-11-02",
"count": 1
},
{
"date": "2020-11-12",
"count": 1
},
{
"date": "2020-11-16",
"count": 1
},
{
"date": "2020-11-18",
"count": 1
},
{
"date": "2020-11-26",
"count": 1
},
{
"date": "2020-11-30",
"count": 1
},
{
"date": "2020-12-04",
"count": 2
},
{
"date": "2020-12-08",
"count": 1
},
{
"date": "2020-12-09",
"count": 1
},
{
"date": "2020-12-14",
"count": 1
},
{
"date": "2020-12-16",
"count": 1
},
{
"date": "2020-12-20",
"count": 1
},
{
"date": "2020-12-23",
"count": 1
},
{
"date": "2020-12-24",
"count": 1
},
{
"date": "2020-12-28",
"count": 1
},
{
"date": "2021-01-05",
"count": 1
},
{
"date": "2021-01-06",
"count": 1
},
{
"date": "2021-01-07",
"count": 1
},
{
"date": "2021-01-11",
"count": 2
},
{
"date": "2021-01-17",
"count": 1
},
{
"date": "2021-01-20",
"count": 2
},
{
"date": "2021-01-22",
"count": 1
},
{
"date": "2021-01-23",
"count": 1
},
{
"date": "2021-02-06",
"count": 1
},
{
"date": "2021-02-08",
"count": 1
},
{
"date": "2021-02-13",
"count": 1
},
{
"date": "2021-02-22",
"count": 1
},
{
"date": "2021-03-05",
"count": 1
},
{
"date": "2021-03-09",
"count": 2
},
{
"date": "2021-03-14",
"count": 1
},
{
"date": "2021-03-17",
"count": 1
},
{
"date": "2021-03-20",
"count": 1
},
{
"date": "2021-03-23",
"count": 1
},
{
"date": "2021-03-27",
"count": 1
},
{
"date": "2021-04-02",
"count": 1
},
{
"date": "2021-04-06",
"count": 2
},
{
"date": "2021-04-09",
"count": 1
},
{
"date": "2021-04-10",
"count": 1
},
{
"date": "2021-04-11",
"count": 1
},
{
"date": "2021-04-16",
"count": 1
},
{
"date": "2021-04-26",
"count": 2
},
{
"date": "2021-04-28",
"count": 1
},
{
"date": "2021-05-05",
"count": 1
},
{
"date": "2021-05-07",
"count": 1
},
{
"date": "2021-05-14",
"count": 1
},
{
"date": "2021-05-17",
"count": 1
},
{
"date": "2021-05-18",
"count": 1
},
{
"date": "2021-05-21",
"count": 2
},
{
"date": "2021-05-23",
"count": 1
},
{
"date": "2021-05-25",
"count": 1
},
{
"date": "2021-05-27",
"count": 1
},
{
"date": "2021-05-31",
"count": 1
},
{
"date": "2021-06-07",
"count": 1
},
{
"date": "2021-06-09",
"count": 1
},
{
"date": "2021-06-16",
"count": 1
},
{
"date": "2021-06-17",
"count": 1
},
{
"date": "2021-06-27",
"count": 1
},
{
"date": "2021-07-06",
"count": 1
},
{
"date": "2021-07-07",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-07-30",
"count": 1
},
{
"date": "2021-08-02",
"count": 1
},
{
"date": "2021-08-09",
"count": 1
},
{
"date": "2021-08-20",
"count": 1
},
{
"date": "2021-08-25",
"count": 1
},
{
"date": "2021-08-30",
"count": 1
},
{
"date": "2021-09-10",
"count": 1
},
{
"date": "2021-09-11",
"count": 1
},
{
"date": "2021-09-17",
"count": 1
},
{
"date": "2021-09-27",
"count": 1
},
{
"date": "2021-09-28",
"count": 2
},
{
"date": "2021-10-03",
"count": 1
},
{
"date": "2021-10-04",
"count": 1
},
{
"date": "2021-10-10",
"count": 2
},
{
"date": "2021-10-11",
"count": 1
},
{
"date": "2021-10-14",
"count": 1
},
{
"date": "2021-10-16",
"count": 1
},
{
"date": "2021-10-27",
"count": 1
},
{
"date": "2021-10-29",
"count": 1
},
{
"date": "2021-11-04",
"count": 1
},
{
"date": "2021-11-16",
"count": 1
},
{
"date": "2021-11-18",
"count": 2
},
{
"date": "2021-11-21",
"count": 1
},
{
"date": "2021-11-23",
"count": 1
},
{
"date": "2021-11-29",
"count": 1
},
{
"date": "2021-11-30",
"count": 1
},
{
"date": "2021-12-06",
"count": 1
},
{
"date": "2022-01-01",
"count": 1
},
{
"date": "2022-01-02",
"count": 2
},
{
"date": "2022-01-03",
"count": 1
},
{
"date": "2022-01-07",
"count": 1
},
{
"date": "2022-01-13",
"count": 2
},
{
"date": "2022-01-17",
"count": 2
},
{
"date": "2022-01-22",
"count": 1
},
{
"date": "2022-01-24",
"count": 1
},
{
"date": "2022-01-26",
"count": 1
},
{
"date": "2022-02-01",
"count": 1
},
{
"date": "2022-02-06",
"count": 1
},
{
"date": "2022-02-11",
"count": 1
},
{
"date": "2022-02-25",
"count": 1
},
{
"date": "2022-02-28",
"count": 2
},
{
"date": "2022-03-03",
"count": 1
},
{
"date": "2022-03-11",
"count": 1
},
{
"date": "2022-03-15",
"count": 1
},
{
"date": "2022-03-16",
"count": 1
},
{
"date": "2022-03-17",
"count": 1
},
{
"date": "2022-03-25",
"count": 1
},
{
"date": "2022-03-27",
"count": 1
},
{
"date": "2022-03-28",
"count": 1
},
{
"date": "2022-03-31",
"count": 1
},
{
"date": "2022-04-04",
"count": 1
},
{
"date": "2022-04-10",
"count": 1
},
{
"date": "2022-04-15",
"count": 1
},
{
"date": "2022-04-18",
"count": 1
},
{
"date": "2022-04-19",
"count": 1
},
{
"date": "2022-05-05",
"count": 1
},
{
"date": "2022-05-17",
"count": 1
},
{
"date": "2022-05-20",
"count": 1
},
{
"date": "2022-05-22",
"count": 1
},
{
"date": "2022-05-27",
"count": 1
},
{
"date": "2022-06-03",
"count": 1
},
{
"date": "2022-06-11",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-06-16",
"count": 1
},
{
"date": "2022-06-20",
"count": 1
},
{
"date": "2022-06-21",
"count": 1
},
{
"date": "2022-06-30",
"count": 1
},
{
"date": "2022-07-14",
"count": 2
},
{
"date": "2022-07-21",
"count": 1
},
{
"date": "2022-07-26",
"count": 1
},
{
"date": "2022-08-01",
"count": 1
},
{
"date": "2022-08-04",
"count": 1
},
{
"date": "2022-08-15",
"count": 1
},
{
"date": "2022-08-18",
"count": 1
},
{
"date": "2022-08-31",
"count": 1
},
{
"date": "2022-09-05",
"count": 1
},
{
"date": "2022-09-14",
"count": 1
},
{
"date": "2022-09-15",
"count": 1
},
{
"date": "2022-09-19",
"count": 2
},
{
"date": "2022-09-21",
"count": 1
},
{
"date": "2022-09-26",
"count": 1
},
{
"date": "2022-09-27",
"count": 1
},
{
"date": "2022-10-03",
"count": 1
},
{
"date": "2022-10-07",
"count": 2
},
{
"date": "2022-10-10",
"count": 1
},
{
"date": "2022-10-14",
"count": 1
},
{
"date": "2022-10-16",
"count": 1
},
{
"date": "2022-10-26",
"count": 1
},
{
"date": "2022-10-27",
"count": 2
},
{
"date": "2022-11-02",
"count": 1
},
{
"date": "2022-11-08",
"count": 2
},
{
"date": "2022-11-18",
"count": 1
},
{
"date": "2022-11-23",
"count": 1
},
{
"date": "2022-12-07",
"count": 1
},
{
"date": "2022-12-08",
"count": 1
},
{
"date": "2022-12-09",
"count": 1
},
{
"date": "2023-01-03",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-01-08",
"count": 1
},
{
"date": "2023-01-10",
"count": 1
},
{
"date": "2023-01-13",
"count": 1
},
{
"date": "2023-01-19",
"count": 1
},
{
"date": "2023-02-11",
"count": 1
},
{
"date": "2023-02-23",
"count": 1
},
{
"date": "2023-02-24",
"count": 1
},
{
"date": "2023-03-03",
"count": 1
},
{
"date": "2023-03-05",
"count": 1
},
{
"date": "2023-03-07",
"count": 1
},
{
"date": "2023-03-11",
"count": 1
},
{
"date": "2023-03-13",
"count": 1
},
{
"date": "2023-03-19",
"count": 1
},
{
"date": "2023-03-21",
"count": 1
},
{
"date": "2023-04-03",
"count": 1
},
{
"date": "2023-04-07",
"count": 1
},
{
"date": "2023-04-11",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-22",
"count": 1
},
{
"date": "2023-05-18",
"count": 1
},
{
"date": "2023-05-23",
"count": 1
},
{
"date": "2023-05-25",
"count": 1
},
{
"date": "2023-06-09",
"count": 1
},
{
"date": "2023-06-16",
"count": 2
},
{
"date": "2023-06-17",
"count": 1
},
{
"date": "2023-07-02",
"count": 2
},
{
"date": "2023-07-04",
"count": 1
},
{
"date": "2023-07-15",
"count": 1
},
{
"date": "2023-07-18",
"count": 1
},
{
"date": "2023-07-22",
"count": 1
},
{
"date": "2023-07-26",
"count": 1
},
{
"date": "2023-07-27",
"count": 1
},
{
"date": "2023-08-04",
"count": 1
},
{
"date": "2023-08-11",
"count": 2
},
{
"date": "2023-08-17",
"count": 1
},
{
"date": "2023-08-21",
"count": 1
},
{
"date": "2023-08-26",
"count": 1
},
{
"date": "2023-08-28",
"count": 1
},
{
"date": "2023-09-03",
"count": 1
},
{
"date": "2023-09-05",
"count": 1
},
{
"date": "2023-09-06",
"count": 1
},
{
"date": "2023-09-12",
"count": 2
},
{
"date": "2023-09-20",
"count": 1
},
{
"date": "2023-09-21",
"count": 1
},
{
"date": "2023-09-22",
"count": 2
},
{
"date": "2023-09-24",
"count": 1
},
{
"date": "2023-10-02",
"count": 1
},
{
"date": "2023-10-03",
"count": 1
},
{
"date": "2023-10-06",
"count": 1
},
{
"date": "2023-10-11",
"count": 1
},
{
"date": "2023-10-17",
"count": 1
},
{
"date": "2023-10-19",
"count": 1
},
{
"date": "2023-10-22",
"count": 1
},
{
"date": "2023-10-24",
"count": 1
},
{
"date": "2023-10-26",
"count": 1
},
{
"date": "2023-11-10",
"count": 1
},
{
"date": "2023-11-13",
"count": 1
},
{
"date": "2023-11-20",
"count": 1
},
{
"date": "2023-11-27",
"count": 1
},
{
"date": "2023-11-30",
"count": 1
},
{
"date": "2023-12-04",
"count": 1
},
{
"date": "2023-12-09",
"count": 2
},
{
"date": "2023-12-18",
"count": 1
},
{
"date": "2023-12-25",
"count": 1
},
{
"date": "2023-12-28",
"count": 1
},
{
"date": "2023-12-29",
"count": 1
},
{
"date": "2024-01-05",
"count": 1
},
{
"date": "2024-01-22",
"count": 4
},
{
"date": "2024-01-24",
"count": 1
},
{
"date": "2024-01-25",
"count": 1
},
{
"date": "2024-01-29",
"count": 1
},
{
"date": "2024-02-02",
"count": 1
},
{
"date": "2024-02-14",
"count": 2
},
{
"date": "2024-03-02",
"count": 1
},
{
"date": "2024-03-04",
"count": 1
},
{
"date": "2024-03-07",
"count": 1
},
{
"date": "2024-03-26",
"count": 1
},
{
"date": "2024-03-28",
"count": 1
},
{
"date": "2024-03-29",
"count": 1
},
{
"date": "2024-04-02",
"count": 1
},
{
"date": "2024-04-04",
"count": 1
},
{
"date": "2024-04-11",
"count": 1
},
{
"date": "2024-05-07",
"count": 1
},
{
"date": "2024-05-11",
"count": 1
},
{
"date": "2024-05-13",
"count": 1
},
{
"date": "2024-07-06",
"count": 1
},
{
"date": "2024-07-22",
"count": 1
},
{
"date": "2024-07-23",
"count": 1
},
{
"date": "2024-07-24",
"count": 1
},
{
"date": "2024-08-01",
"count": 1
},
{
"date": "2024-08-07",
"count": 1
},
{
"date": "2024-08-20",
"count": 1
},
{
"date": "2024-08-23",
"count": 1
},
{
"date": "2024-09-04",
"count": 1
},
{
"date": "2024-09-14",
"count": 1
},
{
"date": "2024-09-20",
"count": 1
},
{
"date": "2024-10-03",
"count": 1
},
{
"date": "2024-10-11",
"count": 1
},
{
"date": "2024-10-15",
"count": 1
},
{
"date": "2024-10-24",
"count": 1
},
{
"date": "2024-12-03",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-01-09",
"count": 1
},
{
"date": "2025-01-22",
"count": 1
},
{
"date": "2025-01-25",
"count": 1
},
{
"date": "2025-02-12",
"count": 1
},
{
"date": "2025-02-21",
"count": 1
},
{
"date": "2025-02-25",
"count": 1
},
{
"date": "2025-02-28",
"count": 2
},
{
"date": "2025-03-05",
"count": 1
},
{
"date": "2025-03-19",
"count": 1
},
{
"date": "2025-04-08",
"count": 1
},
{
"date": "2025-04-14",
"count": 2
},
{
"date": "2025-04-20",
"count": 1
},
{
"date": "2025-04-23",
"count": 2
},
{
"date": "2025-04-30",
"count": 1
},
{
"date": "2025-05-22",
"count": 1
},
{
"date": "2025-05-23",
"count": 1
},
{
"date": "2025-05-29",
"count": 1
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-09",
"count": 1
},
{
"date": "2025-06-16",
"count": 1
},
{
"date": "2025-06-29",
"count": 1
},
{
"date": "2025-07-16",
"count": 2
},
{
"date": "2025-08-11",
"count": 1
},
{
"date": "2025-08-16",
"count": 1
},
{
"date": "2025-09-04",
"count": 1
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-22",
"count": 3
},
{
"date": "2025-09-23",
"count": 1
},
{
"date": "2025-10-09",
"count": 1
},
{
"date": "2025-10-13",
"count": 1
},
{
"date": "2025-10-14",
"count": 1
},
{
"date": "2025-11-10",
"count": 1
},
{
"date": "2025-11-25",
"count": 1
},
{
"date": "2025-12-19",
"count": 1
},
{
"date": "2025-12-22",
"count": 1
},
{
"date": "2025-12-26",
"count": 1
},
{
"date": "2026-01-20",
"count": 1
},
{
"date": "2026-01-21",
"count": 1
},
{
"date": "2026-01-23",
"count": 1
},
{
"date": "2026-02-03",
"count": 1
},
{
"date": "2026-02-10",
"count": 1
},
{
"date": "2026-02-20",
"count": 1
},
{
"date": "2026-03-04",
"count": 1
},
{
"date": "2026-03-05",
"count": 1
},
{
"date": "2026-03-18",
"count": 1
},
{
"date": "2026-04-09",
"count": 1
},
{
"date": "2026-04-11",
"count": 1
},
{
"date": "2026-04-12",
"count": 1
},
{
"date": "2026-04-13",
"count": 1
},
{
"date": "2026-04-24",
"count": 1
},
{
"date": "2026-05-14",
"count": 2
},
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-20",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-05",
"count": 15
},
{
"date": "2026-06-30",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
},
{
"date": "2026-07-19",
"count": 1
}
],
"complete": false,
"collected": 1000,
"total_forks": 3378
},
"star_history": {
"days": [
{
"date": "2021-09-15",
"count": 1
},
{
"date": "2021-09-16",
"count": 1
},
{
"date": "2021-09-17",
"count": 1
},
{
"date": "2021-09-23",
"count": 1
},
{
"date": "2021-09-24",
"count": 1
},
{
"date": "2021-09-26",
"count": 2
},
{
"date": "2021-09-27",
"count": 1
},
{
"date": "2021-09-28",
"count": 1
},
{
"date": "2021-10-05",
"count": 3
},
{
"date": "2021-10-07",
"count": 1
},
{
"date": "2021-10-09",
"count": 1
},
{
"date": "2021-10-11",
"count": 1
},
{
"date": "2021-10-12",
"count": 2
},
{
"date": "2021-10-13",
"count": 5
},
{
"date": "2021-10-15",
"count": 1
},
{
"date": "2021-10-16",
"count": 2
},
{
"date": "2021-10-17",
"count": 1
},
{
"date": "2021-10-18",
"count": 1
},
{
"date": "2021-10-21",
"count": 1
},
{
"date": "2021-10-23",
"count": 2
},
{
"date": "2021-10-25",
"count": 2
},
{
"date": "2021-10-28",
"count": 1
},
{
"date": "2021-11-03",
"count": 1
},
{
"date": "2021-11-13",
"count": 1
},
{
"date": "2021-11-14",
"count": 1
},
{
"date": "2021-11-15",
"count": 1
},
{
"date": "2021-11-18",
"count": 1
},
{
"date": "2021-11-22",
"count": 1
},
{
"date": "2021-11-24",
"count": 1
},
{
"date": "2021-11-29",
"count": 2
},
{
"date": "2021-11-30",
"count": 3
},
{
"date": "2021-12-01",
"count": 1
},
{
"date": "2021-12-03",
"count": 1
},
{
"date": "2021-12-05",
"count": 1
},
{
"date": "2021-12-06",
"count": 1
},
{
"date": "2021-12-10",
"count": 1
},
{
"date": "2021-12-11",
"count": 2
},
{
"date": "2021-12-12",
"count": 2
},
{
"date": "2021-12-13",
"count": 2
},
{
"date": "2021-12-14",
"count": 2
},
{
"date": "2021-12-15",
"count": 1
},
{
"date": "2021-12-16",
"count": 1
},
{
"date": "2021-12-24",
"count": 1
},
{
"date": "2021-12-26",
"count": 1
},
{
"date": "2021-12-27",
"count": 2
},
{
"date": "2021-12-28",
"count": 1
},
{
"date": "2022-01-05",
"count": 1
},
{
"date": "2022-01-09",
"count": 1
},
{
"date": "2022-01-10",
"count": 1
},
{
"date": "2022-01-11",
"count": 1
},
{
"date": "2022-01-13",
"count": 2
},
{
"date": "2022-01-17",
"count": 4
},
{
"date": "2022-01-18",
"count": 1
},
{
"date": "2022-01-20",
"count": 1
},
{
"date": "2022-01-21",
"count": 1
},
{
"date": "2022-01-25",
"count": 2
},
{
"date": "2022-01-29",
"count": 1
},
{
"date": "2022-01-31",
"count": 1
},
{
"date": "2022-02-01",
"count": 1
},
{
"date": "2022-02-02",
"count": 1
},
{
"date": "2022-02-04",
"count": 1
},
{
"date": "2022-02-07",
"count": 1
},
{
"date": "2022-02-10",
"count": 1
},
{
"date": "2022-02-11",
"count": 1
},
{
"date": "2022-02-12",
"count": 1
},
{
"date": "2022-02-15",
"count": 3
},
{
"date": "2022-02-17",
"count": 1
},
{
"date": "2022-02-18",
"count": 1
},
{
"date": "2022-02-19",
"count": 1
},
{
"date": "2022-02-22",
"count": 1
},
{
"date": "2022-02-23",
"count": 2
},
{
"date": "2022-02-24",
"count": 1
},
{
"date": "2022-02-25",
"count": 1
},
{
"date": "2022-02-26",
"count": 1
},
{
"date": "2022-02-27",
"count": 1
},
{
"date": "2022-02-28",
"count": 2
},
{
"date": "2022-03-01",
"count": 2
},
{
"date": "2022-03-02",
"count": 2
},
{
"date": "2022-03-04",
"count": 1
},
{
"date": "2022-03-08",
"count": 1
},
{
"date": "2022-03-11",
"count": 1
},
{
"date": "2022-03-14",
"count": 1
},
{
"date": "2022-03-20",
"count": 1
},
{
"date": "2022-03-21",
"count": 1
},
{
"date": "2022-03-22",
"count": 1
},
{
"date": "2022-03-25",
"count": 1
},
{
"date": "2022-03-26",
"count": 1
},
{
"date": "2022-03-28",
"count": 2
},
{
"date": "2022-03-29",
"count": 1
},
{
"date": "2022-03-30",
"count": 1
},
{
"date": "2022-04-03",
"count": 1
},
{
"date": "2022-04-04",
"count": 2
},
{
"date": "2022-04-05",
"count": 1
},
{
"date": "2022-04-06",
"count": 2
},
{
"date": "2022-04-07",
"count": 2
},
{
"date": "2022-04-11",
"count": 1
},
{
"date": "2022-04-13",
"count": 1
},
{
"date": "2022-04-14",
"count": 2
},
{
"date": "2022-04-21",
"count": 1
},
{
"date": "2022-04-30",
"count": 1
},
{
"date": "2022-05-01",
"count": 1
},
{
"date": "2022-05-05",
"count": 2
},
{
"date": "2022-05-06",
"count": 7
},
{
"date": "2022-05-07",
"count": 2
},
{
"date": "2022-05-08",
"count": 1
},
{
"date": "2022-05-09",
"count": 1
},
{
"date": "2022-05-10",
"count": 1
},
{
"date": "2022-05-11",
"count": 1
},
{
"date": "2022-05-12",
"count": 1
},
{
"date": "2022-05-14",
"count": 1
},
{
"date": "2022-05-18",
"count": 1
},
{
"date": "2022-05-24",
"count": 2
},
{
"date": "2022-05-27",
"count": 3
},
{
"date": "2022-05-28",
"count": 1
},
{
"date": "2022-05-30",
"count": 4
},
{
"date": "2022-06-01",
"count": 5
},
{
"date": "2022-06-02",
"count": 6
},
{
"date": "2022-06-03",
"count": 4
},
{
"date": "2022-06-05",
"count": 2
},
{
"date": "2022-06-06",
"count": 1
},
{
"date": "2022-06-07",
"count": 1
},
{
"date": "2022-06-08",
"count": 2
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-06-14",
"count": 1
},
{
"date": "2022-06-15",
"count": 1
},
{
"date": "2022-06-18",
"count": 1
},
{
"date": "2022-06-20",
"count": 1
},
{
"date": "2022-06-23",
"count": 1
},
{
"date": "2022-06-27",
"count": 1
},
{
"date": "2022-06-28",
"count": 3
},
{
"date": "2022-06-29",
"count": 1
},
{
"date": "2022-06-30",
"count": 1
},
{
"date": "2022-07-01",
"count": 1
},
{
"date": "2022-07-05",
"count": 1
},
{
"date": "2022-07-06",
"count": 1
},
{
"date": "2022-07-07",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-07-14",
"count": 1
},
{
"date": "2022-07-16",
"count": 1
},
{
"date": "2022-07-17",
"count": 1
},
{
"date": "2022-07-19",
"count": 1
},
{
"date": "2022-07-21",
"count": 1
},
{
"date": "2022-07-25",
"count": 1
},
{
"date": "2022-08-02",
"count": 1
},
{
"date": "2022-08-03",
"count": 2
},
{
"date": "2022-08-05",
"count": 2
},
{
"date": "2022-08-07",
"count": 1
},
{
"date": "2022-08-10",
"count": 1
},
{
"date": "2022-08-11",
"count": 2
},
{
"date": "2022-08-12",
"count": 2
},
{
"date": "2022-08-15",
"count": 1
},
{
"date": "2022-08-17",
"count": 1
},
{
"date": "2022-08-18",
"count": 1
},
{
"date": "2022-08-20",
"count": 1
},
{
"date": "2022-08-22",
"count": 2
},
{
"date": "2022-08-29",
"count": 1
},
{
"date": "2022-08-30",
"count": 2
},
{
"date": "2022-08-31",
"count": 1
},
{
"date": "2022-09-01",
"count": 1
},
{
"date": "2022-09-03",
"count": 1
},
{
"date": "2022-09-09",
"count": 1
},
{
"date": "2022-09-11",
"count": 1
},
{
"date": "2022-09-13",
"count": 1
},
{
"date": "2022-09-15",
"count": 2
},
{
"date": "2022-09-16",
"count": 1
},
{
"date": "2022-09-18",
"count": 2
},
{
"date": "2022-09-19",
"count": 1
},
{
"date": "2022-09-20",
"count": 3
},
{
"date": "2022-09-22",
"count": 1
},
{
"date": "2022-09-25",
"count": 1
},
{
"date": "2022-09-26",
"count": 1
},
{
"date": "2022-09-27",
"count": 1
},
{
"date": "2022-09-28",
"count": 2
},
{
"date": "2022-09-30",
"count": 1
},
{
"date": "2022-10-01",
"count": 1
},
{
"date": "2022-10-04",
"count": 2
},
{
"date": "2022-10-06",
"count": 1
},
{
"date": "2022-10-07",
"count": 1
},
{
"date": "2022-10-09",
"count": 1
},
{
"date": "2022-10-11",
"count": 3
},
{
"date": "2022-10-12",
"count": 1
},
{
"date": "2022-10-13",
"count": 2
},
{
"date": "2022-10-14",
"count": 1
},
{
"date": "2022-10-16",
"count": 2
},
{
"date": "2022-10-19",
"count": 1
},
{
"date": "2022-10-20",
"count": 2
},
{
"date": "2022-10-25",
"count": 1
},
{
"date": "2022-10-26",
"count": 3
},
{
"date": "2022-10-28",
"count": 1
},
{
"date": "2022-10-30",
"count": 1
},
{
"date": "2022-10-31",
"count": 1
},
{
"date": "2022-11-01",
"count": 2
},
{
"date": "2022-11-02",
"count": 1
},
{
"date": "2022-11-03",
"count": 1
},
{
"date": "2022-11-04",
"count": 1
},
{
"date": "2022-11-06",
"count": 1
},
{
"date": "2022-11-07",
"count": 1
},
{
"date": "2022-11-10",
"count": 1
},
{
"date": "2022-11-12",
"count": 2
},
{
"date": "2022-11-14",
"count": 1
},
{
"date": "2022-11-16",
"count": 1
},
{
"date": "2022-11-18",
"count": 2
},
{
"date": "2022-11-19",
"count": 1
},
{
"date": "2022-11-22",
"count": 2
},
{
"date": "2022-11-23",
"count": 1
},
{
"date": "2022-11-24",
"count": 4
},
{
"date": "2022-11-25",
"count": 1
},
{
"date": "2022-11-29",
"count": 3
},
{
"date": "2022-11-30",
"count": 2
},
{
"date": "2022-12-02",
"count": 2
},
{
"date": "2022-12-06",
"count": 1
},
{
"date": "2022-12-07",
"count": 1
},
{
"date": "2022-12-13",
"count": 2
},
{
"date": "2022-12-14",
"count": 1
},
{
"date": "2022-12-18",
"count": 1
},
{
"date": "2022-12-19",
"count": 2
},
{
"date": "2022-12-20",
"count": 1
},
{
"date": "2022-12-21",
"count": 1
},
{
"date": "2022-12-24",
"count": 1
},
{
"date": "2022-12-25",
"count": 1
},
{
"date": "2022-12-26",
"count": 1
},
{
"date": "2022-12-30",
"count": 2
},
{
"date": "2023-01-01",
"count": 2
},
{
"date": "2023-01-03",
"count": 1
},
{
"date": "2023-01-04",
"count": 3
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-01-06",
"count": 1
},
{
"date": "2023-01-07",
"count": 1
},
{
"date": "2023-01-08",
"count": 1
},
{
"date": "2023-01-10",
"count": 1
},
{
"date": "2023-01-12",
"count": 1
},
{
"date": "2023-01-13",
"count": 2
},
{
"date": "2023-01-22",
"count": 1
},
{
"date": "2023-01-23",
"count": 1
},
{
"date": "2023-01-28",
"count": 1
},
{
"date": "2023-01-30",
"count": 1
},
{
"date": "2023-02-01",
"count": 2
},
{
"date": "2023-02-02",
"count": 2
},
{
"date": "2023-02-05",
"count": 1
},
{
"date": "2023-02-08",
"count": 1
},
{
"date": "2023-02-09",
"count": 3
},
{
"date": "2023-02-12",
"count": 4
},
{
"date": "2023-02-15",
"count": 2
},
{
"date": "2023-02-16",
"count": 2
},
{
"date": "2023-02-18",
"count": 2
},
{
"date": "2023-02-21",
"count": 1
},
{
"date": "2023-02-25",
"count": 1
},
{
"date": "2023-02-27",
"count": 1
},
{
"date": "2023-02-28",
"count": 1
},
{
"date": "2023-03-03",
"count": 1
},
{
"date": "2023-03-04",
"count": 1
},
{
"date": "2023-03-07",
"count": 2
},
{
"date": "2023-03-10",
"count": 1
},
{
"date": "2023-03-12",
"count": 1
},
{
"date": "2023-03-13",
"count": 2
},
{
"date": "2023-03-15",
"count": 2
},
{
"date": "2023-03-17",
"count": 1
},
{
"date": "2023-03-18",
"count": 1
},
{
"date": "2023-03-19",
"count": 1
},
{
"date": "2023-03-21",
"count": 1
},
{
"date": "2023-03-22",
"count": 2
},
{
"date": "2023-03-23",
"count": 1
},
{
"date": "2023-03-24",
"count": 1
},
{
"date": "2023-03-27",
"count": 2
},
{
"date": "2023-04-02",
"count": 1
},
{
"date": "2023-04-03",
"count": 1
},
{
"date": "2023-04-04",
"count": 1
},
{
"date": "2023-04-05",
"count": 2
},
{
"date": "2023-04-12",
"count": 2
},
{
"date": "2023-04-13",
"count": 2
},
{
"date": "2023-04-17",
"count": 1
},
{
"date": "2023-04-19",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-24",
"count": 1
},
{
"date": "2023-04-26",
"count": 2
},
{
"date": "2023-04-27",
"count": 1
},
{
"date": "2023-05-03",
"count": 2
},
{
"date": "2023-05-04",
"count": 1
},
{
"date": "2023-05-05",
"count": 1
},
{
"date": "2023-05-08",
"count": 2
},
{
"date": "2023-05-09",
"count": 2
},
{
"date": "2023-05-10",
"count": 1
},
{
"date": "2023-05-11",
"count": 1
},
{
"date": "2023-05-14",
"count": 1
},
{
"date": "2023-05-16",
"count": 4
},
{
"date": "2023-05-19",
"count": 1
},
{
"date": "2023-05-21",
"count": 1
},
{
"date": "2023-05-23",
"count": 1
},
{
"date": "2023-05-24",
"count": 1
},
{
"date": "2023-05-25",
"count": 1
},
{
"date": "2023-05-26",
"count": 1
},
{
"date": "2023-05-29",
"count": 1
},
{
"date": "2023-05-30",
"count": 1
},
{
"date": "2023-05-31",
"count": 1
},
{
"date": "2023-06-02",
"count": 1
},
{
"date": "2023-06-05",
"count": 1
},
{
"date": "2023-06-07",
"count": 1
},
{
"date": "2023-06-09",
"count": 1
},
{
"date": "2023-06-13",
"count": 2
},
{
"date": "2023-06-14",
"count": 1
},
{
"date": "2023-06-15",
"count": 1
},
{
"date": "2023-06-19",
"count": 1
},
{
"date": "2023-06-21",
"count": 1
},
{
"date": "2023-06-27",
"count": 1
},
{
"date": "2023-06-28",
"count": 2
},
{
"date": "2023-06-30",
"count": 1
},
{
"date": "2023-07-01",
"count": 1
},
{
"date": "2023-07-02",
"count": 1
},
{
"date": "2023-07-05",
"count": 1
},
{
"date": "2023-07-07",
"count": 1
},
{
"date": "2023-07-08",
"count": 1
},
{
"date": "2023-07-12",
"count": 1
},
{
"date": "2023-07-16",
"count": 1
},
{
"date": "2023-07-18",
"count": 1
},
{
"date": "2023-07-20",
"count": 2
},
{
"date": "2023-07-21",
"count": 1
},
{
"date": "2023-07-22",
"count": 1
},
{
"date": "2023-07-23",
"count": 1
},
{
"date": "2023-08-01",
"count": 1
},
{
"date": "2023-08-02",
"count": 1
},
{
"date": "2023-08-11",
"count": 1
},
{
"date": "2023-08-14",
"count": 3
},
{
"date": "2023-08-15",
"count": 1
},
{
"date": "2023-08-16",
"count": 2
},
{
"date": "2023-08-17",
"count": 3
},
{
"date": "2023-08-18",
"count": 1
},
{
"date": "2023-08-21",
"count": 1
},
{
"date": "2023-08-25",
"count": 1
},
{
"date": "2023-08-30",
"count": 2
},
{
"date": "2023-09-01",
"count": 1
},
{
"date": "2023-09-02",
"count": 1
},
{
"date": "2023-09-04",
"count": 1
},
{
"date": "2023-09-10",
"count": 6
},
{
"date": "2023-09-12",
"count": 1
},
{
"date": "2023-09-15",
"count": 1
},
{
"date": "2023-09-16",
"count": 1
},
{
"date": "2023-09-17",
"count": 2
},
{
"date": "2023-09-18",
"count": 1
},
{
"date": "2023-09-21",
"count": 1
},
{
"date": "2023-09-24",
"count": 1
},
{
"date": "2023-09-26",
"count": 1
},
{
"date": "2023-09-28",
"count": 2
},
{
"date": "2023-09-29",
"count": 1
},
{
"date": "2023-09-30",
"count": 1
},
{
"date": "2023-10-01",
"count": 1
},
{
"date": "2023-10-02",
"count": 1
},
{
"date": "2023-10-03",
"count": 1
},
{
"date": "2023-10-04",
"count": 2
},
{
"date": "2023-10-05",
"count": 1
},
{
"date": "2023-10-10",
"count": 2
},
{
"date": "2023-10-12",
"count": 2
},
{
"date": "2023-10-13",
"count": 2
},
{
"date": "2023-10-15",
"count": 1
},
{
"date": "2023-10-16",
"count": 2
},
{
"date": "2023-10-17",
"count": 1
},
{
"date": "2023-10-18",
"count": 2
},
{
"date": "2023-10-19",
"count": 1
},
{
"date": "2023-10-20",
"count": 4
},
{
"date": "2023-10-21",
"count": 1
},
{
"date": "2023-10-24",
"count": 1
},
{
"date": "2023-10-28",
"count": 1
},
{
"date": "2023-10-31",
"count": 2
},
{
"date": "2023-11-01",
"count": 2
},
{
"date": "2023-11-02",
"count": 2
},
{
"date": "2023-11-03",
"count": 1
},
{
"date": "2023-11-04",
"count": 1
},
{
"date": "2023-11-08",
"count": 1
},
{
"date": "2023-11-13",
"count": 2
},
{
"date": "2023-11-16",
"count": 1
},
{
"date": "2023-11-17",
"count": 1
},
{
"date": "2023-11-18",
"count": 1
},
{
"date": "2023-11-22",
"count": 3
},
{
"date": "2023-11-27",
"count": 1
},
{
"date": "2023-11-28",
"count": 1
},
{
"date": "2023-12-05",
"count": 1
},
{
"date": "2023-12-08",
"count": 1
},
{
"date": "2023-12-13",
"count": 1
},
{
"date": "2023-12-15",
"count": 1
},
{
"date": "2023-12-16",
"count": 1
},
{
"date": "2023-12-21",
"count": 2
},
{
"date": "2023-12-24",
"count": 1
},
{
"date": "2023-12-27",
"count": 1
},
{
"date": "2023-12-28",
"count": 3
},
{
"date": "2023-12-29",
"count": 1
},
{
"date": "2024-01-04",
"count": 1
},
{
"date": "2024-01-16",
"count": 1
},
{
"date": "2024-01-17",
"count": 2
},
{
"date": "2024-01-18",
"count": 1
},
{
"date": "2024-01-19",
"count": 1
},
{
"date": "2024-01-20",
"count": 1
},
{
"date": "2024-01-21",
"count": 1
},
{
"date": "2024-01-22",
"count": 14
},
{
"date": "2024-01-23",
"count": 9
},
{
"date": "2024-01-24",
"count": 1
},
{
"date": "2024-01-26",
"count": 1
},
{
"date": "2024-01-29",
"count": 1
},
{
"date": "2024-01-30",
"count": 2
},
{
"date": "2024-02-02",
"count": 2
},
{
"date": "2024-02-03",
"count": 1
},
{
"date": "2024-02-07",
"count": 1
},
{
"date": "2024-02-09",
"count": 2
},
{
"date": "2024-02-14",
"count": 1
},
{
"date": "2024-02-17",
"count": 1
},
{
"date": "2024-02-18",
"count": 1
},
{
"date": "2024-02-22",
"count": 2
},
{
"date": "2024-02-28",
"count": 1
},
{
"date": "2024-02-29",
"count": 1
},
{
"date": "2024-03-07",
"count": 1
},
{
"date": "2024-03-09",
"count": 1
},
{
"date": "2024-03-12",
"count": 1
},
{
"date": "2024-03-13",
"count": 1
},
{
"date": "2024-03-19",
"count": 2
},
{
"date": "2024-03-21",
"count": 1
},
{
"date": "2024-03-22",
"count": 3
},
{
"date": "2024-03-24",
"count": 1
},
{
"date": "2024-03-25",
"count": 1
},
{
"date": "2024-03-27",
"count": 2
},
{
"date": "2024-03-28",
"count": 2
},
{
"date": "2024-03-30",
"count": 2
},
{
"date": "2024-04-01",
"count": 1
},
{
"date": "2024-04-03",
"count": 1
},
{
"date": "2024-04-04",
"count": 2
},
{
"date": "2024-04-06",
"count": 1
},
{
"date": "2024-04-07",
"count": 1
},
{
"date": "2024-04-11",
"count": 1
},
{
"date": "2024-04-13",
"count": 1
},
{
"date": "2024-04-16",
"count": 1
},
{
"date": "2024-04-19",
"count": 1
},
{
"date": "2024-04-21",
"count": 1
},
{
"date": "2024-04-22",
"count": 1
},
{
"date": "2024-04-24",
"count": 1
},
{
"date": "2024-04-25",
"count": 2
},
{
"date": "2024-04-30",
"count": 1
},
{
"date": "2024-05-03",
"count": 1
},
{
"date": "2024-05-07",
"count": 2
},
{
"date": "2024-05-08",
"count": 2
},
{
"date": "2024-05-11",
"count": 1
},
{
"date": "2024-05-12",
"count": 1
},
{
"date": "2024-05-16",
"count": 2
},
{
"date": "2024-05-20",
"count": 1
},
{
"date": "2024-05-22",
"count": 2
},
{
"date": "2024-05-23",
"count": 1
},
{
"date": "2024-05-26",
"count": 1
},
{
"date": "2024-05-29",
"count": 1
},
{
"date": "2024-05-30",
"count": 1
},
{
"date": "2024-05-31",
"count": 2
},
{
"date": "2024-06-02",
"count": 1
},
{
"date": "2024-06-03",
"count": 1
},
{
"date": "2024-06-04",
"count": 1
},
{
"date": "2024-06-05",
"count": 1
},
{
"date": "2024-06-07",
"count": 1
},
{
"date": "2024-06-09",
"count": 1
},
{
"date": "2024-06-10",
"count": 1
},
{
"date": "2024-06-12",
"count": 1
},
{
"date": "2024-06-16",
"count": 1
},
{
"date": "2024-06-17",
"count": 1
},
{
"date": "2024-06-18",
"count": 1
},
{
"date": "2024-06-20",
"count": 1
},
{
"date": "2024-06-25",
"count": 1
},
{
"date": "2024-06-26",
"count": 1
},
{
"date": "2024-06-27",
"count": 1
},
{
"date": "2024-06-29",
"count": 2
},
{
"date": "2024-07-01",
"count": 1
},
{
"date": "2024-07-02",
"count": 2
},
{
"date": "2024-07-03",
"count": 1
},
{
"date": "2024-07-04",
"count": 1
},
{
"date": "2024-07-06",
"count": 1
},
{
"date": "2024-07-10",
"count": 2
},
{
"date": "2024-07-11",
"count": 1
},
{
"date": "2024-07-14",
"count": 1
},
{
"date": "2024-07-21",
"count": 1
},
{
"date": "2024-07-22",
"count": 1
},
{
"date": "2024-07-28",
"count": 2
},
{
"date": "2024-08-07",
"count": 2
},
{
"date": "2024-08-09",
"count": 3
},
{
"date": "2024-08-11",
"count": 1
},
{
"date": "2024-08-12",
"count": 1
},
{
"date": "2024-08-14",
"count": 1
},
{
"date": "2024-08-20",
"count": 1
},
{
"date": "2024-08-21",
"count": 1
},
{
"date": "2024-08-28",
"count": 2
},
{
"date": "2024-08-29",
"count": 1
},
{
"date": "2024-09-06",
"count": 2
},
{
"date": "2024-09-08",
"count": 1
},
{
"date": "2024-09-09",
"count": 1
},
{
"date": "2024-09-13",
"count": 2
},
{
"date": "2024-09-14",
"count": 1
},
{
"date": "2024-09-20",
"count": 2
},
{
"date": "2024-09-22",
"count": 1
},
{
"date": "2024-09-23",
"count": 1
},
{
"date": "2024-09-27",
"count": 1
},
{
"date": "2024-09-28",
"count": 1
},
{
"date": "2024-10-03",
"count": 1
},
{
"date": "2024-10-10",
"count": 1
},
{
"date": "2024-10-12",
"count": 1
},
{
"date": "2024-10-18",
"count": 1
},
{
"date": "2024-10-23",
"count": 1
},
{
"date": "2024-10-28",
"count": 3
},
{
"date": "2024-11-02",
"count": 1
},
{
"date": "2024-11-04",
"count": 1
},
{
"date": "2024-11-05",
"count": 1
},
{
"date": "2024-11-06",
"count": 1
},
{
"date": "2024-11-07",
"count": 1
},
{
"date": "2024-11-09",
"count": 1
},
{
"date": "2024-11-10",
"count": 2
},
{
"date": "2024-11-12",
"count": 1
},
{
"date": "2024-11-13",
"count": 1
},
{
"date": "2024-11-14",
"count": 2
},
{
"date": "2024-11-18",
"count": 1
},
{
"date": "2024-11-21",
"count": 1
},
{
"date": "2024-11-22",
"count": 1
},
{
"date": "2024-11-23",
"count": 6
},
{
"date": "2024-11-24",
"count": 1
},
{
"date": "2024-11-25",
"count": 4
},
{
"date": "2024-11-26",
"count": 1
},
{
"date": "2024-11-27",
"count": 3
},
{
"date": "2024-11-28",
"count": 1
},
{
"date": "2024-11-30",
"count": 1
},
{
"date": "2024-12-01",
"count": 1
},
{
"date": "2024-12-02",
"count": 2
},
{
"date": "2024-12-04",
"count": 1
},
{
"date": "2024-12-07",
"count": 2
},
{
"date": "2024-12-08",
"count": 1
},
{
"date": "2024-12-10",
"count": 1
},
{
"date": "2024-12-11",
"count": 1
},
{
"date": "2024-12-15",
"count": 1
},
{
"date": "2024-12-20",
"count": 1
},
{
"date": "2024-12-24",
"count": 1
},
{
"date": "2024-12-31",
"count": 1
},
{
"date": "2025-01-05",
"count": 1
},
{
"date": "2025-01-06",
"count": 1
},
{
"date": "2025-01-07",
"count": 1
},
{
"date": "2025-01-08",
"count": 1
},
{
"date": "2025-01-09",
"count": 1
},
{
"date": "2025-01-14",
"count": 1
},
{
"date": "2025-01-15",
"count": 2
},
{
"date": "2025-01-17",
"count": 1
},
{
"date": "2025-01-18",
"count": 1
},
{
"date": "2025-01-19",
"count": 2
},
{
"date": "2025-01-21",
"count": 1
},
{
"date": "2025-01-23",
"count": 1
},
{
"date": "2025-01-24",
"count": 1
},
{
"date": "2025-01-29",
"count": 5
},
{
"date": "2025-01-30",
"count": 2
},
{
"date": "2025-02-04",
"count": 3
},
{
"date": "2025-02-13",
"count": 1
},
{
"date": "2025-02-14",
"count": 1
},
{
"date": "2025-02-15",
"count": 1
},
{
"date": "2025-02-17",
"count": 1
},
{
"date": "2025-02-25",
"count": 1
},
{
"date": "2025-02-26",
"count": 2
},
{
"date": "2025-02-27",
"count": 1
},
{
"date": "2025-03-02",
"count": 1
},
{
"date": "2025-03-04",
"count": 2
},
{
"date": "2025-03-05",
"count": 1
},
{
"date": "2025-03-07",
"count": 1
},
{
"date": "2025-03-09",
"count": 1
},
{
"date": "2025-03-12",
"count": 1
},
{
"date": "2025-03-14",
"count": 1
},
{
"date": "2025-03-18",
"count": 1
},
{
"date": "2025-03-20",
"count": 1
},
{
"date": "2025-03-22",
"count": 1
},
{
"date": "2025-03-23",
"count": 1
},
{
"date": "2025-03-26",
"count": 1
},
{
"date": "2025-03-27",
"count": 1
},
{
"date": "2025-04-08",
"count": 1
},
{
"date": "2025-04-12",
"count": 1
},
{
"date": "2025-04-15",
"count": 1
},
{
"date": "2025-04-20",
"count": 1
},
{
"date": "2025-04-21",
"count": 1
},
{
"date": "2025-04-23",
"count": 1
},
{
"date": "2025-04-24",
"count": 1
},
{
"date": "2025-04-26",
"count": 1
},
{
"date": "2025-04-28",
"count": 1
},
{
"date": "2025-04-30",
"count": 6
},
{
"date": "2025-05-02",
"count": 1
},
{
"date": "2025-05-11",
"count": 2
},
{
"date": "2025-05-13",
"count": 1
},
{
"date": "2025-05-14",
"count": 2
},
{
"date": "2025-05-18",
"count": 1
},
{
"date": "2025-05-22",
"count": 1
},
{
"date": "2025-05-23",
"count": 1
},
{
"date": "2025-05-24",
"count": 1
},
{
"date": "2025-05-25",
"count": 1
},
{
"date": "2025-05-26",
"count": 2
},
{
"date": "2025-05-29",
"count": 2
},
{
"date": "2025-05-31",
"count": 2
},
{
"date": "2025-06-02",
"count": 1
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-09",
"count": 2
},
{
"date": "2025-06-10",
"count": 1
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-13",
"count": 1
},
{
"date": "2025-06-17",
"count": 3
},
{
"date": "2025-06-18",
"count": 2
},
{
"date": "2025-06-19",
"count": 1
},
{
"date": "2025-06-21",
"count": 1
},
{
"date": "2025-06-22",
"count": 1
},
{
"date": "2025-06-24",
"count": 1
},
{
"date": "2025-06-27",
"count": 1
},
{
"date": "2025-06-30",
"count": 1
},
{
"date": "2025-07-05",
"count": 1
},
{
"date": "2025-07-07",
"count": 1
},
{
"date": "2025-07-08",
"count": 1
},
{
"date": "2025-07-10",
"count": 1
},
{
"date": "2025-07-14",
"count": 1
},
{
"date": "2025-07-16",
"count": 2
},
{
"date": "2025-07-21",
"count": 2
},
{
"date": "2025-07-23",
"count": 1
},
{
"date": "2025-07-24",
"count": 1
},
{
"date": "2025-07-25",
"count": 1
},
{
"date": "2025-08-01",
"count": 1
},
{
"date": "2025-08-11",
"count": 2
},
{
"date": "2025-08-15",
"count": 1
},
{
"date": "2025-08-18",
"count": 1
},
{
"date": "2025-08-19",
"count": 1
},
{
"date": "2025-08-26",
"count": 1
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-06",
"count": 1
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-09-11",
"count": 1
},
{
"date": "2025-09-13",
"count": 1
},
{
"date": "2025-09-15",
"count": 1
},
{
"date": "2025-09-18",
"count": 1
},
{
"date": "2025-09-21",
"count": 1
},
{
"date": "2025-09-22",
"count": 1
},
{
"date": "2025-09-23",
"count": 1
},
{
"date": "2025-09-24",
"count": 1
},
{
"date": "2025-09-26",
"count": 1
},
{
"date": "2025-09-28",
"count": 1
},
{
"date": "2025-09-30",
"count": 3
},
{
"date": "2025-10-09",
"count": 2
},
{
"date": "2025-10-10",
"count": 1
},
{
"date": "2025-10-12",
"count": 2
},
{
"date": "2025-10-23",
"count": 2
},
{
"date": "2025-10-27",
"count": 1
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-11-03",
"count": 1
},
{
"date": "2025-11-04",
"count": 1
},
{
"date": "2025-11-06",
"count": 1
},
{
"date": "2025-11-09",
"count": 1
},
{
"date": "2025-11-11",
"count": 1
},
{
"date": "2025-11-12",
"count": 1
},
{
"date": "2025-11-17",
"count": 3
},
{
"date": "2025-11-21",
"count": 3
},
{
"date": "2025-11-22",
"count": 1
},
{
"date": "2025-11-24",
"count": 1
},
{
"date": "2025-11-29",
"count": 1
},
{
"date": "2025-12-03",
"count": 3
},
{
"date": "2025-12-04",
"count": 2
},
{
"date": "2025-12-05",
"count": 1
},
{
"date": "2025-12-06",
"count": 1
},
{
"date": "2025-12-07",
"count": 1
},
{
"date": "2025-12-12",
"count": 1
},
{
"date": "2025-12-23",
"count": 1
},
{
"date": "2025-12-31",
"count": 1
},
{
"date": "2026-01-01",
"count": 1
},
{
"date": "2026-01-03",
"count": 1
},
{
"date": "2026-01-06",
"count": 1
},
{
"date": "2026-01-07",
"count": 1
},
{
"date": "2026-01-09",
"count": 1
},
{
"date": "2026-01-13",
"count": 1
},
{
"date": "2026-01-17",
"count": 1
},
{
"date": "2026-01-21",
"count": 1
},
{
"date": "2026-01-22",
"count": 1
},
{
"date": "2026-01-23",
"count": 2
},
{
"date": "2026-01-25",
"count": 2
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-01-29",
"count": 1
},
{
"date": "2026-02-03",
"count": 1
},
{
"date": "2026-02-04",
"count": 1
},
{
"date": "2026-02-05",
"count": 1
},
{
"date": "2026-02-07",
"count": 1
},
{
"date": "2026-02-09",
"count": 1
},
{
"date": "2026-02-15",
"count": 1
},
{
"date": "2026-02-16",
"count": 1
},
{
"date": "2026-02-17",
"count": 1
},
{
"date": "2026-02-18",
"count": 1
},
{
"date": "2026-02-20",
"count": 2
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-02-24",
"count": 1
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-02-26",
"count": 2
},
{
"date": "2026-02-27",
"count": 1
},
{
"date": "2026-02-28",
"count": 2
},
{
"date": "2026-03-09",
"count": 1
},
{
"date": "2026-03-10",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-03-12",
"count": 2
},
{
"date": "2026-03-18",
"count": 1
},
{
"date": "2026-03-20",
"count": 2
},
{
"date": "2026-03-27",
"count": 2
},
{
"date": "2026-04-01",
"count": 1
},
{
"date": "2026-04-05",
"count": 2
},
{
"date": "2026-04-06",
"count": 1
},
{
"date": "2026-04-07",
"count": 1
},
{
"date": "2026-04-13",
"count": 1
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-19",
"count": 1
},
{
"date": "2026-04-23",
"count": 1
},
{
"date": "2026-04-28",
"count": 1
},
{
"date": "2026-05-11",
"count": 2
},
{
"date": "2026-05-14",
"count": 1
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-22",
"count": 1
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-06-03",
"count": 1
},
{
"date": "2026-06-04",
"count": 1
},
{
"date": "2026-06-12",
"count": 1
},
{
"date": "2026-06-22",
"count": 2
},
{
"date": "2026-06-25",
"count": 2
},
{
"date": "2026-06-28",
"count": 1
},
{
"date": "2026-06-29",
"count": 1
},
{
"date": "2026-07-05",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-14",
"count": 1
},
{
"date": "2026-07-16",
"count": 1
},
{
"date": "2026-07-21",
"count": 1
},
{
"date": "2026-07-22",
"count": 1
}
],
"complete": false,
"collected": 1000,
"total_stars": 8794
},
"open_issues_and_prs": 22
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 339892,
"source_files_sampled": 1743,
"oversized_source_files": 30,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 5,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 37,
"direct_affected_count": 0
},
"ecosystems": [
"packagist"
],
"dependencies": [
{
"name": "cakephp/chronos",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^3.3"
},
{
"name": "laminas/laminas-diactoros",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^3.8"
},
{
"name": "laminas/laminas-httphandlerrunner",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^2.6"
},
{
"name": "league/container",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^5.1"
},
{
"name": "psr/container",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.1 || ^2.0"
},
{
"name": "psr/http-client",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.0.2"
},
{
"name": "psr/http-factory",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.1"
},
{
"name": "psr/http-message",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.1 || ^2.0"
},
{
"name": "psr/http-server-handler",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.0.2"
},
{
"name": "psr/http-server-middleware",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^1.0.2"
},
{
"name": "psr/link",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^2.0"
},
{
"name": "psr/log",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^3.0"
},
{
"name": "psr/simple-cache",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^2.0 || ^3.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "cakephp/chronos",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/chronos",
"direct": true,
"version": "3.0.4",
"ecosystem": "packagist"
},
{
"name": "laminas/laminas-diactoros",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "laminas/laminas-httphandlerrunner",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "league/container",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/container",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/http-client",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/http-factory",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/http-message",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/http-server-handler",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/http-server-middleware",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/link",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/log",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/simple-cache",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "psr/simple-cache",
"direct": true,
"version": "3.0.0",
"ecosystem": "packagist"
},
{
"name": "boundwize/structarmed",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/cache",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/cakephp-codesniffer",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/cakephp-codesniffer",
"direct": false,
"version": "5.1.1",
"ecosystem": "packagist"
},
{
"name": "cakephp/collection",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/console",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/core",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/database",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/datasource",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/event",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/i18n",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/log",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/orm",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/utility",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "cakephp/validation",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "composer/ca-bundle",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "ext-intl",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "ext-json",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "ext-mbstring",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "http-interop/http-factory-tests",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "mikey179/vfsstream",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "mockery/mockery",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "paragonie/csp-builder",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "phpunit/phpunit",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "squizlabs/php_codesniffer",
"direct": false,
"version": "3.8.1",
"ecosystem": "packagist"
},
{
"name": "theseer/tokenizer",
"direct": false,
"version": "1.2.2",
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 42,
"direct_count": 15,
"indirect_count": 27
}
},
"maintainership": {
"issues": {
"open_prs": 11,
"merged_prs": 10087,
"open_issues": 11,
"closed_ratio": 0.998,
"closed_issues": 6854,
"closed_unmerged_prs": 2242
},
"bus_factor": 2,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "markstory",
"commits": 17714,
"avatar_url": "https://avatars.githubusercontent.com/u/24086?v=4"
},
{
"type": "User",
"login": "ADmad",
"commits": 5929,
"avatar_url": "https://avatars.githubusercontent.com/u/142658?v=4"
},
{
"type": "User",
"login": "lorenzo",
"commits": 5699,
"avatar_url": "https://avatars.githubusercontent.com/u/37621?v=4"
},
{
"type": "User",
"login": "othercorey",
"commits": 1734,
"avatar_url": "https://avatars.githubusercontent.com/u/24221186?v=4"
},
{
"type": "User",
"login": "phpnut",
"commits": 1565,
"avatar_url": "https://avatars.githubusercontent.com/u/148097?v=4"
},
{
"type": "User",
"login": "nateabele",
"commits": 1055,
"avatar_url": "https://avatars.githubusercontent.com/u/18288?v=4"
},
{
"type": "User",
"login": "AD7six",
"commits": 759,
"avatar_url": "https://avatars.githubusercontent.com/u/33387?v=4"
},
{
"type": "User",
"login": "jrbasso",
"commits": 636,
"avatar_url": "https://avatars.githubusercontent.com/u/26548?v=4"
},
{
"type": "User",
"login": "ceeram",
"commits": 386,
"avatar_url": "https://avatars.githubusercontent.com/u/111448?v=4"
},
{
"type": "User",
"login": "LordSimal",
"commits": 341,
"avatar_url": "https://avatars.githubusercontent.com/u/9105243?v=4"
}
],
"contributors_sampled": 99,
"top_contributor_share": 0.431
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"api-docs.yml",
"ci.yml",
"split-packages.yml",
"stale.yml"
],
"has_docs_dir": false,
"linter_configs": [
"phpcs.xml",
"phpstan.neon"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"composer.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
"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": 5,
"reason": "Found 16/28 approved changesets -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 67 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": 10,
"reason": "30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 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": 0,
"reason": "Project has not signed or included provenance with any releases.",
"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": "7b7b4059fdc4e6684911569c5a639e096221ba3c",
"ran_at": "2026-07-22T01:28:20Z",
"aggregate_score": 5.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-22T00:19:31Z",
"oldest_open_prs": [
{
"number": 19313,
"created_at": "2026-03-05T13:52:13Z",
"last_comment_at": "2026-03-07T07:05:23Z",
"last_comment_author": "ADmad"
},
{
"number": 19381,
"created_at": "2026-04-05T09:01:38Z",
"last_comment_at": "2026-04-10T10:48:57Z",
"last_comment_author": "rochamarcelo"
},
{
"number": 19463,
"created_at": "2026-05-24T12:12:07Z",
"last_comment_at": "2026-05-31T21:06:17Z",
"last_comment_author": "othercorey"
},
{
"number": 19469,
"created_at": "2026-05-25T15:48:03Z",
"last_comment_at": "2026-05-26T05:29:09Z",
"last_comment_author": "josbeir"
},
{
"number": 19484,
"created_at": "2026-05-30T14:41:20Z",
"last_comment_at": "2026-07-21T11:57:38Z",
"last_comment_author": "rochamarcelo"
},
{
"number": 19546,
"created_at": "2026-07-19T08:13:36Z",
"last_comment_at": "2026-07-19T09:53:40Z",
"last_comment_author": "masakielastic"
},
{
"number": 19547,
"created_at": "2026-07-19T10:36:05Z",
"last_comment_at": "2026-07-19T14:48:01Z",
"last_comment_author": "markstory"
},
{
"number": 19548,
"created_at": "2026-07-20T06:32:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 19550,
"created_at": "2026-07-20T15:13:12Z",
"last_comment_at": "2026-07-20T16:21:10Z",
"last_comment_author": "samsonasik"
},
{
"number": 19553,
"created_at": "2026-07-20T17:46:49Z",
"last_comment_at": "2026-07-20T17:56:05Z",
"last_comment_author": "dereuromark"
},
{
"number": 19559,
"created_at": "2026-07-21T17:59:02Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-22T00:26:40Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 18083,
"created_at": "2024-12-13T06:37:21Z",
"last_comment_at": "2026-02-24T00:09:31Z",
"last_comment_author": "github-actions"
},
{
"number": 19165,
"created_at": "2026-01-01T18:09:51Z",
"last_comment_at": "2026-04-23T08:04:21Z",
"last_comment_author": "dereuromark"
},
{
"number": 19297,
"created_at": "2026-02-22T10:20:02Z",
"last_comment_at": "2026-05-15T14:35:51Z",
"last_comment_author": "josbeir"
},
{
"number": 19380,
"created_at": "2026-04-04T16:06:25Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 19474,
"created_at": "2026-05-28T08:55:25Z",
"last_comment_at": "2026-06-03T04:43:10Z",
"last_comment_author": "othercorey"
},
{
"number": 19482,
"created_at": "2026-05-30T13:52:07Z",
"last_comment_at": "2026-06-30T21:52:30Z",
"last_comment_author": "bancer"
},
{
"number": 19508,
"created_at": "2026-06-16T15:23:00Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 19509,
"created_at": "2026-06-18T11:02:50Z",
"last_comment_at": "2026-07-07T04:00:50Z",
"last_comment_author": "markstory"
},
{
"number": 19535,
"created_at": "2026-07-10T06:58:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 19557,
"created_at": "2026-07-21T13:17:20Z",
"last_comment_at": "2026-07-22T00:27:06Z",
"last_comment_author": "markstory"
},
{
"number": 19562,
"created_at": "2026-07-21T19:11:14Z",
"last_comment_at": "2026-07-21T19:58:01Z",
"last_comment_author": "dereuromark"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/cakephp/cakephp",
"host": "github.com",
"name": "cakephp",
"owner": "cakephp"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"security": 67,
"vitality": 96,
"community": 91,
"governance": 78,
"engineering": 84
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 96,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 806,
"human_commit_share": 0.96,
"days_since_last_push": 0,
"active_weeks_last_year": 52
},
"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": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "806 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 806
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 100,
"latest_release_tag": "5.4.0",
"releases_from_tags": false,
"days_since_latest_release": 2,
"mean_days_between_releases": 2.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.4 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "excellent",
"name": "Community & Adoption",
"value": 91,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "excellent",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"forks": 3378,
"stars": 8794,
"watchers": 515,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "8,794 stars",
"points": 60,
"status": "met",
"details": [
{
"code": "stars",
"params": {
"count": 8794
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "3,378 forks",
"points": 25,
"status": "met",
"details": [
{
"code": "forks",
"params": {
"count": 3378
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "515 watchers",
"points": 15,
"status": "met",
"details": [
{
"code": "watchers",
"params": {
"count": 515
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "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": 18,
"status": "met",
"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": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "excellent",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 95,
"inputs": {
"packages": [
"cakephp/cakephp"
],
"dependents": 1968,
"ecosystems": "packagist",
"total_downloads": 19814486,
"monthly_downloads": 403000
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "403,000 downloads/month across packagist",
"points": 74.7,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 403000,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "1,968 packages depend on it",
"points": 20,
"status": "met",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 1968
}
}
],
"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": 78,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 99,
"top_contributor_share": 0.431
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 43% of commits",
"points": 12.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 43
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "99 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 99
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 67 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"merged_prs": 10087,
"open_issues": 11,
"closed_issues": 6854,
"issue_closed_ratio": 0.998,
"closed_unmerged_prs": 2242
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "10087/12329 decided PRs merged",
"points": 31.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 10087,
"decided": 12329
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 16/28 approved changesets -- score normalized to 5",
"points": 7.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 73,
"inputs": {
"followers": 286,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "cakephp",
"public_repos": 83,
"account_age_days": 6525
},
"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": "286 followers of cakephp",
"points": 17.7,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 286,
"login": "cakephp"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "83 public repos, account ~17 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 83
}
},
{
"code": "account_age_years",
"params": {
"years": 17
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"cakephp/cakephp"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 2
},
"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 2 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 2
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "456 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 456
}
}
],
"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": "good",
"name": "Engineering Quality",
"value": 84,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "4 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 4
}
}
],
"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": "phpcs.xml, phpstan.neon",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "phpcs.xml, phpstan.neon"
}
}
],
"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": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"cakephp",
"php",
"mvc-framework",
"psr-7",
"orm",
"mvc",
"validation",
"rest-api",
"web",
"web-framework",
"rapid-development",
"form-builder",
"hacktoberfest"
],
"has_wiki": true,
"homepage": "http://cakephp.org",
"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": "http://cakephp.org",
"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": "13 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 13
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 67,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 5.9
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"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 16/28 approved changesets -- score normalized to 5",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 67 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": "30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "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": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 5 resolved dependencies against OSV; 37 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 5
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 37
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 5,
"unassessed_packages": 37,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 5,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 20
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 60,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 39,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.74,
"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": "71 of 96 human commits state their intent (structured subject or explanatory body)",
"points": 39.4,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 71,
"sampled": 96
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"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": 79,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"composer.lock"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.01,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.04
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "phpcs.xml, phpstan.neon",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "phpcs.xml, phpstan.neon"
}
}
],
"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": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "1 of the last 100 commits agent-authored or agent-credited",
"points": 2,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "4 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 4,
"sampled": 100
}
}
],
"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": 54,
"inputs": {
"primary_language": "PHP",
"largest_source_bytes": 339892,
"source_files_sampled": 1743,
"oversized_source_files": 30
},
"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": "30/1743 source files over 60KB",
"points": 54.1,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1743,
"oversized": 30
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-22T01:28:45.427447Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cakephp/cakephp.svg",
"full_name": "cakephp/cakephp",
"license_state": "standard",
"license_spdx": "MIT"
}