Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-28 02:24 UTC

humhub / calendar

Create one-time or recurring events, invite and manage attendees, and keep track of all your events with the Calendar module.

PHPNo license detected★ 31 stars⑂ 48 forkssince Aug 2014View on GitHub ↗

humhub/calendar holds a health index of 68 out of 100, placing it in the Moderate band. It scores highest on Vitality (96/100) and lowest on AI Readiness (35/100). It was last updated 3 days ago. 3 contributors account for most of its recent work.

68
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

68
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

HumHubOrganization
157 followers47 public repossince Dec 2013

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

96Excellent · 22% of overall
How it's scored
36/36Push recency — last push 3 days ago
29.8/36Commit cadence — 43/52 weeks with commits
18/18Commit volume — 366 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year366
human_commit_share0.91
days_since_last_push3
active_weeks_last_year43

Release discipline

100Excellent
How it's scored
27/27Ships releases — 88 releases published
36/36Release recency — latest release 10 days ago
27/27Release cadence — a release every ~21.1 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count88
latest_release_tagv1.8.16
releases_from_tagsno
days_since_latest_release10
mean_days_between_releases21.1
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

36At risk · 18% of overall
How it's scored
24/60Stars — 31 stars
13.9/25Forks — 48 forks
7/15Watchers — 19 watchers
Inputs used
forks48
stars31
watchers19
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
0/22.5License — no license file detected
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

73Good · 24% of overall
How it's scored
36/54Bus factor — 3 contributor(s) cover half of all commits
15.2/22.5Commit distribution — top contributor authored 33% of commits
13.5/13.5Contributor breadth — 24 contributors
10/10OpenSSF Scorecard: Contributors — project has 13 contributing companies or organizations
Inputs used
bus_factor3
contributors_sampled24
top_contributor_share0.326
How it's scored
35.5/46.8Issue resolution — 76% of issues closed
33/38.3PR acceptance — 286/332 decided PRs merged
4.5/15OpenSSF Scorecard: Code-Review — Found 3/8 approved changesets -- score normalized to 3
Inputs used
merged_prs286
open_issues89
closed_issues281
issue_closed_ratio0.759
closed_unmerged_prs46
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
15.8/25Owner reach — 157 followers of humhub
24.2/25Track record — 47 public repos, account ~12 yr old
Inputs used
followers157
owner_typeOrganization
is_verified
owner_loginhumhub
public_repos47
account_age_days4,596

Engineering Quality

Are baseline engineering and documentation practices in place?

67Moderate · 20% of overall
How it's scored
24/24CI workflows — 7 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
14/20OpenSSF Scorecard: CI-Tests — 7 out of 9 merged PRs checked by a CI test -- score normalized to 7
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

57Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
1.8/2.5CI-Tests — 7 out of 9 merged PRs checked by a CI test -- score normalized to 7
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
2.2/7.5Code-Review — Found 3/8 approved changesets -- score normalized to 3
2.5/2.5Contributors — project has 13 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5License — license file not detected
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 10 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate4.6
Excluded from scoring (no data or not applicable): branch_protection, packaging, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories10
affected_packages4
assessed_packages202
unassessed_packages6
affected_by_severityhigh 3, moderate 1
direct_affected_packages0
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 202 resolved dependencies against OSV. 6 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.

AI Readiness

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.

35At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
18.2/40Legible commit history — 31 of 91 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.341
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
0/11Static type checking
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 9 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.09
How it's scored
0/45Type-checkable code — PHP without a type-check config
54.9/55Manageable file sizes — 1/539 source files over 60KB
Inputs used
primary_languagePHP
largest_source_bytes817,395
source_files_sampled539
oversized_source_files1

Key facts

31GitHub stars
24contributors
366commits, last 12 months
3days since last push
88releases
3bus factor
89open issues
npm, Packagistpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'humhub-modules-calendar' from its registry
  • Could not fetch packagist package 'humhub/humhub-calendar' from its registry

More detail

Star and fork history 0 ★ / 48 ⇿
0Stars
48Forks
80Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

010203040504712014-092020-062026-03
Major 0Minor 6Patch 71

Each point covers 11 days.

OpenSSF Scorecard 4.6 / 10
4.6aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-28 02:24 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal 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
7CI-Tests7 out of 9 merged PRs checked by a CI test -- score normalized to 7
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
3Code-ReviewFound 3/8 approved changesets -- score normalized to 3
10Contributorsproject has 13 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities10 existing vulnerabilities detected
Direct dependencies 14
RegistryPackageVersion constraintManifest
Packagistsabre/vobject^4composer.json
Packagistsimshaun/recurr^4composer.json
Packagistsabre/xml^2composer.json
Packagistsabre/uri^2composer.json
Packagistsabre/dav~4.6.0composer.json
npm@fullcalendar/core^4.3.1package.json
npm@fullcalendar/daygrid*package.json
npm@fullcalendar/interaction*package.json
npm@fullcalendar/list*package.json
npm@fullcalendar/moment*package.json
npm@fullcalendar/moment-timezone*package.json
npm@fullcalendar/timegrid*package.json
npmmoment^2.29.4package.json
npmmoment-timezone^0.5.35package.json
All dependencies 208

