公开记录
软件健康报告模式 0.27.0 · 指标 2.3.1 · 2026-07-28 09:27 UTC

open-data-rescue / climate-data-rescue

Climate Data Rescue is an archival data rescue platform using Ruby on Rails.

JavaScript · Ruby · HTMLMIT★ 15 星标⑂ 10 复刻始于 2015年2月在 GitHub 上查看 ↗
类型网络服务网页界面如何判定

open-data-rescue/climate-data-rescue 的健康指数为 100 分中的 67 分,处于「良好」区间。 其得分最高的类别是Engineering Quality(76/100),最低的是Community & Adoption(39/100)。 最近一次更新在 5 天前。 近期的大部分工作由 2 位贡献者完成。

67
总分 / 100
良好

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均,再依据公开记录的分布进行校准,使各等级具有百分位含义;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 34(存在风险)的上限。

67
卓越93-100公开记录中的最高层级(约前 5%);基本满足所有检验标准
优秀80-92各方面均表现强劲;仅有少量不足
良好65-79健康;不足之处有限且可控
中等50-64可接受,但存在明显不足;建议进行审查
薄弱35-49多个领域存在实质性薄弱环节
存在风险20-34存在重大薄弱环节;采用时应保持审慎
危急1-19问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

加权总体分 61 经校准后在公布的指数量表上为 67(记录校准 2026-08-02)。

所有权

5 关注者6 个公开仓库始于 2019年7月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

75良好 · 占总体的 21%
评分方式
36/36推送新近度 — 最近一次推送于 5 天前
4.2/36提交节奏 — 52 周中有 6 周有提交
13.1/18提交量 — 最近一年 28 次提交
10/10OpenSSF Scorecard:Maintained — 13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year28
human_commit_share0.94
days_since_last_push5
active_weeks_last_year6

发布纪律

92优秀
评分方式
27/27有发布版本 — 已发布 51 个发布版本
36/36发布时效 — 最近一次发布版本于 5 天前
19.8/27发布节奏 — 约每 76.2 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count51
latest_release_tagv2.3.10
releases_from_tags
days_since_latest_release5
mean_days_between_releases76.2
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

39薄弱 · 占总体的 17%

流行度与采用

30存在风险
评分方式
18.6/60星标 — 15 个星标
8/25复刻 — 10 个复刻
3.9/15关注者 — 6 位关注者
所用输入
forks10
stars15
watchers6
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
readme_badges
has_contributing
has_issue_template
has_code_of_conduct
readme_badge_services
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

59中等 · 占总体的 23%
评分方式
25.2/54巴士系数 — 2 位贡献者贡献了半数提交
12.8/22.5提交分布 — 头号贡献者编写了 43% 的提交
13.5/13.5贡献者广度 — 15 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 7 contributing companies or organizations
所用输入
bus_factor2
contributors_sampled15
top_contributor_share0.43
评分方式
38.1/42议题解决 — 91% 的议题已关闭
14/30PR 接受 — 已裁定的 PR 中 359/767 已合并
0/13Newcomer PR acceptance — 30 天内没有首次贡献者的 PR 得到裁决
0/15OpenSSF Scorecard:Code-Review — Found 1/13 approved changesets -- score normalized to 0
所用输入
merged_prs359
open_issues11
closed_issues106
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0.906
closed_unmerged_prs408
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
已排除计分(无数据或不适用):newcomer_pr_acceptance。 其余权重已重新归一化。
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
5.6/25所有者影响力 — open-data-rescue 有 5 位关注者
18.2/25既往记录 — 6 个公开仓库,账户约 7 年
所用输入
followers5
owner_typeOrganization
is_verified
owner_loginopen-data-rescue
public_repos6
account_age_days2,572

工程质量

基础的工程与文档实践是否到位?

76良好 · 占总体的 19%

工程实践

76良好
评分方式
24/24CI 工作流 — 2 个工作流
24/24存在测试
16/16Linter 配置 — .rubocop.yml
0/9.6Pre-commit 钩子
0/6.4.editorconfig
12/20OpenSSF Scorecard:CI-Tests — 11 out of 17 merged PRs checked by a CI test -- score normalized to 6
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

75良好
评分方式
30/30README
0/25文档目录
15/15文档 / 主页站点 — https://draw.geog.mcgill.ca
10/10仓库描述
10/10主题标签 — 9 个主题标签
10/10Wiki
所用输入
topicstranscription, data-rescue, archives, digitization, citizen-science, hacktoberfest, climate, community, science
has_wiki
homepagehttps://draw.geog.mcgill.ca
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

53中等 · 占总体的 16%

安全态势

58中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
1.5/2.5CI-Tests — 11 out of 17 merged PRs checked by a CI test -- score normalized to 6
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/13 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 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.5许可证 — license file detected
7.5/7.5Maintained — 13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
3/5SAST — SAST tool is not run on all commits -- score normalized to 6
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 113 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.8
已排除计分(无数据或不适用):branch_protection, signed_releases。 其余权重已重新归一化。

依赖安全公告

32存在风险
评分方式
4.3/35直接依赖不含已知公告 — 5 个受影响:underscore 1.8.3 (critical 9.8), axios 1.13.6 (high 8.7), lodash 4.17.23 (high 8.1),另有 2 个
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
20/40没有长期未处理的公告 — 5 个携带公告的软件包超过 90 天未处理;最早一条发布于 1,908 天前
所用输入
sourceosv
advisories115
affected_packages29
assessed_packages372
unassessed_packages0
affected_by_severitycritical 3, high 16, moderate 8, low 2
direct_affected_packages5
已排除计分(无数据或不适用):间接依赖不含已知公告。 其余权重已重新归一化。 已将 372 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?权重刻意设小(4%):代理工具链是一项真实的维护信号,但完全不具备的仓库仍可达到 100/100。

44薄弱 · 占总体的 4%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
28.4/40可读的提交历史 — 94 次人类提交中有 50 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.532
agent_instruction_files
agent_instruction_max_bytes
评分方式
0/18一条命令的引导启动
22/22自动化测试
11/11Lint / 格式化配置 — .rubocop.yml
0/11静态类型检查
10/10可复现环境 — Dockerfile, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
8/8自动化维护 — 最近 100 次提交中有 6 次为自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesGemfile.lock, yarn.lock
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.06
评分方式
0/45可类型检查的代码 — JavaScript,未配置类型检查
54.6/55可控的文件大小 — 采样的 292 个源文件中有 2 个超过 60KB
所用输入
primary_languageJavaScript
largest_source_bytes167,184
source_files_sampled292
oversized_source_files2

关键数据

15GitHub 星标
15贡献者
28最近 12 个月提交数
5距最近推送天数
51发布版本数
2巴士系数(bus factor)
11开放议题
npm, RubyGems软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

更多细节

Star 与 Fork 历史 0 ★ / 10 ⇿
0Star
10Fork
45发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

02468101012016-032020-072024-11
主版本 1次版本 4修订 40

每个点涵盖 8 天。

OpenSSF Scorecard 5.8 / 10
5.8综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-28 09:27 UTC

10Binary-Artifactsno binaries found in the repo
不适用Branch-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
6CI-Tests11 out of 17 merged PRs checked by a CI test -- score normalized to 6
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/13 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
6SASTSAST tool is not run on all commits -- score normalized to 6
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities113 existing vulnerabilities detected
直接依赖 75
注册表软件包版本约束清单文件
RubyGemsrails~> 7.0.4Gemfile
RubyGemsmysql2Gemfile
RubyGemspaper_trailGemfile
RubyGemsranked-modelGemfile
RubyGemsuglifierGemfile
RubyGemslog4rGemfile
RubyGemsdeviseGemfile
RubyGemspunditGemfile
RubyGemsslim-railsGemfile
RubyGemssimple_formGemfile
RubyGemswill_paginateGemfile
RubyGemskt-paperclipGemfile
RubyGemswith_advisory_lockGemfile
RubyGemsjbuilderGemfile
RubyGemsjsonapi-railsGemfile
RubyGemsjsonapi-rspecGemfile
RubyGemsrouting-filterGemfile
RubyGemshttp_accept_languageGemfile
RubyGemsrails-i18n~> 7.0.0Gemfile
RubyGemsi18n-active_recordGemfile
RubyGemsrails-observersGemfile
RubyGemsglobalizeGemfile
RubyGemsglobalize-accessorsGemfile
RubyGemssidekiqGemfile
RubyGemssidekiq-schedulerGemfile
RubyGemsnewrelic_rpmGemfile
RubyGemspuma~> 6.3.1Gemfile
RubyGemsrecaptchaGemfile
RubyGemsacts-as-taggable-on~> 9.0Gemfile
RubyGemscssbundling-rails~> 1.1Gemfile
RubyGemstzinfo-dataGemfile
RubyGemsvite_rails3.0.15Gemfile
RubyGemsvite_ruby3.3.4Gemfile
RubyGemsvite_plugin_legacyGemfile
RubyGemshaml-railsGemfile
npm@intlify/unplugin-vue-i18n^0.11.0package.json
npm@popperjs/core^2.11.7package.json
npm@rollup/plugin-inject^5.0.3package.json
npm@vitejs/plugin-vue^4.2.1package.json
npm@vue/compat^3.2.47package.json
npmaxios^1.2.0package.json
npmbackbone^1.5.0package.json
npmbackbone-forms^0.14.1package.json
npmbackbone-model-file-upload^1.0.2package.json
npmbackbone.marionette2.4.7package.json
npmbackbone.wreqr1.3.6package.json
npmblueimp-file-upload^10.32.0package.json
npmbootstrap4.6.1package.json
npmbootstrap-notify^3.1.3package.json
npmbootstrap-switch^3.4.0package.json
npmbootstrap-vue^2.23.1package.json
npmbowser^2.11.0package.json
npmcaniuse-lite^1.0.30001171package.json
npmcommon-tags^1.8.0package.json
npmjquery^3.6.4package.json
npmjquery-ui-dist^1.13.2package.json
npmjquery-ujs^1.2.3package.json
npmjquery.kinetic^2.2.4package.json
npmjsonapi-vuex5.13.1package.json
npmlodash^4.17.21package.json
npmlodash.merge^4.6.2package.json
npmluxon^3.1.0package.json
npmmagnify2.1.0package.json
npmmoment^2.29.2package.json
npmpopper.js^1.16.1package.json
npmsass^1.62.1package.json
npmselect2^4.1.0-rc.0package.json
npmselect2-bootstrap-theme^0.1.0-beta.10package.json
npmselect2-bootstrap4-theme^1.0.0package.json
npmtempusdominus-bootstrap-4^5.39.2package.json
npmtrumbowyg^2.27.3package.json
npmunderscore^1.13.8package.json
npmvue^3.2.45package.json
npmvue-router^4.1.6package.json
npmvuex^4.1.0package.json
全部依赖 372

