Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-23 12:41 UTC

ForestAdmin / forest-rails

💎 Ruby on Rails agent for Forest Admin to integrate directly to your existing Ruby on Rails backend application.

RubyGPL-3.0★ 385 stars⑂ 83 forkssince Aug 2015View on GitHub ↗

ForestAdmin/forest-rails holds a health index of 71 out of 100, placing it in the Good band. It scores highest on Vitality (84/100) and lowest on AI Readiness (44/100). It was last updated today. 2 contributors account for most of its recent work.

71
overall / 100
Good

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.

71
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

ForestAdminOrganization
85 followers87 public repossince Aug 2015

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
RubyGemsforest_liana9.20.1-5380 days ago

Metrics by category

Vitality

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

84Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
11.8/36Commit cadence — 17/52 weeks with commits
15.8/18Commit volume — 57 commits in the last year
10/10OpenSSF Scorecard: Maintained — 25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year57
human_commit_share1
days_since_last_push0
active_weeks_last_year17

Release discipline

100Excellent
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~7 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tagv9.20.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases7
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?

69Moderate · 18% of overall
How it's scored
41.9/60Stars — 385 stars
16/25Forks — 83 forks
5.8/15Watchers — 12 watchers
Inputs used
forks83
stars385
watchers12
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (GPL-3.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
7.2/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateyes
has_code_of_conductno
has_pull_request_templateyes
How it's scored
67/80Total downloads — 2,777,110 downloads all-time across rubygems
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesforest_liana
dependents
ecosystemsrubygems
total_downloads2,777,110
monthly_downloads
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

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

74Good · 24% of overall
How it's scored
25.2/54Bus factor — 2 contributor(s) cover half of all commits
14.3/22.5Commit distribution — top contributor authored 36% of commits
13.5/13.5Contributor breadth — 51 contributors
10/10OpenSSF Scorecard: Contributors — project has 8 contributing companies or organizations
Inputs used
bus_factor2
contributors_sampled51
top_contributor_share0.364
How it's scored
31.6/46.8Issue resolution — 68% of issues closed
33.5/38.3PR acceptance — 531/607 decided PRs merged
7.5/15OpenSSF Scorecard: Code-Review — Found 14/27 approved changesets -- score normalized to 5
Inputs used
merged_prs531
open_issues49
closed_issues102
issue_closed_ratio0.675
closed_unmerged_prs76
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
13.9/25Owner reach — 85 followers of ForestAdmin
25/25Track record — 87 public repos, account ~10 yr old
Inputs used
followers85
owner_typeOrganization
is_verified
owner_loginForestAdmin
public_repos87
account_age_days4,003
How it's scored
25/25Published & resolvable — 1 package(s) on rubygems
35/35Publish recency — latest publish 0 days ago
20/20Version history — 538 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesforest_liana
ecosystemsrubygems
any_deprecatedno
min_days_since_publish0

Engineering Quality

Are baseline engineering and documentation practices in place?

67Moderate · 20% of overall
How it's scored
24/24CI workflows — 1 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 14 out of 14 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

65Moderate
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://www.forestadmin.com
10/10Repository description
10/10Topics — 9 topics
0/10Wiki
Inputs used
topicsadmin, rails, gem, admin-panel, internal-tool, ruby, ruby-on-rails, backend, backend-api
has_wikino
homepagehttps://www.forestadmin.com
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

55Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
2.5/2.5CI-Tests — 14 out of 14 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
3.8/7.5Code-Review — Found 14/27 approved changesets -- score normalized to 5
2.5/2.5Contributors — project has 8 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
2.5/2.5License — license file detected
7.5/7.5Maintained — 25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 99 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate5.8
Excluded from scoring (no data or not applicable): branch_protection, packaging, signed_releases. Remaining weights renormalized.
How it's scored
6.9/35Direct dependencies free of known advisories — 5 affected: concurrent-ruby 1.3.4 (high 7.5), httparty 0.21.0 (high 8.2), json 2.15.1 (high 8.2), +2 more
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
25.4/40No advisories left outstanding — 3 advisory-carrying package(s) unaddressed past 90 days; oldest published 211 days ago
Inputs used
sourceosv
advisories110
affected_packages37
assessed_packages718
unassessed_packages14
affected_by_severitycritical 2, high 20, moderate 11, low 4
direct_affected_packages5
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 718 resolved dependencies against OSV. 14 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.

44At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 100 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
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
10/10Demonstrated agent practice — 10 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Inputs used
has_nixno
has_testsyes
lockfilesGemfile.lock, yarn.lock
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0.1
toolchain_manifests
dependency_bot_commit_share0
How it's scored
0/45Type-checkable code — Ruby without a type-check config
55/55Manageable file sizes — 0/288 source files over 60KB
Inputs used
primary_languageRuby
largest_source_bytes27,760
source_files_sampled288
oversized_source_files0

Key facts

385GitHub stars
51contributors
57commits, last 12 months
0days since last push
100releases
2bus factor
49open issues
npm, RubyGemspackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'forest-rails' from its registry

More detail

Star and fork history 0 ★ / 83 ⇿
0Stars
83Forks
88Releases

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.

0204060801008332016-092021-052026-01
Major 0Minor 17Patch 71

Each point covers 9 days.

OpenSSF Scorecard 5.8 / 10
5.8aggregate

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-23 12:40 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
10CI-Tests14 out of 14 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
5Code-ReviewFound 14/27 approved changesets -- score normalized to 5
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities99 existing vulnerabilities detected
Direct dependencies 15
RegistryPackageVersion constraintManifest
RubyGemsrails6.1.7.9Gemfile
RubyGemsconcurrent-ruby1.3.4Gemfile
RubyGemsforestadmin-jsonapi-serializersGemfile
RubyGemsrack-corsGemfile
RubyGemsgroupdate5.2.2Gemfile
RubyGemsuseragentGemfile
RubyGemsjwtGemfile
RubyGemsbcryptGemfile
RubyGemshttparty0.21.0Gemfile
RubyGemsipaddress0.8.3Gemfile
RubyGemsopenid_connect1.4.2Gemfile
RubyGemsjsonGemfile
RubyGemsjson-jwt>= 1.16Gemfile
RubyGemsdeepsortGemfile
RubyGemsostructGemfile
All dependencies 732

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

RegistryPackageVersionRelation
RubyGemsbcryptdirect
RubyGemsbcrypt3.1.20direct
RubyGemsconcurrent-ruby1.3.4direct
RubyGemsdeepsortdirect
RubyGemsdeepsort0.5.0direct
RubyGemsforestadmin-jsonapi-serializersdirect
RubyGemsforestadmin-jsonapi-serializers2.0.0.pre.beta.2direct
RubyGemsgroupdatedirect
RubyGemsgroupdate5.2.2direct
RubyGemshttpartydirect
RubyGemshttparty0.21.0direct
RubyGemsipaddressdirect
RubyGemsipaddress0.8.3direct
RubyGemsjsondirect
RubyGemsjson2.15.1direct
RubyGemsjson-jwtdirect
RubyGemsjson-jwt1.17.0direct
RubyGemsjwtdirect
RubyGemsjwt3.1.2direct
RubyGemsopenid_connect1.4.2direct
RubyGemsostructdirect
RubyGemsostruct0.6.3direct
RubyGemsrack-corsdirect
RubyGemsrack-cors2.0.2direct
RubyGemsrailsdirect
RubyGemsrails6.1.7.9direct
RubyGemsuseragentdirect
RubyGemsuseragent0.16.11direct
npm@babel/code-frame7.8.3indirect
npm@babel/helper-validator-identifier7.9.5indirect
npm@babel/highlight7.9.0indirect
npm@colors/colors1.5.0indirect
npm@commitlint/cli17.4.2indirect
npm@commitlint/config-conventional17.4.2indirect
npm@commitlint/config-validator17.8.1indirect
npm@commitlint/ensure17.8.1indirect
npm@commitlint/execute-rule17.8.1indirect
npm@commitlint/format17.8.1indirect
npm@commitlint/is-ignored17.8.1indirect
npm@commitlint/lint17.8.1indirect
npm@commitlint/load17.8.1indirect
npm@commitlint/message17.8.1indirect
npm@commitlint/parse17.8.1indirect
npm@commitlint/read17.8.1indirect
npm@commitlint/resolve-extends17.8.1indirect
npm@commitlint/rules17.8.1indirect
npm@commitlint/to-lines17.8.1indirect
npm@commitlint/top-level17.8.1indirect
npm@commitlint/types17.8.1indirect
npm@cspotcode/source-map-support0.8.1indirect
npm@gar/promisify1.1.3indirect
npm@isaacs/string-locale-compare1.1.0indirect
npm@jridgewell/resolve-uri3.1.2indirect
npm@jridgewell/sourcemap-codec1.4.15indirect
npm@jridgewell/trace-mapping0.3.9indirect
npm@nodelib/fs.scandir2.1.5indirect
npm@nodelib/fs.stat2.0.5indirect
npm@nodelib/fs.walk1.2.8indirect
npm@npmcli/arborist5.6.3indirect
npm@npmcli/ci-detect2.0.0indirect
npm@npmcli/config4.2.2indirect
npm@npmcli/disparity-colors2.0.0indirect
npm@npmcli/fs2.1.0indirect
npm@npmcli/fs2.1.2indirect
npm@npmcli/git3.0.1indirect
npm@npmcli/installed-package-contents1.0.7indirect
npm@npmcli/map-workspaces2.0.3indirect
npm@npmcli/metavuln-calculator3.1.0indirect
npm@npmcli/move-file2.0.0indirect
npm@npmcli/name-from-folder1.0.1indirect
npm@npmcli/node-gyp2.0.0indirect
npm@npmcli/package-json2.0.0indirect
npm@npmcli/promise-spawn3.0.0indirect
npm@npmcli/query1.2.0indirect
npm@npmcli/run-script3.0.2indirect
npm@npmcli/run-script4.2.1indirect
npm@octokit/auth-token2.5.0indirect
npm@octokit/core3.6.0indirect
npm@octokit/endpoint6.0.12indirect
npm@octokit/graphql4.8.0indirect
npm@octokit/openapi-types11.2.0indirect
npm@octokit/plugin-paginate-rest2.17.0indirect
npm@octokit/plugin-request-log1.0.4indirect
npm@octokit/plugin-rest-endpoint-methods5.13.0indirect
npm@octokit/request5.6.3indirect
npm@octokit/request-error2.1.0indirect
npm@octokit/rest18.12.0indirect
npm@octokit/types6.34.0indirect
npm@semantic-release/changelog6.0.1indirect
npm@semantic-release/commit-analyzer9.0.2indirect
npm@semantic-release/error2.2.0indirect
npm@semantic-release/error3.0.0indirect
npm@semantic-release/exec6.0.3indirect
npm@semantic-release/git10.0.1indirect
npm@semantic-release/github8.0.4indirect
npm@semantic-release/npm9.0.1indirect
npm@semantic-release/release-notes-generator10.0.3indirect
npm@tootallnate/once2.0.0indirect
npm@tsconfig/node101.0.9indirect
npm@tsconfig/node121.0.11indirect
npm@tsconfig/node141.0.3indirect
npm@tsconfig/node161.0.4indirect
npm@types/color-name1.1.1indirect
npm@types/mdast3.0.10indirect
npm@types/minimist1.2.2indirect
npm@types/node20.5.1indirect
npm@types/normalize-package-data2.4.1indirect
npm@types/parse-json4.0.0indirect
npm@types/retry0.12.0indirect
npm@types/unist2.0.6indirect
npmabbrev1.1.1indirect
npmacorn8.11.3indirect
npmacorn-walk8.3.2indirect
npmagent-base6.0.2indirect
npmagentkeepalive4.2.1indirect
npmaggregate-error3.1.0indirect
npmajv8.12.0indirect
npmansi-escapes5.0.0indirect
npmansi-regex5.0.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.2.1indirect
npmansi-styles4.3.0indirect
npmansicolors0.3.2indirect
npmaproba2.0.0indirect
npmarchy1.0.0indirect
npmare-we-there-yet3.0.0indirect
npmarg4.1.3indirect
npmargparse2.0.1indirect
npmargv-formatter1.0.0indirect
npmarray-ify1.0.0indirect
npmarray-union2.1.0indirect
npmarrify1.0.1indirect
npmasap2.0.6indirect
npmat-least-node1.0.0indirect
npmbail1.0.5indirect
npmbalanced-match1.0.2indirect
npmbefore-after-hook2.2.2indirect
npmbin-links3.0.3indirect
npmbinary-extensions2.2.0indirect
npmbottleneck2.19.5indirect
npmbrace-expansion1.1.11indirect
npmbrace-expansion2.0.1indirect
npmbraces3.0.3indirect
npmbuiltins5.0.1indirect
npmcacache16.0.7indirect
npmcacache16.1.3indirect
npmcallsites3.1.0indirect
npmcamelcase5.3.1indirect
npmcamelcase-keys6.2.2indirect
npmcardinal2.1.1indirect
npmccount1.1.0indirect
npmchalk2.4.2indirect
npmchalk4.0.0indirect
npmchalk4.1.2indirect
npmchalk5.0.1indirect
npmcharacter-entities1.2.4indirect
npmcharacter-entities-legacy1.1.4indirect
npmcharacter-reference-invalid1.1.4indirect
npmchownr2.0.0indirect
npmcidr-regex3.1.1indirect
npmclean-stack2.2.0indirect
npmcli-columns4.0.0indirect
npmcli-table30.6.2indirect
npmcliui7.0.4indirect
npmcliui8.0.1indirect
npmclone1.0.4indirect
npmcmd-shim5.0.0indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcolor-support1.1.3indirect
npmcolumnify1.6.0indirect
npmcommon-ancestor-path1.0.1indirect
npmcompare-func2.0.0indirect
npmconcat-map0.0.1indirect
npmconsole-control-strings1.1.0indirect
npmconventional-changelog-angular5.0.12indirect
npmconventional-changelog-angular6.0.0indirect
npmconventional-changelog-conventionalcommits5.0.0indirect
npmconventional-changelog-writer5.0.1indirect
npmconventional-commits-filter2.0.7indirect
npmconventional-commits-parser3.2.4indirect
npmconventional-commits-parser4.0.0indirect
npmcore-util-is1.0.2indirect
npmcosmiconfig7.0.0indirect
npmcosmiconfig8.3.6indirect
npmcosmiconfig-typescript-loader4.4.0indirect
npmcreate-require1.1.1indirect
npmcross-spawn7.0.6indirect
npmcrypto-random-string2.0.0indirect
npmcssesc3.0.0indirect
npmdargs7.0.0indirect
npmdateformat3.0.3indirect
npmdebug4.3.4indirect
npmdebuglog1.0.1indirect
npmdecamelize1.2.0indirect
npmdecamelize-keys1.1.0indirect
npmdeep-extend0.6.0indirect
npmdefaults1.0.3indirect
npmdel6.0.0indirect
npmdelegates1.0.0indirect
npmdepd1.1.2indirect
npmdeprecation2.3.1indirect
npmdezalgo1.0.4indirect
npmdiff4.0.2indirect
npmdiff5.2.0indirect
npmdir-glob3.0.1indirect
npmdot-prop5.3.0indirect
npmduplexer20.1.4indirect
npmemoji-regex8.0.0indirect
npmencoding0.1.13indirect
npmend-of-stream1.4.4indirect
npmenv-ci5.5.0indirect
npmenv-paths2.2.1indirect
npmerr-code2.0.3indirect
npmerror-ex1.3.2indirect
npmescalade3.1.1indirect
npmescape-string-regexp1.0.5indirect
npmescape-string-regexp4.0.0indirect
npmesprima4.0.1indirect
npmexeca4.1.0indirect
npmexeca5.1.1indirect
npmexponential-backoff3.1.1indirect
npmextend3.0.2indirect
npmfast-deep-equal3.1.3indirect
npmfast-glob3.2.11indirect
npmfastest-levenshtein1.0.12indirect
npmfastq1.13.0indirect
npmfigures2.0.0indirect
npmfigures3.2.0indirect
npmfill-range7.1.1indirect
npmfind-up2.1.0indirect
npmfind-up4.1.0indirect
npmfind-up5.0.0indirect
npmfind-versions4.0.0indirect
npmfrom22.3.0indirect
npmfromentries1.3.2indirect
npmfs-extra10.1.0indirect
npmfs-extra11.2.0indirect
npmfs-extra9.0.0indirect
npmfs-extra9.1.0indirect
npmfs-minipass2.1.0indirect
npmfs.realpath1.0.0indirect
npmfunction-bind1.1.1indirect
npmgauge4.0.4indirect
npmget-caller-file2.0.5indirect
npmget-stream5.2.0indirect
npmget-stream6.0.1indirect
npmgit-log-parser1.2.0indirect
npmgit-raw-commits2.0.11indirect
npmglob7.2.0indirect
npmglob8.0.1indirect
npmglob-parent5.1.2indirect
npmglobal-dirs0.1.1indirect
npmglobby11.1.0indirect
npmgraceful-fs4.2.10indirect
npmgraceful-fs4.2.3indirect
npmgraceful-fs4.2.4indirect
npmhandlebars4.7.7indirect
npmhard-rejection2.1.0indirect
npmhas1.0.3indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-unicode2.0.1indirect
npmhook-std2.0.0indirect
npmhosted-git-info2.8.9indirect
npmhosted-git-info4.1.0indirect
npmhosted-git-info5.0.0indirect
npmhosted-git-info5.2.1indirect
npmhttp-cache-semantics4.1.1indirect
npmhttp-proxy-agent5.0.0indirect
npmhttps-proxy-agent5.0.1indirect
npmhuman-signals1.1.1indirect
npmhuman-signals2.1.0indirect
npmhumanize-ms1.2.1indirect
npmhusky7.0.0indirect
npmiconv-lite0.6.3indirect
npmignore5.2.0indirect
npmignore-walk5.0.1indirect
npmimport-fresh3.2.1indirect
npmimport-fresh3.2.2indirect
npmimport-fresh3.3.0indirect
npmimport-from4.0.0indirect
npmimurmurhash0.1.4indirect
npmindent-string4.0.0indirect
npminfer-owner1.0.4indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npmini1.3.8indirect
npmini3.0.0indirect
npmini3.0.1indirect
npminit-package-json3.0.2indirect
npminto-stream6.0.0indirect
npmip1.1.9indirect
npmip-regex4.3.0indirect
npmis-alphabetical1.0.4indirect
npmis-alphanumerical1.0.4indirect
npmis-arrayish0.2.1indirect
npmis-buffer2.0.5indirect
npmis-cidr4.0.2indirect
npmis-core-module2.9.0indirect
npmis-decimal1.0.4indirect
npmis-extglob2.1.1indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-glob4.0.3indirect
npmis-hexadecimal1.0.4indirect
npmis-lambda1.0.1indirect
npmis-number7.0.0indirect
npmis-obj2.0.0indirect
npmis-path-cwd2.2.0indirect
npmis-path-inside3.0.3indirect
npmis-plain-obj1.1.0indirect
npmis-plain-obj2.1.0indirect
npmis-plain-object5.0.0indirect
npmis-stream2.0.1indirect
npmis-text-path1.0.1indirect
npmisarray1.0.0indirect
npmisexe2.0.0indirect
npmissue-parser6.0.0indirect
npmjava-properties1.0.2indirect
npmjs-tokens4.0.0indirect
npmjs-yaml4.1.0indirect
npmjson-parse-better-errors1.0.2indirect
npmjson-parse-even-better-errors2.3.1indirect
npmjson-schema-traverse1.0.0indirect
npmjson-stringify-nice1.1.4indirect
npmjson-stringify-safe5.0.1indirect
npmjsonfile6.0.1indirect
npmjsonparse1.3.1indirect
npmJSONStream1.3.5indirect
npmjust-diff5.0.2indirect
npmjust-diff-apply5.2.0indirect
npmkind-of6.0.3indirect
npmlibnpmaccess6.0.4indirect
npmlibnpmdiff4.0.5indirect
npmlibnpmexec4.0.14indirect
npmlibnpmfund3.0.5indirect
npmlibnpmhook8.0.4indirect
npmlibnpmorg4.0.4indirect
npmlibnpmpack4.1.3indirect
npmlibnpmpublish6.0.5indirect
npmlibnpmsearch5.0.4indirect
npmlibnpmteam4.0.4indirect
npmlibnpmversion3.0.7indirect
npmlines-and-columns1.1.6indirect
npmload-json-file4.0.0indirect
npmlocate-path2.0.0indirect
npmlocate-path5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash4.17.21indirect
npmlodash.camelcase4.3.0indirect
npmlodash.capitalize4.2.1indirect
npmlodash.escaperegexp4.1.2indirect
npmlodash.isfunction3.0.9indirect
npmlodash.ismatch4.4.0indirect
npmlodash.isplainobject4.0.6indirect
npmlodash.isstring4.0.1indirect
npmlodash.kebabcase4.1.1indirect
npmlodash.merge4.6.2indirect
npmlodash.mergewith4.6.2indirect
npmlodash.snakecase4.1.1indirect
npmlodash.startcase4.4.0indirect
npmlodash.uniq4.5.0indirect
npmlodash.uniqby4.7.0indirect
npmlodash.upperfirst4.3.1indirect
npmlongest-streak2.0.4indirect
npmlru-cache6.0.0indirect
npmlru-cache7.9.0indirect
npmmake-error1.3.6indirect
npmmake-fetch-happen10.1.3indirect
npmmake-fetch-happen10.2.1indirect
npmmap-obj1.0.1indirect
npmmap-obj4.3.0indirect
npmmarkdown-table2.0.0indirect
npmmarked4.0.15indirect
npmmarked-terminal5.1.1indirect
npmmdast-util-find-and-replace1.1.1indirect
npmmdast-util-from-markdown0.8.5indirect
npmmdast-util-gfm0.1.2indirect
npmmdast-util-gfm-autolink-literal0.1.3indirect
npmmdast-util-gfm-strikethrough0.2.3indirect
npmmdast-util-gfm-table0.1.6indirect
npmmdast-util-gfm-task-list-item0.1.6indirect
npmmdast-util-to-markdown0.6.5indirect
npmmdast-util-to-string2.0.0indirect
npmmeow8.1.2indirect
npmmerge-stream2.0.0indirect
npmmerge21.4.1indirect
npmmicromark2.11.4indirect
npmmicromark-extension-gfm0.3.3indirect
npmmicromark-extension-gfm-autolink-literal0.5.7indirect
npmmicromark-extension-gfm-strikethrough0.6.5indirect
npmmicromark-extension-gfm-table0.4.3indirect
npmmicromark-extension-gfm-tagfilter0.3.0indirect
npmmicromark-extension-gfm-task-list-item0.3.3indirect
npmmicromatch4.0.8indirect
npmmime3.0.0indirect
npmmimic-fn2.1.0indirect
npmmin-indent1.0.1indirect
npmminimatch3.1.2indirect
npmminimatch5.0.1indirect
npmminimatch5.1.6indirect
npmminimist1.2.6indirect
npmminimist1.2.8indirect
npmminimist-options4.1.0indirect
npmminipass3.1.6indirect
npmminipass5.0.0indirect
npmminipass-collect1.0.2indirect
npmminipass-fetch2.1.0indirect
npmminipass-flush1.0.5indirect
npmminipass-json-stream1.0.1indirect
npmminipass-pipeline1.2.4indirect
npmminipass-sized1.0.3indirect
npmminizlib2.1.2indirect
npmmkdirp1.0.4indirect
npmmkdirp-infer-owner2.0.0indirect
npmmodify-values1.0.1indirect
npmms2.1.2indirect
npmms2.1.3indirect
npmmute-stream0.0.8indirect
npmnegotiator0.6.3indirect
npmneo-async2.6.2indirect
npmnerf-dart1.0.0indirect
npmnode-emoji1.11.0indirect
npmnode-fetch2.6.7indirect
npmnode-gyp9.0.0indirect
npmnode-gyp9.4.1indirect
npmnopt5.0.0indirect
npmnopt6.0.0indirect
npmnormalize-package-data2.5.0indirect
npmnormalize-package-data3.0.3indirect
npmnormalize-package-data4.0.0indirect
npmnormalize-url6.1.0indirect
npmnpm8.19.4indirect
npmnpm-audit-report3.0.0indirect
npmnpm-bundled1.1.2indirect
npmnpm-bundled2.0.1indirect
npmnpm-install-checks5.0.0indirect
npmnpm-normalize-package-bin1.0.1indirect
npmnpm-normalize-package-bin2.0.0indirect
npmnpm-package-arg9.0.2indirect
npmnpm-package-arg9.1.2indirect
npmnpm-packlist5.0.3indirect
npmnpm-packlist5.1.3indirect
npmnpm-pick-manifest7.0.1indirect
npmnpm-pick-manifest7.0.2indirect
npmnpm-profile6.2.1indirect
npmnpm-registry-fetch13.1.1indirect
npmnpm-registry-fetch13.3.1indirect
npmnpm-run-path4.0.1indirect
npmnpm-user-validate1.0.1indirect
npmnpmlog6.0.2indirect
npmonce1.4.0indirect
npmonetime5.1.2indirect
npmopener1.5.2indirect
npmp-each-series2.2.0indirect
npmp-filter2.1.0indirect
npmp-is-promise3.0.0indirect
npmp-limit1.3.0indirect
npmp-limit2.3.0indirect
npmp-limit3.1.0indirect
npmp-locate2.0.0indirect
npmp-locate4.1.0indirect
npmp-locate5.0.0indirect
npmp-map2.1.0indirect
npmp-map4.0.0indirect
npmp-reduce2.1.0indirect
npmp-retry4.6.2indirect
npmp-try1.0.0indirect
npmp-try2.2.0indirect
npmpacote13.3.0indirect
npmpacote13.6.2indirect
npmparent-module1.0.1indirect
npmparse-conflict-json2.0.2indirect
npmparse-entities2.0.0indirect
npmparse-json4.0.0indirect
npmparse-json5.0.0indirect
npmparse-json5.2.0indirect
npmpath-exists3.0.0indirect
npmpath-exists4.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-type4.0.0indirect
npmpicomatch2.3.1indirect
npmpify3.0.0indirect
npmpkg-conf2.1.0indirect
npmpostcss-selector-parser6.0.15indirect
npmproc-log2.0.1indirect
npmprocess-nextick-args2.0.1indirect
npmpromise-all-reject-late1.0.1indirect
npmpromise-call-limit1.0.1indirect
npmpromise-inflight1.0.1indirect
npmpromise-retry2.0.1indirect
npmpromzard0.3.0indirect
npmpump3.0.0indirect
npmpunycode2.3.1indirect
npmq1.5.1indirect
npmqrcode-terminal0.12.0indirect
npmqueue-microtask1.2.3indirect
npmquick-lru4.0.1indirect
npmrc1.2.8indirect
npmread1.0.7indirect
npmread-cmd-shim3.0.0indirect
npmread-package-json5.0.1indirect
npmread-package-json5.0.2indirect
npmread-package-json-fast2.0.3indirect
npmread-pkg5.2.0indirect
npmread-pkg-up7.0.1indirect
npmreadable-stream2.3.7indirect
npmreadable-stream3.6.0indirect
npmreaddir-scoped-modules1.1.0indirect
npmredent3.0.0indirect
npmredeyed2.1.1indirect
npmregistry-auth-token4.2.1indirect
npmremark-gfm1.0.0indirect
npmremark-parse9.0.0indirect
npmremark-stringify9.0.1indirect
npmrepeat-string1.6.1indirect
npmrequire-directory2.1.1indirect
npmrequire-from-string2.0.2indirect
npmresolve1.15.1indirect
npmresolve-from4.0.0indirect
npmresolve-from5.0.0indirect
npmresolve-global1.0.0indirect
npmretry0.12.0indirect
npmretry0.13.1indirect
npmreusify1.0.4indirect
npmrimraf3.0.2indirect
npmrun-parallel1.2.0indirect
npmsafe-buffer5.1.2indirect
npmsafe-buffer5.2.0indirect
npmsafer-buffer2.1.2indirect
npmsemantic-release19.0.5indirect
npmsemantic-release-rubygem1.2.0indirect
npmsemantic-release-slack-bot3.5.2indirect
npmsemver5.7.2indirect
npmsemver6.3.1indirect
npmsemver7.5.4indirect
npmsemver7.6.0indirect
npmsemver-diff3.1.1indirect
npmsemver-regex3.1.4indirect
npmset-blocking2.0.0indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmsignal-exit3.0.7indirect
npmsignale1.4.0indirect
npmslackify-markdown4.3.1indirect
npmslash3.0.0indirect
npmsmart-buffer4.2.0indirect
npmsocks2.6.2indirect
npmsocks-proxy-agent6.2.0indirect
npmsocks-proxy-agent7.0.0indirect
npmsource-map0.6.1indirect
npmspawn-error-forwarder1.0.0indirect
npmspdx-correct3.1.0indirect
npmspdx-exceptions2.2.0indirect
npmspdx-expression-parse3.0.0indirect
npmspdx-license-ids3.0.5indirect
npmsplit1.0.1indirect
npmsplit21.0.0indirect
npmsplit23.2.2indirect
npmssri9.0.0indirect
npmssri9.0.1indirect
npmstream-combiner21.1.1indirect
npmstring-width4.2.0indirect
npmstring-width4.2.3indirect
npmstring_decoder1.1.1indirect
npmstring_decoder1.3.0indirect
npmstrip-ansi6.0.0indirect
npmstrip-ansi6.0.1indirect
npmstrip-bom3.0.0indirect
npmstrip-final-newline2.0.0indirect
npmstrip-indent3.0.0indirect
npmstrip-json-comments2.0.1indirect
npmsupports-color5.5.0indirect
npmsupports-color7.1.0indirect
npmsupports-color7.2.0indirect
npmsupports-hyperlinks2.2.0indirect
npmtar6.2.1indirect
npmtemp-dir2.0.0indirect
npmtempy0.5.0indirect
npmtempy1.0.1indirect
npmtext-extensions1.9.0indirect
npmtext-table0.2.0indirect
npmthrough2.3.8indirect
npmthrough22.0.5indirect
npmthrough24.0.2indirect
npmtiny-relative-date1.3.0indirect
npmto-regex-range5.0.1indirect
npmtr460.0.3indirect
npmtraverse0.6.6indirect
npmtreeverse2.0.0indirect
npmtrim-newlines3.0.1indirect
npmtrough1.0.5indirect
npmts-node10.9.2indirect
npmtype-fest0.12.0indirect
npmtype-fest0.16.0indirect
npmtype-fest0.18.1indirect
npmtype-fest0.6.0indirect
npmtype-fest0.8.1indirect
npmtype-fest1.4.0indirect
npmtypescript5.3.3indirect
npmuglify-js3.15.4indirect
npmunified9.2.2indirect
npmunique-filename1.1.1indirect
npmunique-filename2.0.1indirect
npmunique-slug2.0.2indirect
npmunique-slug3.0.0indirect
npmunique-string2.0.0indirect
npmunist-util-is4.1.0indirect
npmunist-util-remove2.1.0indirect
npmunist-util-stringify-position2.0.3indirect
npmunist-util-visit2.0.3indirect
npmunist-util-visit-parents3.1.1indirect
npmuniversal-user-agent6.0.0indirect
npmuniversalify1.0.0indirect
npmuniversalify2.0.0indirect
npmuri-js4.4.1indirect
npmurl-join4.0.1indirect
npmutil-deprecate1.0.2indirect
npmv8-compile-cache-lib3.0.1indirect
npmvalidate-npm-package-license3.0.4indirect
npmvalidate-npm-package-name4.0.0indirect
npmvfile4.2.1indirect
npmvfile-message2.0.4indirect
npmwalk-up-path1.0.0indirect
npmwcwidth1.0.1indirect
npmwebidl-conversions3.0.1indirect
npmwhatwg-url5.0.0indirect
npmwhich2.0.2indirect
npmwide-align1.1.5indirect
npmwordwrap1.0.0indirect
npmwrap-ansi7.0.0indirect
npmwrappy1.0.2indirect
npmwrite-file-atomic4.0.1indirect
npmxtend4.0.2indirect
npmy18n5.0.8indirect
npmyallist4.0.0indirect
npmyaml1.10.0indirect
npmyargs16.2.0indirect
npmyargs17.7.2indirect
npmyargs-parser20.2.9indirect
npmyargs-parser21.1.1indirect
npmyn3.1.1indirect
npmyocto-queue0.1.0indirect
npmzwitch1.0.5indirect
RubyGemsactioncable6.1.7.9indirect
RubyGemsactionmailbox6.1.7.9indirect
RubyGemsactionmailer6.1.7.9indirect
RubyGemsactionpack6.1.7.9indirect
RubyGemsactiontext6.1.7.9indirect
RubyGemsactionview6.1.7.9indirect
RubyGemsactivejob6.1.7.9indirect
RubyGemsactivemodel6.1.7.9indirect
RubyGemsactiverecord6.1.7.9indirect
RubyGemsactivestorage6.1.7.9indirect
RubyGemsactivesupport6.1.7.9indirect
RubyGemsaes_key_wrap1.1.0indirect
RubyGemsattr_required1.0.2indirect
RubyGemsbase640.3.0indirect
RubyGemsbigdecimal3.3.1indirect
RubyGemsbindata2.5.1indirect
RubyGemsbuilder3.3.0indirect
RubyGemsbyebug12.0.0indirect
RubyGemscrass1.0.6indirect
RubyGemscsvindirect
RubyGemscsv3.3.5indirect
RubyGemsdate3.4.1indirect
RubyGemsdiff-lcs1.6.2indirect
RubyGemsdocile1.4.1indirect
RubyGemserb6.0.1indirect
RubyGemserubi1.13.1indirect
RubyGemsfaraday2.14.0indirect
RubyGemsfaraday-follow_redirects0.5.0indirect
RubyGemsfaraday-net_http3.4.1indirect
RubyGemsglobalid1.3.0indirect
RubyGemshttpclient2.9.0indirect
RubyGemsi18n1.14.7indirect
RubyGemslogger1.7.0indirect
RubyGemsloofah2.24.1indirect
RubyGemsmail2.8.1indirect
RubyGemsmarcel1.1.0indirect
RubyGemsmethod_source1.1.0indirect
RubyGemsmini_mime1.1.5indirect
RubyGemsminitest5.27.0indirect
RubyGemsmulti_xml0.7.2indirect
RubyGemsmutex_m0.3.0indirect
RubyGemsnet-http0.6.0indirect
RubyGemsnet-imap0.5.12indirect
RubyGemsnet-pop0.1.2indirect
RubyGemsnet-protocol0.2.2indirect
RubyGemsnet-smtp0.5.1indirect
RubyGemsnio4r2.7.4indirect
RubyGemsnokogiri1.18.10indirect
RubyGemspsych5.3.1indirect
RubyGemspublic_suffix6.0.2indirect
RubyGemsracc1.8.1indirect
RubyGemsrack2.2.20indirect
RubyGemsrack-oauth21.21.3indirect
RubyGemsrack-test2.2.0indirect
RubyGemsrails-dom-testing2.3.0indirect
RubyGemsrails-html-sanitizer1.6.2indirect
RubyGemsrailties6.1.7.9indirect
RubyGemsrake13.3.0indirect
RubyGemsrdoc7.0.3indirect
RubyGemsrspec-core3.13.5indirect
RubyGemsrspec-expectations3.13.5indirect
RubyGemsrspec-mocks3.13.5indirect
RubyGemsrspec-rails6.1.5indirect
RubyGemsrspec-support3.13.4indirect
RubyGemssimplecov0.22.0indirect
RubyGemssimplecov-html0.13.2indirect
RubyGemssimplecov_json_formatter0.1.4indirect
RubyGemssprockets4.2.2indirect
RubyGemssprockets-rails3.5.2indirect
RubyGemssqlite31.7.3indirect
RubyGemsstringio3.2.0indirect
RubyGemsswd1.3.0indirect
RubyGemsthor1.4.0indirect
RubyGemstimecop0.9.10indirect
RubyGemstimeout0.4.3indirect
RubyGemstsort0.2.0indirect
RubyGemstzinfo2.0.6indirect
RubyGemsuri1.0.4indirect
RubyGemsvalidate_email0.1.6indirect
RubyGemsvalidate_url1.0.15indirect
RubyGemswebfinger1.2.0indirect
RubyGemswebsocket-driver0.8.0indirect
RubyGemswebsocket-extensions0.1.5indirect
RubyGemszeitwerk2.7.3indirect
Dependency advisories 37

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

PackageVersionRelationSeverityAdvisoriesFixed in
activestorage6.1.7.9indirectcritical68.1.2.1
handlebars4.7.7indirectcritical84.7.9
concurrent-ruby1.3.4directhigh31.3.7
httparty0.21.0directhigh10.24.0
json2.15.1directhigh12.19.2
jwt3.1.2directhigh13.2.0
activesupport6.1.7.9indirecthigh38.1.2.1
brace-expansion1.1.11indirecthigh35.0.7
brace-expansion2.0.1indirecthigh35.0.7
erb6.0.1indirecthigh16.0.4
faraday2.14.0indirecthigh32.14.3
ip1.1.9indirecthigh1
js-yaml4.1.0indirecthigh34.3.0
lodash4.17.21indirecthigh34.18.0
minimatch3.1.2indirecthigh310.2.3
minimatch5.0.1indirecthigh310.2.3
minimatch5.1.6indirecthigh310.2.3
nokogiri1.18.10indirecthigh111.19.4
picomatch2.3.1indirecthigh24.0.4
rack2.2.20indirecthigh113.2.6
tar6.2.1indirecthigh117.5.19
websocket-driver0.8.0indirecthigh40.8.2
bcrypt3.1.20directmoderate13.1.22
@octokit/plugin-paginate-rest2.17.0indirectmoderate111.4.1
@octokit/request5.6.3indirectmoderate19.2.1
@octokit/request-error2.1.0indirectmoderate16.1.7
activerecord6.1.7.9indirectmoderate18.0.2.1
ajv8.12.0indirectmoderate18.18.0
diff4.0.2indirectmoderate18.0.3
diff5.2.0indirectmoderate18.0.3
loofah2.24.1indirectmoderate12.25.2
net-imap0.5.12indirectmoderate80.6.4.1
yaml1.10.0indirectmoderate12.8.3
@tootallnate/once2.0.0indirectlow13.0.1
actionpack6.1.7.9indirectlow18.0.0.1
actionview6.1.7.9indirectlow18.1.2.1
rails-html-sanitizer1.6.2indirectlow11.7.1

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": [
        "admin",
        "rails",
        "gem",
        "admin-panel",
        "internal-tool",
        "ruby",
        "ruby-on-rails",
        "backend",
        "backend-api"
      ],
      "is_fork": false,
      "size_kb": 2502,
      "has_wiki": false,
      "homepage": "https://www.forestadmin.com",
      "languages": {
        "CSS": 2974,
        "HTML": 5427,
        "Ruby": 665979,
        "Shell": 82,
        "JavaScript": 4649
      },
      "pushed_at": "2026-07-23T12:35:48Z",
      "created_at": "2015-08-03T12:03:02Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T12:36:24Z",
      "description": "💎 Ruby on Rails agent for Forest Admin to integrate directly to your existing Ruby on Rails backend application.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "Ruby",
      "significant_languages": [
        "Ruby"
      ]
    },
    "owner": {
      "blog": "http://www.forestadmin.com",
      "name": "ForestAdmin",
      "type": "Organization",
      "login": "ForestAdmin",
      "company": null,
      "location": "France",
      "followers": 85,
      "avatar_url": "https://avatars.githubusercontent.com/u/13693804?v=4",
      "created_at": "2015-08-07T11:38:36Z",
      "is_verified": null,
      "public_repos": 87,
      "account_age_days": 4003
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v9.20.1",
          "kind": "patch",
          "published_at": "2026-07-23T12:35:48Z"
        },
        {
          "tag": "v9.20.0",
          "kind": "minor",
          "published_at": "2026-06-26T09:17:45Z"
        },
        {
          "tag": "v9.19.0",
          "kind": "minor",
          "published_at": "2026-06-10T14:08:25Z"
        },
        {
          "tag": "v9.18.2",
          "kind": "patch",
          "published_at": "2026-06-08T13:32:36Z"
        },
        {
          "tag": "v9.18.1",
          "kind": "patch",
          "published_at": "2026-06-08T10:06:06Z"
        },
        {
          "tag": "v9.18.0",
          "kind": "minor",
          "published_at": "2026-06-04T09:45:22Z"
        },
        {
          "tag": "v9.17.7",
          "kind": "patch",
          "published_at": "2026-06-04T08:09:03Z"
        },
        {
          "tag": "v9.17.6",
          "kind": "patch",
          "published_at": "2026-06-04T08:04:05Z"
        },
        {
          "tag": "v9.17.5",
          "kind": "patch",
          "published_at": "2026-05-29T14:20:49Z"
        },
        {
          "tag": "v9.17.4",
          "kind": "patch",
          "published_at": "2026-05-21T10:12:46Z"
        },
        {
          "tag": "v9.17.3",
          "kind": "patch",
          "published_at": "2026-01-27T09:03:30Z"
        },
        {
          "tag": "v9.17.2",
          "kind": "patch",
          "published_at": "2026-01-20T13:13:53Z"
        },
        {
          "tag": "v9.17.1",
          "kind": "patch",
          "published_at": "2026-01-13T14:41:40Z"
        },
        {
          "tag": "v9.17.0",
          "kind": "minor",
          "published_at": "2026-01-06T15:45:11Z"
        },
        {
          "tag": "v9.16.1",
          "kind": "patch",
          "published_at": "2025-12-05T09:36:19Z"
        },
        {
          "tag": "v9.16.0",
          "kind": "minor",
          "published_at": "2025-12-02T14:34:52Z"
        },
        {
          "tag": "v9.15.8",
          "kind": "patch",
          "published_at": "2025-09-03T12:29:01Z"
        },
        {
          "tag": "v9.15.7",
          "kind": "patch",
          "published_at": "2025-08-29T09:19:29Z"
        },
        {
          "tag": "v9.15.6",
          "kind": "patch",
          "published_at": "2025-08-27T14:11:33Z"
        },
        {
          "tag": "v9.15.5",
          "kind": "patch",
          "published_at": "2025-08-25T12:49:42Z"
        },
        {
          "tag": "v9.15.4",
          "kind": "patch",
          "published_at": "2025-08-12T13:47:51Z"
        },
        {
          "tag": "v9.15.3",
          "kind": "patch",
          "published_at": "2025-08-08T08:49:04Z"
        },
        {
          "tag": "v9.15.2",
          "kind": "patch",
          "published_at": "2025-07-24T15:26:40Z"
        },
        {
          "tag": "v9.15.1",
          "kind": "patch",
          "published_at": "2025-07-23T15:41:38Z"
        },
        {
          "tag": "v9.15.0",
          "kind": "minor",
          "published_at": "2025-07-17T08:41:56Z"
        },
        {
          "tag": "v9.14.7",
          "kind": "patch",
          "published_at": "2025-07-17T08:13:28Z"
        },
        {
          "tag": "v9.14.6",
          "kind": "patch",
          "published_at": "2025-07-17T08:03:51Z"
        },
        {
          "tag": "v9.14.5",
          "kind": "patch",
          "published_at": "2025-06-30T10:15:01Z"
        },
        {
          "tag": "v9.14.4",
          "kind": "patch",
          "published_at": "2025-06-20T08:12:49Z"
        },
        {
          "tag": "v9.14.3",
          "kind": "patch",
          "published_at": "2025-06-19T13:32:57Z"
        },
        {
          "tag": "v9.14.2",
          "kind": "patch",
          "published_at": "2025-06-10T08:49:06Z"
        },
        {
          "tag": "v9.14.1",
          "kind": "patch",
          "published_at": "2025-05-28T09:35:39Z"
        },
        {
          "tag": "v9.14.0",
          "kind": "minor",
          "published_at": "2025-05-26T13:35:45Z"
        },
        {
          "tag": "v9.13.0",
          "kind": "minor",
          "published_at": "2025-05-26T13:02:53Z"
        },
        {
          "tag": "v9.12.2",
          "kind": "patch",
          "published_at": "2025-05-15T09:17:19Z"
        },
        {
          "tag": "v9.12.1",
          "kind": "patch",
          "published_at": "2025-05-15T09:09:06Z"
        },
        {
          "tag": "v9.12.0",
          "kind": "minor",
          "published_at": "2025-05-05T09:28:12Z"
        },
        {
          "tag": "v9.11.3",
          "kind": "patch",
          "published_at": "2025-04-09T12:22:42Z"
        },
        {
          "tag": "v9.11.2",
          "kind": "patch",
          "published_at": "2025-04-07T14:34:22Z"
        },
        {
          "tag": "v9.11.1",
          "kind": "patch",
          "published_at": "2025-03-19T15:18:37Z"
        },
        {
          "tag": "v9.11.0",
          "kind": "minor",
          "published_at": "2025-03-19T08:37:12Z"
        },
        {
          "tag": "v9.10.6",
          "kind": "patch",
          "published_at": "2025-03-11T09:11:05Z"
        },
        {
          "tag": "v9.10.5",
          "kind": "patch",
          "published_at": "2025-03-07T14:00:58Z"
        },
        {
          "tag": "v9.10.4",
          "kind": "patch",
          "published_at": "2025-03-07T09:17:10Z"
        },
        {
          "tag": "v9.10.3",
          "kind": "patch",
          "published_at": "2025-03-05T16:09:50Z"
        },
        {
          "tag": "v9.10.2",
          "kind": "patch",
          "published_at": "2025-02-28T10:22:01Z"
        },
        {
          "tag": "v9.10.1",
          "kind": "patch",
          "published_at": "2025-02-26T10:14:34Z"
        },
        {
          "tag": "v9.10.0",
          "kind": "minor",
          "published_at": "2025-02-11T10:33:13Z"
        },
        {
          "tag": "v9.9.1",
          "kind": "patch",
          "published_at": "2025-02-10T16:12:44Z"
        },
        {
          "tag": "v9.9.0",
          "kind": "minor",
          "published_at": "2025-02-07T14:15:02Z"
        },
        {
          "tag": "v9.8.0",
          "kind": "minor",
          "published_at": "2025-02-04T08:43:50Z"
        },
        {
          "tag": "v9.7.0",
          "kind": "minor",
          "published_at": "2025-01-06T15:58:56Z"
        },
        {
          "tag": "v9.6.4",
          "kind": "patch",
          "published_at": "2024-12-27T16:55:25Z"
        },
        {
          "tag": "v9.6.3",
          "kind": "patch",
          "published_at": "2024-12-24T10:21:55Z"
        },
        {
          "tag": "v9.6.2",
          "kind": "patch",
          "published_at": "2024-12-19T15:20:56Z"
        },
        {
          "tag": "v9.6.1",
          "kind": "patch",
          "published_at": "2024-12-19T15:12:14Z"
        },
        {
          "tag": "v9.6.0",
          "kind": "minor",
          "published_at": "2024-12-10T08:59:53Z"
        },
        {
          "tag": "v9.5.7",
          "kind": "patch",
          "published_at": "2024-12-10T08:42:43Z"
        },
        {
          "tag": "v9.5.6",
          "kind": "patch",
          "published_at": "2024-12-10T08:15:54Z"
        },
        {
          "tag": "v9.5.5",
          "kind": "patch",
          "published_at": "2024-12-09T16:21:28Z"
        },
        {
          "tag": "v9.5.4",
          "kind": "patch",
          "published_at": "2024-12-04T09:55:37Z"
        },
        {
          "tag": "v9.5.3",
          "kind": "patch",
          "published_at": "2024-11-22T17:06:07Z"
        },
        {
          "tag": "v9.5.2",
          "kind": "patch",
          "published_at": "2024-11-18T10:48:10Z"
        },
        {
          "tag": "v9.5.1",
          "kind": "patch",
          "published_at": "2024-11-13T10:16:33Z"
        },
        {
          "tag": "v9.5.0",
          "kind": "minor",
          "published_at": "2024-11-12T09:02:00Z"
        },
        {
          "tag": "v9.4.3",
          "kind": "patch",
          "published_at": "2024-11-04T13:22:11Z"
        },
        {
          "tag": "v9.4.2",
          "kind": "patch",
          "published_at": "2024-10-30T14:09:52Z"
        },
        {
          "tag": "v9.4.1",
          "kind": "patch",
          "published_at": "2024-10-24T09:45:45Z"
        },
        {
          "tag": "v9.4.0",
          "kind": "minor",
          "published_at": "2024-10-17T07:53:40Z"
        },
        {
          "tag": "v8.3.3",
          "kind": "patch",
          "published_at": "2024-09-18T14:53:14Z"
        },
        {
          "tag": "v9.3.16",
          "kind": "patch",
          "published_at": "2024-09-18T14:48:38Z"
        },
        {
          "tag": "v9.3.15",
          "kind": "patch",
          "published_at": "2024-09-10T07:59:15Z"
        },
        {
          "tag": "v9.3.14",
          "kind": "patch",
          "published_at": "2024-08-30T10:46:24Z"
        },
        {
          "tag": "v9.3.13",
          "kind": "patch",
          "published_at": "2024-07-19T08:53:22Z"
        },
        {
          "tag": "v9.3.12",
          "kind": "patch",
          "published_at": "2024-07-02T12:29:26Z"
        },
        {
          "tag": "v9.3.11",
          "kind": "patch",
          "published_at": "2024-06-14T14:36:10Z"
        },
        {
          "tag": "v9.3.10",
          "kind": "patch",
          "published_at": "2024-06-14T13:20:58Z"
        },
        {
          "tag": "v9.3.9",
          "kind": "patch",
          "published_at": "2024-06-10T09:55:02Z"
        },
        {
          "tag": "v9.3.8",
          "kind": "patch",
          "published_at": "2024-06-10T07:48:06Z"
        },
        {
          "tag": "v9.3.7",
          "kind": "patch",
          "published_at": "2024-06-07T13:52:54Z"
        },
        {
          "tag": "v9.3.6",
          "kind": "patch",
          "published_at": "2024-06-06T13:16:59Z"
        },
        {
          "tag": "v9.3.5",
          "kind": "patch",
          "published_at": "2024-05-16T12:41:56Z"
        },
        {
          "tag": "v8.3.2",
          "kind": "patch",
          "published_at": "2024-05-16T12:38:09Z"
        },
        {
          "tag": "v9.3.4",
          "kind": "patch",
          "published_at": "2024-05-16T12:35:22Z"
        },
        {
          "tag": "v9.3.3",
          "kind": "patch",
          "published_at": "2024-04-17T12:21:18Z"
        },
        {
          "tag": "v9.3.2",
          "kind": "patch",
          "published_at": "2024-04-12T07:34:42Z"
        },
        {
          "tag": "v8.3.1",
          "kind": "patch",
          "published_at": "2024-03-26T15:08:03Z"
        },
        {
          "tag": "v9.3.1",
          "kind": "patch",
          "published_at": "2024-03-26T14:54:09Z"
        },
        {
          "tag": "v9.3.0",
          "kind": "minor",
          "published_at": "2024-03-14T16:39:49Z"
        },
        {
          "tag": "v8.3.0",
          "kind": "minor",
          "published_at": "2024-03-14T16:39:37Z"
        },
        {
          "tag": "v9.2.3",
          "kind": "patch",
          "published_at": "2024-03-11T08:27:53Z"
        },
        {
          "tag": "v9.2.2",
          "kind": "patch",
          "published_at": "2024-03-08T13:44:20Z"
        },
        {
          "tag": "v9.2.1",
          "kind": "patch",
          "published_at": "2024-03-06T10:34:24Z"
        },
        {
          "tag": "v9.2.0",
          "kind": "minor",
          "published_at": "2024-02-29T09:34:30Z"
        },
        {
          "tag": "v9.1.10",
          "kind": "patch",
          "published_at": "2024-02-28T14:01:04Z"
        },
        {
          "tag": "v9.1.9",
          "kind": "patch",
          "published_at": "2024-02-28T13:57:56Z"
        },
        {
          "tag": "v9.1.8",
          "kind": "patch",
          "published_at": "2024-02-28T13:55:40Z"
        },
        {
          "tag": "v9.1.7",
          "kind": "patch",
          "published_at": "2024-02-28T13:51:54Z"
        },
        {
          "tag": "v9.1.6",
          "kind": "patch",
          "published_at": "2024-02-28T13:47:45Z"
        },
        {
          "tag": "v9.1.5",
          "kind": "patch",
          "published_at": "2024-02-28T13:45:39Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7d3e8df6bd3ed1780a3fe2e7bee36c3861b36c35",
          "body": "## [9.20.1](https://github.com/ForestAdmin/forest-rails/compare/v9.20.0...v9.20.1) (2026-07-23)\n\n### Bug Fixes\n\n* **actions:** always expose /hooks/load even without a load hook [PRD-801] ([#780](https://github.com/ForestAdmin/forest-rails/issues/780)) ([4b28797](https://github.com/ForestAdmin/forest-rails/commit/4b28797b2be7e9b0602e4d5dd973ae9140ac1e00))",
          "is_bot": false,
          "headline": "chore(release): 9.20.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-07-23T12:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b28797b2be7e9b0602e4d5dd973ae9140ac1e00",
          "body": "…-801] (#780)",
          "is_bot": false,
          "headline": "fix(actions): always expose /hooks/load even without a load hook [PRD…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-07-23T12:34:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "356e2714ddd0a121531eaf66d15dcc41e5716d58",
          "body": "…RD-567] (#779)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(workflow): gzip passthrough regression for the executor proxy [P…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-29T10:09:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe98ab4563dd0b2dbf4df3884114e914fd2ae8b6",
          "body": "# [9.20.0](https://github.com/ForestAdmin/forest-rails/compare/v9.19.0...v9.20.0) (2026-06-26)\n\n### Features\n\n* **workflow:** forward any executor route generically [PRD-567] ([#778](https://github.com/ForestAdmin/forest-rails/issues/778)) ([8b1edfb](https://github.com/ForestAdmin/forest-rails/commit/8b1edfb9528c80344d73b9ff244ffc66deaef471))",
          "is_bot": false,
          "headline": "chore(release): 9.20.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-26T09:17:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b1edfb9528c80344d73b9ff244ffc66deaef471",
          "body": "Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(workflow): forward any executor route generically [PRD-567] (#778)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-26T09:16:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "691464e0d61850fd92427dc9cfb0404943341715",
          "body": "…-567] (#777)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(workflow): forward workflow executor routes generically [PRD…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-23T14:44:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a3ab2c17eb494ae373baf87b44f1f240599ac619",
          "body": "# [9.19.0](https://github.com/ForestAdmin/forest-rails/compare/v9.18.2...v9.19.0) (2026-06-10)\n\n### Features\n\n* **schema:** expose polymorphic discriminator column in schema ([5c67fa7](https://github.com/ForestAdmin/forest-rails/commit/5c67fa7f0d55f1d4c190859df76f555af882fb75))",
          "is_bot": false,
          "headline": "chore(release): 9.19.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-10T14:08:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fda504e038ea6258fffda93a5312273ec801baa3",
          "body": "…-type-field\n\nfeat(schema): expose polymorphic discriminator column (foreign_key_type_field)",
          "is_bot": false,
          "headline": "Merge pull request #776 from ForestAdmin/feat/polymorphic-foreign-key…",
          "author_name": "Christophe Brun",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-10T14:06:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c67fa7f0d55f1d4c190859df76f555af882fb75",
          "body": "Add a foreign_key_type_field key on polymorphic belongs_to fields,\nholding the discriminator column name (e.g. \"addressable_type\"), so\nconsumers can resolve which model a polymorphic record targets.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(schema): expose polymorphic discriminator column in schema",
          "author_name": "Brun Christophe",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-10T09:04:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb13a4acf4467fa1ceb2d4fbc38a69c942eb9c89",
          "body": "## [9.18.2](https://github.com/ForestAdmin/forest-rails/compare/v9.18.1...v9.18.2) (2026-06-08)\n\n### Bug Fixes\n\n* **schema:** keep is_primary_key on FK columns composing a composite PK ([b8761e9](https://github.com/ForestAdmin/forest-rails/commit/b8761e97c7994c2a68f37effe13831a7e7425304)), closes [#772](https://github.com/ForestAdmin/forest-rails/issues/772)",
          "is_bot": false,
          "headline": "chore(release): 9.18.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-08T13:32:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b67b1f5a6f1abc1d0648088b7d8e9b0788b9a9f",
          "body": "…primary_key-ecrase-a-false-sur-les-fk\n\nfix(schema): keep is_primary_key on FK columns composing a composite PK",
          "is_bot": false,
          "headline": "Merge pull request #775 from ForestAdmin/fix/prd-476-forest_liana-is_…",
          "author_name": "Christophe Brun",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-08T13:31:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8761e97c7994c2a68f37effe13831a7e7425304",
          "body": "PR #772 added an unconditional `field[:is_primary_key] = false` on the\nbelongsTo field-reuse path in add_associations. When a composite primary\nkey is made of foreign keys (e.g. a join table like BookStock with\nprimary_key [library_id, book_id]), those FK columns are turned into\nassociations and the\n[…]\n directly and does not\nexercise it); the global apimap is saved/restored to avoid pollution from\nthe second perform.\n\nRef: PRD-476\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(schema): keep is_primary_key on FK columns composing a composite PK",
          "author_name": "Brun Christophe",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-08T13:03:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7df842c8b4fd709b4c11bf94205f59a6e0bfca70",
          "body": "## [9.18.1](https://github.com/ForestAdmin/forest-rails/compare/v9.18.0...v9.18.1) (2026-06-08)\n\n### Bug Fixes\n\n* **composite-pk:** accept pipe-joined composite ids [PRD-450] ([#774](https://github.com/ForestAdmin/forest-rails/issues/774)) ([3db6377](https://github.com/ForestAdmin/forest-rails/commit/3db6377de04d444d8206e4fbea04ffe028a42faf))",
          "is_bot": false,
          "headline": "chore(release): 9.18.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-08T10:06:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3db6377de04d444d8206e4fbea04ffe028a42faf",
          "body": "Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(composite-pk): accept pipe-joined composite ids [PRD-450] (#774)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-08T10:04:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32c42c2e37edd94306db20be8591634529d0b227",
          "body": "# [9.18.0](https://github.com/ForestAdmin/forest-rails/compare/v9.17.7...v9.18.0) (2026-06-04)\n\n### Features\n\n* **agent:** add workflow executor proxy routes ([#769](https://github.com/ForestAdmin/forest-rails/issues/769)) ([d6e897d](https://github.com/ForestAdmin/forest-rails/commit/d6e897d6b09b81a41b7b9fe0df45d298b6d81815))",
          "is_bot": false,
          "headline": "chore(release): 9.18.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-04T09:45:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6e897d6b09b81a41b7b9fe0df45d298b6d81815",
          "body": "Co-authored-by: Brun Christophe <christophe.brun@forestadmin.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): add workflow executor proxy routes (#769)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-04T09:43:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea1298e3160ff1f34c2d471ad3f406cbc3b67ebc",
          "body": "## [9.17.7](https://github.com/ForestAdmin/forest-rails/compare/v9.17.6...v9.17.7) (2026-06-04)\n\n### Bug Fixes\n\n* **engine:** prevent boot crash when Rake is partially loaded ([#773](https://github.com/ForestAdmin/forest-rails/issues/773)) ([a1854a0](https://github.com/ForestAdmin/forest-rails/commit/a1854a011a52a710999d8ead3f2825aafb267386))",
          "is_bot": false,
          "headline": "chore(release): 9.17.7 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-04T08:08:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1854a011a52a710999d8ead3f2825aafb267386",
          "body": "Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(engine): prevent boot crash when Rake is partially loaded (#773)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-06-04T08:07:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c0de89ca28e82474ce750c2938db45fc57e077d2",
          "body": "## [9.17.6](https://github.com/ForestAdmin/forest-rails/compare/v9.17.5...v9.17.6) (2026-06-04)\n\n### Bug Fixes\n\n* **schema:** emit is_primary_key flag on collection fields ([025a424](https://github.com/ForestAdmin/forest-rails/commit/025a424d3a9465591163ebd9bf31372af86d190a))",
          "is_bot": false,
          "headline": "chore(release): 9.17.6 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-06-04T08:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02f44df33d8d5087632ba4896cc5d75ca577e7a4",
          "body": "…t_liana-nemet-jamais-is_primary_key-dans-le\n\nfix(schema): emit is_primary_key flag on collection fields\n\nOrchestrator workflows failed with \"Collection has no primary key field\nin its rendering layout\" because the gem never emitted `is_primary_key`,\nwhich the SaaS uses to derive the addressable pri\n[…]\nue only for the actual PK,\ncomposite PKs included), defaulting to false elsewhere across the schema\nbuild, the file writer, and the apimap sent to the SaaS.\n\nRef: PRD-439\n\n🤖 Generated with Claude Code",
          "is_bot": false,
          "headline": "Merge pull request #772 from ForestAdmin/feature/prd-439-le-gem-fores…",
          "author_name": "Christophe Brun",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-04T08:02:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "025a424d3a9465591163ebd9bf31372af86d190a",
          "body": "Orchestrator workflows fail with \"Collection has no primary key field in\nits rendering layout\" because the gem never emitted `is_primary_key`, which\nthe SaaS uses to derive the addressable primary key.\n\nEmit `is_primary_key` (boolean) on every column field, true only for the\ncolumn(s) composing the \n[…]\nwhitelist + default false for the schema file\n- model/collection: default false for the Collection.new(fields:) path\n\nRef: PRD-439\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(schema): emit is_primary_key flag on collection fields",
          "author_name": "Brun Christophe",
          "author_login": "christophebrun-forest",
          "committed_at": "2026-06-03T16:23:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "173186157a8b4b2e5c6a1b40ece0431b405306c4",
          "body": "## [9.17.5](https://github.com/ForestAdmin/forest-rails/compare/v9.17.4...v9.17.5) (2026-05-29)\n\n### Bug Fixes\n\n* skip bootstrapper during rails-invoked rake tasks ([#771](https://github.com/ForestAdmin/forest-rails/issues/771)) ([572f08f](https://github.com/ForestAdmin/forest-rails/commit/572f08f2c996a4da00eeb3b46f4d726b94eb82ff))",
          "is_bot": false,
          "headline": "chore(release): 9.17.5 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-05-29T14:20:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "572f08f2c996a4da00eeb3b46f4d726b94eb82ff",
          "body": null,
          "is_bot": false,
          "headline": "fix: skip bootstrapper during rails-invoked rake tasks (#771)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-05-29T14:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0bdf91a30e89c87b97ae1874599ec9bcdea5ec9",
          "body": "## [9.17.4](https://github.com/ForestAdmin/forest-rails/compare/v9.17.3...v9.17.4) (2026-05-21)\n\n### Bug Fixes\n\n* search array uuid columns using ANY() operator ([#770](https://github.com/ForestAdmin/forest-rails/issues/770)) ([1066a2b](https://github.com/ForestAdmin/forest-rails/commit/1066a2b71803dcb43685bf3ba87bee8aa0891969))",
          "is_bot": false,
          "headline": "chore(release): 9.17.4 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-05-21T10:12:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1066a2b71803dcb43685bf3ba87bee8aa0891969",
          "body": "Full-text search over collections with uuid[] columns was generating\na plain = comparison, which PostgreSQL rejects with \"malformed array\nliteral\". Use ANY() for array-typed uuid columns so the search term\nis matched against each element in the array.\n\nCo-authored-by: Ramon Carvalho Maciel <ramon.maciel@qonto.com>",
          "is_bot": false,
          "headline": "fix: search array uuid columns using ANY() operator (#770)",
          "author_name": "Ramon Carvalho Maciel",
          "author_login": "ramongtx",
          "committed_at": "2026-05-21T10:10:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8114500dc9a2dd26d1a207e55dd4d60f235a991a",
          "body": "## [9.17.3](https://github.com/ForestAdmin/forest-rails/compare/v9.17.2...v9.17.3) (2026-01-27)\n\n### Bug Fixes\n\n* include all intermediate foreign keys for deep has_one through associations ([#768](https://github.com/ForestAdmin/forest-rails/issues/768)) ([0342d4d](https://github.com/ForestAdmin/forest-rails/commit/0342d4d007180aff7fd6ee47c7fff3ac39407bb4))",
          "is_bot": false,
          "headline": "chore(release): 9.17.3 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-01-27T09:03:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0342d4d007180aff7fd6ee47c7fff3ac39407bb4",
          "body": "…ssociations (#768)",
          "is_bot": false,
          "headline": "fix: include all intermediate foreign keys for deep has_one through a…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-01-27T09:02:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62c98a94a66d119159e3b792d95419cf57ec5391",
          "body": "## [9.17.2](https://github.com/ForestAdmin/forest-rails/compare/v9.17.1...v9.17.2) (2026-01-20)\n\n### Bug Fixes\n\n* **composite-pk:** support update and count operations ([#767](https://github.com/ForestAdmin/forest-rails/issues/767)) ([7731de1](https://github.com/ForestAdmin/forest-rails/commit/7731de1697fa6d27e7a5eb17c84c4d542bbbe882))",
          "is_bot": false,
          "headline": "chore(release): 9.17.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-01-20T13:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7731de1697fa6d27e7a5eb17c84c4d542bbbe882",
          "body": null,
          "is_bot": false,
          "headline": "fix(composite-pk): support update and count operations (#767)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-01-20T13:12:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc63b364b176401ecbafc25a117437d30c3b14d7",
          "body": "## [9.17.1](https://github.com/ForestAdmin/forest-rails/compare/v9.17.0...v9.17.1) (2026-01-13)\n\n### Bug Fixes\n\n* normalize default values in schema for ruby 4.0 and rails 8 compatibility ([#765](https://github.com/ForestAdmin/forest-rails/issues/765)) ([581a743](https://github.com/ForestAdmin/forest-rails/commit/581a743b14a0c5f383752fa323fa89efcbcc0003))",
          "is_bot": false,
          "headline": "chore(release): 9.17.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-01-13T14:41:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "581a743b14a0c5f383752fa323fa89efcbcc0003",
          "body": "…atibility (#765)",
          "is_bot": false,
          "headline": "fix: normalize default values in schema for ruby 4.0 and rails 8 comp…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-01-13T14:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31bd2abb07e93ec9ec5296dae8e4bf7ab5668bd1",
          "body": "# [9.17.0](https://github.com/ForestAdmin/forest-rails/compare/v9.16.1...v9.17.0) (2026-01-06)\n\n### Features\n\n* add ruby 4.0.0 support ([#764](https://github.com/ForestAdmin/forest-rails/issues/764)) ([323f688](https://github.com/ForestAdmin/forest-rails/commit/323f688da4abd57f65f1f1455e5273a80136194a))",
          "is_bot": false,
          "headline": "chore(release): 9.17.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2026-01-06T15:45:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "323f688da4abd57f65f1f1455e5273a80136194a",
          "body": null,
          "is_bot": false,
          "headline": "feat: add ruby 4.0.0 support (#764)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2026-01-06T15:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50f3792350d97945cb733e77ded36fa7dd911685",
          "body": "## [9.16.1](https://github.com/ForestAdmin/forest-rails/compare/v9.16.0...v9.16.1) (2025-12-05)\n\n### Bug Fixes\n\n* support composite primary keys in resource getters ([#760](https://github.com/ForestAdmin/forest-rails/issues/760)) ([010f8c5](https://github.com/ForestAdmin/forest-rails/commit/010f8c5f7cc4bcfb68a5af32c78287e39db16605)), closes [#763](https://github.com/ForestAdmin/forest-rails/issues/763)",
          "is_bot": false,
          "headline": "chore(release): 9.16.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-12-05T09:36:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "010f8c5f7cc4bcfb68a5af32c78287e39db16605",
          "body": "fix #763",
          "is_bot": false,
          "headline": "fix: support composite primary keys in resource getters (#760)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-12-05T09:34:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6627c9db2b7e11992c7313233a51553851a29896",
          "body": "# [9.16.0](https://github.com/ForestAdmin/forest-rails/compare/v9.15.8...v9.16.0) (2025-12-02)\n\n### Features\n\n* add skip_schema_update configuration flag ([#762](https://github.com/ForestAdmin/forest-rails/issues/762)) ([7bf25b6](https://github.com/ForestAdmin/forest-rails/commit/7bf25b6ed17f07123bd0dac104201bb4f6e65c6d))",
          "is_bot": false,
          "headline": "chore(release): 9.16.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-12-02T14:34:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bf25b6ed17f07123bd0dac104201bb4f6e65c6d",
          "body": null,
          "is_bot": false,
          "headline": "feat: add skip_schema_update configuration flag (#762)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-12-02T14:33:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "423d11acc6aa60424b36522b5d77b70518b77911",
          "body": null,
          "is_bot": false,
          "headline": "chore: set ssl false when forest_url env is present (#761)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-11-18T10:31:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46e5b46b9c2f2f82212c17a5233a7fb0875ef822",
          "body": null,
          "is_bot": false,
          "headline": "ci(coverage): use qlty coverage (#756)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-09-05T13:43:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa2db729232e0814591640c1f327085eb33bfb43",
          "body": "## [9.15.8](https://github.com/ForestAdmin/forest-rails/compare/v9.15.7...v9.15.8) (2025-09-03)\n\n### Bug Fixes\n\n* key conflicts in fields for same-collection smart relations ([#755](https://github.com/ForestAdmin/forest-rails/issues/755)) ([c38e224](https://github.com/ForestAdmin/forest-rails/commit/c38e2246fa2541cdca07dffb15471b785a50b917))",
          "is_bot": false,
          "headline": "chore(release): 9.15.8 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-09-03T12:28:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c38e2246fa2541cdca07dffb15471b785a50b917",
          "body": null,
          "is_bot": false,
          "headline": "fix: key conflicts in fields for same-collection smart relations (#755)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-09-03T12:27:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67afc84a2e0d1073f4005e51c4a88b72cd0a4d79",
          "body": "## [9.15.7](https://github.com/ForestAdmin/forest-rails/compare/v9.15.6...v9.15.7) (2025-08-29)\n\n### Bug Fixes\n\n* remove unnecessary validation logic in serializer relationships ([#754](https://github.com/ForestAdmin/forest-rails/issues/754)) ([5e3dd03](https://github.com/ForestAdmin/forest-rails/commit/5e3dd034d1b3bfc7d4667ae5284c66872e3eb5d8))",
          "is_bot": false,
          "headline": "chore(release): 9.15.7 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-08-29T09:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e3dd034d1b3bfc7d4667ae5284c66872e3eb5d8",
          "body": "…(#754)",
          "is_bot": false,
          "headline": "fix: remove unnecessary validation logic in serializer relationships …",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-08-29T09:17:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60cfed3e0a5301bb6320d43a493bd254be6f4d81",
          "body": "## [9.15.6](https://github.com/ForestAdmin/forest-rails/compare/v9.15.5...v9.15.6) (2025-08-27)\n\n### Bug Fixes\n\n* enable unoptimized mode in serializer when searchToEdit flag is set ([#753](https://github.com/ForestAdmin/forest-rails/issues/753)) ([7c1f7d4](https://github.com/ForestAdmin/forest-rails/commit/7c1f7d4fb047519bbb763fa3d3ebd902ad9f8d19)), closes [#751](https://github.com/ForestAdmin/forest-rails/issues/751)",
          "is_bot": false,
          "headline": "chore(release): 9.15.6 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-08-27T14:11:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c1f7d4fb047519bbb763fa3d3ebd902ad9f8d19",
          "body": "…set (#753)\n\nclose #751",
          "is_bot": false,
          "headline": "fix: enable unoptimized mode in serializer when searchToEdit flag is …",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-08-27T14:09:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04d85a729e270b7a58529761cf0d79e472f9891e",
          "body": "## [9.15.5](https://github.com/ForestAdmin/forest-rails/compare/v9.15.4...v9.15.5) (2025-08-25)\n\n### Bug Fixes\n\n* **has_many_getter:** add has_one support ([#752](https://github.com/ForestAdmin/forest-rails/issues/752)) ([da14366](https://github.com/ForestAdmin/forest-rails/commit/da14366505c6e3dff947de10d8b4884b83769e3a))",
          "is_bot": false,
          "headline": "chore(release): 9.15.5 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-08-25T12:49:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da14366505c6e3dff947de10d8b4884b83769e3a",
          "body": null,
          "is_bot": false,
          "headline": "fix(has_many_getter): add has_one support (#752)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-08-25T12:46:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d23ea0b458bebcfb1d8f43a971a8649d825afdda",
          "body": "## [9.15.4](https://github.com/ForestAdmin/forest-rails/compare/v9.15.3...v9.15.4) (2025-08-12)\n\n### Bug Fixes\n\n* **controller:** distinguish relation from self + unoptimized getOne ([8fbfdf2](https://github.com/ForestAdmin/forest-rails/commit/8fbfdf29f2009a8551fb96920ced1586a26b5966))\n* **controller:** distinguish relation from self + unoptimized getOne ([060c69b](https://github.com/ForestAdmin/forest-rails/commit/060c69b026a6ccd0273a92656d6e358691d0e603))",
          "is_bot": false,
          "headline": "chore(release): 9.15.4 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-08-12T13:47:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fbfdf29f2009a8551fb96920ced1586a26b5966",
          "body": null,
          "is_bot": false,
          "headline": "fix(controller): distinguish relation from self + unoptimized getOne",
          "author_name": "dogan.ay",
          "author_login": "DayTF",
          "committed_at": "2025-08-12T13:45:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "060c69b026a6ccd0273a92656d6e358691d0e603",
          "body": null,
          "is_bot": false,
          "headline": "fix(controller): distinguish relation from self + unoptimized getOne",
          "author_name": "Dogan AY",
          "author_login": null,
          "committed_at": "2025-08-12T08:27:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbd7c7f125dbea46c92734a16e4b7efa372349ff",
          "body": "## [9.15.3](https://github.com/ForestAdmin/forest-rails/compare/v9.15.2...v9.15.3) (2025-08-08)\n\n### Bug Fixes\n\n* improve performance by only serializing requested fields ([89db677](https://github.com/ForestAdmin/forest-rails/commit/89db6774c453d655b8d209ac6a320ea2e508953f))\n* test ([8766f25](https:\n[…]\ndbebf21f14f51a605855445c84b63416314c8))\n* **serializer:** override find_recursive_relationships ([a173f43](https://github.com/ForestAdmin/forest-rails/commit/a173f437dc29a26f359d6b062346b4970541203a))",
          "is_bot": false,
          "headline": "chore(release): 9.15.3 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-08-08T08:49:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89db6774c453d655b8d209ac6a320ea2e508953f",
          "body": null,
          "is_bot": false,
          "headline": "fix: improve performance by only serializing requested fields",
          "author_name": "dogan.ay",
          "author_login": "DayTF",
          "committed_at": "2025-08-08T08:45:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8766f25cfd9a37f8303b6067777ac20b54db24c4",
          "body": null,
          "is_bot": false,
          "headline": "fix: test",
          "author_name": "Matt",
          "author_login": "matthv",
          "committed_at": "2025-07-30T14:04:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a173f437dc29a26f359d6b062346b4970541203a",
          "body": null,
          "is_bot": false,
          "headline": "fix(serializer): override find_recursive_relationships",
          "author_name": "Matt",
          "author_login": "matthv",
          "committed_at": "2025-07-30T13:23:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "672dbebf21f14f51a605855445c84b63416314c8",
          "body": null,
          "is_bot": false,
          "headline": "fix(serializer): load smart field & improve queries",
          "author_name": "Matt",
          "author_login": "matthv",
          "committed_at": "2025-07-30T12:32:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d72103e0e36fb7464091f8c6e6635f048b6e5f8",
          "body": null,
          "is_bot": false,
          "headline": "fix(serializer): load smart field",
          "author_name": "Matt",
          "author_login": "matthv",
          "committed_at": "2025-07-30T12:30:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afc2a659c61e6e2a4cb898d381c91c69f0148f4e",
          "body": null,
          "is_bot": false,
          "headline": "fix(serializer): load correctly cross db relationship",
          "author_name": "Matt",
          "author_login": "matthv",
          "committed_at": "2025-07-30T12:28:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b48024392871e3a2a4a751ace78e033dc0aba4b",
          "body": "## [9.15.2](https://github.com/ForestAdmin/forest-rails/compare/v9.15.1...v9.15.2) (2025-07-24)\n\n### Bug Fixes\n\n* serializer on relationships ([#745](https://github.com/ForestAdmin/forest-rails/issues/745)) ([dc96641](https://github.com/ForestAdmin/forest-rails/commit/dc966414c645fe0f34764ad264e2fbe55226d4cc))",
          "is_bot": false,
          "headline": "chore(release): 9.15.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-07-24T15:26:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc966414c645fe0f34764ad264e2fbe55226d4cc",
          "body": null,
          "is_bot": false,
          "headline": "fix: serializer on relationships (#745)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-07-24T15:24:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be26b9c02004bd9b5a28942828cfbcab9c9358c6",
          "body": "## [9.15.1](https://github.com/ForestAdmin/forest-rails/compare/v9.15.0...v9.15.1) (2025-07-23)\n\n### Bug Fixes\n\n* **filters:** properly parse filters from request params ([#743](https://github.com/ForestAdmin/forest-rails/issues/743)) ([801f5d1](https://github.com/ForestAdmin/forest-rails/commit/801\n[…]\nmin/forest-rails/commit/7f57f25adddffc07ccb95d3d3d330358184f4a58)), closes [#746](https://github.com/ForestAdmin/forest-rails/issues/746) [#743](https://github.com/ForestAdmin/forest-rails/issues/743)",
          "is_bot": false,
          "headline": "chore(release): 9.15.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-07-23T15:41:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1d011e5bb0cf1800e0af4c5a2e0aa2ee976a180",
          "body": null,
          "is_bot": false,
          "headline": "fix(filters): properly parse filters from request params (#747)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-07-23T15:39:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f57f25adddffc07ccb95d3d3d330358184f4a58",
          "body": "Revert \"fix(filters): properly parse filters from request params (#743)\"\n\nThis reverts commit 801f5d1e898f76cc5c0edea06b3cb24bb0e37d2b.",
          "is_bot": false,
          "headline": "Revert \"fix(filters): properly parse filters from request params\" (#746)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-07-23T15:20:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "801f5d1e898f76cc5c0edea06b3cb24bb0e37d2b",
          "body": null,
          "is_bot": false,
          "headline": "fix(filters): properly parse filters from request params (#743)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-07-23T13:33:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fa08a6302f0361c162330b7dd745d8fc5254b15",
          "body": "# [9.15.0](https://github.com/ForestAdmin/forest-rails/compare/v9.14.7...v9.15.0) (2025-07-17)\n\n### Features\n\n* **router:** make controller and action available to middleware ([#533](https://github.com/ForestAdmin/forest-rails/issues/533)) ([57804f6](https://github.com/ForestAdmin/forest-rails/commit/57804f6354e45341497589fdbee38b5f9788040a))",
          "is_bot": false,
          "headline": "chore(release): 9.15.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-07-17T08:41:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57804f6354e45341497589fdbee38b5f9788040a",
          "body": "Co-authored-by: Ramon Maciel <ramon.maciel@qonto.com>",
          "is_bot": false,
          "headline": "feat(router): make controller and action available to middleware (#533)",
          "author_name": "Ramon Carvalho Maciel",
          "author_login": "ramongtx",
          "committed_at": "2025-07-17T08:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ebba66e286934aa5e73ed88a84918e30cfae79f",
          "body": "## [9.14.7](https://github.com/ForestAdmin/forest-rails/compare/v9.14.6...v9.14.7) (2025-07-17)\n\n### Bug Fixes\n\n* skip where when computed search conditions are empty ([#544](https://github.com/ForestAdmin/forest-rails/issues/544)) ([5a9aa09](https://github.com/ForestAdmin/forest-rails/commit/5a9aa09f3cae48e38ec3907af721fc13c7eededd))",
          "is_bot": false,
          "headline": "chore(release): 9.14.7 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-07-17T08:13:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a9aa09f3cae48e38ec3907af721fc13c7eededd",
          "body": "Co-authored-by: Mario Oprea <mario.oprea.ext@qonto.com>",
          "is_bot": false,
          "headline": "fix: skip where when computed search conditions are empty (#544)",
          "author_name": "Mario Oprea",
          "author_login": "madalinoprea",
          "committed_at": "2025-07-17T08:11:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02f2644fdee196fa98d67f05d03db44d217eacd8",
          "body": "## [9.14.6](https://github.com/ForestAdmin/forest-rails/compare/v9.14.5...v9.14.6) (2025-07-17)\n\n### Bug Fixes\n\n* **schema:** ensure fields are properly sorted in SchemaFileUpdater ([#541](https://github.com/ForestAdmin/forest-rails/issues/541)) ([711f1a2](https://github.com/ForestAdmin/forest-rails/commit/711f1a2c7b4ce9253c06261117ae0549645e1ad1))",
          "is_bot": false,
          "headline": "chore(release): 9.14.6 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-07-17T08:03:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "711f1a2c7b4ce9253c06261117ae0549645e1ad1",
          "body": "…#541)\n\nCo-authored-by: Ramon Maciel <ramon.maciel@qonto.com>",
          "is_bot": false,
          "headline": "fix(schema): ensure fields are properly sorted in SchemaFileUpdater (…",
          "author_name": "Ramon Carvalho Maciel",
          "author_login": "ramongtx",
          "committed_at": "2025-07-17T08:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83cc6c8d38e0e6aedcaad6bf5724c7186a69fb22",
          "body": "## [9.14.5](https://github.com/ForestAdmin/forest-rails/compare/v9.14.4...v9.14.5) (2025-06-30)\n\n### Bug Fixes\n\n* rails 8 compatibility for stat aggregators ([#741](https://github.com/ForestAdmin/forest-rails/issues/741)) ([370c852](https://github.com/ForestAdmin/forest-rails/commit/370c852bdaf9eb53e3699f57ab6b3b6bf0446db8))",
          "is_bot": false,
          "headline": "chore(release): 9.14.5 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-06-30T10:14:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "370c852bdaf9eb53e3699f57ab6b3b6bf0446db8",
          "body": null,
          "is_bot": false,
          "headline": "fix: rails 8 compatibility for stat aggregators (#741)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-06-30T10:13:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "628a3e017c091999e86dd04f59bdea444816e898",
          "body": "## [9.14.4](https://github.com/ForestAdmin/forest-rails/compare/v9.14.3...v9.14.4) (2025-06-20)\n\n### Bug Fixes\n\n* avoid creating invalid objects when foreign key is null in serializer ([#740](https://github.com/ForestAdmin/forest-rails/issues/740)) ([61432ef](https://github.com/ForestAdmin/forest-rails/commit/61432ef478b81683df4a68a646b3db21fad9810f))",
          "is_bot": false,
          "headline": "chore(release): 9.14.4 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-06-20T08:12:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61432ef478b81683df4a68a646b3db21fad9810f",
          "body": "…lizer (#740)",
          "is_bot": false,
          "headline": "fix: avoid creating invalid objects when foreign key is null in seria…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-06-20T08:11:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a273052c891a921daecf5612e906e65434e48d88",
          "body": "## [9.14.3](https://github.com/ForestAdmin/forest-rails/compare/v9.14.2...v9.14.3) (2025-06-19)\n\n### Bug Fixes\n\n* **search:** prevent nil error in field selection during search ([#739](https://github.com/ForestAdmin/forest-rails/issues/739)) ([069c647](https://github.com/ForestAdmin/forest-rails/commit/069c647554353450c255a36e47309dfd232143f2)), closes [#738](https://github.com/ForestAdmin/forest-rails/issues/738)",
          "is_bot": false,
          "headline": "chore(release): 9.14.3 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-06-19T13:32:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "069c647554353450c255a36e47309dfd232143f2",
          "body": "close #738",
          "is_bot": false,
          "headline": "fix(search): prevent nil error in field selection during search (#739)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-06-19T13:29:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "991d31455fc68dff901bb443c77c1bfc5e69cf21",
          "body": "## [9.14.2](https://github.com/ForestAdmin/forest-rails/compare/v9.14.1...v9.14.2) (2025-06-10)\n\n### Bug Fixes\n\n* correct column selection in cross-db associations and extended-search ([#737](https://github.com/ForestAdmin/forest-rails/issues/737)) ([f352809](https://github.com/ForestAdmin/forest-rails/commit/f352809ea4f8853001357a3dd04cf2ea90645728))",
          "is_bot": false,
          "headline": "chore(release): 9.14.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-06-10T08:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f352809ea4f8853001357a3dd04cf2ea90645728",
          "body": "…earch (#737)",
          "is_bot": false,
          "headline": "fix: correct column selection in cross-db associations and extended-s…",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-06-10T08:45:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "392c4ef2e87b72531f3ba98c5ae9aa6f8544c808",
          "body": "## [9.14.1](https://github.com/ForestAdmin/forest-rails/compare/v9.14.0...v9.14.1) (2025-05-28)\n\n### Bug Fixes\n\n* preload polymorphic associations to improve performance ([#731](https://github.com/ForestAdmin/forest-rails/issues/731)) ([00ceef7](https://github.com/ForestAdmin/forest-rails/commit/00ceef75b9c9beb3b01216c03f42e7e337ecd4bf))",
          "is_bot": false,
          "headline": "chore(release): 9.14.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-28T09:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00ceef75b9c9beb3b01216c03f42e7e337ecd4bf",
          "body": null,
          "is_bot": false,
          "headline": "fix: preload polymorphic associations to improve performance (#731)",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-05-28T09:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a63b21bc267644e44e4895b69c933e35231e6d22",
          "body": "# [9.14.0](https://github.com/ForestAdmin/forest-rails/compare/v9.13.0...v9.14.0) (2025-05-26)\n\n### Features\n\n* improve performance by avoiding unnecessary jointure on belongsTo relations ([#735](https://github.com/ForestAdmin/forest-rails/issues/735)) ([a256135](https://github.com/ForestAdmin/forest-rails/commit/a256135fad5353db3743f837c5a5e0016c1f2ad8))",
          "is_bot": false,
          "headline": "chore(release): 9.14.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-26T13:35:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a256135fad5353db3743f837c5a5e0016c1f2ad8",
          "body": "…To relations (#735)",
          "is_bot": false,
          "headline": "feat: improve performance by avoiding unnecessary jointure on belongs…",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-05-26T13:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32aee702d2d700f78a784e2debeb2213897fabfa",
          "body": "# [9.13.0](https://github.com/ForestAdmin/forest-rails/compare/v9.12.2...v9.13.0) (2025-05-26)\n\n### Features\n\n* reduce redundant queries on cross-db belongs_to ([#734](https://github.com/ForestAdmin/forest-rails/issues/734)) ([e040718](https://github.com/ForestAdmin/forest-rails/commit/e0407185cde95b9abc6f00b0d17f38c8dc5e5fdc))",
          "is_bot": false,
          "headline": "chore(release): 9.13.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-26T13:02:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0407185cde95b9abc6f00b0d17f38c8dc5e5fdc",
          "body": null,
          "is_bot": false,
          "headline": "feat: reduce redundant queries on cross-db belongs_to (#734)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-05-26T13:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d1fb09d305926e6318a220c7f9d807f031ca136",
          "body": "## [9.12.2](https://github.com/ForestAdmin/forest-rails/compare/v9.12.1...v9.12.2) (2025-05-15)\n\n### Bug Fixes\n\n* **serializer:** do not execute smart feature on object like a native attribute ([#733](https://github.com/ForestAdmin/forest-rails/issues/733)) ([09c9e5f](https://github.com/ForestAdmin/forest-rails/commit/09c9e5fb9a3155d00057cc517e0b6e9156c1b143))",
          "is_bot": false,
          "headline": "chore(release): 9.12.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-15T09:17:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09c9e5fb9a3155d00057cc517e0b6e9156c1b143",
          "body": "… attribute (#733)",
          "is_bot": false,
          "headline": "fix(serializer): do not execute smart feature on object like a native…",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-05-15T09:15:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "699b1ef1865358c567650c8f83b6b976ad51c497",
          "body": "## [9.12.1](https://github.com/ForestAdmin/forest-rails/compare/v9.12.0...v9.12.1) (2025-05-15)\n\n### Bug Fixes\n\n* include has_one through associations in compute_select_fields in ResourcesGetter ([#732](https://github.com/ForestAdmin/forest-rails/issues/732)) ([6472522](https://github.com/ForestAdmin/forest-rails/commit/6472522e73156e2cc8909e17cb052947880f5137))",
          "is_bot": false,
          "headline": "chore(release): 9.12.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-15T09:09:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6472522e73156e2cc8909e17cb052947880f5137",
          "body": "… ResourcesGetter (#732)",
          "is_bot": false,
          "headline": "fix: include has_one through associations in compute_select_fields in…",
          "author_name": "Mateusz L.",
          "author_login": "Pacyfik",
          "committed_at": "2025-05-15T09:05:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10904ed9ba0878c4db7daaac18cdc3f54227e1ea",
          "body": "# [9.12.0](https://github.com/ForestAdmin/forest-rails/compare/v9.11.3...v9.12.0) (2025-05-05)\n\n### Features\n\n* **active-record:** improve performance when a belongsTo relation is included ([#729](https://github.com/ForestAdmin/forest-rails/issues/729)) ([2491f66](https://github.com/ForestAdmin/forest-rails/commit/2491f668a36208a6c6b3ec4ddb55642fcea2da18))",
          "is_bot": false,
          "headline": "chore(release): 9.12.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-05-05T09:28:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2491f668a36208a6c6b3ec4ddb55642fcea2da18",
          "body": "… included (#729)",
          "is_bot": false,
          "headline": "feat(active-record): improve performance when a belongsTo relation is…",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-05-05T09:25:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c85bad3de93d5373035cbaba863f97f084d40f96",
          "body": "## [9.11.3](https://github.com/ForestAdmin/forest-rails/compare/v9.11.2...v9.11.3) (2025-04-09)\n\n### Bug Fixes\n\n* **filters:** get collection name with the right format ([#728](https://github.com/ForestAdmin/forest-rails/issues/728)) ([68455f8](https://github.com/ForestAdmin/forest-rails/commit/68455f8a3e60fac2fffdb866f041030fdd846f1e))",
          "is_bot": false,
          "headline": "chore(release): 9.11.3 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-04-09T12:22:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68455f8a3e60fac2fffdb866f041030fdd846f1e",
          "body": null,
          "is_bot": false,
          "headline": "fix(filters): get collection name with the right format (#728)",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-04-09T12:20:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09bfae1194263c184a0e4bdc94ec156f797659ab",
          "body": "## [9.11.2](https://github.com/ForestAdmin/forest-rails/compare/v9.11.1...v9.11.2) (2025-04-07)\n\n### Bug Fixes\n\n* **filters:** filtering on date only fields now format value properly ([#727](https://github.com/ForestAdmin/forest-rails/issues/727)) ([0e3b54a](https://github.com/ForestAdmin/forest-rails/commit/0e3b54a733b551dc2dfcce386a0c392934cb3f36))",
          "is_bot": false,
          "headline": "chore(release): 9.11.2 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-04-07T14:34:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e3b54a733b551dc2dfcce386a0c392934cb3f36",
          "body": "… (#727)",
          "is_bot": false,
          "headline": "fix(filters): filtering on date only fields now format value properly…",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-04-07T14:31:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ca652befa7eef91cb12766b1ea4541edf61833f",
          "body": "## [9.11.1](https://github.com/ForestAdmin/forest-rails/compare/v9.11.0...v9.11.1) (2025-03-19)\n\n### Bug Fixes\n\n* **charts:** properly format week of year ([#726](https://github.com/ForestAdmin/forest-rails/issues/726)) ([5cbfd3a](https://github.com/ForestAdmin/forest-rails/commit/5cbfd3a22bbe31e6c35aa3b74582c79599cf10de))",
          "is_bot": false,
          "headline": "chore(release): 9.11.1 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-03-19T15:18:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cbfd3a22bbe31e6c35aa3b74582c79599cf10de",
          "body": null,
          "is_bot": false,
          "headline": "fix(charts): properly format week of year (#726)",
          "author_name": "Matthieu",
          "author_login": "matthv",
          "committed_at": "2025-03-19T15:16:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7440a9b7870c98cc8d80ed1b6d9f76c330e9b5be",
          "body": "# [9.11.0](https://github.com/ForestAdmin/forest-rails/compare/v9.10.6...v9.11.0) (2025-03-19)\n\n### Features\n\n* **operators:** add i_contains operator support ([#725](https://github.com/ForestAdmin/forest-rails/issues/725)) ([3ed9123](https://github.com/ForestAdmin/forest-rails/commit/3ed912383e3592191c55335d369ef3e98d31f0f0))",
          "is_bot": false,
          "headline": "chore(release): 9.11.0 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-03-19T08:37:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ed912383e3592191c55335d369ef3e98d31f0f0",
          "body": null,
          "is_bot": false,
          "headline": "feat(operators): add i_contains operator support (#725)",
          "author_name": "NicolasAlexandre",
          "author_login": "nicolasalexandre9",
          "committed_at": "2025-03-19T08:35:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "063992df456743fe4709c8dbcb90293239b499c8",
          "body": "## [9.10.6](https://github.com/ForestAdmin/forest-rails/compare/v9.10.5...v9.10.6) (2025-03-11)\n\n### Bug Fixes\n\n* **schema-updater:** fix regression introduced with [#720](https://github.com/ForestAdmin/forest-rails/issues/720) regex when writing schema ([c7da92c](https://github.com/ForestAdmin/forest-rails/commit/c7da92cf904f6fba80460de42aa4ffe742a7ebcd))",
          "is_bot": false,
          "headline": "chore(release): 9.10.6 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-03-11T09:11:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7da92cf904f6fba80460de42aa4ffe742a7ebcd",
          "body": "…riting schema",
          "is_bot": false,
          "headline": "fix(schema-updater): fix regression introduced with #720 regex when w…",
          "author_name": "Valentin Lugand Lopez",
          "author_login": "valentinllpz",
          "committed_at": "2025-03-11T09:09:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b66766f2bff7af4ed6873bff6d431dafa1456f69",
          "body": "## [9.10.5](https://github.com/ForestAdmin/forest-rails/compare/v9.10.4...v9.10.5) (2025-03-07)\n\n### Bug Fixes\n\n* **startup:** display current env secret when ip whitelist fails to ease debugging ([#722](https://github.com/ForestAdmin/forest-rails/issues/722)) ([e23500b](https://github.com/ForestAdmin/forest-rails/commit/e23500b015d0bd26df34f261344ce1d046dff9dc))",
          "is_bot": false,
          "headline": "chore(release): 9.10.5 [skip ci]",
          "author_name": "Forest Bot",
          "author_login": "forest-bot",
          "committed_at": "2025-03-07T14:00:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 57,
      "latest_release_at": "2026-07-23T12:35:48Z",
      "latest_release_tag": "v9.20.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": true,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "forest_liana",
          "exists": true,
          "license": "GPL-3.0",
          "keywords": [],
          "ecosystem": "rubygems",
          "matches_repo": true,
          "registry_url": "https://rubygems.org/gems/forest_liana",
          "is_deprecated": false,
          "latest_version": "9.20.1",
          "repository_url": "https://github.com/ForestAdmin/forest-rails",
          "versions_count": 538,
          "total_downloads": 2777110,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2015-08-06T20:31:44.830000Z",
          "latest_published_at": "2026-07-23T12:35:50.401000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 83,
      "stars": 385,
      "watchers": 12,
      "fork_history": {
        "days": [
          {
            "date": "2016-09-18",
            "count": 1
          },
          {
            "date": "2016-09-24",
            "count": 1
          },
          {
            "date": "2016-10-13",
            "count": 1
          },
          {
            "date": "2016-10-21",
            "count": 1
          },
          {
            "date": "2016-11-16",
            "count": 1
          },
          {
            "date": "2016-11-17",
            "count": 1
          },
          {
            "date": "2016-11-22",
            "count": 1
          },
          {
            "date": "2017-01-05",
            "count": 1
          },
          {
            "date": "2017-02-12",
            "count": 1
          },
          {
            "date": "2017-02-24",
            "count": 1
          },
          {
            "date": "2017-05-02",
            "count": 1
          },
          {
            "date": "2017-09-22",
            "count": 1
          },
          {
            "date": "2017-11-21",
            "count": 1
          },
          {
            "date": "2018-03-03",
            "count": 1
          },
          {
            "date": "2018-04-13",
            "count": 1
          },
          {
            "date": "2018-04-17",
            "count": 1
          },
          {
            "date": "2018-06-22",
            "count": 1
          },
          {
            "date": "2018-07-02",
            "count": 1
          },
          {
            "date": "2018-07-17",
            "count": 1
          },
          {
            "date": "2018-11-28",
            "count": 1
          },
          {
            "date": "2018-12-30",
            "count": 1
          },
          {
            "date": "2019-01-05",
            "count": 1
          },
          {
            "date": "2019-02-13",
            "count": 1
          },
          {
            "date": "2019-03-03",
            "count": 1
          },
          {
            "date": "2019-03-24",
            "count": 1
          },
          {
            "date": "2019-04-02",
            "count": 1
          },
          {
            "date": "2019-05-15",
            "count": 1
          },
          {
            "date": "2019-05-21",
            "count": 1
          },
          {
            "date": "2019-05-23",
            "count": 1
          },
          {
            "date": "2019-07-16",
            "count": 1
          },
          {
            "date": "2019-07-17",
            "count": 1
          },
          {
            "date": "2019-08-05",
            "count": 1
          },
          {
            "date": "2019-08-08",
            "count": 1
          },
          {
            "date": "2019-08-27",
            "count": 1
          },
          {
            "date": "2019-09-09",
            "count": 1
          },
          {
            "date": "2019-09-25",
            "count": 1
          },
          {
            "date": "2019-10-22",
            "count": 1
          },
          {
            "date": "2019-11-04",
            "count": 1
          },
          {
            "date": "2019-11-19",
            "count": 1
          },
          {
            "date": "2020-05-06",
            "count": 1
          },
          {
            "date": "2020-05-18",
            "count": 1
          },
          {
            "date": "2020-05-21",
            "count": 1
          },
          {
            "date": "2020-06-23",
            "count": 1
          },
          {
            "date": "2020-06-30",
            "count": 1
          },
          {
            "date": "2021-01-13",
            "count": 2
          },
          {
            "date": "2021-01-15",
            "count": 1
          },
          {
            "date": "2021-01-21",
            "count": 1
          },
          {
            "date": "2021-02-10",
            "count": 1
          },
          {
            "date": "2021-02-25",
            "count": 1
          },
          {
            "date": "2021-03-07",
            "count": 1
          },
          {
            "date": "2021-05-10",
            "count": 1
          },
          {
            "date": "2021-05-17",
            "count": 1
          },
          {
            "date": "2021-05-18",
            "count": 1
          },
          {
            "date": "2021-05-28",
            "count": 1
          },
          {
            "date": "2021-07-16",
            "count": 1
          },
          {
            "date": "2021-08-10",
            "count": 1
          },
          {
            "date": "2021-09-09",
            "count": 1
          },
          {
            "date": "2022-01-13",
            "count": 1
          },
          {
            "date": "2022-03-29",
            "count": 1
          },
          {
            "date": "2022-05-25",
            "count": 1
          },
          {
            "date": "2022-06-07",
            "count": 1
          },
          {
            "date": "2022-07-22",
            "count": 2
          },
          {
            "date": "2022-08-20",
            "count": 2
          },
          {
            "date": "2022-10-27",
            "count": 1
          },
          {
            "date": "2023-01-17",
            "count": 1
          },
          {
            "date": "2023-04-27",
            "count": 1
          },
          {
            "date": "2023-05-05",
            "count": 1
          },
          {
            "date": "2023-10-24",
            "count": 1
          },
          {
            "date": "2023-11-14",
            "count": 1
          },
          {
            "date": "2023-12-12",
            "count": 1
          },
          {
            "date": "2024-03-04",
            "count": 1
          },
          {
            "date": "2024-10-02",
            "count": 1
          },
          {
            "date": "2024-10-05",
            "count": 1
          },
          {
            "date": "2024-11-05",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-03-09",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-05-12",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 1
          },
          {
            "date": "2026-01-23",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 83,
        "total_forks": 83
      },
      "star_history": null,
      "open_issues_and_prs": 71
    },
    "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": 27760,
      "source_files_sampled": 288,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Gemfile",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "activestorage",
            "direct": false,
            "version": "6.1.7.9",
            "severity": "critical",
            "ecosystem": "rubygems",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-73f9-jhhh-hr5m",
              "GHSA-9xrj-h377-fr87",
              "GHSA-p9fm-f462-ggrg",
              "GHSA-qcfx-2mfw-w4cg",
              "GHSA-r46p-8f7g-vvvg",
              "GHSA-r4mg-4433-c7g3"
            ],
            "fixed_version": "8.1.2.1",
            "advisory_count": 6,
            "oldest_advisory_days": 343
          },
          {
            "name": "handlebars",
            "direct": false,
            "version": "4.7.7",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-2qvq-rjwj-gvw9",
              "GHSA-2w6w-674q-4c4q",
              "GHSA-3mfm-83xf-c92r",
              "GHSA-442j-39wm-28r2",
              "GHSA-7rx3-28cr-v5wh",
              "GHSA-9cx6-37pm-9jff",
              "GHSA-xhpv-hc6g-r9c6",
              "GHSA-xjpj-3mr7-gcpf"
            ],
            "fixed_version": "4.7.9",
            "advisory_count": 8,
            "oldest_advisory_days": 118
          },
          {
            "name": "concurrent-ruby",
            "direct": true,
            "version": "1.3.4",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-6wx8-w4f5-wwcr",
              "GHSA-h8w8-99g7-qmvj",
              "GHSA-wv3x-4vxv-whpp"
            ],
            "fixed_version": "1.3.7",
            "advisory_count": 3,
            "oldest_advisory_days": 33
          },
          {
            "name": "httparty",
            "direct": true,
            "version": "0.21.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 8.2,
            "advisory_ids": [
              "GHSA-hm5p-x4rq-38w4"
            ],
            "fixed_version": "0.24.0",
            "advisory_count": 1,
            "oldest_advisory_days": 211
          },
          {
            "name": "json",
            "direct": true,
            "version": "2.15.1",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 8.2,
            "advisory_ids": [
              "GHSA-3m6g-2423-7cp3"
            ],
            "fixed_version": "2.19.2",
            "advisory_count": 1,
            "oldest_advisory_days": 125
          },
          {
            "name": "jwt",
            "direct": true,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.4,
            "advisory_ids": [
              "GHSA-c32j-vqhx-rx3x"
            ],
            "fixed_version": "3.2.0",
            "advisory_count": 1,
            "oldest_advisory_days": 65
          },
          {
            "name": "activesupport",
            "direct": false,
            "version": "6.1.7.9",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2j26-frm8-cmj9",
              "GHSA-89vf-4333-qx8v",
              "GHSA-cg4j-q9v8-6v38"
            ],
            "fixed_version": "8.1.2.1",
            "advisory_count": 3,
            "oldest_advisory_days": 121
          },
          {
            "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-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 408
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 408
          },
          {
            "name": "erb",
            "direct": false,
            "version": "6.0.1",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-q339-8rmv-2mhv"
            ],
            "fixed_version": "6.0.4",
            "advisory_count": 1,
            "oldest_advisory_days": 89
          },
          {
            "name": "faraday",
            "direct": false,
            "version": "2.14.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-33mh-2634-fwr2",
              "GHSA-5rv5-xj5j-3484",
              "GHSA-98m9-hrrm-r99r"
            ],
            "fixed_version": "2.14.3",
            "advisory_count": 3,
            "oldest_advisory_days": 163
          },
          {
            "name": "ip",
            "direct": false,
            "version": "1.1.9",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-2p57-rm9w-gvfp"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 780
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 3,
            "oldest_advisory_days": 250
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc",
              "GHSA-xxjr-mmjv-4gpg"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 3,
            "oldest_advisory_days": 182
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "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": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.0.1",
            "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": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "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": 154
          },
          {
            "name": "nokogiri",
            "direct": false,
            "version": "1.18.10",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-5prr-v3j2-97mh",
              "GHSA-5v8h-3h3q-446p",
              "GHSA-8678-w3jw-xfc2",
              "GHSA-9cv2-cfxc-v4v2",
              "GHSA-c4rq-3m3g-8wgx",
              "GHSA-p67v-3w7g-wjg7",
              "GHSA-phwj-rprq-35pp",
              "GHSA-v2fc-qm4h-8hqv",
              "GHSA-wfpw-mmfh-qq69",
              "GHSA-wjv4-x9w8-wm3h"
            ],
            "fixed_version": "1.19.4",
            "advisory_count": 11,
            "oldest_advisory_days": 154
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3v7f-55p6-f55p",
              "GHSA-c2c7-rcm5-vvqj"
            ],
            "fixed_version": "4.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 119
          },
          {
            "name": "rack",
            "direct": false,
            "version": "2.2.20",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-7mqq-6cf9-v2qp",
              "GHSA-8vqr-qjwx-82mw",
              "GHSA-h2jq-g4cq-5ppq",
              "GHSA-mxw3-3hh2-x2mh",
              "GHSA-q2ww-5357-x388",
              "GHSA-q4qf-9j86-f5mh",
              "GHSA-qv7j-4883-hwh7",
              "GHSA-v569-hp3g-36wr",
              "GHSA-vgpv-f759-9wx3",
              "GHSA-whrj-4476-wvmp"
            ],
            "fixed_version": "3.2.6",
            "advisory_count": 11,
            "oldest_advisory_days": 155
          },
          {
            "name": "tar",
            "direct": false,
            "version": "6.2.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.8,
            "advisory_ids": [
              "GHSA-23hp-3jrh-7fpw",
              "GHSA-34x7-hfp2-rc4v",
              "GHSA-83g3-92jg-28cx",
              "GHSA-8qq5-rm4j-mr97",
              "GHSA-8x88-c5mf-7j5w",
              "GHSA-9ppj-qmqm-q256",
              "GHSA-gvwx-54wh-qm9j",
              "GHSA-qffp-2rhf-9h96",
              "GHSA-r6q2-hw4h-h46w",
              "GHSA-vmf3-w455-68vh"
            ],
            "fixed_version": "7.5.19",
            "advisory_count": 11,
            "oldest_advisory_days": 187
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.8.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2x63-gw47-w4mm",
              "GHSA-33ph-fccm-39pj",
              "GHSA-8j3g-f24p-4mpw",
              "GHSA-ghhp-3qvg-889p"
            ],
            "fixed_version": "0.8.2",
            "advisory_count": 4,
            "oldest_advisory_days": 7
          },
          {
            "name": "bcrypt",
            "direct": true,
            "version": "3.1.20",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 6.7,
            "advisory_ids": [
              "GHSA-f27w-vcwj-c954"
            ],
            "fixed_version": "3.1.22",
            "advisory_count": 1,
            "oldest_advisory_days": 125
          },
          {
            "name": "@octokit/plugin-paginate-rest",
            "direct": false,
            "version": "2.17.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-h5c3-5r3r-rr8q"
            ],
            "fixed_version": "11.4.1",
            "advisory_count": 1,
            "oldest_advisory_days": 523
          },
          {
            "name": "@octokit/request",
            "direct": false,
            "version": "5.6.3",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-rmvr-2pp2-xj38"
            ],
            "fixed_version": "9.2.1",
            "advisory_count": 1,
            "oldest_advisory_days": 523
          },
          {
            "name": "@octokit/request-error",
            "direct": false,
            "version": "2.1.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-xx4v-prfh-6cgc"
            ],
            "fixed_version": "6.1.7",
            "advisory_count": 1,
            "oldest_advisory_days": 523
          },
          {
            "name": "activerecord",
            "direct": false,
            "version": "6.1.7.9",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-76r7-hhxj-r776"
            ],
            "fixed_version": "8.0.2.1",
            "advisory_count": 1,
            "oldest_advisory_days": 343
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.12.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 161
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-73rr-hh4g-fpgx"
            ],
            "fixed_version": "8.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 189
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.2.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-73rr-hh4g-fpgx"
            ],
            "fixed_version": "8.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 189
          },
          {
            "name": "loofah",
            "direct": false,
            "version": "2.24.1",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 4.7,
            "advisory_ids": [
              "GHSA-9wjq-cp2p-hrgf"
            ],
            "fixed_version": "2.25.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "net-imap",
            "direct": false,
            "version": "0.5.12",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-46q3-7gv7-qmgg",
              "GHSA-75xq-5h9v-w6px",
              "GHSA-87pf-fpwv-p7m7",
              "GHSA-8p34-64r3-mwg8",
              "GHSA-c4fp-cxrr-mj66",
              "GHSA-hm49-wcqc-g2xg",
              "GHSA-q2mw-fvj9-vvcw",
              "GHSA-vcgp-9326-pqcp"
            ],
            "fixed_version": "0.6.4.1",
            "advisory_count": 8,
            "oldest_advisory_days": 79
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "1.10.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 4.3,
            "advisory_ids": [
              "GHSA-48c2-rrv3-qjmp"
            ],
            "fixed_version": "2.8.3",
            "advisory_count": 1,
            "oldest_advisory_days": 119
          },
          {
            "name": "@tootallnate/once",
            "direct": false,
            "version": "2.0.0",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.3,
            "advisory_ids": [
              "GHSA-vpq2-c234-7xj6"
            ],
            "fixed_version": "3.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 142
          },
          {
            "name": "actionpack",
            "direct": false,
            "version": "6.1.7.9",
            "severity": "low",
            "ecosystem": "rubygems",
            "cvss_score": 0,
            "advisory_ids": [
              "GHSA-vfm5-rmrh-j26v"
            ],
            "fixed_version": "8.0.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 589
          },
          {
            "name": "actionview",
            "direct": false,
            "version": "6.1.7.9",
            "severity": "low",
            "ecosystem": "rubygems",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-v55j-83pf-r9cq"
            ],
            "fixed_version": "8.1.2.1",
            "advisory_count": 1,
            "oldest_advisory_days": 121
          },
          {
            "name": "rails-html-sanitizer",
            "direct": false,
            "version": "1.6.2",
            "severity": "low",
            "ecosystem": "rubygems",
            "cvss_score": 0,
            "advisory_ids": [
              "GHSA-cj75-f6xr-r4g7"
            ],
            "fixed_version": "1.7.1",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 4,
          "high": 20,
          "critical": 2,
          "moderate": 11
        },
        "advisory_count": 110,
        "affected_count": 37,
        "assessed_count": 718,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 14,
        "direct_affected_count": 5
      },
      "ecosystems": [
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "6.1.7.9"
        },
        {
          "name": "concurrent-ruby",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "1.3.4"
        },
        {
          "name": "forestadmin-jsonapi-serializers",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rack-cors",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "groupdate",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "5.2.2"
        },
        {
          "name": "useragent",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "jwt",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "bcrypt",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "httparty",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "0.21.0"
        },
        {
          "name": "ipaddress",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "0.8.3"
        },
        {
          "name": "openid_connect",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "1.4.2"
        },
        {
          "name": "json",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "json-jwt",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": ">= 1.16"
        },
        {
          "name": "deepsort",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "ostruct",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "bcrypt",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "bcrypt",
            "direct": true,
            "version": "3.1.20",
            "ecosystem": "rubygems"
          },
          {
            "name": "concurrent-ruby",
            "direct": true,
            "version": "1.3.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "deepsort",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "deepsort",
            "direct": true,
            "version": "0.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "forestadmin-jsonapi-serializers",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "forestadmin-jsonapi-serializers",
            "direct": true,
            "version": "2.0.0.pre.beta.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "groupdate",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "groupdate",
            "direct": true,
            "version": "5.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "httparty",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "httparty",
            "direct": true,
            "version": "0.21.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "ipaddress",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "ipaddress",
            "direct": true,
            "version": "0.8.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "json",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "json",
            "direct": true,
            "version": "2.15.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "json-jwt",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "json-jwt",
            "direct": true,
            "version": "1.17.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jwt",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "jwt",
            "direct": true,
            "version": "3.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "openid_connect",
            "direct": true,
            "version": "1.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "ostruct",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "ostruct",
            "direct": true,
            "version": "0.6.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-cors",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-cors",
            "direct": true,
            "version": "2.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "rails",
            "direct": true,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "useragent",
            "direct": true,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "useragent",
            "direct": true,
            "version": "0.16.11",
            "ecosystem": "rubygems"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.9.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@colors/colors",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/cli",
            "direct": false,
            "version": "17.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/config-conventional",
            "direct": false,
            "version": "17.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/config-validator",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/ensure",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/execute-rule",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/format",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/is-ignored",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/lint",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/load",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/message",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/parse",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/read",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/resolve-extends",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/rules",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/to-lines",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/top-level",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/types",
            "direct": false,
            "version": "17.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@cspotcode/source-map-support",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@gar/promisify",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/string-locale-compare",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.4.15",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/arborist",
            "direct": false,
            "version": "5.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/ci-detect",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/config",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/disparity-colors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/fs",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/fs",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/git",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/installed-package-contents",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/map-workspaces",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/metavuln-calculator",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/move-file",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/name-from-folder",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/node-gyp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/package-json",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/promise-spawn",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/query",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/run-script",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/run-script",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/auth-token",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/core",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/endpoint",
            "direct": false,
            "version": "6.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/graphql",
            "direct": false,
            "version": "4.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/openapi-types",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-paginate-rest",
            "direct": false,
            "version": "2.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-request-log",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-rest-endpoint-methods",
            "direct": false,
            "version": "5.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/request",
            "direct": false,
            "version": "5.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/request-error",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/rest",
            "direct": false,
            "version": "18.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/types",
            "direct": false,
            "version": "6.34.0",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/changelog",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/commit-analyzer",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/error",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/error",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/exec",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/git",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/github",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/npm",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/release-notes-generator",
            "direct": false,
            "version": "10.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tootallnate/once",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node10",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node12",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node14",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node16",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/color-name",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mdast",
            "direct": false,
            "version": "3.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/minimist",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "20.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/normalize-package-data",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/parse-json",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/unist",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.11.3",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-walk",
            "direct": false,
            "version": "8.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agentkeepalive",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "aggregate-error",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansicolors",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "aproba",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "archy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "are-we-there-yet",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "arg",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "argv-formatter",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-ify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-union",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arrify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "asap",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "at-least-node",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bail",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "before-after-hook",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "bin-links",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "bottleneck",
            "direct": false,
            "version": "2.19.5",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "builtins",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cacache",
            "direct": false,
            "version": "16.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "cacache",
            "direct": false,
            "version": "16.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase-keys",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cardinal",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ccount",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "character-entities",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "character-entities-legacy",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "character-reference-invalid",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cidr-regex",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "clean-stack",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-columns",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-table3",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cmd-shim",
            "direct": false,
            "version": "5.0.0",
            "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": "color-support",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "columnify",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "common-ancestor-path",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "compare-func",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "console-control-strings",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-angular",
            "direct": false,
            "version": "5.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-angular",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-conventionalcommits",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-writer",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-filter",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-parser",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-parser",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": false,
            "version": "8.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig-typescript-loader",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-random-string",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dargs",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dateformat",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "debuglog",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize-keys",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-extend",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "defaults",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "del",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "delegates",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "deprecation",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "dezalgo",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "dir-glob",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dot-prop",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer2",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "encoding",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "env-ci",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "env-paths",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "err-code",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "exponential-backoff",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "fastest-levenshtein",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-versions",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "from2",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fromentries",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-minipass",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "gauge",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "git-log-parser",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "git-raw-commits",
            "direct": false,
            "version": "2.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "global-dirs",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "globby",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars",
            "direct": false,
            "version": "4.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "hard-rejection",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.3",
            "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-unicode",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hook-std",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-cache-semantics",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "humanize-ms",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "husky",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ignore-walk",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "infer-owner",
            "direct": false,
            "version": "1.0.4",
            "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": "ini",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "init-package-json",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "into-stream",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ip",
            "direct": false,
            "version": "1.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "ip-regex",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-alphabetical",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-alphanumerical",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-cidr",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-decimal",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-hexadecimal",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-lambda",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-obj",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-cwd",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-text-path",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "issue-parser",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "java-properties",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-better-errors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-nice",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-safe",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonparse",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "JSONStream",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "just-diff",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "just-diff-apply",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmaccess",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmdiff",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmexec",
            "direct": false,
            "version": "4.0.14",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmfund",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmhook",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmorg",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmpack",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmpublish",
            "direct": false,
            "version": "6.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmsearch",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmteam",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmversion",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.capitalize",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.escaperegexp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isfunction",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.ismatch",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isstring",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.kebabcase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.mergewith",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.snakecase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.startcase",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniqby",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.upperfirst",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "longest-streak",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "7.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "make-fetch-happen",
            "direct": false,
            "version": "10.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "make-fetch-happen",
            "direct": false,
            "version": "10.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "map-obj",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "map-obj",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "markdown-table",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "4.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "marked-terminal",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-find-and-replace",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-from-markdown",
            "direct": false,
            "version": "0.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-autolink-literal",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-strikethrough",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-table",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-task-list-item",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-to-markdown",
            "direct": false,
            "version": "0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-to-string",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "meow",
            "direct": false,
            "version": "8.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark",
            "direct": false,
            "version": "2.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm",
            "direct": false,
            "version": "0.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-autolink-literal",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-strikethrough",
            "direct": false,
            "version": "0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-table",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-tagfilter",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-task-list-item",
            "direct": false,
            "version": "0.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "min-indent",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minimist-options",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-collect",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-fetch",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-flush",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-json-stream",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-pipeline",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-sized",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp-infer-owner",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "modify-values",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stream",
            "direct": false,
            "version": "0.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "nerf-dart",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-emoji",
            "direct": false,
            "version": "1.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.6.7",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "9.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm",
            "direct": false,
            "version": "8.19.4",
            "ecosystem": "npm"
          },
          {
            "name": "npm-audit-report",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-bundled",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-bundled",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-install-checks",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-normalize-package-bin",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-normalize-package-bin",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-package-arg",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-package-arg",
            "direct": false,
            "version": "9.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-packlist",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "npm-packlist",
            "direct": false,
            "version": "5.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "npm-pick-manifest",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-pick-manifest",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-profile",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-registry-fetch",
            "direct": false,
            "version": "13.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-registry-fetch",
            "direct": false,
            "version": "13.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-user-validate",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npmlog",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "opener",
            "direct": false,
            "version": "1.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-each-series",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-filter",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-is-promise",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-reduce",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-retry",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pacote",
            "direct": false,
            "version": "13.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pacote",
            "direct": false,
            "version": "13.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-conflict-json",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parse-entities",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-conf",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "6.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "proc-log",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-all-reject-late",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-call-limit",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-inflight",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-retry",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promzard",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "q",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "qrcode-terminal",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "quick-lru",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "rc",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "read",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "read-cmd-shim",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-json",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-json",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-json-fast",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdir-scoped-modules",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "redent",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "redeyed",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "registry-auth-token",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-gfm",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark-parse",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark-stringify",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-string",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-global",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semantic-release",
            "direct": false,
            "version": "19.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "semantic-release-rubygem",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "semantic-release-slack-bot",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver-diff",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver-regex",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "signale",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "slackify-markdown",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "spawn-error-forwarder",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "split",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ssri",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ssri",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "stream-combiner2",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-indent",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-hyperlinks",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "temp-dir",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tempy",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "tempy",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "text-extensions",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "through",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "through2",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "through2",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "tiny-relative-date",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "traverse",
            "direct": false,
            "version": "0.6.6",
            "ecosystem": "npm"
          },
          {
            "name": "treeverse",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "trim-newlines",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "trough",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "ts-node",
            "direct": false,
            "version": "10.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.15.4",
            "ecosystem": "npm"
          },
          {
            "name": "unified",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "unique-filename",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "unique-filename",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unique-slug",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "unique-slug",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unique-string",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-is",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-remove",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-stringify-position",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit-parents",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "universal-user-agent",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "url-join",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache-lib",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-name",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vfile",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "vfile-message",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "walk-up-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wide-align",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xtend",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yn",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "zwitch",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "actioncable",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailbox",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailer",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionpack",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "actiontext",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionview",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "activejob",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "activemodel",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "activerecord",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "activestorage",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "activesupport",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "aes_key_wrap",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "attr_required",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "base64",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "bigdecimal",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "bindata",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "builder",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "byebug",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "crass",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "csv",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "csv",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "date",
            "direct": false,
            "version": "3.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "diff-lcs",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "docile",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "erb",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "erubi",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-follow_redirects",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-net_http",
            "direct": false,
            "version": "3.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "globalid",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "httpclient",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "i18n",
            "direct": false,
            "version": "1.14.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "logger",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "loofah",
            "direct": false,
            "version": "2.24.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "mail",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "marcel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "method_source",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mini_mime",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "minitest",
            "direct": false,
            "version": "5.27.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "multi_xml",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "mutex_m",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-http",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-imap",
            "direct": false,
            "version": "0.5.12",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-pop",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-protocol",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-smtp",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "nio4r",
            "direct": false,
            "version": "2.7.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "nokogiri",
            "direct": false,
            "version": "1.18.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "psych",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "public_suffix",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "racc",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack",
            "direct": false,
            "version": "2.2.20",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-oauth2",
            "direct": false,
            "version": "1.21.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-test",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-dom-testing",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-html-sanitizer",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "railties",
            "direct": false,
            "version": "6.1.7.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "rake",
            "direct": false,
            "version": "13.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rdoc",
            "direct": false,
            "version": "7.0.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-core",
            "direct": false,
            "version": "3.13.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-expectations",
            "direct": false,
            "version": "3.13.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-mocks",
            "direct": false,
            "version": "3.13.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-rails",
            "direct": false,
            "version": "6.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-support",
            "direct": false,
            "version": "3.13.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov",
            "direct": false,
            "version": "0.22.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov-html",
            "direct": false,
            "version": "0.13.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov_json_formatter",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "sprockets",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "sprockets-rails",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "sqlite3",
            "direct": false,
            "version": "1.7.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "stringio",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "swd",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "thor",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "timecop",
            "direct": false,
            "version": "0.9.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "timeout",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "tsort",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "tzinfo",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "uri",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "validate_email",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "validate_url",
            "direct": false,
            "version": "1.0.15",
            "ecosystem": "rubygems"
          },
          {
            "name": "webfinger",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "websocket-extensions",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "zeitwerk",
            "direct": false,
            "version": "2.7.3",
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 732,
        "direct_count": 28,
        "indirect_count": 704
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 22,
        "merged_prs": 531,
        "open_issues": 49,
        "closed_ratio": 0.675,
        "closed_issues": 102,
        "closed_unmerged_prs": 76
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "arnaudbesnier",
          "commits": 530,
          "avatar_url": "https://avatars.githubusercontent.com/u/664261?v=4"
        },
        {
          "type": "User",
          "login": "SeyZ",
          "commits": 396,
          "avatar_url": "https://avatars.githubusercontent.com/u/519129?v=4"
        },
        {
          "type": "User",
          "login": "forest-bot",
          "commits": 212,
          "avatar_url": "https://avatars.githubusercontent.com/u/60007188?v=4"
        },
        {
          "type": "User",
          "login": "matthv",
          "commits": 75,
          "avatar_url": "https://avatars.githubusercontent.com/u/10195400?v=4"
        },
        {
          "type": "User",
          "login": "nicolasalexandre9",
          "commits": 42,
          "avatar_url": "https://avatars.githubusercontent.com/u/17160712?v=4"
        },
        {
          "type": "User",
          "login": "ArnaudValensi",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/604486?v=4"
        },
        {
          "type": "User",
          "login": "DrRaider",
          "commits": 24,
          "avatar_url": "https://avatars.githubusercontent.com/u/26116140?v=4"
        },
        {
          "type": "User",
          "login": "jeffladiray",
          "commits": 23,
          "avatar_url": "https://avatars.githubusercontent.com/u/22832687?v=4"
        },
        {
          "type": "User",
          "login": "SteveBunlon",
          "commits": 22,
          "avatar_url": "https://avatars.githubusercontent.com/u/12433882?v=4"
        },
        {
          "type": "User",
          "login": "GuillaumeCisco",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/1155244?v=4"
        }
      ],
      "contributors_sampled": 51,
      "top_contributor_share": 0.364
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Gemfile.lock",
        "yarn.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 5,
            "reason": "Found 14/27 approved changesets -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 8 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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "99 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7d3e8df6bd3ed1780a3fe2e7bee36c3861b36c35",
        "ran_at": "2026-07-23T12:40:56Z",
        "aggregate_score": 5.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T12:35:46Z",
      "oldest_open_prs": [
        {
          "number": 290,
          "created_at": "2018-10-15T09:01:05Z",
          "last_comment_at": "2018-10-23T14:42:13Z",
          "last_comment_author": "arnaudbesnier"
        },
        {
          "number": 316,
          "created_at": "2019-05-23T18:17:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 457,
          "created_at": "2021-05-07T12:24:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 483,
          "created_at": "2021-06-09T07:56:14Z",
          "last_comment_at": "2021-06-09T07:56:58Z",
          "last_comment_author": "qlty-cloud-legacy"
        },
        {
          "number": 487,
          "created_at": "2021-06-10T10:01:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 501,
          "created_at": "2021-06-29T18:32:24Z",
          "last_comment_at": "2021-06-30T14:07:07Z",
          "last_comment_author": "qlty-cloud-legacy"
        },
        {
          "number": 513,
          "created_at": "2021-08-11T03:59:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 549,
          "created_at": "2022-03-29T16:09:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 550,
          "created_at": "2022-03-29T16:09:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 557,
          "created_at": "2022-05-10T06:59:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 563,
          "created_at": "2022-06-02T16:02:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 564,
          "created_at": "2022-06-04T00:09:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 565,
          "created_at": "2022-06-10T01:04:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 571,
          "created_at": "2022-07-19T09:48:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 581,
          "created_at": "2022-08-24T09:08:16Z",
          "last_comment_at": "2022-08-24T09:09:25Z",
          "last_comment_author": "qlty-cloud-legacy"
        },
        {
          "number": 594,
          "created_at": "2023-01-03T15:35:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 598,
          "created_at": "2023-01-19T10:57:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 599,
          "created_at": "2023-02-04T11:23:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 607,
          "created_at": "2023-03-09T02:23:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 674,
          "created_at": "2024-04-19T07:32:17Z",
          "last_comment_at": "2024-04-19T07:33:24Z",
          "last_comment_author": "qlty-cloud-legacy"
        }
      ],
      "last_merged_pr_at": "2026-07-23T12:34:18Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 140,
          "created_at": "2017-05-01T16:17:55Z",
          "last_comment_at": "2019-01-31T12:13:37Z",
          "last_comment_author": "lostie"
        },
        {
          "number": 170,
          "created_at": "2017-08-01T23:58:23Z",
          "last_comment_at": "2017-12-17T17:02:53Z",
          "last_comment_author": "daniel-gato"
        },
        {
          "number": 177,
          "created_at": "2017-08-11T08:08:13Z",
          "last_comment_at": "2020-08-05T09:45:41Z",
          "last_comment_author": "stefatkins"
        },
        {
          "number": 178,
          "created_at": "2017-08-11T08:14:30Z",
          "last_comment_at": "2017-12-17T18:41:42Z",
          "last_comment_author": "karensg"
        },
        {
          "number": 207,
          "created_at": "2017-11-23T15:54:07Z",
          "last_comment_at": "2018-01-11T14:59:13Z",
          "last_comment_author": "daniel-gato"
        },
        {
          "number": 208,
          "created_at": "2017-11-24T12:10:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 213,
          "created_at": "2017-12-19T13:41:44Z",
          "last_comment_at": "2017-12-27T15:00:46Z",
          "last_comment_author": "daniel-gato"
        },
        {
          "number": 214,
          "created_at": "2017-12-20T08:46:49Z",
          "last_comment_at": "2017-12-22T06:50:03Z",
          "last_comment_author": "daniel-gato"
        },
        {
          "number": 227,
          "created_at": "2018-01-11T14:00:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 256,
          "created_at": "2018-04-19T08:38:09Z",
          "last_comment_at": "2018-08-22T05:30:23Z",
          "last_comment_author": "arnaudbesnier"
        },
        {
          "number": 267,
          "created_at": "2018-06-25T08:42:32Z",
          "last_comment_at": "2023-04-21T07:38:02Z",
          "last_comment_author": "YoranBrondsema"
        },
        {
          "number": 278,
          "created_at": "2018-08-06T14:36:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 279,
          "created_at": "2018-08-17T07:36:34Z",
          "last_comment_at": "2018-10-21T20:40:58Z",
          "last_comment_author": "arnaudbesnier"
        },
        {
          "number": 291,
          "created_at": "2018-10-16T09:00:59Z",
          "last_comment_at": "2018-10-22T08:31:43Z",
          "last_comment_author": "CFtriksX"
        },
        {
          "number": 294,
          "created_at": "2018-10-17T15:38:22Z",
          "last_comment_at": "2018-10-21T14:49:24Z",
          "last_comment_author": "arnaudbesnier"
        },
        {
          "number": 302,
          "created_at": "2018-12-17T08:03:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 306,
          "created_at": "2019-02-04T17:47:38Z",
          "last_comment_at": "2024-05-10T14:12:32Z",
          "last_comment_author": "abdallaayman21"
        },
        {
          "number": 312,
          "created_at": "2019-04-26T08:26:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 313,
          "created_at": "2019-04-26T10:23:39Z",
          "last_comment_at": "2019-05-27T11:33:23Z",
          "last_comment_author": "pawelwiewiora"
        },
        {
          "number": 317,
          "created_at": "2019-05-31T13:32:24Z",
          "last_comment_at": "2021-04-10T00:10:48Z",
          "last_comment_author": "iyerushalmi"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ForestAdmin/forest-rails",
    "host": "github.com",
    "name": "forest-rails",
    "owner": "ForestAdmin"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 71,
      "inputs": {
        "security": 55,
        "vitality": 84,
        "community": 69,
        "governance": 74,
        "engineering": 67
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 57,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "57 commits in the last year",
                "points": 15.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 57
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v9.20.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7
                    }
                  }
                ],
                "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 69,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "forks": 83,
              "stars": 385,
              "watchers": 12,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "385 stars",
                "points": 41.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 385
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "83 forks",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 83
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "12 watchers",
                "points": 5.8,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": true,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "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": 7.2,
                "status": "met",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "packages": [
                "forest_liana"
              ],
              "dependents": null,
              "ecosystems": "rubygems",
              "total_downloads": 2777110,
              "monthly_downloads": null
            },
            "components": [
              {
                "key": "total_downloads",
                "name": "Total downloads",
                "detail": "2,777,110 downloads all-time across rubygems",
                "points": 67,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_total",
                    "params": {
                      "count": 2777110,
                      "ecosystems": "rubygems"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 74,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 51,
              "top_contributor_share": 0.364
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 36% of commits",
                "points": 14.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 36
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "51 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 51
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 8 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": 531,
              "open_issues": 49,
              "closed_issues": 102,
              "issue_closed_ratio": 0.675,
              "closed_unmerged_prs": 76
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "68% of issues closed",
                "points": 31.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 68
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "531/607 decided PRs merged",
                "points": 33.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 531,
                      "decided": 607
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 14/27 approved changesets -- score normalized to 5",
                "points": 7.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "followers": 85,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ForestAdmin",
              "public_repos": 87,
              "account_age_days": 4003
            },
            "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": "85 followers of ForestAdmin",
                "points": 13.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 85,
                      "login": "ForestAdmin"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "87 public repos, account ~10 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 87
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 10
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "forest_liana"
              ],
              "ecosystems": "rubygems",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on rubygems",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "rubygems"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "538 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 538
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 67,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "admin",
                "rails",
                "gem",
                "admin-panel",
                "internal-tool",
                "ruby",
                "ruby-on-rails",
                "backend",
                "backend-api"
              ],
              "has_wiki": false,
              "homepage": "https://www.forestadmin.com",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.forestadmin.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "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": 58,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 5.8
            },
            "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": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 14/27 approved changesets -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 8 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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "99 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 718 resolved dependencies against OSV; 14 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"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 718
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 14
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 43,
            "inputs": {
              "source": "osv",
              "advisories": 110,
              "affected_packages": 37,
              "assessed_packages": 718,
              "unassessed_packages": 14,
              "affected_by_severity": "critical 2, high 20, moderate 11, low 4",
              "direct_affected_packages": 5
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "5 affected: concurrent-ruby 1.3.4 (high 7.5), httparty 0.21.0 (high 8.2), json 2.15.1 (high 8.2), +2 more",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 5,
                      "packages": "concurrent-ruby 1.3.4 (high 7.5), httparty 0.21.0 (high 8.2), json 2.15.1 (high 8.2)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "3 advisory-carrying package(s) unaddressed past 90 days; oldest published 211 days ago",
                "points": 25.4,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 3,
                      "oldest": 211
                    }
                  }
                ],
                "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": 718,
              "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": 44,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Gemfile.lock",
                "yarn.lock"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.1,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "10 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 10,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Ruby",
              "largest_source_bytes": 27760,
              "source_files_sampled": 288,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Ruby without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Ruby"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/288 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 288,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'forest-rails' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T12:41:21.245982Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/ForestAdmin/forest-rails.svg",
  "full_name": "ForestAdmin/forest-rails",
  "license_state": "standard",
  "license_spdx": "GPL-3.0"
}

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 statisticsRubyGems.