Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"flarum",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 4387,
"has_wiki": false,
"homepage": null,
"languages": {
"PHP": 206377,
"Less": 11875,
"Blade": 2239,
"JavaScript": 24652,
"TypeScript": 56217
},
"pushed_at": "2026-07-28T13:27:14Z",
"created_at": "2015-05-07T12:56:29Z",
"owner_type": "Organization",
"updated_at": "2026-07-28T13:29:49Z",
"description": "[READ ONLY] Subtree split of Flarum tags extension.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "2.x",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP",
"TypeScript"
]
},
"owner": {
"blog": "http://flarum.org",
"name": "Flarum",
"type": "Organization",
"login": "flarum",
"company": null,
"location": null,
"followers": 798,
"avatar_url": "https://avatars.githubusercontent.com/u/5549034?v=4",
"created_at": "2013-09-26T11:15:45Z",
"is_verified": null,
"public_repos": 53,
"account_age_days": 4688
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v2.0.0-rc.5",
"kind": "prerelease",
"published_at": "2026-07-08T15:55:01Z"
},
{
"tag": "v2.0.0-rc.4",
"kind": "prerelease",
"published_at": "2026-06-18T11:59:52Z"
},
{
"tag": "v2.0.0-rc.3",
"kind": "prerelease",
"published_at": "2026-06-09T18:54:03Z"
},
{
"tag": "v2.0.0-rc.2",
"kind": "prerelease",
"published_at": "2026-06-01T18:15:58Z"
},
{
"tag": "v2.0.0-rc.1",
"kind": "prerelease",
"published_at": "2026-04-20T10:25:37Z"
},
{
"tag": "v1.8.8",
"kind": "patch",
"published_at": "2026-04-18T21:01:26Z"
},
{
"tag": "v1.8.7",
"kind": "patch",
"published_at": "2026-04-10T19:01:53Z"
},
{
"tag": "v2.0.0-beta.7",
"kind": "prerelease",
"published_at": "2026-02-22T17:16:16Z"
},
{
"tag": "v2.0.0-beta.6",
"kind": "prerelease",
"published_at": "2026-01-30T09:26:56Z"
},
{
"tag": "v1.8.6",
"kind": "patch",
"published_at": "2026-01-07T19:15:20Z"
},
{
"tag": "v2.0.0-beta.5",
"kind": "prerelease",
"published_at": "2025-12-20T22:43:48Z"
},
{
"tag": "v2.0.0-beta.4",
"kind": "prerelease",
"published_at": "2025-11-25T18:05:58Z"
},
{
"tag": "v1.8.5",
"kind": "patch",
"published_at": "2025-10-09T09:17:39Z"
},
{
"tag": "v2.0.0-beta.3",
"kind": "prerelease",
"published_at": "2025-05-02T08:30:25Z"
},
{
"tag": "v1.8.4",
"kind": "patch",
"published_at": "2025-03-12T10:44:17Z"
},
{
"tag": "v2.0.0-beta.2",
"kind": "prerelease",
"published_at": "2025-01-17T09:16:42Z"
},
{
"tag": "v2.0.0-beta.1",
"kind": "prerelease",
"published_at": "2024-12-11T17:09:28Z"
},
{
"tag": "v1.8.3",
"kind": "patch",
"published_at": "2024-11-20T20:04:31Z"
},
{
"tag": "v1.8.2",
"kind": "patch",
"published_at": "2024-10-08T07:05:06Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2024-08-10T18:05:24Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2023-05-20T17:49:53Z"
},
{
"tag": "v1.7.1",
"kind": "patch",
"published_at": "2023-03-11T08:31:41Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2023-03-10T13:42:26Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2022-11-16T11:15:51Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2022-11-15T11:48:13Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2022-09-13T09:34:02Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2022-07-13T12:33:16Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2022-05-12T10:34:57Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2022-01-20T11:02:04Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2021-10-12T23:40:08Z"
},
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2021-06-10T22:28:20Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2021-06-07T10:13:26Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2021-06-02T06:57:20Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2021-05-27T08:28:44Z"
},
{
"tag": "v0.1.0-beta.16",
"kind": "prerelease",
"published_at": "2021-03-15T16:04:05Z"
},
{
"tag": "v0.1.0-beta.15",
"kind": "prerelease",
"published_at": "2020-12-20T20:14:22Z"
},
{
"tag": "v0.1.0-beta.14",
"kind": "prerelease",
"published_at": "2020-10-15T18:10:38Z"
},
{
"tag": "v0.1.0-beta.13.2",
"kind": "prerelease",
"published_at": "2020-10-06T19:44:04Z"
},
{
"tag": "v0.1.0-beta.13",
"kind": "prerelease",
"published_at": "2020-05-04T08:50:13Z"
},
{
"tag": "v0.1.0-beta.12",
"kind": "prerelease",
"published_at": "2020-03-03T14:00:09Z"
},
{
"tag": "v0.1.0-beta.11",
"kind": "prerelease",
"published_at": "2019-11-26T15:31:56Z"
},
{
"tag": "v0.1.0-beta.10",
"kind": "prerelease",
"published_at": "2019-09-16T07:38:06Z"
},
{
"tag": "v0.1.0-beta.9",
"kind": "prerelease",
"published_at": "2019-07-05T11:01:08Z"
},
{
"tag": "v0.1.0-beta.8.1",
"kind": "prerelease",
"published_at": "2018-11-29T07:04:10Z"
},
{
"tag": "v0.1.0-beta.8",
"kind": "prerelease",
"published_at": "2017-07-22T03:23:32Z"
},
{
"tag": "v0.1.0-beta.7",
"kind": "prerelease",
"published_at": "2016-11-10T21:46:52Z"
},
{
"tag": "v0.1.0-beta.6",
"kind": "prerelease",
"published_at": "2016-10-19T10:47:21Z"
},
{
"tag": "v0.1.0-beta.5",
"kind": "prerelease",
"published_at": "2016-03-29T08:23:17Z"
},
{
"tag": "v0.1.0-beta.4",
"kind": "prerelease",
"published_at": "2015-11-05T06:14:01Z"
},
{
"tag": "v0.1.0-beta.3",
"kind": "prerelease",
"published_at": "2015-11-02T23:36:39Z"
}
],
"recent_commits": [
{
"oid": "1dd4ac109c4d46255eaf6b9d9065b967a78db95a",
"body": "…ce (#4839)\n\n* Cache permissions per group set instead of per User instance\n\nA user's permissions are fully determined by the set of group IDs they belong\nto, but they were loaded and memoized per User instance. Any code that checks\nan ability against each serialized user — extension serializer flag\n[…]\nsolution queries themselves and assert exactly one per\nrequest regardless of slug count, which is the behaviour the test guards.\n\n* Account for the table prefix when matching the slug-resolution query",
"is_bot": false,
"headline": "[2.x] fix: Cache permissions per group set instead of per User instan…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-07-26T13:20:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5bf65f518743d1c2747188521a9588550ce48cb7",
"body": "* docs: add changelog for 2.0.0-rc.5\n\n* docs: add #4806 to rc.5 changelog\n\n* docs: add #4807 to rc.5 changelog\n\n* chore: bump version and dependency constraints to 2.0.0-rc.5",
"is_bot": false,
"headline": "[2.x] chore: prepare 2.0.0-rc.5 (#4805)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-07-08T15:08:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "613d1485b221c6a9a1fec2b0a7d49186c7dea312",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 6a6f41e5bd1d0aea001a61b333d7f9e2a3c03088",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-07-07T11:07:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f587ab7fe9e8602906d6222bc994e322e45c5454",
"body": "… (#4793)\n\nThe tag slug driver setting rendered its heading as the raw model class\nname (\"Slug Driver: Flarum\\Tags\\Tag\") because AdminPage.modelLocale()\nonly maps the core Discussion/User/Post models, and the tags extension\nonly extended driverLocale (the option labels), never the model label.\n\nExtend AdminPage.modelLocale so the tag model resolves to \"Tags\",\nconsistent with the core slug driver settings. This also corrects the\nsearch driver heading, which uses the same lookup.",
"is_bot": false,
"headline": "[2.x] fix(tags): show friendly model name for tag slug driver setting…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-07-07T11:03:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "455b9c5409ba9ca8e9e5ce86df1685a98c10acde",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit b4388c5fdb119ddaf770724a5cb17d9893c7c7aa",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-06-17T23:10:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af82507f51f63d23dbc63db0fef77f69f04221ba",
"body": "…tems list (#4755)\n\nTagLinkButton built its link contents (icon + label) inline in `view`,\ngiving extensions no clean seam to add to a tag link short of overriding\nthe whole component or mutating the returned vnode (fragile — the returned\nLink's children aren't reliably a mutable array at extend tim\n[…]\non', 'linkItems', ...)`.\n\nNo behaviour change: the icon and label render as before, and the children\npassed by addTagList (the tag name, read by SelectDropdown to label the\nactive item) are untouched.",
"is_bot": false,
"headline": "refactor(tags): convert TagLinkButton to TSX with an extensible linkI…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-17T23:06:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c40b1de2b9d0dace306d6ffbfb2ae7fdeb8064c8",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 900be16cf16e6f096cfe7ca1b6d39e28f7e8e5a8",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-06-17T19:50:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ead5f24d5787af0a02594b15ac3bc4bfc6d34cb9",
"body": "sortablejs (~120KB raw / ~14KB gzip) was statically imported by core's\nGroupBar (permissions page) and the tags extension's TagsPage, so it\nshipped in every admin pageload even though drag-reorder is only used on\ntwo pages. This pushed core admin.js to the edge of the 150KB bundlewatch\nbudget.\n\nMove\n[…]\n a stopgap).\n\nGroupBar now attaches sortable from whichever of the lazy import and\noncreate completes last, guarding on element.isConnected so a late-\nresolving import can't attach to a detached node.",
"is_bot": false,
"headline": "perf(admin): lazy-load sortablejs to shrink admin bundles (#4754)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-17T19:46:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d947fec51ab16956bb8c5d1cb3d7e7e081a47b7a",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 3597d6a7dace8a59ec35d5fb8e1d55eb24ae0a3a",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-06-16T21:42:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcf915c603058211c7c0e64257a295603a71aecd",
"body": null,
"is_bot": false,
"headline": "fix(tags): serialize unslugged tag slug to API (#4746)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2026-06-16T21:35:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "675df2719830faa6495591c05eefa2adec0698ff",
"body": null,
"is_bot": false,
"headline": "chore: prep 2.0.0-rc.4 (#4741)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-16T10:05:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e95ce445c41dcc509d3d10e2248fe152b3a8a55c",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 83b81a466238851deec5a73f23914115492f5fce",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-06-15T22:46:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "047cb2b484d9868cfe4baff3fdc58638dbe4ef92",
"body": "…er (#4739)\n\n* fix(tags): delegate tag slug resolution to the active slug driver\n\nThe tag filter resolved slugs by querying the literal `slug` column, so\ncustom slug drivers that don't use that column returned no results. Resolve\nslugs through the active driver instead, with an optional batch interf\n[…]\nan id_with_slug driver producing /t/1-general style URLs (resolved\nby the leading id, like the discussion slugger).\n\n* Apply fixes from StyleCI\n\n---------\n\nCo-authored-by: StyleCI Bot <bot@styleci.io>",
"is_bot": false,
"headline": "[2.x] fix(tags): delegate tag slug resolution to the active slug driv…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-15T22:42:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "86219a95acc97b9804c893e5f96ce76ac31f2d48",
"body": "… coverage (#4711)\n\n* [1.x] Add first-party Audit extension (#4704)\n\n* [1.x] Add first-party Audit extension\n\nAdds flarum/audit, a first-party audit log extension, to the monorepo.\n\nIt records moderation and administration actions (user, discussion, post,\nsetting, permission, extension lifecycle and\n[…]\nons_first_post_id_foreign during the approve flow (MySQL/SQLite tolerated it). Point it at the seeded post.\n\n* chore: add composer link to docs\n\n---------\n\nCo-authored-by: StyleCI Bot <bot@styleci.io>",
"is_bot": false,
"headline": "[2.x] Audit extension 2.x migration, integration split, and GDPR/core…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-12T01:16:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "60a8665af0c9816046d8321b917163161de2e03f",
"body": "…not a constructor) (#4699)\n\n* [2.x] Fix realtime extender load order for tags and sticky\n\nflarum/realtime registers its Realtime JS extender on the export registry\nat module-evaluation time, and consumers read it back via flarum.reg.get().\nThe combined forum.js concatenates extensions in resolveExt\n[…]\nn\noptional dependency; declare it on tags and sticky too (and normalise\nsticky's flarum-tags to flarum/tags).\n\nFixes https://discuss.flarum.org/d/39359\n\n* Add changelog entry for realtime ordering fix",
"is_bot": false,
"headline": "[2.x] Fix realtime extender load order for tags & sticky (TypeError: …",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-09T18:18:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca141b89427cd572d42ca4274d22f6d7c6c4c00d",
"body": "* chore: prep rc.3\n\n* chore: bump composer reqs",
"is_bot": false,
"headline": "chore: prep `2.0.0-rc.3` (#4698)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-06-09T12:39:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5c3dbd7b641a70ca76c6c2cc6bbefcbb4803885",
"body": null,
"is_bot": false,
"headline": "chore: prep rc2 (#4676)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-05-30T22:29:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37c760a21a2f276bf3bff5a8e73d3eae98dea06a",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 4c2e44fc00e8881f8090b07fdce3cb4d9e806355",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-05-13T10:05:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d03d28d38daab6c4a51055409436d5334eea40dc",
"body": "… route title via rename() (#4658)\n\n* [2.x] fix(api): surface event posts in discussion PATCH responses and route title via rename()\n\nFixes two related 2.x regressions where discussion changes silently\nfail to surface in the UI:\n\n1. Event posts created via `mergePost()` (sticky/tags/lock) were absen\n[…]\nort from `ext:flarum/realtime/forum/extenders/Realtime`, but\nneither extension's tsconfig.json mapped that module specifier to\nrealtime's dist-typings. Mirror the mapping that flarum-lock already\nhas.",
"is_bot": false,
"headline": "[2.x] fix(api): surface event posts in discussion PATCH responses and…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-05-13T10:01:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9eaa06e827bedc3a795adf54ede233c8d058079b",
"body": "…rom #4502) (#4649)\n\n* fix(tags): restore subquery for permitted tag IDs to fix per-instance cache miss\n\nPR #4502 replaced the SQL subquery in Tag::scopeWhereHasPermission with\na PHP-side filter cached on the actor User instance via WeakMap. The\nintent was to avoid re-running a correlated subquery p\n[…]\nission — must be visible (the orWhereNull('parent_id')\n branch).\n\nThese pin the contract of the parent/child clause in\nTag::scopeWhereHasPermission so any future refactor that breaks it\nfails loudly.",
"is_bot": false,
"headline": "[2.x] fix(tags): restore subquery for permitted tag IDs (regression f…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-05-11T08:14:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "26a2098295514f40b2045ba69bb9ac29bd9dfd5b",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 44b72ae22e23557bd1a744f071620540f764a850",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-05-09T06:05:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1eecb0ca649b38e00db08c66027313ae1500e430",
"body": "…4529)\n\n* tags: drop legacy background columns from tags table\n\n* tags: remove legacy background attributes",
"is_bot": false,
"headline": "[2.x] [Tags] Drop legacy unused background columns from tags table (#…",
"author_name": "abdalrhman",
"author_login": "Abdooo2235",
"committed_at": "2026-05-09T06:00:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19f331d3ee70a8b9dbac4c520035c84cb37cbac1",
"body": null,
"is_bot": false,
"headline": "chore: prep rc.1 (#4581)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-17T12:43:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "789040ecc5260dcfcb6bf227390daeda7b1829cd",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 5c5e3ef24be8c691642846723752e48eeef78973",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-04-15T11:19:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bf1ddfc0422fd4af63d96843d438443ed84c9a4",
"body": "…#4575)\n\nFont Awesome 7's Kit JS dynamically injects a stylesheet after the\ncompiled forum.css. The Kit's .fas { display: var(--fa-display, …) }\nat specificity (0,1,0) wins the cascade over any application\ndisplay: none rule at the same specificity — purely by source order.",
"is_bot": false,
"headline": "fix: prevent FA Kit from overriding display on hidden icon elements (…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-15T11:12:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1b2ce2959413c126ed7d74c2fbe0a705d5d6e1a",
"body": "…4563)\n\nPreviously, each slug in a tag filter triggered a separate SELECT against\nthe tags table (one per slug via SlugManager/Utf8SlugDriver). With N tags\nin an OR filter, that meant N round-trips before the discussion query ran.\n\nReplace the per-slug loop with a single whereIn query that resolves \n[…]\nt map, producing the same null-ID / no-match behaviour as\nbefore. urldecode() parity with Utf8SlugDriver is also maintained.\n\nSlugManager is no longer needed and has been removed from the constructor.",
"is_bot": false,
"headline": "perf(tags): resolve tag slugs in a single batch query in TagFilter (#…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-12T12:25:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d28e688fc43aed6c8796d947fb1fbc3a21f0c1ac",
"body": "…e (#4558)",
"is_bot": false,
"headline": "fix(tags): use forum description for meta description on tags homepag…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-11T19:53:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c33cae5f8cbd9fdf17c624fe2889462621fc74e",
"body": "…icted-tag policy interference (#4539)\n\n* test(tags): add failing test for bypassTagCounts with restricted tags\n\nNon-admin users granted bypassTagCounts cannot exceed the primary tag\nlimit when the discussion is in a restricted tag, due to the catch-all\nDiscussionPolicy::can() intercepting the meta-\n[…]\nused `DiscussionPolicy::can()`\nto check for a non-existent per-tag variant (`tag{id}.discussion.bypassTagCounts`)\non restricted tags, always denying non-admin users even when they held the permission.",
"is_bot": false,
"headline": "[2.x] fix(tags): use hasPermission for bypassTagCounts to avoid restr…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-09T22:40:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "06148aac8c26d1f938861d8d4317d75651c608b4",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit bd6eaecb05155051640514dad064d8425a73e5e3",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-04-03T11:55:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4353bb38557a68eb85dbd9e8f2406d2d7647863",
"body": "* feat: add reset settings button to extension admin pages\n\nAdds a \"Reset Settings\" button alongside the save button on extension\nadmin pages. Clicking it opens a confirmation modal listing the setting\nkeys to be deleted, then calls a new DELETE /api/settings endpoint which\nremoves the rows from the\n[…]\noltip overflow for long unbreakable strings\n- Integration tests for DeleteSettingsController\n\n* fix(mentions): resolve TagMention TypeScript errors in build-typings\n\n* chore: apply prettier formatting",
"is_bot": false,
"headline": "[2.x] feat: add reset settings button to extension admin pages (#4522)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-04-03T11:51:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "92b1226f6edcbd57eecfeea59eb878c9f502b297",
"body": "* perf: eliminate N+1 queries on discussion list (#4502)\n\nThe /api/discussions endpoint was firing ~144 queries for a page of 20\ndiscussions. This reduces it to ~33 queries regardless of how many\nunique users or liked posts appear in the response.\n\nFour sources of N+1 were fixed:\n\n**tags: replace co\n[…]\nerge calls with direct key assignment to preserve types.\n\n* style(likes): move flarum-tags conditional adjacent to related code and add comment\n\n---------\n\nCo-authored-by: StyleCI Bot <bot@styleci.io>",
"is_bot": false,
"headline": "[2.x] perf: eliminate N+1 queries on discussion list (#4508)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-31T22:28:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb63001082b4c4c4531e02d587a6adabe21c6587",
"body": "…ons page (#4492)\n\nPinStickiedDiscussionsToTop clones the raw query builder to create a\nUNION for the unread-sticky path. If HideHiddenTagsFromAllDiscussionsPage\nran after the clone, the whereNotIn exclusion was never applied to the\n$sticky subquery, letting hidden-tag discussions leak through via t\n[…]\nefore the clone happens.\n- Defensively apply the whereNotIn to any existing union queries in\n HideHiddenTagsFromAllDiscussionsPage, covering cases where ordering\n cannot be guaranteed.\n\nCloses #4487",
"is_bot": false,
"headline": "fix(sticky): sticky discussions in hidden tags appear on all-discussi…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-22T19:43:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "78aadd1f274e52a6e3b98a930c544c9066a029b3",
"body": "* prep for beta.8\n\n* chore: update changelog for beta.8 (#4480, #4481)",
"is_bot": false,
"headline": "[2.x] prep for beta.8 (#4478)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-21T22:45:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d84a7495f2dd995868f9d5a7a9e1cca5de775ece",
"body": "… 3-section sidebar (#4446)\n\n* revert(admin): remove collapsible extension categories, restore 3-section sidebar\n\nThe collapsible category groups introduced in #4392 added too much\nfriction — everything collapsed by default, count badges read like\nnotification counts, and single-item categories (Inf\n[…]\nrestoring\n\"feature\" keeps the data consistent with the rendering logic.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "[2.x] revert(admin): remove collapsible extension categories, restore…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-14T22:59:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c65f8d249b941fedfd11f5fafe2421ac15d4b161",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit ea4dd67e139a23450c6b827f594536be0197203a",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-03-08T14:40:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88ae99be6deb9aea416f3258939a1882c9d02574",
"body": "…h improvements (#4393)\n\n* Dynamic loading tags list\n\n* Add loading height for tagged discussion posts\n\n* Add import for TagPost in forum.less\n\n* This looks better\n\n* Error handling\n\n* Apply yarn format to DiscussionTaggedPost.js\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: IanM <ian@morland.me>\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "[2.x] Fixed tags mutation shows [deleted] in some cases, together wit…",
"author_name": "EdgeInfinity",
"author_login": "edgeinfinity1",
"committed_at": "2026-03-08T14:37:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e11bd9f3d7e9ff6ece6b15607d532a5d934d90c7",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 2fb580229c58b3b27de7c9dd5c26711a688f8491",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-03-07T23:12:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffdd90cc005236c788b35ed944eb00ebf6793efc",
"body": "* feat: wip reusable hero component\n\n* refactor: adjust implementation of `DiscussionHero`\n\n* refactor: adjust implementation of `WelcomeHero`\n\n* refactor(tags): use new reusable hero\n\n* refactor(messages): use new reusable hero\n\n* chore: make style method public\n\n* chore: reorder, comments\n\n* chore: remove unused import, extend ComponentAttrs\n\n* refactor: simplify style definition expression\n\n* refactor: change return type of `Hero` `view`\n\n* docs: documentation candy",
"is_bot": false,
"headline": "[2.x] feat: create reusable `Hero` component (#4215)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2026-03-07T23:09:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b674f453c255866e52a1351723b1325f938d87d",
"body": "…abandoned package support (#4392)\n\n* feat(admin): collapsible extension categories, health widget, abandoned package support\n\n- AdminNav: replace static category headers with collapsible groups; each group\n shows a count badge, category icon, and expand/collapse chevron. Categories\n default to co\n[…]\ning directly to an\nextension URL (e.g. /admin#/extension/flarum-flags).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "[2.x] feat(admin): collapsible extension categories, health widget & …",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-02T06:56:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "76a8e87a29f0f9f543e3c02b6b895bc08af0b4c2",
"body": "* fix(tags): authors can rename/hide own discussions in restricted tags\n\nFixes #3692. When a discussion is in a restricted tag, `can()` in tags'\nDiscussionPolicy would deny ALL abilities (including rename and hide) for\nusers who lack the explicit tag-specific permission — even when core\nDiscussionPo\n[…]\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* Apply fixes from StyleCI\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>\nCo-authored-by: StyleCI Bot <bot@styleci.io>",
"is_bot": false,
"headline": "[2.x][tags] fix: tag restricted discussion own abilities (#4379)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-02-21T14:54:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f14d37b6b8d353369ec1c49b3095d62bdd1c66ec",
"body": null,
"is_bot": false,
"headline": "chore: prep for beta.7 (#4377)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-02-21T13:40:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7554afb88bf03d49a089af2d7af2196bc9f67d5f",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 6402e639bb64b06ecdc92ea69e6dacb3655504f7",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-02-15T21:46:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e440bc5e0a539152b10f85ab2d0e61b94466547",
"body": "Bumps [webpack](https://github.com/webpack/webpack) from 5.95.0 to 5.104.1.\n- [Release notes](https://github.com/webpack/webpack/releases)\n- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/webpack/webpack/compare/v5.95.0...v5.104.1)\n\n---\nupdated-\n[…]\ndency-version: 5.104.1\n dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps): bump webpack from 5.95.0 to 5.104.1 (#4354)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-02-15T21:42:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "90ad5b075776da1d57e04b291f1a3ec0a6584add",
"body": null,
"is_bot": false,
"headline": "chore: prep for beta.6 (#4343)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-01-24T08:00:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a3181ec0154cdc168839d85614550a7b2711de9",
"body": "* bump laravel - let's see what the tests do...\n\n* chore: upgrade phpstan to 2.x, larastan to 3.x\n\n* Apply fixes from StyleCI\n\n* fix: phpstan 8.4 property hooks compat\n\n* chore: phpstan fixes after rebase\n\n* fix: test expectation\n\n* fix: flag query pgsql\n\n* fix: pgsql flag query\n\n---------\n\nCo-authored-by: StyleCI Bot <bot@styleci.io>",
"is_bot": false,
"headline": "[2.x] feat: upgrade to Laravel 12 (#4268)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-01-14T08:05:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c05a146e5779c2f878cde1b6ed19304e55d72e0c",
"body": null,
"is_bot": false,
"headline": "chore: prep for beta.5 (#4313)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-12-20T10:31:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d6411edc870ba9c323fe00660a107f94319bd3c",
"body": "* fix: tags page edit, preload fa kit\n\n* chore: update tests",
"is_bot": false,
"headline": "[2.x] fix: tags page edit icon position, preload fa kit (#4305)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-12-03T10:23:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36f3a17edebbefba49a4ff40902a5eb03f0076f4",
"body": null,
"is_bot": false,
"headline": "chore: prep beta.4 (#4291)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-11-25T08:50:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82aea0f7c89793c2a5cee9599b7a6f939bf03996",
"body": "* test(tags): implement forum attribute tests\n\n* fix(tags): defer policy if min primary & secondary tags 0\n\n* style(tags): change formatting\n\n* Update extensions/tags/composer.json\n\n---------\n\nCo-authored-by: IanM <16573496+imorland@users.noreply.github.com>",
"is_bot": false,
"headline": "[2.x] fix(tags): defer policy if min primary & secondary tags 0 (#4279)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2025-11-24T21:39:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41ae86e5c50b5b89b0cff4b54604814f1eb7b69c",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 10e769988d6e553ee0e2a1cdb1bd4645f42763b9",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-11-02T11:44:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8facc557a0fe47f23114137b7134ae5a09b74d6",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 43f7a68f2b88f8e5f0a82bab581296f84cd2f8ef",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-10-27T05:25:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22189233746555bd5b0b10994353b756e852e54b",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 005706bdb4f7fd02ca100131ccc27d4053d099ee",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-10-18T21:13:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7818af3571234c022a3fdc856e6967eb96155c56",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 83318e51cfeed66f92b938c7aca481ac0fb14126",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-10-17T17:14:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbb356b5a327f77eb29a29685584ed4fa307a797",
"body": null,
"is_bot": false,
"headline": "chore: prepare 2.0.0-beta.3",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2025-04-25T09:19:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50392118cb7d438b07802f7c19657cc2abc4b630",
"body": null,
"is_bot": false,
"headline": "Sanitize page in `Tag` (#4170)",
"author_name": "Robert Korulczyk",
"author_login": "rob006",
"committed_at": "2025-04-18T08:45:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d2582c03b0bd3679f247d349172221b4ed07bb8",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 0ca99dcba5f116e499072b3fcb9c8564a80b5a5c",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-02-22T09:53:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b349d5352772bf3deace05010e7b285c96345be8",
"body": null,
"is_bot": false,
"headline": "feat(tags): improve extensibility of `TagHero` (#4198)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2025-02-22T09:49:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9558f4d3e2b4d30d08c6367c791b73873f30b7b8",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit f13dc058667540ce14f58eb25eef151ba14f524b",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-02-11T19:28:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6992b23af7692ab6fff3350efc0c5c58c1f1d8a",
"body": null,
"is_bot": false,
"headline": "fix: resolve `a11y` warnings in Admin Frontend (#4184)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2025-02-11T19:24:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39da88d08379ee6bfcf3c713aa74c2f6f65cbe28",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 89ff98444640b13ffbd79faf91f1363dafbc5d6b",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-01-31T12:00:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d341f8b798f85a228800ecd391f5f4862c4d60c",
"body": "* fix: messages inconsistencies\r\n\r\n* fix\r\n\r\n* chore: message at the page\r\n\r\n* fix: permission grid styling broken\r\n\r\n* fix",
"is_bot": false,
"headline": "fix: messages inconsistencies (#4174)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2025-01-31T11:57:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b28a2a5035825f24879a45562f73857d21376c38",
"body": null,
"is_bot": false,
"headline": "chore: v2.0.0-beta.2",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2025-01-17T08:44:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e8ce26532ff5a9e2e9e71d89d94172e387de08d",
"body": null,
"is_bot": false,
"headline": "chore: extensibility improvements",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2025-01-12T12:02:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11ca980e0c4bdbbbcc9cf4e6d18ceacbffc69820",
"body": null,
"is_bot": false,
"headline": "fix: tag selection icon alignment (#4153)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2025-01-03T16:06:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e70add2bbd083145a6604ed15b4a8bfd117fac79",
"body": null,
"is_bot": false,
"headline": "chore: prepare `2.0.0-beta.1`",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-12-07T08:50:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3106cb684e7533d9414742b330cc689604c534ef",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 33a72f5c14c00671eedcee5d64a0edf5d6db3441",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-11-29T09:57:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a672d18823da4e031f051c533e3de7d0e53041c",
"body": null,
"is_bot": false,
"headline": "fix(tags): wrong tag input width with CJK chars (#4127)",
"author_name": "雨",
"author_login": "YUCLing",
"committed_at": "2024-11-29T09:55:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c1fb0ff041c9bdbd476b205e4ada4d5b4e2d36e",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit dd45d75cd8b9c1789b093562eb312db1ad333c9c",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-11-09T10:10:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f200394b45b0ebaed4a71135cc7bd9a2d908681c",
"body": "* test: php 8.4\r\n\r\n* fix: php 8.4 deprecations\r\n\r\n* fix: make argument required\r\n\r\n* chore: review changes",
"is_bot": false,
"headline": "test: php 8.4 (#4103)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-11-08T16:33:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b33d99b3d9956c6733e2c3684c87aa68c43492e9",
"body": null,
"is_bot": false,
"headline": "chore: update tsconfig version",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-25T08:39:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d8b5d755ca6d5707b62586b819019d6cc1b5ab9",
"body": null,
"is_bot": false,
"headline": "test: prevent false negatives",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-24T19:09:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0852db27433de959af99e44d9a669ccef909e2a7",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 3b66925a666ad1f5e3e0ba2c1513bd501d6470e2",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-10-24T17:49:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "701ed324f147e2172fdfd0931500f84211f03c8a",
"body": null,
"is_bot": false,
"headline": "test: prevent false negatives",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-21T18:16:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1e585b56c946bb8c238dfd4d34c6130cd653662",
"body": null,
"is_bot": false,
"headline": "test: prevent false negatives",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-21T15:09:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7552ef852beda2cfe1789a3663e8b4077bcaf282",
"body": null,
"is_bot": false,
"headline": "chore: fix typos (#4021)",
"author_name": "Viktor Szépe",
"author_login": "szepeviktor",
"committed_at": "2024-10-21T15:00:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34dd9826d0b4a89d0be6e69d4c8a354728f6f677",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit b9b52d85a77dffb1423211ad4a9ce8a6a662e749",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-10-21T10:52:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf694c1af49609e163a19e34381d860056bbd3e7",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit a3333320d71863b2596e0886a6eb6a81a9db61ad",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-10-19T19:34:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "764aece4cc4f57d053c907bea22d3ad6ee708b9a",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 6f823731caa95439526ab7d8ec7dba13cd98e91b",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-10-19T18:12:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70fd7c813289b49bf6940f4695c2eaf24c689598",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit a47bd2d45730f004e739d91c290f22330ab93dc4",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-10-19T17:44:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a5544525b6b7b71c3b41d8ba192c9d6ab899630",
"body": null,
"is_bot": false,
"headline": "feat: extension list UI (#4066)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-16T17:12:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d52bd4dd34073beaadad9a423918b10f43e19ae",
"body": "…067)",
"is_bot": false,
"headline": "refactor: remove listing of posts in the show discussion endpoint (#4…",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-10-16T17:02:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65d96a9bf614cf737c62ed9f84292ff096705e52",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 1a12209fdcde19e3cdbbb3ec483ca29793057991",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-29T08:17:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc403b2e24c521e65827d54501883d6f0810ea97",
"body": null,
"is_bot": false,
"headline": "chore: update FontAwesome v6 icon search link (#4036)",
"author_name": "Ngô Quốc Đạt",
"author_login": null,
"committed_at": "2024-09-29T08:14:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd7535fb09d09e2f12c7f9aa80b2c9c7ce456257",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 257be2b9db6f5365faa017bd9cc4a0e870efb449",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T14:51:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa8176a809657416ce8ed2ad831c7a82dd5c653f",
"body": null,
"is_bot": false,
"headline": "test: add frontend tests (#3991)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-09-28T14:47:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07bbd64e7d5a7644dfa9ce3649e39757d0fae491",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit feca3d0da6c7e6780a42c6e34b474c7a4268a704",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T13:00:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e778a232358c11cae3e3390d8d3aac3e6fc964e4",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 5ff66fd033ad64efa7ae16575ec868eed6cabadf",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T12:41:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2cd6b06207d7f2861a6413c5fc9021822dfc12de",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit e5389acd6e85dc392676609d9a895f3a6e368e26",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T10:42:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86da69ff60c26b4f02bfb6a1a7981702e77844a5",
"body": null,
"is_bot": false,
"headline": "fix: js errors",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-09-28T10:38:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f68e2c2ee37d6a21b03e5633cb434fd3018011f4",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit b74ecbfacf684eb0dc70e708c4763d36ebd93405",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T10:16:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddd58bd983c036328ac8ddd107723a0b2ea8cd76",
"body": "* feat: private messages",
"is_bot": false,
"headline": "feat: messages extension (#4028)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-09-28T10:12:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e96b729aa711c0d6448198227459d2ed2084de57",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 5cea3d3b9bc4c5c6ae751bc4920a37bf032931af",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-28T08:38:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45215db165626cbf00e6346058e9268668f0772a",
"body": null,
"is_bot": false,
"headline": "feat: admin search UI (#4022)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-09-28T08:35:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48b0ebc7a4cabaaa644f8da4adcaf094297d6be2",
"body": null,
"is_bot": false,
"headline": "fix: tag state loaded for wrong user (#4009)",
"author_name": "Rafał Całka",
"author_login": "rafaucau",
"committed_at": "2024-09-20T07:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "202fb36efa8f6d404ee398eca0bdac9520597a24",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 2204157ac04daaa09fe9a15bcac48d9e21c32d9c",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-19T21:38:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbd1f4a9a92d7774e50eb5977b074d172b21aaff",
"body": null,
"is_bot": false,
"headline": "fix(a11y): convert empty links to buttons (#3926)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-09-19T21:35:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce5d8614a83ad7a90abf671e53cbb039beca88a3",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit b9037df05c456cec78fa4509dd06c45dc75befc4",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-09-11T10:33:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c20a640b14b0ccbc0e4c31b14aab441194a58353",
"body": "* chore: phpunit 10\r\n\r\n* chore: config\r\n\r\n* Apply fixes from StyleCI\r\n\r\n* chore: phpunit 11 (php 8.2 minimum requirement)\r\n\r\n* feat: laravel 11\r\n\r\n* Apply fixes from StyleCI\r\n\r\n* feat: carbon v3\r\n\r\n* fixes",
"is_bot": false,
"headline": "chore: update dependencies (#4012)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-08-06T15:50:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2400544827e020e5f199c6b44de731b77269357f",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 770f9370af178e08da4e8ca2ebb9407f184e7de2",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2024-08-02T11:52:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0f4e08773acfce59c8132ba24e140d7daabe8e1",
"body": null,
"is_bot": false,
"headline": "fix: 2.0 bugs (#4011)",
"author_name": "Sami Mazouz",
"author_login": "SychO9",
"committed_at": "2024-08-02T11:49:34Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 50,
"commits_last_year": 53,
"latest_release_at": "2026-07-08T15:55:01Z",
"latest_release_tag": "v2.0.0-rc.5",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 25,
"days_since_latest_release": 19,
"mean_days_between_releases": 20.2
},
"community": {
"has_readme": false,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "flarum/tags",
"exists": true,
"license": "MIT",
"keywords": [
"discussion"
],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/flarum/tags",
"is_deprecated": false,
"latest_version": "v2.0.0-rc.5",
"repository_url": "https://github.com/flarum/tags",
"versions_count": 53,
"total_downloads": 789950,
"dependents_count": 121,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 22617,
"first_published_at": null,
"latest_published_at": "2026-07-08T15:08:06Z",
"latest_version_yanked": null,
"days_since_latest_publish": 20
}
]
},
"popularity": {
"forks": 80,
"stars": 38,
"watchers": 10,
"fork_history": {
"days": [
{
"date": "2015-09-03",
"count": 1
},
{
"date": "2015-09-23",
"count": 1
},
{
"date": "2015-11-08",
"count": 1
},
{
"date": "2016-01-25",
"count": 1
},
{
"date": "2016-02-10",
"count": 1
},
{
"date": "2016-08-26",
"count": 1
},
{
"date": "2016-10-01",
"count": 1
},
{
"date": "2016-12-13",
"count": 1
},
{
"date": "2017-02-12",
"count": 1
},
{
"date": "2017-02-20",
"count": 1
},
{
"date": "2017-04-06",
"count": 1
},
{
"date": "2017-06-28",
"count": 1
},
{
"date": "2017-11-06",
"count": 1
},
{
"date": "2018-02-01",
"count": 1
},
{
"date": "2018-03-13",
"count": 1
},
{
"date": "2018-05-07",
"count": 1
},
{
"date": "2018-05-20",
"count": 1
},
{
"date": "2018-05-24",
"count": 1
},
{
"date": "2018-07-15",
"count": 1
},
{
"date": "2018-09-20",
"count": 1
},
{
"date": "2018-11-21",
"count": 1
},
{
"date": "2018-11-27",
"count": 1
},
{
"date": "2018-12-08",
"count": 1
},
{
"date": "2018-12-11",
"count": 1
},
{
"date": "2019-01-21",
"count": 1
},
{
"date": "2019-05-09",
"count": 1
},
{
"date": "2019-05-25",
"count": 1
},
{
"date": "2019-06-14",
"count": 1
},
{
"date": "2019-07-16",
"count": 1
},
{
"date": "2019-08-19",
"count": 1
},
{
"date": "2019-09-03",
"count": 1
},
{
"date": "2019-12-03",
"count": 1
},
{
"date": "2019-12-05",
"count": 1
},
{
"date": "2019-12-09",
"count": 1
},
{
"date": "2020-01-04",
"count": 1
},
{
"date": "2020-01-31",
"count": 1
},
{
"date": "2020-02-13",
"count": 1
},
{
"date": "2020-02-19",
"count": 1
},
{
"date": "2020-03-02",
"count": 1
},
{
"date": "2020-03-11",
"count": 1
},
{
"date": "2020-04-11",
"count": 1
},
{
"date": "2020-04-17",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-04-19",
"count": 1
},
{
"date": "2020-04-22",
"count": 1
},
{
"date": "2020-05-12",
"count": 1
},
{
"date": "2020-05-21",
"count": 1
},
{
"date": "2020-05-22",
"count": 1
},
{
"date": "2020-06-27",
"count": 1
},
{
"date": "2020-07-26",
"count": 1
},
{
"date": "2020-08-06",
"count": 1
},
{
"date": "2020-08-08",
"count": 1
},
{
"date": "2020-09-20",
"count": 1
},
{
"date": "2020-09-22",
"count": 1
},
{
"date": "2020-10-08",
"count": 1
},
{
"date": "2020-10-13",
"count": 1
},
{
"date": "2020-10-27",
"count": 1
},
{
"date": "2020-11-12",
"count": 1
},
{
"date": "2020-11-28",
"count": 1
},
{
"date": "2021-01-24",
"count": 1
},
{
"date": "2021-02-02",
"count": 1
},
{
"date": "2021-02-24",
"count": 1
},
{
"date": "2021-03-30",
"count": 1
},
{
"date": "2021-04-27",
"count": 1
},
{
"date": "2021-05-05",
"count": 1
},
{
"date": "2021-08-02",
"count": 1
},
{
"date": "2021-08-24",
"count": 1
},
{
"date": "2021-09-22",
"count": 1
},
{
"date": "2021-12-03",
"count": 1
},
{
"date": "2021-12-15",
"count": 1
},
{
"date": "2022-01-28",
"count": 1
},
{
"date": "2022-01-31",
"count": 1
},
{
"date": "2022-09-27",
"count": 1
},
{
"date": "2024-02-29",
"count": 1
},
{
"date": "2024-03-17",
"count": 1
},
{
"date": "2024-05-06",
"count": 1
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-10-24",
"count": 1
},
{
"date": "2026-04-20",
"count": 1
}
],
"complete": true,
"collected": 79,
"total_forks": 80
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"js/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 17325,
"source_files_sampled": 151,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json",
"js/package.json"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 12,
"direct_affected_count": 0
},
"ecosystems": [
"npm",
"packagist"
],
"dependencies": [
{
"name": "flarum/core",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^2.0.0-rc.5"
},
{
"name": "sortablejs",
"manifest": "js/package.json",
"ecosystem": "npm",
"version_constraint": "^1.14.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "sortablejs",
"direct": true,
"version": "^1.14.0",
"ecosystem": "npm"
},
{
"name": "flarum/core",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "flarum-tsconfig",
"direct": false,
"version": "^2.0.0",
"ecosystem": "npm"
},
{
"name": "flarum-webpack-config",
"direct": false,
"version": "^3.0.0",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "^2.7.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "^4.5.4",
"ecosystem": "npm"
},
{
"name": "typescript-coverage-report",
"direct": false,
"version": "^0.6.1",
"ecosystem": "npm"
},
{
"name": "webpack",
"direct": false,
"version": "^5.104.1",
"ecosystem": "npm"
},
{
"name": "webpack-cli",
"direct": false,
"version": "^4.9.1",
"ecosystem": "npm"
},
{
"name": "flarum/audit",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "flarum/suspend",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "flarum/testing",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 12,
"direct_count": 2,
"indirect_count": 10
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 110,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 36
},
"bus_factor": 2,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "tobyzerner",
"commits": 258,
"avatar_url": "https://avatars.githubusercontent.com/u/128862?v=4"
},
{
"type": "User",
"login": "flarum-bot",
"commits": 145,
"avatar_url": "https://avatars.githubusercontent.com/u/39334649?v=4"
},
{
"type": "User",
"login": "SychO9",
"commits": 98,
"avatar_url": "https://avatars.githubusercontent.com/u/20267363?v=4"
},
{
"type": "User",
"login": "askvortsov1",
"commits": 56,
"avatar_url": "https://avatars.githubusercontent.com/u/38059171?v=4"
},
{
"type": "User",
"login": "franzliedke",
"commits": 53,
"avatar_url": "https://avatars.githubusercontent.com/u/249125?v=4"
},
{
"type": "User",
"login": "luceos",
"commits": 45,
"avatar_url": "https://avatars.githubusercontent.com/u/504687?v=4"
},
{
"type": "User",
"login": "imorland",
"commits": 39,
"avatar_url": "https://avatars.githubusercontent.com/u/16573496?v=4"
},
{
"type": "User",
"login": "davwheat",
"commits": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/7406822?v=4"
},
{
"type": "User",
"login": "dsevillamartin",
"commits": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/6401250?v=4"
},
{
"type": "User",
"login": "clarkwinkelmann",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/5264300?v=4"
}
],
"contributors_sampled": 44,
"top_contributor_share": 0.33
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 38 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": "22 commit(s) and 0 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": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 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": "1dd4ac109c4d46255eaf6b9d9065b967a78db95a",
"ran_at": "2026-07-28T15:16:27Z",
"aggregate_score": 5.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-28T13:27:15Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2022-03-10T20:06:50Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/flarum/tags",
"host": "github.com",
"name": "tags",
"owner": "flarum"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"security": 59,
"vitality": 87,
"community": 55,
"governance": 72,
"engineering": 26
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 87,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 79,
"inputs": {
"commits_last_year": 53,
"human_commit_share": 0.99,
"days_since_last_push": 0,
"active_weeks_last_year": 25
},
"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": "25/52 weeks with commits",
"points": 17.3,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 25
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "53 commits in the last year",
"points": 15.6,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 53
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "22 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 50,
"latest_release_tag": "v2.0.0-rc.5",
"releases_from_tags": false,
"days_since_latest_release": 19,
"mean_days_between_releases": 20.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "50 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 50
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 19 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 19
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~20.2 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 20.2
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 2,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 2 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 2
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 55,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"forks": 80,
"stars": 38,
"watchers": 10,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "38 stars",
"points": 25.4,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 38
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "80 forks",
"points": 15.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 80
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "10 watchers",
"points": 5.3,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 10
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"has_readme": false,
"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": 0,
"status": "missed",
"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": "good",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"packages": [
"flarum/tags"
],
"dependents": 121,
"ecosystems": "packagist",
"total_downloads": 789950,
"monthly_downloads": 22617
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "22,617 downloads/month across packagist",
"points": 58.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 22617,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "121 packages depend on it",
"points": 13.9,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 121
}
}
],
"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": 72,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 44,
"top_contributor_share": 0.33
},
"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 33% of commits",
"points": 15.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 33
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "44 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 44
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 38 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 54,
"inputs": {
"merged_prs": 110,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 36
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "110/146 decided PRs merged",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 110,
"decided": 146
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"followers": 798,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "flarum",
"public_repos": 53,
"account_age_days": 4688
},
"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": "798 followers of flarum",
"points": 20.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 798,
"login": "flarum"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "53 public repos, account ~12 yr old",
"points": 24.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 53
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"flarum/tags"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 20
},
"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 20 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 20
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "53 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 53
}
}
],
"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": "critical",
"name": "Engineering Quality",
"value": 26,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "critical",
"name": "Documentation",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"topics": [
"flarum",
"hacktoberfest"
],
"has_wiki": false,
"homepage": null,
"has_readme": false,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "2 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 2
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 59,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"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": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 38 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": "22 commit(s) and 0 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": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 25
},
"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": 54,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"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": "99 of 99 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 99,
"sampled": 99
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"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": 54,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"js/tsconfig.json"
],
"agent_commit_share": 0.04,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.01
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "js/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "js/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "4 of the last 100 commits agent-authored or agent-credited",
"points": 8,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 4,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "1 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 1,
"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": "good",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"primary_language": "PHP",
"largest_source_bytes": 17325,
"source_files_sampled": 151,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "PHP with type-check config (js/tsconfig.json)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "js/tsconfig.json",
"language": "PHP"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/151 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 151,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-07-28T15:16:44.809379Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/flarum/tags.svg",
"full_name": "flarum/tags",
"license_state": "standard",
"license_spdx": "MIT"
}