Full resolved dependency set from the GitHub dependency graph: 14 direct and 194 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@fullcalendar/core4.3.1direct
npm@fullcalendar/daygrid4.3.0direct
npm@fullcalendar/interaction4.3.0direct
npm@fullcalendar/list4.3.0direct
npm@fullcalendar/moment4.3.0direct
npm@fullcalendar/moment-timezone4.3.0direct
npm@fullcalendar/timegrid4.3.0direct
npmmoment2.29.4direct
npmmoment-timezone0.5.35direct
Packagistsabre/davdirect
Packagistsabre/uridirect
Packagistsabre/vobjectdirect
Packagistsabre/xmldirect
Packagistsimshaun/recurrdirect
npm@parcel/watcher2.5.1indirect
npm@parcel/watcher-android-arm642.5.1indirect
npm@parcel/watcher-darwin-arm642.5.1indirect
npm@parcel/watcher-darwin-x642.5.1indirect
npm@parcel/watcher-freebsd-x642.5.1indirect
npm@parcel/watcher-linux-arm-glibc2.5.1indirect
npm@parcel/watcher-linux-arm-musl2.5.1indirect
npm@parcel/watcher-linux-arm64-glibc2.5.1indirect
npm@parcel/watcher-linux-arm64-musl2.5.1indirect
npm@parcel/watcher-linux-x64-glibc2.5.1indirect
npm@parcel/watcher-linux-x64-musl2.5.1indirect
npm@parcel/watcher-win32-arm642.5.1indirect
npm@parcel/watcher-win32-ia322.5.1indirect
npm@parcel/watcher-win32-x642.5.1indirect
npmabbrev1.1.1indirect
npmansi-regex2.1.1indirect
npmansi-styles2.2.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.3.0indirect
npmargparse1.0.10indirect
npmarray-each1.0.1indirect
npmarray-slice1.1.0indirect
npmasync2.6.4indirect
npmasync3.2.3indirect
npmbalanced-match1.0.2indirect
npmbody5.1.0indirect
npmbrace-expansion1.1.11indirect
npmbraces3.0.3indirect
npmbytes1.0.0indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmchalk1.1.3indirect
npmchalk2.4.2indirect
npmchalk4.1.2indirect
npmchokidar4.0.3indirect
npmclean-css4.2.3indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcolors1.1.2indirect
npmcommander2.20.3indirect
npmconcat-map0.0.1indirect
npmcontinuable-cache0.3.1indirect
npmdateformat3.0.3indirect
npmdebug3.2.7indirect
npmdetect-file1.0.0indirect
npmdetect-libc1.0.3indirect
npmdunder-proto1.0.1indirect
npmduplexer0.1.1indirect
npmerror7.2.1indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-object-atoms1.1.1indirect
npmescape-string-regexp1.0.5indirect
npmesprima4.0.1indirect
npmeventemitter20.4.14indirect
npmexit0.1.2indirect
npmexit-x0.2.2indirect
npmexpand-tilde2.0.2indirect
npmextend3.0.2indirect
npmfaye-websocket0.10.0indirect
npmfigures1.7.0indirect
npmfill-range7.1.1indirect
npmfindup-sync0.3.0indirect
npmfindup-sync4.0.0indirect
npmfined1.2.0indirect
npmflagged-respawn1.0.1indirect
npmfor-in1.0.2indirect
npmfor-own1.0.0indirect
npmfs.realpath1.0.0indirect
npmfunction-bind1.1.2indirect
npmgaze1.1.3indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmgetobject1.0.0indirect
npmglob5.0.15indirect
npmglob7.1.7indirect
npmglobal-modules1.0.0indirect
npmglobal-prefix1.0.2indirect
npmglobule1.3.4indirect
npmgopd1.2.0indirect
npmgrunt1.5.3indirect
npmgrunt-cli1.4.3indirect
npmgrunt-contrib-concat1.0.1indirect
npmgrunt-contrib-cssmin3.0.0indirect
npmgrunt-contrib-uglify4.0.1indirect
npmgrunt-contrib-watch1.1.0indirect
npmgrunt-known-options2.0.0indirect
npmgrunt-legacy-log3.0.1indirect
npmgrunt-legacy-log-utils2.1.3indirect
npmgrunt-legacy-util2.0.2indirect
npmgrunt-sass3.1.0indirect
npmgzip-size3.0.0indirect
npmhas1.0.3indirect
npmhas-ansi2.0.0indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-symbols1.1.0indirect
npmhasown2.0.2indirect
npmhomedir-polyfill1.0.3indirect
npmhooker0.2.3indirect
npmhttp-parser-js0.5.8indirect
npmiconv-lite0.4.24indirect
npmimmutable5.1.9indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npmini1.3.8indirect
npminterpret1.1.0indirect
npmis-absolute1.0.0indirect
npmis-core-module2.9.0indirect
npmis-extglob2.1.1indirect
npmis-glob4.0.3indirect
npmis-number7.0.0indirect
npmis-plain-object2.0.4indirect
npmis-relative1.0.0indirect
npmis-unc-path1.0.0indirect
npmis-windows1.0.2indirect
npmisexe2.0.0indirect
npmisobject3.0.1indirect
npmjs-yaml3.14.2indirect
npmkind-of6.0.3indirect
npmliftup3.0.1indirect
npmlivereload-js2.4.0indirect
npmlodash4.18.1indirect
npmmake-iterator1.0.1indirect
npmmap-cache0.2.2indirect
npmmath-intrinsics1.1.0indirect
npmmaxmin2.1.0indirect
npmmicromatch4.0.5indirect
npmminimatch3.0.8indirect
npmmkdirp1.0.4indirect
npmms2.1.3indirect
npmnode-addon-api7.1.1indirect
npmnopt3.0.6indirect
npmnopt4.0.3indirect
npmnumber-is-nan1.0.1indirect
npmobject-assign4.1.1indirect
npmobject-inspect1.13.4indirect
npmobject.defaults1.1.0indirect
npmobject.map1.0.1indirect
npmobject.pick1.3.0indirect
npmonce1.4.0indirect
npmos-homedir1.0.2indirect
npmos-tmpdir1.0.2indirect
npmosenv0.1.5indirect
npmparse-filepath1.0.2indirect
npmparse-passwd1.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-parse1.0.7indirect
npmpath-root0.1.1indirect
npmpath-root-regex0.1.2indirect
npmpicomatch2.3.2indirect
npmpretty-bytes3.0.1indirect
npmqs6.15.2indirect
npmraw-body1.1.7indirect
npmreaddirp4.1.2indirect
npmrechoir0.7.1indirect
npmresolve1.22.0indirect
npmresolve-dir1.0.1indirect
npmrimraf3.0.2indirect
npmsafe-buffer5.2.1indirect
npmsafe-json-parse1.0.1indirect
npmsafer-buffer2.1.2indirect
npmsass1.89.1indirect
npmside-channel1.1.0indirect
npmside-channel-list1.0.0indirect
npmside-channel-map1.0.1indirect
npmside-channel-weakmap1.0.2indirect
npmsource-map0.5.7indirect
npmsource-map0.6.1indirect
npmsource-map-js1.2.1indirect
npmsprintf-js1.0.3indirect
npmstring-template0.2.1indirect
npmstring_decoder0.10.31indirect
npmstrip-ansi3.0.1indirect
npmsupports-color2.0.0indirect
npmsupports-color5.5.0indirect
npmsupports-color7.2.0indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmtiny-lr1.1.1indirect
npmto-regex-range5.0.1indirect
npmuglify-js3.7.5indirect
npmunc-path-regex0.1.2indirect
npmunderscore.string3.3.5indirect
npmuri-path1.0.0indirect
npmutil-deprecate1.0.2indirect
npmv8flags3.2.0indirect
npmwebsocket-driver0.7.5indirect
npmwebsocket-extensions0.1.4indirect
npmwhich1.3.1indirect
npmwhich2.0.2indirect
npmwrappy1.0.2indirect
Packagisthumhub/module-coding-standardsindirect
Dependency advisories 4

This repository publishes no package the index resolves, so its own dependency graph was assessed — 202 packages, which also include development and test pins that never ship: 4 carry known advisories, of which 0 are direct. 6 could not be assessed — no resolved version, an unsupported ecosystem, or beyond the reported package list.