来自 GitHub 依赖图的完整解析依赖集合:81 个直接依赖与 291 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
npm@intlify/unplugin-vue-i18n0.11.0直接
npm@popperjs/core2.11.8直接
npm@rollup/plugin-inject5.0.5直接
npm@vitejs/plugin-vue4.6.2直接
npm@vue/compat3.5.30直接
npmaxios1.13.6直接
npmbackbone1.1.2直接
npmbackbone1.3.2直接
npmbackbone1.3.3直接
npmbackbone1.6.1直接
npmbackbone-forms0.14.1直接
npmbackbone-model-file-upload1.0.2直接
npmbackbone.marionette2.4.7直接
npmbackbone.wreqr1.3.6直接
npmbackbone.wreqr1.4.0直接
npmblueimp-file-upload10.32.0直接
npmbootstrap4.6.1直接
npmbootstrap4.6.2直接
npmbootstrap-notify3.1.3直接
npmbootstrap-switch3.4.0直接
npmbootstrap-vue2.23.1直接
npmbowser2.14.1直接
npmcaniuse-lite1.0.30001777直接
npmcommon-tags1.8.2直接
npmjquery3.7.1直接
npmjquery4.0.0直接
npmjquery-ui-dist1.13.3直接
npmjquery-ujs1.2.3直接
npmjquery.kinetic2.2.4直接
npmjsonapi-vuex5.13.1直接
npmlodash4.17.23直接
npmlodash.merge4.6.2直接
npmluxon3.7.2直接
npmmagnify2.1.0直接
npmmoment2.30.1直接
npmpopper.js1.16.1直接
npmsass1.97.3直接
npmselect24.1.0-rc.0直接
npmselect2-bootstrap-theme0.1.0-beta.10直接
npmselect2-bootstrap4-theme1.0.0直接
npmtempusdominus-bootstrap-45.39.2直接
npmtrumbowyg2.31.0直接
npmunderscore1.13.8直接
npmunderscore1.8.3直接
npmvue3.5.30直接
npmvue-router4.6.4直接
npmvuex4.1.0直接
RubyGemsacts-as-taggable-on9.0.1直接
RubyGemscssbundling-rails1.4.3直接
RubyGemsdevise4.9.4直接
RubyGemsglobalize7.0.0直接
RubyGemsglobalize-accessors0.3.0直接
RubyGemshaml-rails3.0.0直接
RubyGemshttp_accept_language2.1.1直接
RubyGemsi18n-active_record1.4.0直接
RubyGemsjbuilder2.14.1直接
RubyGemsjsonapi-rails0.4.1直接
RubyGemsjsonapi-rspec0.0.11直接
RubyGemskt-paperclip7.2.2直接
RubyGemslog4r1.1.10直接
RubyGemsmysql20.5.7直接
RubyGemsnewrelic_rpm9.23.0直接
RubyGemspaper_trail16.0.0直接
RubyGemspuma6.3.1直接
RubyGemspundit2.5.2直接
RubyGemsrails7.0.10直接
RubyGemsrails-i18n7.0.10直接
RubyGemsrails-observers0.1.5直接
RubyGemsranked-model0.4.11直接
RubyGemsrecaptcha5.21.1直接
RubyGemsrouting-filter0.7.0直接
RubyGemssidekiq7.3.9直接
RubyGemssidekiq-scheduler6.0.1直接
RubyGemssimple_form5.4.0直接
RubyGemsslim-rails3.7.0直接
RubyGemsuglifier4.2.1直接
RubyGemsvite_plugin_legacy3.0.2直接
RubyGemsvite_rails3.0.15直接
RubyGemsvite_ruby3.3.4直接
RubyGemswill_paginate4.0.1直接
RubyGemswith_advisory_lock5.3.0直接
npm@babel/helper-string-parser7.27.1间接
npm@babel/helper-validator-identifier7.28.5间接
npm@babel/parser7.29.0间接
npm@babel/types7.29.0间接
npm@esbuild/android-arm0.18.20间接
npm@esbuild/android-arm640.18.20间接
npm@esbuild/android-x640.18.20间接
npm@esbuild/darwin-arm640.18.20间接
npm@esbuild/darwin-x640.18.20间接
npm@esbuild/freebsd-arm640.18.20间接
npm@esbuild/freebsd-x640.18.20间接
npm@esbuild/linux-arm0.18.20间接
npm@esbuild/linux-arm640.18.20间接
npm@esbuild/linux-ia320.18.20间接
npm@esbuild/linux-loong640.18.20间接
npm@esbuild/linux-mips64el0.18.20间接
npm@esbuild/linux-ppc640.18.20间接
npm@esbuild/linux-riscv640.18.20间接
npm@esbuild/linux-s390x0.18.20间接
npm@esbuild/linux-x640.18.20间接
npm@esbuild/netbsd-x640.18.20间接
npm@esbuild/openbsd-x640.18.20间接
npm@esbuild/sunos-x640.18.20间接
npm@esbuild/win32-arm640.18.20间接
npm@esbuild/win32-ia320.18.20间接
npm@esbuild/win32-x640.18.20间接
npm@intlify/bundle-utils6.0.1间接
npm@intlify/message-compiler9.3.0-beta.17间接
npm@intlify/shared9.3.0-beta.17间接
npm@jridgewell/sourcemap-codec1.5.5间接
npm@nodelib/fs.scandir2.1.5间接
npm@nodelib/fs.stat2.0.5间接
npm@nodelib/fs.walk1.2.8间接
npm@nuxt/opencollective0.3.3间接
npm@parcel/watcher2.5.6间接
npm@parcel/watcher-android-arm642.5.6间接
npm@parcel/watcher-darwin-arm642.5.6间接
npm@parcel/watcher-darwin-x642.5.6间接
npm@parcel/watcher-freebsd-x642.5.6间接
npm@parcel/watcher-linux-arm-glibc2.5.6间接
npm@parcel/watcher-linux-arm-musl2.5.6间接
npm@parcel/watcher-linux-arm64-glibc2.5.6间接
npm@parcel/watcher-linux-arm64-musl2.5.6间接
npm@parcel/watcher-linux-x64-glibc2.5.6间接
npm@parcel/watcher-linux-x64-musl2.5.6间接
npm@parcel/watcher-win32-arm642.5.6间接
npm@parcel/watcher-win32-ia322.5.6间接
npm@parcel/watcher-win32-x642.5.6间接
npm@rollup/pluginutils5.3.0间接
npm@types/estree1.0.8间接
npm@vue/compiler-core3.5.30间接
npm@vue/compiler-dom3.5.30间接
npm@vue/compiler-sfc3.5.30间接
npm@vue/compiler-ssr3.5.30间接
npm@vue/devtools-api6.6.4间接
npm@vue/reactivity3.5.30间接
npm@vue/runtime-core3.5.30间接
npm@vue/runtime-dom3.5.30间接
npm@vue/server-renderer3.5.30间接
npm@vue/shared3.5.30间接
npmacorn7.4.1间接
npmacorn8.16.0间接
npmacorn-jsx5.3.2间接
npmansi-styles4.3.0间接
npmargparse2.0.1间接
npmasynckit0.4.0间接
npmbackbone.babysitter0.1.12间接
npmblueimp-canvas-to-blob3.29.0间接
npmblueimp-load-image5.16.0间接
npmblueimp-tmpl3.20.0间接
npmbraces3.0.3间接
npmcall-bind-apply-helpers1.0.2间接
npmchalk4.1.2间接
npmchokidar4.0.3间接
npmcolor-convert2.0.1间接
npmcolor-name1.1.4间接
npmcombined-stream1.0.8间接
npmconfbox0.1.8间接
npmconsola2.15.3间接
npmcsstype3.2.3间接
npmdebug4.4.3间接
npmdelayed-stream1.0.0间接
npmdetect-libc2.1.2间接
npmdunder-proto1.0.1间接
npmentities7.0.1间接
npmes-define-property1.0.1间接
npmes-errors1.3.0间接
npmes-object-atoms1.1.1间接
npmes-set-tostringtag2.1.0间接
npmesbuild0.18.20间接
npmescodegen2.1.0间接
npmeslint-utils2.1.0间接
npmeslint-visitor-keys1.3.0间接
npmespree6.2.1间接
npmesprima4.0.1间接
npmestraverse5.3.0间接
npmestree-walker2.0.2间接
npmesutils2.0.3间接
npmfast-glob3.3.3间接
npmfastq1.20.1间接
npmfill-range7.1.1间接
npmfollow-redirects1.15.11间接
npmform-data4.0.5间接
npmfsevents2.3.3间接
npmfunction-bind1.1.2间接
npmget-intrinsic1.3.0间接
npmget-proto1.0.1间接
npmglob-parent5.1.2间接
npmgopd1.2.0间接
npmhas-flag4.0.0间接
npmhas-symbols1.1.0间接
npmhas-tostringtag1.0.2间接
npmhasown2.0.2间接
npmimmutable5.1.5间接
npmis-extglob2.1.1间接
npmis-glob4.0.3间接
npmis-number7.0.0间接
npmjs-yaml4.1.1间接
npmjson52.2.3间接
npmjsonc-eslint-parser1.4.1间接
npmjsonpath-plus7.2.0间接
npmmagic-string0.30.21间接
npmmath-intrinsics1.1.0间接
npmmerge21.4.1间接
npmmicromatch4.0.8间接
npmmime-db1.52.0间接
npmmime-types2.1.35间接
npmmlly1.8.1间接
npmmoment-timezone0.5.48间接
npmms2.1.3间接
npmnanoid3.3.11间接
npmnode-addon-api7.1.1间接
npmnode-fetch2.7.0间接
npmpathe1.1.2间接
npmpathe2.0.3间接
npmpicocolors1.1.1间接
npmpicomatch2.3.1间接
npmpicomatch4.0.3间接
npmpkg-types1.3.1间接
npmportal-vue2.1.7间接
npmpostcss8.5.8间接
npmproxy-from-env1.1.0间接
npmqueue-microtask1.2.3间接
npmreaddirp4.1.2间接
npmreusify1.1.0间接
npmrollup3.30.0间接
npmrun-parallel1.2.0间接
npmsemver6.3.1间接
npmsource-map0.6.1间接
npmsource-map-js1.2.1间接
npmsupports-color7.2.0间接
npmto-regex-range5.0.1间接
npmtr460.0.3间接
npmufo1.6.3间接
npmunplugin1.16.1间接
npmvite4.5.14间接
npmvite-plugin-full-reload1.2.0间接
npmvite-plugin-ruby3.2.2间接
npmvue-functional-data-merge3.1.0间接
npmwebidl-conversions3.0.1间接
npmwebpack-virtual-modules0.6.2间接
npmwhatwg-url5.0.0间接
npmyaml1.10.2间接
npmyaml-eslint-parser0.3.2间接
RubyGemsactioncable7.0.10间接
RubyGemsactionmailbox7.0.10间接
RubyGemsactionmailer7.0.10间接
RubyGemsactionpack7.0.10间接
RubyGemsactiontext7.0.10间接
RubyGemsactionview7.0.10间接
RubyGemsactivejob7.0.10间接
RubyGemsactivemodel7.0.10间接
RubyGemsactiverecord7.0.10间接
RubyGemsactivestorage7.0.10间接
RubyGemsactivesupport7.0.10间接
RubyGemsast2.4.3间接
RubyGemsbase640.3.0间接
RubyGemsbcrypt3.1.20间接
RubyGemsbenchmark0.5.0间接
RubyGemsbetter_errors2.10.1间接
RubyGemsbigdecimal3.3.1间接
RubyGemsbindex0.8.1间接
RubyGemsbinding_of_caller1.0.1间接
RubyGemsbrakeman7.1.1间接
RubyGemsbuilder3.3.0间接
RubyGemsbyebug12.0.0间接
RubyGemsclimate_control1.2.0间接
RubyGemscoderay1.1.3间接
RubyGemsconcurrent-ruby1.3.4间接
RubyGemsconnection_pool2.5.5间接
RubyGemscrass1.0.6间接
RubyGemsdatabase_cleaner2.1.0间接
RubyGemsdatabase_cleaner-active_record2.2.2间接
RubyGemsdatabase_cleaner-core2.0.1间接
RubyGemsdate3.5.0间接
RubyGemsdebug_inspector1.2.0间接
RubyGemsdiff-lcs1.6.2间接
RubyGemsdocile1.4.1间接
RubyGemsdrb2.2.3间接
RubyGemsdry-cli1.3.0间接
RubyGemserubi1.13.1间接
RubyGemset-orbi1.4.0间接
RubyGemsexecjs2.10.0间接
RubyGemsfactory_bot6.5.6间接
RubyGemsfactory_bot_rails6.5.1间接
RubyGemsfaker3.5.2间接
RubyGemsffi1.17.2间接
RubyGemsfugit1.12.1间接
RubyGemsfuubar2.5.1间接
RubyGemsglobalid1.3.0间接
RubyGemshaml6.4.0间接
RubyGemsi18n1.14.7间接
RubyGemsjson2.16.0间接
RubyGemsjsonapi-deserializable0.2.0间接
RubyGemsjsonapi-parser0.1.1间接
RubyGemsjsonapi-rb0.5.0间接
RubyGemsjsonapi-renderer0.2.2间接
RubyGemsjsonapi-serializable0.3.1间接
RubyGemslanguage_server-protocol3.17.0.5间接
RubyGemslint_roller1.1.0间接
RubyGemslisten3.9.0间接
RubyGemslogger1.7.0间接
RubyGemsloofah2.24.1间接
RubyGemsmail2.9.0间接
RubyGemsmarcel1.0.4间接
RubyGemsmethod_source1.1.0间接
RubyGemsmime-types3.7.0间接
RubyGemsmime-types-data3.2025.0924间接
RubyGemsmini_mime1.1.5间接
RubyGemsminitest5.26.2间接
RubyGemsmutex_m0.3.0间接
RubyGemsnet-imap0.5.12间接
RubyGemsnet-pop0.1.2间接
RubyGemsnet-protocol0.2.2间接
RubyGemsnet-smtp0.5.1间接
RubyGemsnio4r2.7.5间接
RubyGemsnokogiri1.18.10间接
RubyGemsorm_adapter0.5.0间接
RubyGemsparallel1.27.0间接
RubyGemsparser3.3.10.0间接
RubyGemsprism1.6.0间接
RubyGemspry0.15.2间接
RubyGemsraabro1.4.0间接
RubyGemsracc1.8.1间接
RubyGemsrack2.2.21间接
RubyGemsrack-mini-profiler4.0.1间接
RubyGemsrack-proxy0.7.7间接
RubyGemsrack-test2.2.0间接
RubyGemsrails-dom-testing2.3.0间接
RubyGemsrails-html-sanitizer1.6.2间接
RubyGemsrailties7.0.10间接
RubyGemsrainbow3.1.1间接
RubyGemsrake13.3.1间接
RubyGemsrb-fsevent0.11.2间接
RubyGemsrb-inotify0.11.1间接
RubyGemsrb-readline0.5.5间接
RubyGemsredis-client0.26.1间接
RubyGemsregexp_parser2.11.3间接
RubyGemsrequest_store1.7.0间接
RubyGemsresponders3.2.0间接
RubyGemsrouge4.6.1间接
RubyGemsrspec-core3.13.6间接
RubyGemsrspec-expectations3.13.5间接
RubyGemsrspec-mocks3.13.7间接
RubyGemsrspec-rails7.1.1间接
RubyGemsrspec-support3.13.6间接
RubyGemsrubocop1.81.7间接
RubyGemsrubocop-ast1.48.0间接
RubyGemsrubocop-rspec3.8.0间接
RubyGemsruby-progressbar1.13.0间接
RubyGemsrufus-scheduler3.9.2间接
RubyGemssecurerandom0.4.1间接
RubyGemsshoulda-callback-matchers1.1.4间接
RubyGemsshoulda-matchers6.5.0间接
RubyGemssimplecov0.22.0间接
RubyGemssimplecov-html0.13.2间接
RubyGemssimplecov_json_formatter0.1.4间接
RubyGemsslim5.2.1间接
RubyGemstemple0.10.4间接
RubyGemsterrapin1.1.1间接
RubyGemsthor1.4.0间接
RubyGemstilt2.6.1间接
RubyGemstimeout0.4.4间接
RubyGemstzinfo2.0.6间接
RubyGemsunicode-display_width3.2.0间接
RubyGemsunicode-emoji4.1.0间接
RubyGemswarden1.2.9间接
RubyGemsweb-console4.2.1间接
RubyGemswebsocket-driver0.8.0间接
RubyGemswebsocket-extensions0.1.5间接
RubyGemszeitwerk2.6.18间接
依赖安全公告 29

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 372 个包,其中也包含从不交付的开发与测试版本固定:29 个存在已知公告,5 个为直接依赖。