PackageVersionRelationSeverityAdvisoriesFixed in
brace-expansion1.1.11indirecthigh45.0.8
js-yaml3.14.2indirecthigh24.3.0
minimatch3.0.8indirecthigh310.2.3
micromatch4.0.5indirectmoderate14.0.8

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 8065,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 13068,
        "PHP": 1737951,
        "SCSS": 14100,
        "JavaScript": 51808
      },
      "pushed_at": "2026-07-24T11:27:40Z",
      "created_at": "2014-08-02T03:15:54Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T11:28:14Z",
      "description": "Create one-time or recurring events, invite and manage attendees, and keep track of all your events with the Calendar module. ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": null,
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "http://www.humhub.org",
      "name": "HumHub",
      "type": "Organization",
      "login": "humhub",
      "company": null,
      "location": null,
      "followers": 157,
      "avatar_url": "https://avatars.githubusercontent.com/u/6262639?v=4",
      "created_at": "2013-12-26T05:35:03Z",
      "is_verified": null,
      "public_repos": 47,
      "account_age_days": 4596
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.8.16",
          "kind": "patch",
          "published_at": "2026-07-17T10:34:21Z"
        },
        {
          "tag": "v1.9.2",
          "kind": "patch",
          "published_at": "2026-07-16T18:03:48Z"
        },
        {
          "tag": "v1.9.1",
          "kind": "patch",
          "published_at": "2026-07-08T10:45:03Z"
        },
        {
          "tag": "v1.8.15",
          "kind": "patch",
          "published_at": "2026-06-18T06:49:17Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-06-05T11:27:27Z"
        },
        {
          "tag": "v1.8.14",
          "kind": "patch",
          "published_at": "2026-05-21T15:42:26Z"
        },
        {
          "tag": "v1.8.13",
          "kind": "patch",
          "published_at": "2026-05-15T11:42:40Z"
        },
        {
          "tag": "v1.8.12",
          "kind": "patch",
          "published_at": "2026-05-02T22:43:10Z"
        },
        {
          "tag": "v1.8.11",
          "kind": "patch",
          "published_at": "2026-03-02T14:46:04Z"
        },
        {
          "tag": "v1.8.10",
          "kind": "patch",
          "published_at": "2026-01-08T11:01:37Z"
        },
        {
          "tag": "v1.8.9",
          "kind": "patch",
          "published_at": "2026-01-08T10:57:13Z"
        },
        {
          "tag": "v1.8.8",
          "kind": "patch",
          "published_at": "2025-11-30T23:15:23Z"
        },
        {
          "tag": "v1.8.7",
          "kind": "patch",
          "published_at": "2025-11-18T17:39:59Z"
        },
        {
          "tag": "v1.8.6",
          "kind": "patch",
          "published_at": "2025-11-12T09:28:48Z"
        },
        {
          "tag": "v1.8.5",
          "kind": "patch",
          "published_at": "2025-10-28T09:04:50Z"
        },
        {
          "tag": "v1.7.21",
          "kind": "patch",
          "published_at": "2025-10-28T09:03:46Z"
        },
        {
          "tag": "v1.8.4",
          "kind": "patch",
          "published_at": "2025-10-23T10:29:53Z"
        },
        {
          "tag": "v1.7.20",
          "kind": "patch",
          "published_at": "2025-10-20T08:38:11Z"
        },
        {
          "tag": "v1.8.3",
          "kind": "patch",
          "published_at": "2025-10-09T12:53:13Z"
        },
        {
          "tag": "v1.7.19",
          "kind": "patch",
          "published_at": "2025-09-26T08:25:06Z"
        },
        {
          "tag": "v1.7.18",
          "kind": "patch",
          "published_at": "2025-09-19T15:02:27Z"
        },
        {
          "tag": "v1.7.17",
          "kind": "patch",
          "published_at": "2025-09-11T08:28:11Z"
        },
        {
          "tag": "v1.8.2",
          "kind": "patch",
          "published_at": "2025-09-11T08:25:18Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2025-09-10T10:44:45Z"
        },
        {
          "tag": "v1.7.16",
          "kind": "patch",
          "published_at": "2025-09-04T10:04:08Z"
        },
        {
          "tag": "v1.7.15",
          "kind": "patch",
          "published_at": "2025-08-31T23:08:40Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2025-08-27T14:14:19Z"
        },
        {
          "tag": "v1.7.14",
          "kind": "patch",
          "published_at": "2025-08-21T09:57:32Z"
        },
        {
          "tag": "v1.7.13",
          "kind": "patch",
          "published_at": "2025-08-06T12:43:42Z"
        },
        {
          "tag": "v1.7.12",
          "kind": "patch",
          "published_at": "2025-08-05T15:14:52Z"
        },
        {
          "tag": "v1.7.11",
          "kind": "patch",
          "published_at": "2025-07-31T10:42:00Z"
        },
        {
          "tag": "v1.7.10",
          "kind": "patch",
          "published_at": "2025-07-21T15:44:50Z"
        },
        {
          "tag": "v1.7.9",
          "kind": "patch",
          "published_at": "2025-07-12T07:51:58Z"
        },
        {
          "tag": "v1.7.8",
          "kind": "patch",
          "published_at": "2025-07-11T09:59:49Z"
        },
        {
          "tag": "v1.7.7",
          "kind": "patch",
          "published_at": "2025-06-30T14:56:16Z"
        },
        {
          "tag": "v1.7.6",
          "kind": "patch",
          "published_at": "2025-06-25T06:19:55Z"
        },
        {
          "tag": "v1.7.5",
          "kind": "patch",
          "published_at": "2025-06-23T13:24:13Z"
        },
        {
          "tag": "v1.7.4",
          "kind": "patch",
          "published_at": "2025-05-12T14:38:27Z"
        },
        {
          "tag": "v1.7.3",
          "kind": "patch",
          "published_at": "2025-02-25T11:20:24Z"
        },
        {
          "tag": "v1.7.2",
          "kind": "patch",
          "published_at": "2025-01-28T20:51:48Z"
        },
        {
          "tag": "v1.7.1",
          "kind": "patch",
          "published_at": "2025-01-17T08:24:23Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2025-01-14T08:37:17Z"
        },
        {
          "tag": "v1.6.3",
          "kind": "patch",
          "published_at": "2024-08-23T08:42:59Z"
        },
        {
          "tag": "v1.6.2",
          "kind": "patch",
          "published_at": "2024-07-16T09:25:55Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2024-07-03T15:03:13Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2024-07-01T16:11:27Z"
        },
        {
          "tag": "v1.5.12",
          "kind": "patch",
          "published_at": "2024-06-25T15:15:08Z"
        },
        {
          "tag": "v1.5.11",
          "kind": "patch",
          "published_at": "2024-06-24T18:55:52Z"
        },
        {
          "tag": "v1.5.10",
          "kind": "patch",
          "published_at": "2024-03-19T16:40:40Z"
        },
        {
          "tag": "v1.5.9",
          "kind": "patch",
          "published_at": "2024-03-14T15:31:11Z"
        },
        {
          "tag": "v1.5.8",
          "kind": "patch",
          "published_at": "2024-01-19T11:26:12Z"
        },
        {
          "tag": "v1.5.7",
          "kind": "patch",
          "published_at": "2024-01-12T09:24:19Z"
        },
        {
          "tag": "v1.5.6",
          "kind": "patch",
          "published_at": "2023-10-26T15:18:52Z"
        },
        {
          "tag": "v1.5.5",
          "kind": "patch",
          "published_at": "2023-10-26T15:16:37Z"
        },
        {
          "tag": "v1.5.4",
          "kind": "patch",
          "published_at": "2023-10-05T09:13:04Z"
        },
        {
          "tag": "v1.5.3",
          "kind": "patch",
          "published_at": "2023-09-14T15:31:45Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2023-08-11T17:05:12Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2023-07-16T08:45:56Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2023-05-01T13:47:22Z"
        },
        {
          "tag": "v1.4.0-1",
          "kind": "prerelease",
          "published_at": "2023-01-10T09:14:08Z"
        },
        {
          "tag": "v1.4.0-beta.1",
          "kind": "prerelease",
          "published_at": "2022-11-07T18:25:17Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2022-11-07T18:20:49Z"
        },
        {
          "tag": "v1.2.5",
          "kind": "patch",
          "published_at": "2022-07-15T09:21:58Z"
        },
        {
          "tag": "v1.2.4",
          "kind": "patch",
          "published_at": "2022-07-15T08:48:16Z"
        },
        {
          "tag": "v1.2.3",
          "kind": "patch",
          "published_at": "2022-05-30T15:42:55Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2022-05-06T11:34:10Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2022-05-03T15:05:15Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2022-04-15T16:54:13Z"
        },
        {
          "tag": "v1.1.11",
          "kind": "patch",
          "published_at": "2022-02-23T17:31:23Z"
        },
        {
          "tag": "v1.1.10",
          "kind": "patch",
          "published_at": "2021-04-16T16:18:19Z"
        },
        {
          "tag": "v1.1.6",
          "kind": "patch",
          "published_at": "2021-02-22T14:51:55Z"
        },
        {
          "tag": "v1.1.5",
          "kind": "patch",
          "published_at": "2021-02-18T15:52:27Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2021-02-05T17:00:49Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2020-11-03T11:08:50Z"
        },
        {
          "tag": "v1.0.13",
          "kind": "patch",
          "published_at": "2020-10-16T12:09:36Z"
        },
        {
          "tag": "v1.0.12",
          "kind": "patch",
          "published_at": "2020-07-31T10:59:18Z"
        },
        {
          "tag": "v1.0.10",
          "kind": "patch",
          "published_at": "2020-05-05T17:42:49Z"
        },
        {
          "tag": "v1.0.9",
          "kind": "patch",
          "published_at": "2020-04-20T15:47:13Z"
        },
        {
          "tag": "v1.0.8",
          "kind": "patch",
          "published_at": "2020-04-09T12:03:32Z"
        },
        {
          "tag": "v1.0.7",
          "kind": "patch",
          "published_at": "2020-03-26T15:06:50Z"
        },
        {
          "tag": "v1.0.6",
          "kind": "patch",
          "published_at": "2020-03-26T14:49:15Z"
        },
        {
          "tag": "v1.0.5",
          "kind": "patch",
          "published_at": "2020-02-17T14:20:13Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2020-01-17T18:33:53Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2020-01-16T21:41:58Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2020-01-16T17:58:39Z"
        },
        {
          "tag": "v1.0",
          "kind": "other",
          "published_at": "2020-01-16T16:57:41Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2019-10-25T09:22:15Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2019-10-16T12:12:57Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e04716b0fa39577cfa6b9d61551855c6e11d90ae",
          "body": "…-5.1.9\n\nBump immutable from 5.1.5 to 5.1.9",
          "is_bot": false,
          "headline": "Merge pull request #709 from humhub/dependabot/npm_and_yarn/immutable…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-07-24T11:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50b624f51c2796f1292e2d0b2ca337dfecbcab7",
          "body": "Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.5 to 5.1.9.\n- [Release notes](https://github.com/immutable-js/immutable-js/releases)\n- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.5...v5.1.9)\n\n---\nupdated-dependencies:\n- dependency-name: immutable\n  dependency-version: 5.1.9\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump immutable from 5.1.5 to 5.1.9",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-24T03:40:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0cad828046d07a7272cc762ebcd89c6bee68ea3",
          "body": null,
          "is_bot": false,
          "headline": "Release 1.8.16",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-07-17T10:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "173b44a3f880967bfaaab671250914a088f3473f",
          "body": null,
          "is_bot": false,
          "headline": "Fix acceptance test after filter dropdown label change",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-07-17T10:16:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90fecb2605120dc1ccd6fe06692594abc7c96a25",
          "body": "Replace calendar filter checkboxes with dropdowns, Add new filter \"Entire network\"",
          "is_bot": false,
          "headline": "Merge pull request #708 from humhub/enh/1164-dropdown-filters",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-07-17T09:41:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63a933b51c40b54242b6e14e3630d4f9e669a37c",
          "body": null,
          "is_bot": false,
          "headline": "Wording",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-07-17T09:37:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "359e77314624fe3bb45e286fb365258f3f557da5",
          "body": "…efore storing",
          "is_bot": false,
          "headline": "Rename to $viewMode to avoid Yii shadowing, Validate filter options b…",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-07-17T05:37:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69f7391107c6d6abc32783808c3d824438578cd9",
          "body": null,
          "is_bot": false,
          "headline": "Fix test",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-07-16T15:26:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a69de88af9651ae73aaeda27fcfd138d92f1294",
          "body": "…tire network\"",
          "is_bot": false,
          "headline": "Replace calendar filter checkboxes with dropdowns, Add new filter \"En…",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-07-16T14:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be5392fcefe7fa2f7488d6ce5348999c9e93307f",
          "body": "…-driver-0.7.5\n\nBump websocket-driver from 0.7.4 to 0.7.5",
          "is_bot": false,
          "headline": "Merge pull request #707 from humhub/dependabot/npm_and_yarn/websocket…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-07-16T07:34:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0ce04a6cdc6534d2b78506a956bdbcbd6af9c80",
          "body": "Bumps [websocket-driver](https://github.com/faye/websocket-driver-node) from 0.7.4 to 0.7.5.\n- [Changelog](https://github.com/faye/websocket-driver-node/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/faye/websocket-driver-node/compare/0.7.4...0.7.5)\n\n---\nupdated-dependencies:\n- dependency-name: websocket-driver\n  dependency-version: 0.7.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump websocket-driver from 0.7.4 to 0.7.5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T22:09:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f95ac2deb92857abad585eee64b4f8cef402232",
          "body": null,
          "is_bot": false,
          "headline": "Release 1.8.15",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-18T06:49:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1894481cd621f93e3da8e6eddbeadbfded25d6a7",
          "body": "Participation link for online event",
          "is_bot": false,
          "headline": "Merge pull request #700 from humhub/fix/1192-participation-link",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-18T06:42:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee750fb98b17e257f1d8a1694ac40493ad2b5a54",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into fix/1192-participation-link",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-06-18T05:19:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0538cdae553a5fc765da31d3c80a20e9212cc31",
          "body": "…le is not bootstrapped",
          "is_bot": false,
          "headline": "Fix: Make m250603_194724_export_jwt_key migration resilient when modu…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-16T15:14:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9e54f3aee2a5672f7239acaaf4ae1e66b33e797",
          "body": null,
          "is_bot": false,
          "headline": "Increase min version for `Migration::safeAlterColumn()`",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-06-16T04:48:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75890eb3806bd6ece7c83570535c1500b5e61201",
          "body": null,
          "is_bot": false,
          "headline": "Use column `location` for Participation URL",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-06-16T04:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cdabba7a39333bb34073be18817323a4d136133",
          "body": null,
          "is_bot": false,
          "headline": "Display online location on wall entry",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-06-10T15:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2479658b720aab2a3b44b4d4f2fda660a67f0a43",
          "body": null,
          "is_bot": false,
          "headline": "Participation link for online event",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-06-09T11:31:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4c3d3f6597756379140fed669d8e600c35fe88e",
          "body": "chore: automated Rector updates",
          "is_bot": false,
          "headline": "Merge pull request #699 from humhub/rector/auto-update",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-05T08:01:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6042ea2078d099940f9b23d71f7b77ff25177cfb",
          "body": null,
          "is_bot": false,
          "headline": "[create-pull-request] automated change",
          "author_name": "luke-",
          "author_login": "luke-",
          "committed_at": "2026-06-05T06:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a4f7ac443a35eb470c7a12d29685ea51503e9c9",
          "body": "Calendar: Filter & Recurring Visibility",
          "is_bot": false,
          "headline": "Merge pull request #689 from humhub/enh/recuring-visibility",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-02T19:08:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7bb592181955c2ac8afff3ac9055b012c51d41f",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into enh/recuring-visibility",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-06-02T19:08:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d98fcf263a895b32ded96ab636bf0ff220b174a",
          "body": "…9d5edac\n\nBump lodash, grunt-legacy-log and grunt-legacy-util",
          "is_bot": false,
          "headline": "Merge pull request #698 from humhub/dependabot/npm_and_yarn/multi-235…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-25T18:57:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f4ad71005ec5a5f9bcbcd14ca47c653abc63af2",
          "body": "Bumps [lodash](https://github.com/lodash/lodash), [grunt-legacy-log](https://github.com/gruntjs/grunt-legacy-log) and [grunt-legacy-util](https://github.com/gruntjs/grunt-legacy-util). These dependencies needed to be updated together.\n\nUpdates `lodash` from 4.17.23 to 4.18.1\n- [Release notes](https:\n[…]\nendency-version: 3.0.1\n  dependency-type: indirect\n- dependency-name: grunt-legacy-util\n  dependency-version: 2.0.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump lodash, grunt-legacy-log and grunt-legacy-util",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-25T18:19:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e9bac7fad1c8fbcb4d24ee2068cf27bac0d1013",
          "body": "Bump qs from 6.14.2 to 6.15.2",
          "is_bot": false,
          "headline": "Merge pull request #696 from humhub/dependabot/npm_and_yarn/qs-6.15.2",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-25T18:18:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14ebdce41a0c3a045059c2ec80f0a9aa627336af",
          "body": "Bumps [qs](https://github.com/ljharb/qs) from 6.14.2 to 6.15.2.\n- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/ljharb/qs/compare/v6.14.2...v6.15.2)\n\n---\nupdated-dependencies:\n- dependency-name: qs\n  dependency-version: 6.15.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump qs from 6.14.2 to 6.15.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-23T12:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2f8701beb14dada654a572f22af8082b76312ed",
          "body": "chore: automated Rector updates",
          "is_bot": false,
          "headline": "Merge pull request #695 from humhub/rector/auto-update",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-22T07:18:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1485d7206e619697a3256f53274d1f0cd6ccd182",
          "body": null,
          "is_bot": false,
          "headline": "[create-pull-request] automated change",
          "author_name": "luke-",
          "author_login": "luke-",
          "committed_at": "2026-05-22T06:22:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63b50c6fd6790112a3428dcab61cfb804a833310",
          "body": null,
          "is_bot": false,
          "headline": "Release 1.8.14",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-21T15:42:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35db9fdec8a662cf974203a9320319131a6685f6",
          "body": "Fix participant state editing",
          "is_bot": false,
          "headline": "Merge pull request #694 from humhub/fix/1189-wrong-participant-editing",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-21T15:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "073766eec2b7444e427fbdf06f631e48076abdcb",
          "body": null,
          "is_bot": false,
          "headline": "Fix participant state editing",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-05-21T13:17:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c813941572538d858bc669c9af52ec54b4b6cc2e",
          "body": null,
          "is_bot": false,
          "headline": "Release 1.8.13",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-15T11:42:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93672954973e7f3caf1bb95387382e639a4d2642",
          "body": "Yii2 2.0.55 compatibility",
          "is_bot": false,
          "headline": "Merge pull request #691 from humhub/fix/1178-yii2-2.0.55-compatiblity",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-15T11:33:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e58ec8e0d745c4e3bcb3ee2938ef03d9799f41f4",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into fix/1178-yii2-2.0.55-compatiblity",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-15T11:33:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ef6944a95ec3417ca83e39323527e6e86a76209",
          "body": "chore: automated Rector updates",
          "is_bot": false,
          "headline": "Merge pull request #692 from humhub/rector/auto-update",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-15T11:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf5781743d463c6516c013c335a2502b84f8193f",
          "body": null,
          "is_bot": false,
          "headline": "Yii2 2.0.55 compatibility",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-05-12T12:19:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8f8578c4eafdc9a0ab9fe94694a22d1033a49b8",
          "body": null,
          "is_bot": false,
          "headline": "[create-pull-request] automated change",
          "author_name": "luke-",
          "author_login": "luke-",
          "committed_at": "2026-05-08T05:42:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "483f835e02c7694df61458092673e3366a436c60",
          "body": null,
          "is_bot": false,
          "headline": "Calendar: Filter & Recurring Visibility",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-07T20:31:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bc7fd0261118f4de1e3f824ce5bd3c60993e3bc",
          "body": null,
          "is_bot": false,
          "headline": "Calendar: Filter & Recurring Visibility",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-07T20:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41e4dc2153bec938c4e3d61301f1becaafce26f9",
          "body": "Hide other calendar events when filtering by Type",
          "is_bot": false,
          "headline": "Merge pull request #688 from humhub/enh/hide-other-events-type-filter",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-05T17:58:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd21b6aea61cc2a938945610bdc553a3f913f605",
          "body": null,
          "is_bot": false,
          "headline": "Hide other calendar events when filtering by Type",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-05T00:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "908eedfc08c7f3aabc54cf1239f234ed8776fdfa",
          "body": null,
          "is_bot": false,
          "headline": "Hide other calendar events when filtering by Type",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-05T00:45:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58269ef1e9a042a7d0e1e99f2c49dfe822aeb54a",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG for version 1.8.12 release",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-02T22:42:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d2987e1295792c68e11408ef42da51de34e825c",
          "body": "\"Filter by types\" doesn't submit the filter form",
          "is_bot": false,
          "headline": "Merge pull request #686 from humhub/fix/filter-types-submit",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-02T22:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86962efb5df9e3f8db809c75daf9f9342d202fb6",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into fix/filter-types-submit",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-02T22:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c1b77de61c54b554cca6b89314dca99e7290823",
          "body": null,
          "is_bot": false,
          "headline": "\"Filter by types\" doesn't submit the filter form",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-02T21:37:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd5ef8ea384930a814bec8934d2c294d5117531",
          "body": null,
          "is_bot": false,
          "headline": "\"Filter by types\" doesn't submit the filter form",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-02T21:35:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b78fa6556a17134df3bcf046a4dfb0a0b0e25081",
          "body": "Calendar module: cron error on recurring event",
          "is_bot": false,
          "headline": "Merge pull request #685 from humhub/fix/recurrence-id",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-05-02T21:07:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "982fc40e0190c70ef699d6717374b915f44a8292",
          "body": "…xception Unexpected character",
          "is_bot": false,
          "headline": "Calendar module: cron error on recurring event - DateMalformedStringE…",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-02T20:46:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7beb0b4aa3259a160797977ebb984f598f0ecf80",
          "body": "…xception Unexpected character",
          "is_bot": false,
          "headline": "Calendar module: cron error on recurring event - DateMalformedStringE…",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-02T20:29:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba43ed7ce93c0475e722da4372780d35558a11c7",
          "body": "…xception Unexpected character",
          "is_bot": false,
          "headline": "Calendar module: cron error on recurring event - DateMalformedStringE…",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-05-02T20:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccb1164486d7d813b11e7ce29b420204f2e62a07",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG.md",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-28T16:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de132f71406a1d570efc2fab71f9c1065da6d57b",
          "body": "Added single event link to ICS export",
          "is_bot": false,
          "headline": "Merge pull request #683 from gschwarz1111/ICSLink",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-28T16:07:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a043ea9ab5e0b650ae2c3c7384f6d8b4ce40203",
          "body": null,
          "is_bot": false,
          "headline": "Added single event link to ICS export",
          "author_name": "Levan",
          "author_login": null,
          "committed_at": "2026-03-27T08:47:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efe4f29537b37e65ebc28924044503864c773a6a",
          "body": "…-2.3.2\n\nBump picomatch from 2.3.1 to 2.3.2",
          "is_bot": false,
          "headline": "Merge pull request #682 from humhub/dependabot/npm_and_yarn/picomatch…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-26T19:15:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fafee8652e0aaf41988a137334a952d7f74a4cdd",
          "body": "Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)\n\n---\nupdated-dependencies:\n- dependency-name: picomatch\n  dependency-version: 2.3.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump picomatch from 2.3.1 to 2.3.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-25T22:06:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f135385ffa005aa3a3ea78c2d2c3ccda5021ef93",
          "body": "Fix/ical export",
          "is_bot": false,
          "headline": "Merge pull request #681 from humhub/fix/ical-export",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-25T13:13:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24cdd33391cdfb5fa2c4f48a78fbf911d976524f",
          "body": "…urring Events",
          "is_bot": false,
          "headline": "Calendar Module - Issue with iCal Import to External Calendar and Rec…",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-03-24T22:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8e661c9375be019f7b2dfcdb1e2e23ee6631410",
          "body": "…urring Events",
          "is_bot": false,
          "headline": "Calendar Module - Issue with iCal Import to External Calendar and Rec…",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-03-20T21:57:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7afe24a8b8012baa88d292efd8a301edfe95594",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/humhub/calendar",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-03-20T20:49:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "459fc0380e3092c1a5a4e9eaeadbbe6ee96432fd",
          "body": "Remove deprecations",
          "is_bot": false,
          "headline": "Merge pull request #679 from humhub/enh/1042-remove-deprecations-master",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-11T13:33:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7ef51d47ac6ec03ca4139992496968c9911924c",
          "body": null,
          "is_bot": false,
          "headline": "Remove deprecations",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-03-11T13:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a099f09a4ddee7060d50c2da923d05e5bbcf3f9",
          "body": "…-5.1.5\n\nBump immutable from 5.1.2 to 5.1.5",
          "is_bot": false,
          "headline": "Merge pull request #677 from humhub/dependabot/npm_and_yarn/immutable…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-05T08:57:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b570b218cfe0908267720b83a48ca5bd6ca141f",
          "body": "Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.2 to 5.1.5.\n- [Release notes](https://github.com/immutable-js/immutable-js/releases)\n- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.2...v5.1.5)\n\n---\nupdated-dependencies:\n- dependency-name: immutable\n  dependency-version: 5.1.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump immutable from 5.1.2 to 5.1.5",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-04T23:23:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "862f0eef165c46be582f06732c6a174ce3424261",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/humhub/calendar",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-03-04T21:40:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed0e629fb5538dd5095603a9996530edfa23d83",
          "body": null,
          "is_bot": false,
          "headline": "Updated CHANGELOG.md",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-02T14:45:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dc9d92aa687beca82138ebb8758f6080681295b",
          "body": null,
          "is_bot": false,
          "headline": "Fixed HTML Encoding of Event Types",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-03-02T14:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30538a277443f09d99750c2acf18c612f40624bd",
          "body": "PHP CS Fixer 2026-02-23-144104",
          "is_bot": false,
          "headline": "Merge pull request #675 from humhub/php-fixer/2026-02-23-144104",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-02-23T15:51:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41cc9311b97d2eb3fe0220c3c576c4790ca4dd9e",
          "body": null,
          "is_bot": false,
          "headline": "Autocommit PHP CS Fixer",
          "author_name": "GitHub Action",
          "author_login": "actions-user",
          "committed_at": "2026-02-23T14:41:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74828fe2b9043fb8b6ef5fd893b062f92c5110c4",
          "body": "Fix asset bundle",
          "is_bot": false,
          "headline": "Merge pull request #674 from humhub/fix/1083-asset-bundle",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-02-23T14:40:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "434f5449cbc9c83ebd9af622d261123da0b0f9be",
          "body": null,
          "is_bot": false,
          "headline": "Fix asset bundle",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2026-02-23T13:53:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64895d2e3d64f2a4a0fb59564da9bd160cb02192",
          "body": "Bump qs from 6.14.1 to 6.14.2",
          "is_bot": false,
          "headline": "Merge pull request #672 from humhub/dependabot/npm_and_yarn/qs-6.14.2",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-02-15T14:27:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f613e1e818263c069b877f2b3147c891b11e373c",
          "body": "Bumps [qs](https://github.com/ljharb/qs) from 6.14.1 to 6.14.2.\n- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)\n\n---\nupdated-dependencies:\n- dependency-name: qs\n  dependency-version: 6.14.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump qs from 6.14.1 to 6.14.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-14T12:43:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfb8650a3a9d9ce691ad3381d4884dcf79ef7bd9",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/humhub/calendar",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-02-07T23:44:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5de54082b67279c2782871c8998e00a1168f1dcf",
          "body": null,
          "is_bot": false,
          "headline": "Enh: Updated Translations (translate.humhub.org)",
          "author_name": "HumHub Translations",
          "author_login": null,
          "committed_at": "2026-02-03T16:00:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "132a9d4c12705b921e4989a0c5550462e42423b0",
          "body": null,
          "is_bot": false,
          "headline": "Update module.json",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-29T09:42:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b2e0428f4d1f9f8aff188af740f170a2f2ef961",
          "body": "…17.23\n\nBump lodash from 4.17.21 to 4.17.23",
          "is_bot": false,
          "headline": "Merge pull request #670 from humhub/dependabot/npm_and_yarn/lodash-4.…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-22T04:59:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6605a8afa4a65901310920090f75d3badb693dd3",
          "body": "Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.\n- [Release notes](https://github.com/lodash/lodash/releases)\n- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)\n\n---\nupdated-dependencies:\n- dependency-name: lodash\n  dependency-version: 4.17.23\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump lodash from 4.17.21 to 4.17.23",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-21T23:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "074b1f791bc986951967feeac14f2fffe92f6183",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/humhub/calendar",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2026-01-12T23:22:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "830b7da1a4f0276094cbc60e18eac195b271840c",
          "body": "Enh: Use core ScssHelper::getColorContrast()",
          "is_bot": false,
          "headline": "Merge pull request #651 from humhub/enh/use-scsshelper-getcolorcontrast",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-12T11:34:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b795de0028cd326f4869073fb9b80fff6635112",
          "body": null,
          "is_bot": false,
          "headline": "Merge master",
          "author_name": "Marc Farré",
          "author_login": "marc-farre",
          "committed_at": "2026-01-12T10:25:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d180eb17521f8c93d82bb56618bb5994e8741521",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG.md",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-08T11:01:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66cb7f82a74c49975540992695bb4269e9b79454",
          "body": null,
          "is_bot": false,
          "headline": "Update version from 1.8.8 to 1.8.10",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-08T11:00:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20eaa3437cbe77433ab5ab57a7db8ea1ab1d62f9",
          "body": "…d-layout\n\nFix: Participants pagination",
          "is_bot": false,
          "headline": "Merge pull request #662 from humhub/fix/969-participant-pagination-an…",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-08T10:56:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdd4cc44356c1f425aa07de3cded192600785c95",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into fix/969-participant-pagination-and-layout",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-08T10:56:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c5b5fdf87e44dec6d2e7e439bfe484c50aae33",
          "body": "Fix: Compatibility with HumHub 1.18-beta.6",
          "is_bot": false,
          "headline": "Merge pull request #667 from humhub/bs5-upgrade",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-08T10:55:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39b904335c9e0663ecda0c9ae8bb2ce8007e510a",
          "body": null,
          "is_bot": false,
          "headline": "Add second missing return type",
          "author_name": "Marc Farré",
          "author_login": "marc-farre",
          "committed_at": "2026-01-08T09:17:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5f96e169f49b6290041a5327ecaa001c2a7d982",
          "body": null,
          "is_bot": false,
          "headline": "Add PR ID to CHANGELOG",
          "author_name": "Marc Farré",
          "author_login": "marc-farre",
          "committed_at": "2026-01-07T18:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b53e2169ebbeb1a373b06980c487fe07a0813e4",
          "body": null,
          "is_bot": false,
          "headline": "Fix: Compatibility with HumHub 1.18-beta.6",
          "author_name": "Marc Farré",
          "author_login": "marc-farre",
          "committed_at": "2026-01-07T18:32:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8737936f29d7ce21cabe41822dbe73c97704a218",
          "body": "Bump qs from 6.11.1 to 6.14.1",
          "is_bot": false,
          "headline": "Merge pull request #666 from humhub/dependabot/npm_and_yarn/qs-6.14.1",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2026-01-01T10:32:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f3381e16037d2824022a21c150cdecd32926215",
          "body": "Bumps [qs](https://github.com/ljharb/qs) from 6.11.1 to 6.14.1.\n- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/ljharb/qs/compare/v6.11.1...v6.14.1)\n\n---\nupdated-dependencies:\n- dependency-name: qs\n  dependency-version: 6.14.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump qs from 6.11.1 to 6.14.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-01T09:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4b387f0bf7d44ec1dd36d3e8784be62c3d2f66d",
          "body": "Use module-coding-standards workflow actions",
          "is_bot": false,
          "headline": "Merge pull request #665 from humhub/enh/978-update-workflow-actions",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2025-12-24T22:41:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33dbb80b405800d62e3aacd815299e8305fc0672",
          "body": null,
          "is_bot": false,
          "headline": "Use module-coding-standards workflow actions",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2025-12-24T11:46:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "740ee6a3aa168fcf8e7d22450e8d489f52f0e8b5",
          "body": "Fix min HumHub version",
          "is_bot": false,
          "headline": "Merge pull request #664 from humhub/fix/min-humhub-version",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2025-12-19T08:43:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4baf989ef0603630069072bc2abc9248b7290da6",
          "body": "Mail Summary: User Language lost when adding an Event",
          "is_bot": false,
          "headline": "Merge pull request #663 from humhub/fix/mail-summary-language",
          "author_name": "Lucas Bartholemy",
          "author_login": "luke-",
          "committed_at": "2025-12-19T08:41:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c037fd88107e264d0ca04c0c13bf5b2076a6089",
          "body": null,
          "is_bot": false,
          "headline": "Mail Summary: User Language lost when adding an Event",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2025-12-19T07:29:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b867586274eded7589558ae15c00df4f6fc642b",
          "body": null,
          "is_bot": false,
          "headline": "Fix min HumHub version",
          "author_name": "Yuriy Bakhtin",
          "author_login": "yurabakhtin",
          "committed_at": "2025-12-19T05:54:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e921f72c3357efce99d15fc23999975e5e39bafd",
          "body": null,
          "is_bot": false,
          "headline": "Mail Summary: User Language lost when adding an Event",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2025-12-18T22:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f323cb1c077bfc1b4d705d42ec62595224bbf85",
          "body": null,
          "is_bot": false,
          "headline": "Mail Summary: User Language lost when adding an Event",
          "author_name": "gevorgmansuryan",
          "author_login": "gevorgmansuryan",
          "committed_at": "2025-12-18T22:38:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 88,
      "commits_last_year": 366,
      "latest_release_at": "2026-07-17T10:34:21Z",
      "latest_release_tag": "v1.8.16",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 43,
      "days_since_latest_release": 10,
      "mean_days_between_releases": 21.1
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 48,
      "stars": 31,
      "watchers": 19,
      "fork_history": {
        "days": [
          {
            "date": "2014-09-07",
            "count": 1
          },
          {
            "date": "2014-12-20",
            "count": 1
          },
          {
            "date": "2015-02-05",
            "count": 1
          },
          {
            "date": "2015-04-14",
            "count": 1
          },
          {
            "date": "2015-04-20",
            "count": 1
          },
          {
            "date": "2015-08-11",
            "count": 1
          },
          {
            "date": "2015-08-19",
            "count": 1
          },
          {
            "date": "2015-10-07",
            "count": 1
          },
          {
            "date": "2016-02-04",
            "count": 1
          },
          {
            "date": "2016-03-20",
            "count": 1
          },
          {
            "date": "2016-04-26",
            "count": 1
          },
          {
            "date": "2016-06-13",
            "count": 1
          },
          {
            "date": "2016-08-18",
            "count": 1
          },
          {
            "date": "2016-12-09",
            "count": 1
          },
          {
            "date": "2017-03-29",
            "count": 1
          },
          {
            "date": "2017-05-14",
            "count": 1
          },
          {
            "date": "2017-06-28",
            "count": 1
          },
          {
            "date": "2017-09-22",
            "count": 1
          },
          {
            "date": "2017-10-26",
            "count": 1
          },
          {
            "date": "2017-11-24",
            "count": 1
          },
          {
            "date": "2017-12-23",
            "count": 1
          },
          {
            "date": "2018-05-30",
            "count": 1
          },
          {
            "date": "2018-07-25",
            "count": 1
          },
          {
            "date": "2018-11-01",
            "count": 1
          },
          {
            "date": "2018-12-26",
            "count": 1
          },
          {
            "date": "2019-02-20",
            "count": 1
          },
          {
            "date": "2019-09-15",
            "count": 1
          },
          {
            "date": "2020-02-05",
            "count": 1
          },
          {
            "date": "2020-02-24",
            "count": 1
          },
          {
            "date": "2020-05-17",
            "count": 1
          },
          {
            "date": "2020-07-12",
            "count": 1
          },
          {
            "date": "2020-07-31",
            "count": 1
          },
          {
            "date": "2020-09-17",
            "count": 1
          },
          {
            "date": "2021-04-09",
            "count": 1
          },
          {
            "date": "2021-08-25",
            "count": 1
          },
          {
            "date": "2022-02-22",
            "count": 1
          },
          {
            "date": "2022-05-09",
            "count": 1
          },
          {
            "date": "2022-08-01",
            "count": 1
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2023-03-13",
            "count": 1
          },
          {
            "date": "2023-06-07",
            "count": 1
          },
          {
            "date": "2023-07-28",
            "count": 1
          },
          {
            "date": "2024-03-13",
            "count": 1
          },
          {
            "date": "2024-04-29",
            "count": 1
          },
          {
            "date": "2025-05-02",
            "count": 1
          },
          {
            "date": "2025-06-26",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 47,
        "total_forks": 48
      },
      "star_history": null,
      "open_issues_and_prs": 94
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 817395,
      "source_files_sampled": 539,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "composer.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-mh99-v99m-4gvg",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 4,
            "oldest_advisory_days": 413
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 42
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 159
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.5",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-952p-6rrq-rcjv"
            ],
            "fixed_version": "4.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 804
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3,
          "moderate": 1
        },
        "advisory_count": 10,
        "affected_count": 4,
        "assessed_count": 202,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 6,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "packagist"
      ],
      "dependencies": [
        {
          "name": "sabre/vobject",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^4"
        },
        {
          "name": "simshaun/recurr",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^4"
        },
        {
          "name": "sabre/xml",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^2"
        },
        {
          "name": "sabre/uri",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^2"
        },
        {
          "name": "sabre/dav",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "~4.6.0"
        },
        {
          "name": "@fullcalendar/core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.1"
        },
        {
          "name": "@fullcalendar/daygrid",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@fullcalendar/interaction",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@fullcalendar/list",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@fullcalendar/moment",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@fullcalendar/moment-timezone",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@fullcalendar/timegrid",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "moment",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.29.4"
        },
        {
          "name": "moment-timezone",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.5.35"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@fullcalendar/core",
            "direct": true,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/daygrid",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/interaction",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/list",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/moment",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/moment-timezone",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fullcalendar/timegrid",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "moment",
            "direct": true,
            "version": "2.29.4",
            "ecosystem": "npm"
          },
          {
            "name": "moment-timezone",
            "direct": true,
            "version": "0.5.35",
            "ecosystem": "npm"
          },
          {
            "name": "sabre/dav",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "sabre/uri",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "sabre/vobject",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "sabre/xml",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "simshaun/recurr",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "@parcel/watcher",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-android-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-freebsd-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-ia32",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "array-each",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-slice",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "2.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "body",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "clean-css",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "continuable-cache",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "dateformat",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "detect-file",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "error",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter2",
            "direct": false,
            "version": "0.4.14",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "exit-x",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "expand-tilde",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "faye-websocket",
            "direct": false,
            "version": "0.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fined",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flagged-respawn",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "for-in",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "for-own",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gaze",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "getobject",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "5.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "global-modules",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "global-prefix",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globule",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-cli",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-contrib-concat",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-contrib-cssmin",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-contrib-uglify",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-contrib-watch",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-known-options",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-log",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-log-utils",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-util",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-sass",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "gzip-size",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-ansi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "homedir-polyfill",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "hooker",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "http-parser-js",
            "direct": false,
            "version": "0.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "5.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-absolute",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-relative",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unc-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "liftup",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "livereload-js",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "make-iterator",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "map-cache",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "maxmin",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "node-addon-api",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "number-is-nan",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object.defaults",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object.map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.pick",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-homedir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "os-tmpdir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "osenv",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "parse-filepath",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parse-passwd",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-root",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-root-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-bytes",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-dir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-json-parse",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "1.89.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-template",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "0.10.31",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tiny-lr",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "unc-path-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "underscore.string",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "uri-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "v8flags",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "websocket-extensions",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "humhub/module-coding-standards",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 208,
        "direct_count": 14,
        "indirect_count": 194
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 5,
        "merged_prs": 286,
        "open_issues": 89,
        "closed_ratio": 0.759,
        "closed_issues": 281,
        "closed_unmerged_prs": 46
      },
      "bus_factor": 3,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "luke-",
          "commits": 555,
          "avatar_url": "https://avatars.githubusercontent.com/u/4736168?v=4"
        },
        {
          "type": "User",
          "login": "yurabakhtin",
          "commits": 291,
          "avatar_url": "https://avatars.githubusercontent.com/u/6995524?v=4"
        },
        {
          "type": "User",
          "login": "buddh4",
          "commits": 238,
          "avatar_url": "https://avatars.githubusercontent.com/u/9800854?v=4"
        },
        {
          "type": "User",
          "login": "gevorgmansuryan",
          "commits": 208,
          "avatar_url": "https://avatars.githubusercontent.com/u/11891855?v=4"
        },
        {
          "type": "User",
          "login": "humhub-bot",
          "commits": 127,
          "avatar_url": "https://avatars.githubusercontent.com/u/8708505?v=4"
        },
        {
          "type": "User",
          "login": "marc-farre",
          "commits": 75,
          "avatar_url": "https://avatars.githubusercontent.com/u/23310825?v=4"
        },
        {
          "type": "User",
          "login": "kesselb",
          "commits": 46,
          "avatar_url": "https://avatars.githubusercontent.com/u/3902676?v=4"
        },
        {
          "type": "User",
          "login": "Felli",
          "commits": 43,
          "avatar_url": "https://avatars.githubusercontent.com/u/2011633?v=4"
        },
        {
          "type": "User",
          "login": "felixhahnweilheim",
          "commits": 37,
          "avatar_url": "https://avatars.githubusercontent.com/u/84990763?v=4"
        },
        {
          "type": "User",
          "login": "dantefromhell",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/90508808?v=4"
        }
      ],
      "contributors_sampled": 24,
      "top_contributor_share": 0.326
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codeception-develop.yml",
        "codeception-master.yml",
        "codeception-min-version.yml",
        "codeception-next.yml",
        "marketplace-upload.yml",
        "php-cs-fixer.yml",
        "rector-auto-pr.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 7,
            "reason": "7 out of 9 merged PRs checked by a CI test -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 3,
            "reason": "Found 3/8 approved changesets -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 13 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 1 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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "10 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e04716b0fa39577cfa6b9d61551855c6e11d90ae",
        "ran_at": "2026-07-28T02:24:22Z",
        "aggregate_score": 4.6,
        "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-27T05:14:54Z",
      "oldest_open_prs": [
        {
          "number": 442,
          "created_at": "2024-01-17T12:29:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 545,
          "created_at": "2025-04-23T12:26:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 669,
          "created_at": "2026-01-21T11:47:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 684,
          "created_at": "2026-04-12T19:28:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 697,
          "created_at": "2026-05-25T07:25:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-24T11:27:36Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 6,
          "created_at": "2014-11-04T02:46:21Z",
          "last_comment_at": "2024-02-15T16:15:30Z",
          "last_comment_author": "luke-"
        },
        {
          "number": 48,
          "created_at": "2016-12-09T01:38:10Z",
          "last_comment_at": "2018-01-22T10:58:36Z",
          "last_comment_author": "blu-IT"
        },
        {
          "number": 101,
          "created_at": "2017-12-03T20:48:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 127,
          "created_at": "2018-04-04T07:11:05Z",
          "last_comment_at": "2019-02-04T19:41:40Z",
          "last_comment_author": "rcheetah"
        },
        {
          "number": 129,
          "created_at": "2018-04-17T09:25:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 130,
          "created_at": "2018-04-19T08:36:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 131,
          "created_at": "2018-04-19T08:53:08Z",
          "last_comment_at": "2020-03-13T01:43:41Z",
          "last_comment_author": "001101"
        },
        {
          "number": 142,
          "created_at": "2018-07-26T15:26:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 150,
          "created_at": "2019-03-26T22:51:53Z",
          "last_comment_at": "2020-01-17T16:48:44Z",
          "last_comment_author": "buddh4"
        },
        {
          "number": 151,
          "created_at": "2019-04-09T18:45:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 169,
          "created_at": "2020-01-21T15:36:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 170,
          "created_at": "2020-01-24T14:54:07Z",
          "last_comment_at": "2020-03-05T16:23:09Z",
          "last_comment_author": "buddh4"
        },
        {
          "number": 179,
          "created_at": "2020-04-21T07:47:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 180,
          "created_at": "2020-04-23T09:48:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 181,
          "created_at": "2020-04-23T10:23:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 183,
          "created_at": "2020-05-02T08:51:40Z",
          "last_comment_at": "2023-01-02T16:29:34Z",
          "last_comment_author": "luke-"
        },
        {
          "number": 184,
          "created_at": "2020-05-05T13:34:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 194,
          "created_at": "2020-07-31T11:58:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 196,
          "created_at": "2020-08-04T07:42:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 197,
          "created_at": "2020-08-06T10:47:56Z",
          "last_comment_at": "2025-02-12T10:37:56Z",
          "last_comment_author": "marc-farre"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/humhub/calendar",
    "host": "github.com",
    "name": "calendar",
    "owner": "humhub"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 57,
        "vitality": 96,
        "community": 36,
        "governance": 73,
        "engineering": 67
      },
      "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": 94,
            "inputs": {
              "commits_last_year": 366,
              "human_commit_share": 0.91,
              "days_since_last_push": 3,
              "active_weeks_last_year": 43
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "43/52 weeks with commits",
                "points": 29.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 43
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "366 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 366
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 1 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": 88,
              "latest_release_tag": "v1.8.16",
              "releases_from_tags": false,
              "days_since_latest_release": 10,
              "mean_days_between_releases": 21.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "88 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 88
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 10 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~21.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 21.1
                    }
                  }
                ],
                "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": 3,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 3 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "forks": 48,
              "stars": 31,
              "watchers": 19,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "31 stars",
                "points": 24,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 31
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "48 forks",
                "points": 13.9,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 48
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "19 watchers",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 73,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 24,
              "top_contributor_share": 0.326
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 33% of commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 33
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "24 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 13 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 286,
              "open_issues": 89,
              "closed_issues": 281,
              "issue_closed_ratio": 0.759,
              "closed_unmerged_prs": 46
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "76% of issues closed",
                "points": 35.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 76
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "286/332 decided PRs merged",
                "points": 33,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 286,
                      "decided": 332
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/8 approved changesets -- score normalized to 3",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "followers": 157,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "humhub",
              "public_repos": 47,
              "account_age_days": 4596
            },
            "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": "157 followers of humhub",
                "points": 15.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 157,
                      "login": "humhub"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "47 public repos, account ~12 yr old",
                "points": 24.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 47
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 67,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "7 out of 9 merged PRs checked by a CI test -- score normalized to 7",
                "points": 14,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 57,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 4.6
            },
            "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": "7 out of 9 merged PRs checked by a CI test -- score normalized to 7",
                "points": 1.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 3/8 approved changesets -- score normalized to 3",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 13 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 1 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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "10 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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 202 resolved dependencies against OSV; 6 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": 202
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 6
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 10,
              "affected_packages": 4,
              "assessed_packages": 202,
              "unassessed_packages": 6,
              "affected_by_severity": "high 3, moderate 1",
              "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": 202,
              "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": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 35,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.341,
              "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": "31 of 91 human commits state their intent (structured subject or explanatory body)",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 31,
                      "sampled": 91
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.09
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "9 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 9,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 817395,
              "source_files_sampled": 539,
              "oversized_source_files": 1
            },
            "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": "1/539 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 539,
                      "oversized": 1
                    }
                  }
                ],
                "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",
    "Could not fetch npm package 'humhub-modules-calendar' from its registry",
    "Could not fetch packagist package 'humhub/humhub-calendar' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T02:24:45.529531Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/humhub/calendar.svg",
  "full_name": "humhub/calendar",
  "license_state": "absent",
  "license_spdx": null
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statistics.