软件包版本关系严重程度公告数修复版本
underscore1.8.3直接严重21.13.8
activestorage7.0.10间接严重68.1.2.1
jsonpath-plus7.2.0间接严重210.3.0
axios1.13.6直接281.18.0
lodash4.17.23直接24.18.0
puma6.3.1直接48.0.2
activesupport7.0.10间接38.1.2.1
concurrent-ruby1.3.4间接31.3.7
form-data4.0.5间接14.0.6
immutable5.1.5间接25.1.8
js-yaml4.1.1间接24.3.0
json2.16.0间接22.19.9
nokogiri1.18.10间接111.19.4
picomatch2.3.1间接24.0.4
picomatch4.0.3间接24.0.4
postcss8.5.8间接38.5.18
rack2.2.21间接113.2.6
vite4.5.14间接78.0.16
websocket-driver0.8.0间接40.8.2
devise4.9.4直接25.0.4
activerecord7.0.10间接18.0.2.1
bcrypt3.1.20间接13.1.22
esbuild0.18.20间接10.25.0
follow-redirects1.15.11间接11.16.0
loofah2.24.1间接12.25.2
net-imap0.5.12间接80.6.4.1
yaml1.10.2间接12.8.3
actionview7.0.10间接18.1.2.1
rails-html-sanitizer1.6.2间接11.7.1

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "transcription",
        "data-rescue",
        "archives",
        "digitization",
        "citizen-science",
        "hacktoberfest",
        "climate",
        "community",
        "science"
      ],
      "is_fork": false,
      "size_kb": 68846,
      "has_wiki": true,
      "homepage": "https://draw.geog.mcgill.ca",
      "languages": {
        "Vue": 19219,
        "HTML": 178664,
        "Ruby": 287014,
        "SCSS": 25424,
        "Slim": 51777,
        "Shell": 2689,
        "JavaScript": 288265,
        "TypeScript": 1264
      },
      "pushed_at": "2026-07-22T19:01:29Z",
      "created_at": "2015-02-17T21:28:55Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T18:56:54Z",
      "description": "Climate Data Rescue is an archival data rescue platform using Ruby on Rails.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "production",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Ruby",
        "HTML"
      ]
    },
    "owner": {
      "blog": "https://citsci.geog.mcgill.ca/",
      "name": "Open Data Rescue",
      "type": "Organization",
      "login": "open-data-rescue",
      "company": null,
      "location": "Montreal, Quebec, Canada",
      "followers": 5,
      "avatar_url": "https://avatars.githubusercontent.com/u/52838926?v=4",
      "created_at": "2019-07-12T20:27:03Z",
      "is_verified": null,
      "public_repos": 6,
      "account_age_days": 2572
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.3.10",
          "kind": "patch",
          "published_at": "2026-07-22T19:01:30Z"
        },
        {
          "tag": "v2.3.9",
          "kind": "patch",
          "published_at": "2026-07-21T19:31:53Z"
        },
        {
          "tag": "v2.3.8",
          "kind": "patch",
          "published_at": "2026-07-17T14:14:16Z"
        },
        {
          "tag": "v2.3.7",
          "kind": "patch",
          "published_at": "2025-09-11T14:25:01Z"
        },
        {
          "tag": "v2.3.6",
          "kind": "patch",
          "published_at": "2024-12-20T15:07:22Z"
        },
        {
          "tag": "v2.3.5",
          "kind": "patch",
          "published_at": "2024-12-19T23:21:11Z"
        },
        {
          "tag": "v2.3.4",
          "kind": "patch",
          "published_at": "2024-09-18T14:35:10Z"
        },
        {
          "tag": "v2.3.3",
          "kind": "patch",
          "published_at": "2024-09-10T13:38:12Z"
        },
        {
          "tag": "v2.3.2",
          "kind": "patch",
          "published_at": "2024-09-05T16:17:52Z"
        },
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2024-09-04T19:14:53Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2024-09-03T18:58:31Z"
        },
        {
          "tag": "v2.2.9",
          "kind": "patch",
          "published_at": "2024-06-18T15:04:32Z"
        },
        {
          "tag": "v2.2.8",
          "kind": "patch",
          "published_at": "2024-05-11T16:00:16Z"
        },
        {
          "tag": "v2.2.7",
          "kind": "patch",
          "published_at": "2024-01-23T21:28:40Z"
        },
        {
          "tag": "v2.2.6",
          "kind": "patch",
          "published_at": "2023-11-27T12:45:47Z"
        },
        {
          "tag": "v2.2.5",
          "kind": "patch",
          "published_at": "2023-06-13T12:35:00Z"
        },
        {
          "tag": "v2.2.4",
          "kind": "patch",
          "published_at": "2023-05-24T18:51:39Z"
        },
        {
          "tag": "v2.2.3",
          "kind": "patch",
          "published_at": "2023-04-27T19:42:58Z"
        },
        {
          "tag": "v2.2.2",
          "kind": "patch",
          "published_at": "2023-04-20T19:20:16Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2023-04-19T02:26:15Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2023-04-19T01:16:13Z"
        },
        {
          "tag": "v2.1.1",
          "kind": "patch",
          "published_at": "2023-03-19T15:24:40Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2023-03-16T01:31:31Z"
        },
        {
          "tag": "v2.0.10",
          "kind": "patch",
          "published_at": "2023-03-15T13:49:58Z"
        },
        {
          "tag": "v2.0.9",
          "kind": "patch",
          "published_at": "2023-03-05T17:22:52Z"
        },
        {
          "tag": "v2.0.8",
          "kind": "patch",
          "published_at": "2023-03-05T15:12:07Z"
        },
        {
          "tag": "v2.0.7",
          "kind": "patch",
          "published_at": "2023-02-28T20:13:07Z"
        },
        {
          "tag": "v2.0.6",
          "kind": "patch",
          "published_at": "2023-02-18T21:09:00Z"
        },
        {
          "tag": "v2.0.5",
          "kind": "patch",
          "published_at": "2023-01-03T23:37:17Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2022-12-31T05:37:44Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2022-12-19T17:06:20Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2022-11-30T19:52:54Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2022-11-29T16:51:36Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2022-11-22T22:26:39Z"
        },
        {
          "tag": "v1.3.14",
          "kind": "patch",
          "published_at": "2022-11-16T22:14:54Z"
        },
        {
          "tag": "v1.3.13",
          "kind": "patch",
          "published_at": "2022-11-12T15:38:54Z"
        },
        {
          "tag": "v1.3.12",
          "kind": "patch",
          "published_at": "2022-11-07T17:05:53Z"
        },
        {
          "tag": "v1.3.11",
          "kind": "patch",
          "published_at": "2022-11-07T13:22:49Z"
        },
        {
          "tag": "v1.3.10",
          "kind": "patch",
          "published_at": "2022-10-19T13:27:57Z"
        },
        {
          "tag": "v1.3.9",
          "kind": "patch",
          "published_at": "2022-10-19T02:46:14Z"
        },
        {
          "tag": "v1.3.8",
          "kind": "patch",
          "published_at": "2022-10-18T14:17:12Z"
        },
        {
          "tag": "v1.3.7",
          "kind": "patch",
          "published_at": "2022-10-12T14:16:00Z"
        },
        {
          "tag": "v1.3.6",
          "kind": "patch",
          "published_at": "2022-09-23T16:37:44Z"
        },
        {
          "tag": "v1.3.5",
          "kind": "patch",
          "published_at": "2022-09-21T19:07:45Z"
        },
        {
          "tag": "v1.3.4",
          "kind": "patch",
          "published_at": "2022-09-21T14:41:40Z"
        },
        {
          "tag": "v1.3.3",
          "kind": "patch",
          "published_at": "2022-09-20T16:54:30Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2022-09-20T14:58:48Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2022-09-14T15:58:57Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2022-09-13T15:36:32Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2021-01-05T04:48:42Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2019-03-11T18:42:22Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ab19697b457377fff0914b90b53bf1667c70a01b",
          "body": "fixes for field add/remove to field group",
          "is_bot": false,
          "headline": "Merge pull request #885 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-22T18:55:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf21ec4510c4e6eaf51df162ac3684333e6a6981",
          "body": "…ove-fields\n\nfixes for the add/remove fields to field group",
          "is_bot": false,
          "headline": "Merge pull request #884 from open-data-rescue/fix-field-group-add-rem…",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-22T18:42:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a5c10d7cf0c53b42fe0d3cadf9f7d304d177d7a",
          "body": null,
          "is_bot": false,
          "headline": "fixes for the add/remove fields to field group",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-07-22T18:41:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56ec00d8c81352bcfbe6666a6f051df8394daf4e",
          "body": "fixes for image upload",
          "is_bot": false,
          "headline": "Merge pull request #883 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T19:25:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d5edb703a80dbfe72322e17d392fd8679c0b43e",
          "body": "fix brakeman for now",
          "is_bot": false,
          "headline": "Merge pull request #882 from open-data-rescue/fixes-for-content-image",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T19:13:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12a1b3f66ae391f38921c3d9a083cc0c42431801",
          "body": null,
          "is_bot": false,
          "headline": "fix brakeman for now",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T19:12:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92d336bec5e889b200f3f89cf0a032908b116a50",
          "body": "include jpeg utils for imagemagick",
          "is_bot": false,
          "headline": "Merge pull request #881 from open-data-rescue/fixes-for-content-image",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T19:02:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fabbfa70b1bf146e49d3c98f54aacce6598d4699",
          "body": null,
          "is_bot": false,
          "headline": "include jpeg utils for imagemagick",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T19:01:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42ad41b77889d1d98f41948c27ccdf30952fabd5",
          "body": "Try without concurrent ruby",
          "is_bot": false,
          "headline": "Merge pull request #880 from open-data-rescue/fixes-for-content-image",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T18:14:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbef74d0d8f5fe881fd7806c7c482b3110f6deb3",
          "body": null,
          "is_bot": false,
          "headline": "Try without concurrent ruby",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-07-21T18:13:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d21c132c8c6b2c2ee7ec9a2042a3332f94006a86",
          "body": "Bring staging up to date with prod",
          "is_bot": false,
          "headline": "Merge pull request #879 from open-data-rescue/production",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-17T14:06:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a67459a25b1b40268756c401386e773e491884b2",
          "body": "Fix ReferenceError breaking the field-group admin field picker",
          "is_bot": false,
          "headline": "Merge pull request #878 from open-data-rescue/fix/field-group-admin-ui",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-07-17T14:00:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99859efc12362f2cf4c1db8e0581e29f85963adc",
          "body": "_fields_app.html.erb and _field_options_app.html.erb are loaded as\n<script type=\"module\">, which always runs in strict mode. Several\nBackbone/Marionette models, collections, and views were being assigned\nwithout var/let/const, which throws a ReferenceError under strict mode\ninstead of silently creat\n[…]\ne admin\nfield-group edit page silently never rendered.\n\nFixed by declaring all of these with var, matching the working pattern\nalready used in _field_groups_app.html.erb and _transcriber_app.html.erb.",
          "is_bot": false,
          "headline": "Fix ReferenceError breaking the field-group admin field picker",
          "author_name": "VickyS08",
          "author_login": "VickyS08",
          "committed_at": "2026-07-16T14:34:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "369dfeea9142043fa22283bcc43285e1778bfe6b",
          "body": "some security patches",
          "is_bot": false,
          "headline": "Merge pull request #876 from open-data-rescue/prod-patches",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-03-10T13:53:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1189f606fd7c5bf3140a0a2ebe3b5513723970bc",
          "body": null,
          "is_bot": false,
          "headline": "some security patches",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-03-10T13:52:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "314fd7cd5102d9571b09ef9cec4d004784876e2f",
          "body": "Fix wrong vite upgrade",
          "is_bot": false,
          "headline": "Merge pull request #875 from open-data-rescue/fix-prod-build",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2026-03-10T13:39:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33c27aba68daa1a83729f2c8b02342d0db67cd87",
          "body": null,
          "is_bot": false,
          "headline": "Fix wrong vite upgrade",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2026-03-10T13:38:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d23ef91c2fb4068d5c94716159d91bdcb961388",
          "body": "…cop-rspec-3.8.0\n\nBump rubocop-rspec from 3.3.0 to 3.8.0",
          "is_bot": false,
          "headline": "Merge pull request #870 from open-data-rescue/dependabot/bundler/rubo…",
          "author_name": "Robert Smith",
          "author_login": "rsmithlal",
          "committed_at": "2026-03-09T17:33:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93954626261b83bfce07441abc66c06a90fd4b14",
          "body": "…eman-7.1.1\n\nBump brakeman from 6.2.2 to 7.1.1",
          "is_bot": false,
          "headline": "Merge pull request #871 from open-data-rescue/dependabot/bundler/brak…",
          "author_name": "Robert Smith",
          "author_login": "rsmithlal",
          "committed_at": "2026-03-09T17:32:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87d6cecaaa3a71560829418fcf1f387363376d79",
          "body": "…_ruby-3.9.2\n\nBump vite_ruby from 3.3.4 to 3.9.2",
          "is_bot": false,
          "headline": "Merge pull request #873 from open-data-rescue/dependabot/bundler/vite…",
          "author_name": "Robert Smith",
          "author_login": "rsmithlal",
          "committed_at": "2026-03-09T17:32:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "811f483f135ef6bf44242e9197df52addfd7e9eb",
          "body": "…elic_rpm-9.23.0\n\nBump newrelic_rpm from 9.16.1 to 9.23.0",
          "is_bot": false,
          "headline": "Merge pull request #874 from open-data-rescue/dependabot/bundler/newr…",
          "author_name": "Robert Smith",
          "author_login": "rsmithlal",
          "committed_at": "2026-03-09T17:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad48c8bc61903d708c7487bc9bfa7d0f74938571",
          "body": "Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.16.1 to 9.23.0.\n- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)\n- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)\n- [Commits](https://github.com/newrelic/newrel\n[…]\ns:\n- dependency-name: newrelic_rpm\n  dependency-version: 9.23.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump newrelic_rpm from 9.16.1 to 9.23.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-01T10:40:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a0e60a73938be7ce1249a44f4950aec284f12f9",
          "body": "Bumps [vite_ruby](https://github.com/ElMassimo/vite_ruby) from 3.3.4 to 3.9.2.\n- [Changelog](https://github.com/ElMassimo/vite_ruby/blob/vite_ruby@3.9.2/vite_ruby/CHANGELOG.md)\n- [Commits](https://github.com/ElMassimo/vite_ruby/compare/vite_ruby@3.3.4...vite_ruby@3.9.2)\n\n---\nupdated-dependencies:\n- dependency-name: vite_ruby\n  dependency-version: 3.9.2\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump vite_ruby from 3.3.4 to 3.9.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-01T10:40:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a4a63db2626b72c1f83387e2f8163be3e24545b",
          "body": "Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 6.2.2 to 7.1.1.\n- [Release notes](https://github.com/presidentbeef/brakeman/releases)\n- [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md)\n- [Commits](https://github.com/presidentbeef/brakeman/compare/v6.2.2...\n[…]\nncies:\n- dependency-name: brakeman\n  dependency-version: 7.1.1\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump brakeman from 6.2.2 to 7.1.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-01T10:39:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0af85badc69033cb268fc7af7e5e9e3e9fcc9139",
          "body": "Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.3.0 to 3.8.0.\n- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)\n- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.3\n[…]\n:\n- dependency-name: rubocop-rspec\n  dependency-version: 3.8.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rubocop-rspec from 3.3.0 to 3.8.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-01T10:39:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3b0144cb7895d0f8bb2c9290a15d97c61cedef3b",
          "body": "Update for ECCC image",
          "is_bot": false,
          "headline": "Merge pull request #851 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2025-09-11T14:09:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c28e491759df0ff2b7c1d2d3f9758b0f37c8ec69",
          "body": "Put the ECCC background image in",
          "is_bot": false,
          "headline": "Merge pull request #850 from open-data-rescue/fix-background-image",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2025-09-11T13:53:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f86c6e905e708a19c71bb6f7e387ea476fa8c6d",
          "body": null,
          "is_bot": false,
          "headline": "Put the ECCC background image in",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2025-09-11T13:52:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7202a381445cec4d65ed1dc4883dcb5a13e0e45",
          "body": "require open struct",
          "is_bot": false,
          "headline": "Merge pull request #838 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-20T14:59:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7bc426ac4e186310763f0b33e744e18fe557224",
          "body": null,
          "is_bot": false,
          "headline": "require open struct",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-12-20T14:48:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "724785f755be4f22907e54a46dbb9062b4e34270",
          "body": "Fixes for page upload",
          "is_bot": false,
          "headline": "Merge pull request #837 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T23:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bfff3d25901d97ae32de833b402bd6fa9612df5",
          "body": "Fix versions of js packages",
          "is_bot": false,
          "headline": "Merge pull request #836 from open-data-rescue/fix-upload-issue",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T22:55:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15c5a789fa73028816e5a668ef303f7cf27c6c86",
          "body": null,
          "is_bot": false,
          "headline": "Fix versions of js packages",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T22:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55607ad5887cdffb591206b76cfe23ebba9761f7",
          "body": "Fix vite version",
          "is_bot": false,
          "headline": "Merge pull request #835 from open-data-rescue/fix-upload-issue",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T22:16:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bca67ab411e43703bd300fb7ea506bf651378b7d",
          "body": null,
          "is_bot": false,
          "headline": "Fix vite version",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T22:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48f4218b87edf4a7f01a3d7b460974bf63f63b01",
          "body": "Fixes for page upload",
          "is_bot": false,
          "headline": "Merge pull request #834 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T19:28:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b689d73a958ede4e0a9de8125b644e37d8f7532",
          "body": "Fix for page upload",
          "is_bot": false,
          "headline": "Merge pull request #833 from open-data-rescue/fix-upload-issue",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T18:55:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ac1e88a9cb0ba5e15e4927610bc69481a971420",
          "body": null,
          "is_bot": false,
          "headline": "Fix for page upload",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-12-19T18:54:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "727aea13fedf69750f208efbe1684bf0e5a93e9f",
          "body": "Fix css for box position on resize",
          "is_bot": false,
          "headline": "Merge pull request #832 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-18T14:28:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d241213fb5b0ccda9380b79b8ece1796c61cd9bd",
          "body": "Resize position error",
          "is_bot": false,
          "headline": "Merge pull request #831 from open-data-rescue/resize-position-error",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-17T19:01:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc9328e4f517ffe0050b8df5386b7c5f0ef65748",
          "body": "on resize",
          "is_bot": false,
          "headline": "Fix issue of box moving to bottom of image",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-09-17T18:59:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b9d7a753c595916baf22f0ad2e4aa4aea8b98b3",
          "body": "Staging",
          "is_bot": false,
          "headline": "Merge pull request #830 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-10T12:33:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5c8033146183f4039c9ded918127f522346020e",
          "body": "Fix resize draw",
          "is_bot": false,
          "headline": "Merge pull request #829 from open-data-rescue/fix-resize-draw",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-09T19:32:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e21b8ceed20a9d82223bf4f5b6e271921cb9e0ea",
          "body": null,
          "is_bot": false,
          "headline": "More fixes for the geometric calculations",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-09-09T19:31:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c56445c5124d76196babb11a5c03582ff8094372",
          "body": "fixes for box move and resize",
          "is_bot": false,
          "headline": "Merge pull request #828 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-05T16:09:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46ce70105e6cf1075d294be57774116ee2257a8f",
          "body": "Annotation size move fixes",
          "is_bot": false,
          "headline": "Merge pull request #827 from open-data-rescue/annotation-size-move-fixes",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-05T16:00:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9fa7e433e8fc533dbc039f881030154d95bdac3",
          "body": null,
          "is_bot": false,
          "headline": "fixes for annotation resize and move issues",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-09-05T15:59:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b74ef8e1732d7d5ca098439046b63bd029d37d89",
          "body": "Fixes for zoom issue and assets",
          "is_bot": false,
          "headline": "Merge pull request #826 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-09-04T19:08:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98fd516b5b7e01ff10dd105f823562e9cba53ab6",
          "body": null,
          "is_bot": false,
          "headline": "Fixes for zoom issue and assets",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-09-04T18:52:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02c82e31539b79cd2a895c34fb5a1143d48136c4",
          "body": "FF css changes for zoom",
          "is_bot": false,
          "headline": "Merge pull request #825 from open-data-rescue/fix-ff-zoom-issue",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-08-30T17:27:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9de2da3a06910c41de36cf2962ab7b9360236537",
          "body": null,
          "is_bot": false,
          "headline": "FF css changes for zoom",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-08-30T17:26:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d0641435d651ee989b41968a60203ec314ef924",
          "body": "Staging R7 to Prod",
          "is_bot": false,
          "headline": "Merge pull request #824 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-08-30T14:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2cc4a49b0d5125fc9d21bf7b60c656df87a78cc",
          "body": null,
          "is_bot": false,
          "headline": "update brakeman",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-08-30T13:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2418d80aa4da92fdc9ca3ed4e60194502ce08961",
          "body": null,
          "is_bot": false,
          "headline": "fix db host for specs",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-08-30T13:23:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b0acac12647874b0e03931d31582884cfb19d6d",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'production' into rails7-upgrade",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-08-28T14:39:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6816e51a000d743675533403d6ea0cf6ae11c080",
          "body": "fix start tls setting",
          "is_bot": false,
          "headline": "Merge pull request #822 from open-data-rescue/fix-starttls-setting",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-06-18T14:54:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78d6e734bd3e24dc6274cf663a10bc1327229d8c",
          "body": null,
          "is_bot": false,
          "headline": "fix start tls setting",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-06-18T14:53:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49e434796d2cf8226cff7a1a0d1f93d34468d713",
          "body": "Fix image file name interpolation for ECCC",
          "is_bot": false,
          "headline": "Merge pull request #821 from open-data-rescue/fix-image-file-name-issue",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-05-11T15:53:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b9dd79214f5149e9aeeb8e748c88bdcaadaebbb",
          "body": null,
          "is_bot": false,
          "headline": "Fix image file name interpolation for ECCC",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-05-11T15:51:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a44136ef99879c8fe0b81f0399d7950e002d23f3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'staging' into rails7-upgrade",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-04-30T15:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ad4b2f7fcd2d196e0f1df7bfbe1e1d1edba8a5c",
          "body": "Fixes selection on transcription window",
          "is_bot": false,
          "headline": "Merge pull request #820 from open-data-rescue/fix-select2",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-04-30T15:53:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59f5130ba2609e81226e04c38b542caca064b307",
          "body": null,
          "is_bot": false,
          "headline": "Fixes selection on transcription window",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-04-30T15:52:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a43796a129763737caff08fa9549ed604d52be7",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'production' into staging",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-04-30T12:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "292ebd6591f42c7e70be825dbcedab2b23a6332d",
          "body": "set a sort order on add field",
          "is_bot": false,
          "headline": "Merge pull request #819 from open-data-rescue/fix-sort-order-bug",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2024-01-23T21:12:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b790b157a292e8ea1a95ef790bb065556c93cee5",
          "body": null,
          "is_bot": false,
          "headline": "set a sort order on add field",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2024-01-23T21:11:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e51251fb9f74030ae94f6e9be6d4b1f0f2654c0f",
          "body": "fix typo",
          "is_bot": false,
          "headline": "Merge pull request #809 from open-data-rescue/smtp-tweak",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-11-27T12:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e52f21266135a03d427b7c910511c204ae389f8b",
          "body": null,
          "is_bot": false,
          "headline": "fix typo",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-11-27T12:36:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "173f0ad2bf9ff07b7a72a95bc866e28444d4d7a7",
          "body": "explicit smtp settings",
          "is_bot": false,
          "headline": "Merge pull request #808 from open-data-rescue/smtp-tweak",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-11-27T12:29:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "557d28ef635e066cc76d7adf608b078c0927246e",
          "body": null,
          "is_bot": false,
          "headline": "explicit smtp settings",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-11-27T12:27:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f66dd6213634dacfc2dcf6117325b1a83ec7b81",
          "body": null,
          "is_bot": false,
          "headline": "tweak my conf",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-11-27T12:11:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e71968f03cff241c1485ed27f55fdba0cf671c77",
          "body": null,
          "is_bot": false,
          "headline": "Fixes for vite module load and select2",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-09-13T16:35:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92994eab7dd34f80927850cbe9b73d9d12bb1a71",
          "body": "Update gems",
          "is_bot": false,
          "headline": "Merge pull request #775 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-09-07T14:53:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f88a5ef8e76c3b7627915268e863b10314fd5f85",
          "body": null,
          "is_bot": false,
          "headline": "Update gems",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-09-07T14:52:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8ed5a4daed9e9c001fceff9781293b58c75bd3b",
          "body": "Fix transcription error for new lines",
          "is_bot": false,
          "headline": "Merge pull request #774 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-09-07T14:23:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c6edf80a386426a7acd8287513e853be577b277",
          "body": null,
          "is_bot": false,
          "headline": "Fix transcription error for new lines",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-09-07T14:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ee8be10282ee6722c7f7afc617759a5361c1e11",
          "body": "fixed my profile page",
          "is_bot": false,
          "headline": "Merge pull request #754 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-08-02T13:36:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4babf9bde00bb5e46540450c856e273e19e19d56",
          "body": null,
          "is_bot": false,
          "headline": "fixed my profile page",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-02T13:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47a4db8330521391ad41b487771543583eb31889",
          "body": "fix case typo",
          "is_bot": false,
          "headline": "Merge pull request #752 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T16:29:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7979b2c201aee598ef7d1963d1888dbadf7ccbe",
          "body": null,
          "is_bot": false,
          "headline": "fix case",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T16:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0867c0a21b6383eeb9e1f89c1c4c491d47fc5622",
          "body": null,
          "is_bot": false,
          "headline": "fix case typo",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T16:14:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3513d16785dcff6cf36e129bf0c2a2f29086d2e5",
          "body": "fixes for action",
          "is_bot": false,
          "headline": "Merge pull request #751 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T14:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0165ed0687c645ea3e6089d5068e5cb8d00dd0e",
          "body": null,
          "is_bot": false,
          "headline": "fixes for action",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T14:08:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7053e8810ed6fe51c64dfcac0d3b5c99d1580adc",
          "body": "fix for github action",
          "is_bot": false,
          "headline": "Merge pull request #750 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T13:54:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b75c078a6b6f13796b17bfc9057949b2cf4cd86",
          "body": null,
          "is_bot": false,
          "headline": "fix for github action",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T13:53:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11a7f8aa797b64f1b4c5e8f4cdfbce2d072aec10",
          "body": "Rails7 upgrade - RC",
          "is_bot": false,
          "headline": "Merge pull request #749 from open-data-rescue/rails7-upgrade",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T13:29:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "698f42950c929e22413057e6c7ce4ea5107debfc",
          "body": null,
          "is_bot": false,
          "headline": "Tweak startup scripts",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-08-01T13:28:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db3c0602b1dfcd33abee40847bd555c8ecc7f81d",
          "body": null,
          "is_bot": false,
          "headline": "WIP",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-07-31T20:33:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57478c46be90cf3abce9b3099af9197687980d24",
          "body": null,
          "is_bot": false,
          "headline": "merge in fixes",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-07-31T20:16:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ed21aa8efa04c85483c4aea8e99ab5ac229fd18",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'production' into rails7-upgrade",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-07-31T20:16:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01c475977bd40b64fdf6a295be43aec0fda3386b",
          "body": null,
          "is_bot": false,
          "headline": "WIP - mostly working",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-07-31T20:12:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a90a4ef760481ceddf4528fe87a01af390f79cba",
          "body": "…elic_rpm-9.3.1\n\nBump newrelic_rpm from 9.2.0 to 9.3.1",
          "is_bot": false,
          "headline": "Merge pull request #743 from open-data-rescue/dependabot/bundler/newr…",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-07-12T12:41:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91d4909cfb9f57e874f90667fe265242b21f400b",
          "body": "Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.2.0 to 9.3.1.\n- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)\n- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)\n- [Commits](https://github.com/newrelic/newrelic\n[…]\n3.1)\n\n---\nupdated-dependencies:\n- dependency-name: newrelic_rpm\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump newrelic_rpm from 9.2.0 to 9.3.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-07-12T10:31:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4e52294bc5edf20a71b96c3b09dc0fcb15040e1",
          "body": "…cop-1.53.0\n\nBump rubocop from 1.50.2 to 1.53.0",
          "is_bot": false,
          "headline": "Merge pull request #736 from open-data-rescue/dependabot/bundler/rubo…",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-06-24T13:49:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ee6cb2858546f9bce52981d5d3ce59282c35070",
          "body": "Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.50.2 to 1.53.0.\n- [Release notes](https://github.com/rubocop/rubocop/releases)\n- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/rubocop/rubocop/compare/v1.50.2...v1.53.0)\n\n---\nupdated-dependencies:\n- dependency-name: rubocop\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump rubocop from 1.50.2 to 1.53.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-06-23T10:56:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "430f10ef194e648da5efc4d310eecc6bc85f81cb",
          "body": null,
          "is_bot": false,
          "headline": "WIP",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-06-21T19:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ce6cc48ff54c823c17ecabcf067cf070b0fcde8",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'staging' into rails7-upgrade",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-06-13T20:35:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46cbc2058ae26b1486c8af49efe6e60f3d74678d",
          "body": "update for google analytics 4",
          "is_bot": false,
          "headline": "Merge pull request #733 from open-data-rescue/staging",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-06-13T12:27:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b8bd512c90992fce54f4e75e84148a96ed8e9e2",
          "body": null,
          "is_bot": false,
          "headline": "update for google analytics 4",
          "author_name": "balen",
          "author_login": "balen",
          "committed_at": "2023-06-13T12:18:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a690aa2f40f96635bcade21be2a20a0776f27b8",
          "body": "Update dependabot.yml to assign balen to PRs",
          "is_bot": false,
          "headline": "Merge pull request #731 from open-data-rescue/rsmithlal-patch-1",
          "author_name": "Henry Balen",
          "author_login": "balen",
          "committed_at": "2023-06-10T12:22:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09357004497f254adeab033f59cf557a4ac164e7",
          "body": "I have been automatically assigned the dependabot PRs for quite some time and I'm not sure why. These PR notifications are always showing up in my email, so I made this change to try and ensure that the PRs are assigned to balen and not to me by default.\r\n\r\nThe following documentation explains the assignees in the dependabot.yml.\r\n\r\nhttps://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#assignees",
          "is_bot": false,
          "headline": "Update dependabot.yml to assign balen to PRs",
          "author_name": "Robert Smith",
          "author_login": "rsmithlal",
          "committed_at": "2023-06-07T21:41:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 51,
      "commits_last_year": 28,
      "latest_release_at": "2026-07-22T19:01:30Z",
      "latest_release_tag": "v2.3.10",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 76.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 10,
      "stars": 15,
      "watchers": 6,
      "fork_history": {
        "days": [
          {
            "date": "2016-03-14",
            "count": 1
          },
          {
            "date": "2019-07-09",
            "count": 1
          },
          {
            "date": "2020-01-31",
            "count": 1
          },
          {
            "date": "2020-02-09",
            "count": 1
          },
          {
            "date": "2022-07-23",
            "count": 1
          },
          {
            "date": "2022-08-16",
            "count": 1
          },
          {
            "date": "2022-11-17",
            "count": 1
          },
          {
            "date": "2022-12-09",
            "count": 1
          },
          {
            "date": "2023-09-20",
            "count": 1
          },
          {
            "date": "2024-11-16",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 10,
        "total_forks": 10
      },
      "star_history": null,
      "open_issues_and_prs": 11
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 167184,
      "source_files_sampled": 292,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Gemfile",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "underscore",
            "direct": true,
            "version": "1.8.3",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-cf4h-3jhx-xvhq",
              "GHSA-qpx9-hpmf-5gmw"
            ],
            "fixed_version": "1.13.8",
            "advisory_count": 2,
            "oldest_advisory_days": 1908
          },
          {
            "name": "activestorage",
            "direct": false,
            "version": "7.0.10",
            "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": 348
          },
          {
            "name": "jsonpath-plus",
            "direct": false,
            "version": "7.2.0",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-hw8r-x6gr-5gjp",
              "GHSA-pppg-cpfq-h7wr"
            ],
            "fixed_version": "10.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 654
          },
          {
            "name": "axios",
            "direct": true,
            "version": "1.13.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.7,
            "advisory_ids": [
              "GHSA-35jp-ww65-95wh",
              "GHSA-3g43-6gmg-66jw",
              "GHSA-3p68-rc4w-qgx5",
              "GHSA-3w6x-2g7m-8v23",
              "GHSA-42h9-826w-cgv3",
              "GHSA-445q-vr5w-6q77",
              "GHSA-5c9x-8gcm-mpgx",
              "GHSA-62hf-57xw-28j9",
              "GHSA-6chq-wfr3-2hj9",
              "GHSA-777c-7fjr-54vf"
            ],
            "fixed_version": "1.18.0",
            "advisory_count": 28,
            "oldest_advisory_days": 109
          },
          {
            "name": "lodash",
            "direct": true,
            "version": "4.17.23",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 2,
            "oldest_advisory_days": 117
          },
          {
            "name": "puma",
            "direct": true,
            "version": "6.3.1",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2vqw-3mp8-cgmx",
              "GHSA-9hf4-67fc-4vf4",
              "GHSA-c2f4-cvqm-65w2",
              "GHSA-qpgp-93vx-g8v8"
            ],
            "fixed_version": "8.0.2",
            "advisory_count": 4,
            "oldest_advisory_days": 931
          },
          {
            "name": "activesupport",
            "direct": false,
            "version": "7.0.10",
            "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": 126
          },
          {
            "name": "concurrent-ruby",
            "direct": false,
            "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": 38
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.5",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-hmw2-7cc7-3qxx"
            ],
            "fixed_version": "4.0.6",
            "advisory_count": 1,
            "oldest_advisory_days": 42
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "5.1.5",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-v56q-mh7h-f735",
              "GHSA-xvcm-6775-5m9r"
            ],
            "fixed_version": "5.1.8",
            "advisory_count": 2,
            "oldest_advisory_days": 6
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 42
          },
          {
            "name": "json",
            "direct": false,
            "version": "2.16.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 8.2,
            "advisory_ids": [
              "GHSA-3m6g-2423-7cp3",
              "GHSA-x2f5-4prf-w687"
            ],
            "fixed_version": "2.19.9",
            "advisory_count": 2,
            "oldest_advisory_days": 130
          },
          {
            "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": 159
          },
          {
            "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": 124
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.3",
            "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": 124
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-6g55-p6wh-862q",
              "GHSA-qx2v-qp2m-jg93",
              "GHSA-r28c-9q8g-f849"
            ],
            "fixed_version": "8.5.18",
            "advisory_count": 3,
            "oldest_advisory_days": 94
          },
          {
            "name": "rack",
            "direct": false,
            "version": "2.2.21",
            "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": 160
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.14",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4w7w-66w2-5vf9",
              "GHSA-93m4-6634-74q7",
              "GHSA-c27g-q93r-2cwf",
              "GHSA-fx2h-pf6j-xcff",
              "GHSA-g4jq-h2w9-997c",
              "GHSA-jqfw-vq24-v9c3",
              "GHSA-v6wh-96g9-6wx3"
            ],
            "fixed_version": "8.0.16",
            "advisory_count": 7,
            "oldest_advisory_days": 321
          },
          {
            "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": 12
          },
          {
            "name": "devise",
            "direct": true,
            "version": "4.9.4",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-57hq-95w6-v4fc",
              "GHSA-jp94-3292-c3xv"
            ],
            "fixed_version": "5.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 132
          },
          {
            "name": "activerecord",
            "direct": false,
            "version": "7.0.10",
            "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": 348
          },
          {
            "name": "bcrypt",
            "direct": false,
            "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": 130
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.18.20",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-67mh-4wv8-2f99"
            ],
            "fixed_version": "0.25.0",
            "advisory_count": 1,
            "oldest_advisory_days": 532
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.15.11",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-r4q5-vmmm-2653"
            ],
            "fixed_version": "1.16.0",
            "advisory_count": 1,
            "oldest_advisory_days": 105
          },
          {
            "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": 6
          },
          {
            "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": 84
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "1.10.2",
            "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": 124
          },
          {
            "name": "actionview",
            "direct": false,
            "version": "7.0.10",
            "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": 126
          },
          {
            "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": 6
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 2,
          "high": 16,
          "critical": 3,
          "moderate": 8
        },
        "advisory_count": 115,
        "affected_count": 29,
        "assessed_count": 372,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 5
      },
      "ecosystems": [
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 7.0.4"
        },
        {
          "name": "mysql2",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "paper_trail",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "ranked-model",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "uglifier",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "log4r",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "devise",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "pundit",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "slim-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "simple_form",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "will_paginate",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "kt-paperclip",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "with_advisory_lock",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "jbuilder",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "jsonapi-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "jsonapi-rspec",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "routing-filter",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "http_accept_language",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rails-i18n",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 7.0.0"
        },
        {
          "name": "i18n-active_record",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rails-observers",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "globalize",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "globalize-accessors",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sidekiq",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sidekiq-scheduler",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "newrelic_rpm",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "puma",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 6.3.1"
        },
        {
          "name": "recaptcha",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "acts-as-taggable-on",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 9.0"
        },
        {
          "name": "cssbundling-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 1.1"
        },
        {
          "name": "tzinfo-data",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "vite_rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "3.0.15"
        },
        {
          "name": "vite_ruby",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "3.3.4"
        },
        {
          "name": "vite_plugin_legacy",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "haml-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "@intlify/unplugin-vue-i18n",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.11.0"
        },
        {
          "name": "@popperjs/core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.7"
        },
        {
          "name": "@rollup/plugin-inject",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.3"
        },
        {
          "name": "@vitejs/plugin-vue",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.1"
        },
        {
          "name": "@vue/compat",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.47"
        },
        {
          "name": "axios",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.0"
        },
        {
          "name": "backbone",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.0"
        },
        {
          "name": "backbone-forms",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.14.1"
        },
        {
          "name": "backbone-model-file-upload",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.2"
        },
        {
          "name": "backbone.marionette",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.4.7"
        },
        {
          "name": "backbone.wreqr",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "1.3.6"
        },
        {
          "name": "blueimp-file-upload",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.32.0"
        },
        {
          "name": "bootstrap",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "4.6.1"
        },
        {
          "name": "bootstrap-notify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.3"
        },
        {
          "name": "bootstrap-switch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.4.0"
        },
        {
          "name": "bootstrap-vue",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.23.1"
        },
        {
          "name": "bowser",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.0"
        },
        {
          "name": "caniuse-lite",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.30001171"
        },
        {
          "name": "common-tags",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.8.0"
        },
        {
          "name": "jquery",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.4"
        },
        {
          "name": "jquery-ui-dist",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.13.2"
        },
        {
          "name": "jquery-ujs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.3"
        },
        {
          "name": "jquery.kinetic",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.4"
        },
        {
          "name": "jsonapi-vuex",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "5.13.1"
        },
        {
          "name": "lodash",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.17.21"
        },
        {
          "name": "lodash.merge",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.6.2"
        },
        {
          "name": "luxon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.0"
        },
        {
          "name": "magnify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.1.0"
        },
        {
          "name": "moment",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.29.2"
        },
        {
          "name": "popper.js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.16.1"
        },
        {
          "name": "sass",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.62.1"
        },
        {
          "name": "select2",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.0-rc.0"
        },
        {
          "name": "select2-bootstrap-theme",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.1.0-beta.10"
        },
        {
          "name": "select2-bootstrap4-theme",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "tempusdominus-bootstrap-4",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.39.2"
        },
        {
          "name": "trumbowyg",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.27.3"
        },
        {
          "name": "underscore",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.13.8"
        },
        {
          "name": "vue",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.45"
        },
        {
          "name": "vue-router",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.6"
        },
        {
          "name": "vuex",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@intlify/unplugin-vue-i18n",
            "direct": true,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@popperjs/core",
            "direct": true,
            "version": "2.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-inject",
            "direct": true,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-vue",
            "direct": true,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compat",
            "direct": true,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": true,
            "version": "1.13.6",
            "ecosystem": "npm"
          },
          {
            "name": "backbone",
            "direct": true,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "backbone",
            "direct": true,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "backbone",
            "direct": true,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "backbone",
            "direct": true,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "backbone-forms",
            "direct": true,
            "version": "0.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "backbone-model-file-upload",
            "direct": true,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "backbone.marionette",
            "direct": true,
            "version": "2.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "backbone.wreqr",
            "direct": true,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "backbone.wreqr",
            "direct": true,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "blueimp-file-upload",
            "direct": true,
            "version": "10.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap",
            "direct": true,
            "version": "4.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap",
            "direct": true,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap-notify",
            "direct": true,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap-switch",
            "direct": true,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap-vue",
            "direct": true,
            "version": "2.23.1",
            "ecosystem": "npm"
          },
          {
            "name": "bowser",
            "direct": true,
            "version": "2.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": true,
            "version": "1.0.30001777",
            "ecosystem": "npm"
          },
          {
            "name": "common-tags",
            "direct": true,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "jquery",
            "direct": true,
            "version": "3.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "jquery",
            "direct": true,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jquery-ui-dist",
            "direct": true,
            "version": "1.13.3",
            "ecosystem": "npm"
          },
          {
            "name": "jquery-ujs",
            "direct": true,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jquery.kinetic",
            "direct": true,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "jsonapi-vuex",
            "direct": true,
            "version": "5.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": true,
            "version": "4.17.23",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": true,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "luxon",
            "direct": true,
            "version": "3.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "magnify",
            "direct": true,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "moment",
            "direct": true,
            "version": "2.30.1",
            "ecosystem": "npm"
          },
          {
            "name": "popper.js",
            "direct": true,
            "version": "1.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": true,
            "version": "1.97.3",
            "ecosystem": "npm"
          },
          {
            "name": "select2",
            "direct": true,
            "version": "4.1.0-rc.0",
            "ecosystem": "npm"
          },
          {
            "name": "select2-bootstrap-theme",
            "direct": true,
            "version": "0.1.0-beta.10",
            "ecosystem": "npm"
          },
          {
            "name": "select2-bootstrap4-theme",
            "direct": true,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tempusdominus-bootstrap-4",
            "direct": true,
            "version": "5.39.2",
            "ecosystem": "npm"
          },
          {
            "name": "trumbowyg",
            "direct": true,
            "version": "2.31.0",
            "ecosystem": "npm"
          },
          {
            "name": "underscore",
            "direct": true,
            "version": "1.13.8",
            "ecosystem": "npm"
          },
          {
            "name": "underscore",
            "direct": true,
            "version": "1.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "vue",
            "direct": true,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "vue-router",
            "direct": true,
            "version": "4.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "vuex",
            "direct": true,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "acts-as-taggable-on",
            "direct": true,
            "version": "9.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "cssbundling-rails",
            "direct": true,
            "version": "1.4.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "devise",
            "direct": true,
            "version": "4.9.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "globalize",
            "direct": true,
            "version": "7.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "globalize-accessors",
            "direct": true,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "haml-rails",
            "direct": true,
            "version": "3.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "http_accept_language",
            "direct": true,
            "version": "2.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "i18n-active_record",
            "direct": true,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jbuilder",
            "direct": true,
            "version": "2.14.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-rails",
            "direct": true,
            "version": "0.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-rspec",
            "direct": true,
            "version": "0.0.11",
            "ecosystem": "rubygems"
          },
          {
            "name": "kt-paperclip",
            "direct": true,
            "version": "7.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "log4r",
            "direct": true,
            "version": "1.1.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "mysql2",
            "direct": true,
            "version": "0.5.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "newrelic_rpm",
            "direct": true,
            "version": "9.23.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "paper_trail",
            "direct": true,
            "version": "16.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "puma",
            "direct": true,
            "version": "6.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "pundit",
            "direct": true,
            "version": "2.5.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails",
            "direct": true,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-i18n",
            "direct": true,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-observers",
            "direct": true,
            "version": "0.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "ranked-model",
            "direct": true,
            "version": "0.4.11",
            "ecosystem": "rubygems"
          },
          {
            "name": "recaptcha",
            "direct": true,
            "version": "5.21.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "routing-filter",
            "direct": true,
            "version": "0.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sidekiq",
            "direct": true,
            "version": "7.3.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "sidekiq-scheduler",
            "direct": true,
            "version": "6.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "simple_form",
            "direct": true,
            "version": "5.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "slim-rails",
            "direct": true,
            "version": "3.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "uglifier",
            "direct": true,
            "version": "4.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "vite_plugin_legacy",
            "direct": true,
            "version": "3.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "vite_rails",
            "direct": true,
            "version": "3.0.15",
            "ecosystem": "rubygems"
          },
          {
            "name": "vite_ruby",
            "direct": true,
            "version": "3.3.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "will_paginate",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "with_advisory_lock",
            "direct": true,
            "version": "5.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@intlify/bundle-utils",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@intlify/message-compiler",
            "direct": false,
            "version": "9.3.0-beta.17",
            "ecosystem": "npm"
          },
          {
            "name": "@intlify/shared",
            "direct": false,
            "version": "9.3.0-beta.17",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "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": "@nuxt/opencollective",
            "direct": false,
            "version": "0.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-android-arm64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-arm64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-x64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-freebsd-x64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-glibc",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-musl",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-glibc",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-musl",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-glibc",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-musl",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-arm64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-ia32",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-x64",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/pluginutils",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-core",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-dom",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-sfc",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-ssr",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/devtools-api",
            "direct": false,
            "version": "6.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/reactivity",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/runtime-core",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/runtime-dom",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/server-renderer",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/shared",
            "direct": false,
            "version": "3.5.30",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "7.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "backbone.babysitter",
            "direct": false,
            "version": "0.1.12",
            "ecosystem": "npm"
          },
          {
            "name": "blueimp-canvas-to-blob",
            "direct": false,
            "version": "3.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "blueimp-load-image",
            "direct": false,
            "version": "5.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "blueimp-tmpl",
            "direct": false,
            "version": "3.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "consola",
            "direct": false,
            "version": "2.15.3",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "escodegen",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.15.11",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "5.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jsonc-eslint-parser",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonpath-plus",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "mlly",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "moment-timezone",
            "direct": false,
            "version": "0.5.48",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "node-addon-api",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "portal-vue",
            "direct": false,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "3.30.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.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": "ufo",
            "direct": false,
            "version": "1.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin",
            "direct": false,
            "version": "1.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-full-reload",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-ruby",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "vue-functional-data-merge",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-virtual-modules",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "1.10.2",
            "ecosystem": "npm"
          },
          {
            "name": "yaml-eslint-parser",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "actioncable",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailbox",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailer",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionpack",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "actiontext",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionview",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "activejob",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "activemodel",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "activerecord",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "activestorage",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "activesupport",
            "direct": false,
            "version": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "ast",
            "direct": false,
            "version": "2.4.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "base64",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "bcrypt",
            "direct": false,
            "version": "3.1.20",
            "ecosystem": "rubygems"
          },
          {
            "name": "benchmark",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "better_errors",
            "direct": false,
            "version": "2.10.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "bigdecimal",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "bindex",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "binding_of_caller",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "brakeman",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "builder",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "byebug",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "climate_control",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "coderay",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "concurrent-ruby",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "connection_pool",
            "direct": false,
            "version": "2.5.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "crass",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "database_cleaner",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "database_cleaner-active_record",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "database_cleaner-core",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "date",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "debug_inspector",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "diff-lcs",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "docile",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "drb",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "dry-cli",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "erubi",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "et-orbi",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "execjs",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "factory_bot",
            "direct": false,
            "version": "6.5.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "factory_bot_rails",
            "direct": false,
            "version": "6.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "faker",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "ffi",
            "direct": false,
            "version": "1.17.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "fugit",
            "direct": false,
            "version": "1.12.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "fuubar",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "globalid",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "haml",
            "direct": false,
            "version": "6.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "i18n",
            "direct": false,
            "version": "1.14.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "json",
            "direct": false,
            "version": "2.16.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-deserializable",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-parser",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-rb",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-renderer",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "jsonapi-serializable",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "language_server-protocol",
            "direct": false,
            "version": "3.17.0.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "lint_roller",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "listen",
            "direct": false,
            "version": "3.9.0",
            "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.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "marcel",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "method_source",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mime-types-data",
            "direct": false,
            "version": "3.2025.0924",
            "ecosystem": "rubygems"
          },
          {
            "name": "mini_mime",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "minitest",
            "direct": false,
            "version": "5.26.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "mutex_m",
            "direct": false,
            "version": "0.3.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.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "nokogiri",
            "direct": false,
            "version": "1.18.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "orm_adapter",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "parallel",
            "direct": false,
            "version": "1.27.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "parser",
            "direct": false,
            "version": "3.3.10.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "prism",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "pry",
            "direct": false,
            "version": "0.15.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "raabro",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "racc",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack",
            "direct": false,
            "version": "2.2.21",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-mini-profiler",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-proxy",
            "direct": false,
            "version": "0.7.7",
            "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": "7.0.10",
            "ecosystem": "rubygems"
          },
          {
            "name": "rainbow",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rake",
            "direct": false,
            "version": "13.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-fsevent",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-inotify",
            "direct": false,
            "version": "0.11.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-readline",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "redis-client",
            "direct": false,
            "version": "0.26.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "regexp_parser",
            "direct": false,
            "version": "2.11.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "request_store",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "responders",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rouge",
            "direct": false,
            "version": "4.6.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-core",
            "direct": false,
            "version": "3.13.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-expectations",
            "direct": false,
            "version": "3.13.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-mocks",
            "direct": false,
            "version": "3.13.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-rails",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-support",
            "direct": false,
            "version": "3.13.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop",
            "direct": false,
            "version": "1.81.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-ast",
            "direct": false,
            "version": "1.48.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-rspec",
            "direct": false,
            "version": "3.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "ruby-progressbar",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rufus-scheduler",
            "direct": false,
            "version": "3.9.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "securerandom",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "shoulda-callback-matchers",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "shoulda-matchers",
            "direct": false,
            "version": "6.5.0",
            "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": "slim",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "temple",
            "direct": false,
            "version": "0.10.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "terrapin",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "thor",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "tilt",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "timeout",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "tzinfo",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "unicode-display_width",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "unicode-emoji",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "warden",
            "direct": false,
            "version": "1.2.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "web-console",
            "direct": false,
            "version": "4.2.1",
            "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.6.18",
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 372,
        "direct_count": 81,
        "indirect_count": 291
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 359,
        "open_issues": 11,
        "closed_ratio": 0.906,
        "closed_issues": 106,
        "closed_unmerged_prs": 408
      },
      "bus_factor": 2,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "rsmithlal",
          "commits": 518,
          "avatar_url": "https://avatars.githubusercontent.com/u/11048570?v=4"
        },
        {
          "type": "User",
          "login": "balen",
          "commits": 494,
          "avatar_url": "https://avatars.githubusercontent.com/u/184239?v=4"
        },
        {
          "type": "User",
          "login": "arfon",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/4483?v=4"
        },
        {
          "type": "User",
          "login": "tdb93",
          "commits": 42,
          "avatar_url": "https://avatars.githubusercontent.com/u/11939182?v=4"
        },
        {
          "type": "User",
          "login": "stuartlynn",
          "commits": 36,
          "avatar_url": "https://avatars.githubusercontent.com/u/209838?v=4"
        },
        {
          "type": "User",
          "login": "mcagan",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/43585486?v=4"
        },
        {
          "type": "User",
          "login": "y2749zha",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/44105404?v=4"
        },
        {
          "type": "User",
          "login": "ttfnrob",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/83192?v=4"
        },
        {
          "type": "User",
          "login": "VickyS08",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/18540289?v=4"
        },
        {
          "type": "User",
          "login": "raakal",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/46582468?v=4"
        }
      ],
      "contributors_sampled": 15,
      "top_contributor_share": 0.43
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "brakeman-analysis.yml",
        "deploy.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".rubocop.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "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": 6,
            "reason": "11 out of 17 merged PRs checked by a CI test -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 1/13 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 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": "13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 6,
            "reason": "SAST tool is not run on all commits -- score normalized to 6",
            "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": "113 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ab19697b457377fff0914b90b53bf1667c70a01b",
        "ran_at": "2026-07-28T09:27:05Z",
        "aggregate_score": 5.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T19:04:52Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T18:55:00Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 79,
          "created_at": "2017-10-24T22:47:29Z",
          "last_comment_at": "2023-03-06T14:58:36Z",
          "last_comment_author": "VickyS08"
        },
        {
          "number": 81,
          "created_at": "2017-11-01T17:36:42Z",
          "last_comment_at": "2023-03-06T15:03:04Z",
          "last_comment_author": "VickyS08"
        },
        {
          "number": 121,
          "created_at": "2019-08-22T20:02:27Z",
          "last_comment_at": "2023-03-06T15:07:10Z",
          "last_comment_author": "VickyS08"
        },
        {
          "number": 131,
          "created_at": "2019-09-23T22:50:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 243,
          "created_at": "2020-06-19T00:04:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 279,
          "created_at": "2020-08-17T22:28:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 360,
          "created_at": "2021-02-08T22:59:23Z",
          "last_comment_at": "2021-02-09T01:16:09Z",
          "last_comment_author": "raakal"
        },
        {
          "number": 385,
          "created_at": "2021-04-07T16:19:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 415,
          "created_at": "2021-06-17T22:20:48Z",
          "last_comment_at": "2023-01-30T13:41:00Z",
          "last_comment_author": "VickyS08"
        },
        {
          "number": 628,
          "created_at": "2023-02-15T17:32:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 877,
          "created_at": "2026-07-04T20:48:34Z",
          "last_comment_at": "2026-07-10T20:33:37Z",
          "last_comment_author": "balen"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/open-data-rescue/climate-data-rescue",
    "host": "github.com",
    "name": "climate-data-rescue",
    "owner": "open-data-rescue"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 61 is calibrated to 67 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 61,
            "calibrated": 67,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 67,
      "inputs": {
        "security": 53,
        "vitality": 75,
        "community": 39,
        "governance": 59,
        "calibration": "2026-08-02",
        "engineering": 76,
        "ai_readiness": 44,
        "weighted_overall_raw": 61
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 75,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "commits_last_year": 28,
              "human_commit_share": 0.94,
              "days_since_last_push": 5,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "28 commits in the last year",
                "points": 13.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 28
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 92,
            "inputs": {
              "releases_count": 51,
              "latest_release_tag": "v2.3.10",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 76.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "51 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 51
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~76.2 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 76.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 11,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 11 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "weak",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "forks": 10,
              "stars": 15,
              "watchers": 6,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "15 stars",
                "points": 18.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "10 forks",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "6 watchers",
                "points": 3.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": null,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "readme_badge_services": [],
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 15,
              "top_contributor_share": 0.43
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 43% of commits",
                "points": 12.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 43
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "15 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "merged_prs": 359,
              "open_issues": 11,
              "closed_issues": 106,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.906,
              "closed_unmerged_prs": 408,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "91% of issues closed",
                "points": 38.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "359/767 decided PRs merged",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 359,
                      "decided": 767
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/13 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "followers": 5,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "open-data-rescue",
              "public_repos": 6,
              "account_age_days": 2572
            },
            "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": "5 followers of open-data-rescue",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 5,
                      "login": "open-data-rescue"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "6 public repos, account ~7 yr old",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 6
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": ".rubocop.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "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": "11 out of 17 merged PRs checked by a CI test -- score normalized to 6",
                "points": 12,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "transcription",
                "data-rescue",
                "archives",
                "digitization",
                "citizen-science",
                "hacktoberfest",
                "climate",
                "community",
                "science"
              ],
              "has_wiki": true,
              "homepage": "https://draw.geog.mcgill.ca",
              "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://draw.geog.mcgill.ca",
                "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": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 53,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "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": "11 out of 17 merged PRs checked by a CI test -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/13 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 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": "13 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 6",
                "points": 3,
                "status": "partial",
                "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": "113 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 372 resolved dependencies against OSV. 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": 372
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "source": "osv",
              "advisories": 115,
              "affected_packages": 29,
              "assessed_packages": 372,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 3, high 16, moderate 8, low 2",
              "direct_affected_packages": 5
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "5 affected: underscore 1.8.3 (critical 9.8), axios 1.13.6 (high 8.7), lodash 4.17.23 (high 8.1), +2 more",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 5,
                      "packages": "underscore 1.8.3 (critical 9.8), axios 1.13.6 (high 8.7), lodash 4.17.23 (high 8.1)"
                    }
                  },
                  {
                    "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": "5 advisory-carrying package(s) unaddressed past 90 days; oldest published 1908 days ago",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 5,
                      "oldest": 1908
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "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": 372,
              "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": "exceptional",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 6
            },
            "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": "weak",
        "name": "AI Readiness",
        "value": 44,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 28,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.532,
              "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": "50 of 94 human commits state their intent (structured subject or explanatory body)",
                "points": 28.4,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 50,
                      "sampled": 94
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Gemfile.lock",
                "yarn.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.06
            },
            "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": ".rubocop.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "6 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 6,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 167184,
              "source_files_sampled": 292,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/292 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 292,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "labels": [
        "network-service",
        "web-ui"
      ],
      "scores": {
        "web-ui": 4,
        "network-service": 4
      },
      "primary": "network-service",
      "evidence": [
        {
          "tier": "dependencies",
          "label": "network-service",
          "source": "dep:rails",
          "weight": 4
        },
        {
          "tier": "dependencies",
          "label": "web-ui",
          "source": "dep:vue",
          "weight": 4
        }
      ],
      "artifacts": [],
      "confidence": "low",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": false
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T09:27:30.494409Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/open-data-rescue/climate-data-rescue.svg",
  "full_name": "open-data-rescue/climate-data-rescue",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v2.3.1、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计.