公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-24 17:15 UTC

slawlor / ractor

Rust actor framework

RustMIT★ 2,067 星标⑂ 128 复刻始于 2023年1月在 GitHub 上查看 ↗

slawlor/ractor 的健康指数为 100 分中的 72 分,处于「良好」区间。 其得分最高的类别是Vitality(84/100),最低的是Security(61/100)。 最近一次更新在 1 天前。 近期的大部分工作由 1 位贡献者完成。

72
总分 / 100
良好

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

72
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

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

所有权

Sean Lawlor个人账户
271 关注者18 个公开仓库始于 2014年10月Meta

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

注册表软件包版本月下载量版本数最近发布标签
crates.ioxtask指向其他仓库——不计分0.1.4189524 天前automationmacosreleasecodesignxtaskcommand-line-utilities
crates.ioractor0.15.13104,4287579 天前actorractorasynchronous
crates.ioractor_cluster0.15.131,3416479 天前clusteractorractorasynchronous
crates.ioractor_cluster_derive0.15.131,3806479 天前actorractor

按类别列示的指标

活力

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

84良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 1 天前
12.5/36提交节奏 — 52 周中有 18 周有提交
14.7/18提交量 — 最近一年 42 次提交
10/10OpenSSF Scorecard:Maintained — 16 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year42
human_commit_share0.8
days_since_last_push1
active_weeks_last_year18

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 75 个发布版本
36/36发布时效 — 最近一次发布版本于 79 天前
27/27发布节奏 — 约每 41 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count75
latest_release_tagv0.15.13
releases_from_tags
days_since_latest_release79
mean_days_between_releases41
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

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

78良好 · 占总体的 18%
评分方式
53.8/60星标 — 2,067 个星标
17.5/25复刻 — 128 个复刻
8.2/15关注者 — 31 位关注者
所用输入
forks128
stars2,067
watchers31
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
18/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
67.1/80月度下载量 — crates 合计每月 107,149 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesractor, ractor_cluster, ractor_cluster_derive
dependents
ecosystemscrates
total_downloads1,094,577
monthly_downloads107,149
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

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

66中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
4.7/22.5提交分布 — 头号贡献者编写了 79% 的提交
13.5/13.5贡献者广度 — 33 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 6 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled33
top_contributor_share0.792
评分方式
43.3/46.8议题解决 — 93% 的议题已关闭
33.3/38.3PR 接受 — 已裁定的 PR 中 223/256 已合并
1.5/15OpenSSF Scorecard:Code-Review — Found 2/14 approved changesets -- score normalized to 1
所用输入
merged_prs223
open_issues8
closed_issues101
issue_closed_ratio0.927
closed_unmerged_prs33
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
17.5/25所有者影响力 — slawlor 有 271 位关注者
21.3/25既往记录 — 18 个公开仓库,账户约 11 年
所用输入
followers271
owner_typeUser
is_verified
owner_loginslawlor
public_repos18
account_age_days4,285
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — crates 上有 3 个软件包
35/35发布时效 — 最近一次发布于 79 天前
20/20版本历史 — 75 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesractor, ractor_cluster, ractor_cluster_derive
ecosystemscrates
any_deprecated
min_days_since_publish79

工程质量

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

71良好 · 占总体的 20%

工程实践

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

文档

75良好
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
0/10主题标签
10/10Wiki
所用输入
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

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

61中等 · 占总体的 16%

安全态势

51中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 2/14 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 6 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 — 16 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
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 12 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.1
已排除计分(无数据或不适用):branch_protection, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories12
affected_packages5
assessed_packages100
unassessed_packages46
affected_by_severitycritical 1, high 3, moderate 1
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 100 个已解析依赖与 OSV 比对。 有 46 项无法评估——没有已解析的版本、生态系统不受支持,或超出所报告的软件包清单。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

78良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 80 次人类提交中有 66 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.825
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes12,102
评分方式
12.6/18一条命令的引导启动 — Cargo.toml, ractor/Cargo.toml, ractor_cluster/Cargo.toml(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Rust(静态类型)
10/10可复现环境 — Dockerfile, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
8/8自动化维护 — 最近 100 次提交中有 20 次为自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, ractor/Cargo.toml, ractor_cluster/Cargo.toml, ractor_cluster_derive/Cargo.toml, ractor_cluster_integration_tests/Cargo.toml, ractor_example_entry_proc/Cargo.toml, ractor_playground/Cargo.toml, xtask/Cargo.toml
dependency_bot_commit_share0.2
评分方式
45/45可类型检查的代码 — Rust(静态类型)
55/55可控的文件大小 — 采样的 110 个源文件中有 0 个超过 60KB
所用输入
primary_languageRust
largest_source_bytes51,580
source_files_sampled110
oversized_source_files0
评分方式
40/40API 模式(OpenAPI/GraphQL/proto) — ractor_cluster/src/protocol/auth.proto, ractor_cluster/src/protocol/control.proto, ractor_cluster/src/protocol/meta.proto, ractor_cluster/src/protocol/node.proto
0/20MCP 服务器
40/40可运行示例 — examples
所用输入
example_dirsexamples
has_mcp_signal
api_schema_filesractor_cluster/src/protocol/auth.proto, ractor_cluster/src/protocol/control.proto, ractor_cluster/src/protocol/meta.proto, ractor_cluster/src/protocol/node.proto

关键数据

2,067GitHub 星标
33贡献者
42最近 12 个月提交数
1距最近推送天数
75发布版本数
1巴士系数(bus factor)
8开放议题
crates.io软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • crates package 'xtask' points at a different repository (https://github.com/arcboxlabs/xtask); excluded from ecosystem scoring
  • Could not fetch crates package 'ractor_playground' from its registry
  • Could not fetch crates package 'ractor_example_entry_proc' from its registry
  • Could not fetch crates package 'ractor_cluster_integration_tests' from its registry

更多细节

Star 与 Fork 历史 0 ★ / 128 ⇿
0Star
128Fork
68发布

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

025507510012515012892023-012024-092026-05
主版本 0次版本 11修订 57

每个点涵盖 4 天。

OpenSSF Scorecard 5.1 / 10
5.1综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-24 17:14 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
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 2/14 approved changesets -- score normalized to 1
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained16 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
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities12 existing vulnerabilities detected
直接依赖 51
注册表软件包版本约束清单文件
crates.iobon3.9ractor/Cargo.toml
crates.iodashmap6ractor/Cargo.toml
crates.iofutures0.3ractor/Cargo.toml
crates.ioonce_cell1ractor/Cargo.toml
crates.iostrum0.28ractor/Cargo.toml
crates.ioasync-std1ractor/Cargo.toml
crates.ioasync-trait0.1ractor/Cargo.toml
crates.iotokio1ractor/Cargo.toml
crates.iotracing0.1ractor/Cargo.toml
crates.ioserde1ractor/Cargo.toml
crates.iopot3.0ractor/Cargo.toml
crates.iobytes1ractor_cluster/Cargo.toml
crates.ioprost0.14ractor_cluster/Cargo.toml
crates.ioprost-types0.14ractor_cluster/Cargo.toml
crates.ioractor0.15.0ractor_cluster/Cargo.toml
crates.ioractor_cluster_derive0.15.0ractor_cluster/Cargo.toml
crates.iorand0.10ractor_cluster/Cargo.toml
crates.iosocket20.6ractor_cluster/Cargo.toml
crates.iosha20.11ractor_cluster/Cargo.toml
crates.iotokio1ractor_cluster/Cargo.toml
crates.iotokio-rustls0.26ractor_cluster/Cargo.toml
crates.iotracing0.1ractor_cluster/Cargo.toml
crates.ioasync-trait0.1ractor_cluster/Cargo.toml
crates.ioproc-macro21ractor_cluster_derive/Cargo.toml
crates.ioquote1ractor_cluster_derive/Cargo.toml
crates.iosyn3ractor_cluster_derive/Cargo.toml
crates.ioanyhow1ractor_cluster_integration_tests/Cargo.toml
crates.ioasync-trait0.1ractor_cluster_integration_tests/Cargo.toml
crates.ioclap4ractor_cluster_integration_tests/Cargo.toml
crates.ioractorractor_cluster_integration_tests/Cargo.toml
crates.ioractor_clusterractor_cluster_integration_tests/Cargo.toml
crates.iorand0.10ractor_cluster_integration_tests/Cargo.toml
crates.iotokio-rustls0.26ractor_cluster_integration_tests/Cargo.toml
crates.iorustls-pemfile2.1ractor_cluster_integration_tests/Cargo.toml
crates.iorustyrepl0.2ractor_cluster_integration_tests/Cargo.toml
crates.iotokio1ractor_cluster_integration_tests/Cargo.toml
crates.iotracing0.1ractor_cluster_integration_tests/Cargo.toml
crates.iotracing-glog0.4ractor_cluster_integration_tests/Cargo.toml
crates.iotracing-subscriber0.3ractor_cluster_integration_tests/Cargo.toml
crates.iowebpki0.22ractor_cluster_integration_tests/Cargo.toml
crates.ioquote1ractor_example_entry_proc/Cargo.toml
crates.iosyn3ractor_example_entry_proc/Cargo.toml
crates.ioclap4ractor_playground/Cargo.toml
crates.ioractorractor_playground/Cargo.toml
crates.ioractor_clusterractor_playground/Cargo.toml
crates.iotokio1ractor_playground/Cargo.toml
crates.iotracing0.1ractor_playground/Cargo.toml
crates.iotracing-glog0.4ractor_playground/Cargo.toml
crates.iotracing-subscriber0.3ractor_playground/Cargo.toml
crates.ioxtaskops0.4xtask/Cargo.toml
crates.ioanyhow1xtask/Cargo.toml
全部依赖 146

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

注册表软件包版本关系
crates.ioanyhow直接
crates.ioasync-std直接
crates.ioasync-trait直接
crates.iobon直接
crates.iobytes直接
crates.ioclap直接
crates.iodashmap直接
crates.iofutures直接
crates.ioonce_cell直接
crates.iopot直接
crates.ioproc-macro2直接
crates.ioprost直接
crates.ioprost-types直接
crates.ioquote直接
crates.ioractor直接
crates.ioractor_cluster_derive直接
crates.iorand直接
crates.iorustls-pemfile直接
crates.iorustyrepl直接
crates.ioserde直接
crates.iosha2直接
crates.iosocket2直接
crates.iostrum直接
crates.iosyn直接
crates.iotokio直接
crates.iotokio-rustls直接
crates.iotracing直接
crates.iotracing-glog直接
crates.iotracing-subscriber直接
crates.iowebpki直接
crates.ioxtaskops直接
crates.iobacktrace间接
crates.iocriterion间接
crates.iofunction_name间接
crates.iogetrandom间接
crates.iojs-sys间接
crates.iopaste间接
crates.ioprost-build间接
crates.ioprotoc-bin-vendored间接
crates.ioserial_test间接
crates.iotokio_with_wasm间接
crates.iotracing-test间接
crates.iowasm-bindgen间接
crates.iowasm-bindgen-futures间接
crates.iowasm-bindgen-test间接
crates.ioweb-time间接
npm@babel/code-frame7.26.2间接
npm@babel/helper-validator-identifier7.25.9间接
npm@puppeteer/browsers2.10.0间接
npm@tootallnate/quickjs-emscripten0.23.0间接
npm@types/node22.14.1间接
npm@types/yauzl2.10.3间接
npmagent-base7.1.3间接
npmansi-regex5.0.1间接
npmansi-styles4.3.0间接
npmargparse2.0.1间接
npmast-types0.13.4间接
npmb4a1.6.7间接
npmbare-events2.5.4间接
npmbare-fs4.1.2间接
npmbare-os3.6.1间接
npmbare-path3.0.0间接
npmbare-stream2.6.5间接
npmbasic-ftp5.0.5间接
npmbuffer-crc320.2.13间接
npmcallsites3.1.0间接
npmchromium-bidi3.0.0间接
npmcliui8.0.1间接
npmcolor-convert2.0.1间接
npmcolor-name1.1.4间接
npmcosmiconfig9.0.0间接
npmdata-uri-to-buffer6.0.2间接
npmdebug4.4.0间接
npmdegenerator5.0.1间接
npmdevtools-protocol0.0.1425554间接
npmemoji-regex8.0.0间接
npmend-of-stream1.4.4间接
npmenv-paths2.2.1间接
npmerror-ex1.3.2间接
npmescalade3.2.0间接
npmescodegen2.1.0间接
npmesprima4.0.1间接
npmestraverse5.3.0间接
npmesutils2.0.3间接
npmextract-zip2.0.1间接
npmfast-fifo1.3.2间接
npmfd-slicer1.1.0间接
npmget-caller-file2.0.5间接
npmget-stream5.2.0间接
npmget-uri6.0.4间接
npmhttp-proxy-agent7.0.2间接
npmhttps-proxy-agent7.0.6间接
npmimport-fresh3.3.1间接
npmip-address9.0.5间接
npmis-arrayish0.2.1间接
npmis-fullwidth-code-point3.0.0间接
npmjs-tokens4.0.0间接
npmjs-yaml4.1.0间接
npmjsbn1.1.0间接
npmjson-parse-even-better-errors2.3.1间接
npmlines-and-columns1.2.4间接
npmlru-cache7.18.3间接
npmmitt3.0.1间接
npmms2.1.3间接
npmnan2.22.2间接
npmnetmask2.0.2间接
npmonce1.4.0间接
npmpac-proxy-agent7.2.0间接
npmpac-resolver7.0.1间接
npmparent-module1.0.1间接
npmparse-json5.2.0间接
npmpend1.2.0间接
npmpicocolors1.1.1间接
npmprogress2.0.3间接
npmproxy-agent6.5.0间接
npmproxy-from-env1.1.0间接
npmpump3.0.2间接
npmpuppeteer24.6.1间接
npmpuppeteer-core24.6.1间接
npmrequire-directory2.1.1间接
npmresolve-from4.0.0间接
npmsemver7.7.1间接
npmsleep6.1.0间接
npmsmart-buffer4.2.0间接
npmsocks2.8.4间接
npmsocks-proxy-agent8.0.5间接
npmsource-map0.6.1间接
npmsprintf-js1.1.3间接
npmstreamx2.22.0间接
npmstring-width4.2.3间接
npmstrip-ansi6.0.1间接
npmtar-fs3.0.8间接
npmtar-stream3.1.7间接
npmtext-decoder1.2.3间接
npmtslib2.8.1间接
npmtyped-query-selector2.12.0间接
npmundici-types6.21.0间接
npmwrap-ansi7.0.0间接
npmwrappy1.0.2间接
npmws8.18.1间接
npmxvfb0.4.0间接
npmy18n5.0.8间接
npmyargs17.7.2间接
npmyargs-parser21.1.1间接
npmyauzl2.10.0间接
npmzod3.24.2间接
依赖安全公告 5

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 100 个包,其中也包含从不交付的开发与测试版本固定:5 个存在已知公告,0 个为直接依赖。 有 46 个无法评估——没有已解析的版本、生态系统不受支持,或不在所列包清单之内。

软件包版本关系严重程度公告数修复版本
basic-ftp5.0.5间接严重45.3.1
js-yaml4.1.0间接34.3.0
tar-fs3.0.8间接23.1.1
ws8.18.1间接28.21.0
ip-address9.0.5间接110.1.1

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 3922,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Rust": 1186966,
        "Dockerfile": 723
      },
      "pushed_at": "2026-07-23T14:19:26Z",
      "created_at": "2023-01-03T16:24:32Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T00:28:00Z",
      "description": "Rust actor framework",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "www.meta.com",
      "name": "Sean Lawlor",
      "type": "User",
      "login": "slawlor",
      "company": "Meta",
      "location": "Montreal",
      "followers": 271,
      "avatar_url": "https://avatars.githubusercontent.com/u/9451356?v=4",
      "created_at": "2014-10-29T18:22:24Z",
      "is_verified": null,
      "public_repos": 18,
      "account_age_days": 4285
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.15.13",
          "kind": "patch",
          "published_at": "2026-05-05T17:40:04Z"
        },
        {
          "tag": "v0.15.12",
          "kind": "patch",
          "published_at": "2026-03-09T16:48:44Z"
        },
        {
          "tag": "v0.15.11",
          "kind": "patch",
          "published_at": "2026-03-06T19:40:42Z"
        },
        {
          "tag": "v0.15.10",
          "kind": "patch",
          "published_at": "2025-12-16T14:42:50Z"
        },
        {
          "tag": "v0.15.9",
          "kind": "patch",
          "published_at": "2025-10-21T13:54:26Z"
        },
        {
          "tag": "v0.15.8",
          "kind": "patch",
          "published_at": "2025-08-19T20:54:55Z"
        },
        {
          "tag": "v0.15.7",
          "kind": "patch",
          "published_at": "2025-08-06T00:44:56Z"
        },
        {
          "tag": "v0.15.6",
          "kind": "patch",
          "published_at": "2025-05-07T14:24:54Z"
        },
        {
          "tag": "v0.15.5",
          "kind": "patch",
          "published_at": "2025-05-02T02:35:43Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2025-05-01T20:49:56Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2025-04-10T17:15:00Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2025-02-18T20:06:00Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2025-02-14T01:32:11Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2025-02-13T21:05:48Z"
        },
        {
          "tag": "v0.14.7",
          "kind": "patch",
          "published_at": "2025-01-23T02:48:06Z"
        },
        {
          "tag": "v0.14.6",
          "kind": "patch",
          "published_at": "2025-01-15T15:33:40Z"
        },
        {
          "tag": "v0.14.5",
          "kind": "patch",
          "published_at": "2025-01-09T18:44:44Z"
        },
        {
          "tag": "v0.14.4",
          "kind": "patch",
          "published_at": "2025-01-08T15:36:25Z"
        },
        {
          "tag": "v0.14.3",
          "kind": "patch",
          "published_at": "2025-01-07T16:18:42Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2024-12-20T02:32:07Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2024-12-18T03:59:30Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2024-12-17T22:03:15Z"
        },
        {
          "tag": "v0.13.5",
          "kind": "patch",
          "published_at": "2024-12-11T20:07:25Z"
        },
        {
          "tag": "v0.13.4",
          "kind": "patch",
          "published_at": "2024-12-06T15:03:36Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2024-12-05T17:59:53Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2024-11-27T18:00:16Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2024-11-26T17:40:49Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2024-10-25T17:32:59Z"
        },
        {
          "tag": "v0.12.4",
          "kind": "patch",
          "published_at": "2024-10-23T14:27:18Z"
        },
        {
          "tag": "v0.12.3",
          "kind": "patch",
          "published_at": "2024-10-16T15:29:19Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2024-10-11T00:33:44Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2024-10-07T15:55:05Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2024-10-04T14:31:32Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2024-09-25T01:48:32Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2024-09-22T01:15:02Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2024-09-21T01:51:01Z"
        },
        {
          "tag": "v0.10.4",
          "kind": "patch",
          "published_at": "2024-09-13T17:36:55Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2024-05-24T01:42:44Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2024-05-22T14:48:44Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2024-05-22T13:57:06Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2024-05-18T01:51:52Z"
        },
        {
          "tag": "v0.9.8",
          "kind": "patch",
          "published_at": "2024-05-02T01:56:14Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2024-03-16T01:54:21Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2024-02-19T20:54:44Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2024-02-08T00:59:45Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2023-10-13T00:32:33Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2023-09-25T15:29:41Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2023-09-22T00:49:56Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2023-08-11T00:48:59Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2023-07-29T13:53:02Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2023-05-11T17:23:31Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2023-05-11T16:03:29Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2023-05-06T01:14:24Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2023-05-05T13:37:29Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2023-05-01T19:03:30Z"
        },
        {
          "tag": "v0.7.6",
          "kind": "patch",
          "published_at": "2023-04-21T13:06:21Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2023-03-24T14:37:51Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2023-03-05T01:13:53Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2023-03-01T00:41:37Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2023-02-15T15:14:28Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2023-02-14T01:09:47Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2023-02-02T14:54:11Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2023-01-31T16:55:33Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2023-01-30T00:04:58Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2023-01-29T23:50:05Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2023-01-27T21:20:07Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2023-01-20T02:15:03Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2023-01-19T03:01:05Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2023-01-14T16:03:46Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2023-01-12T01:53:51Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2023-01-10T18:58:31Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2023-01-10T16:31:51Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2023-01-09T17:08:39Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2023-01-07T14:11:55Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2023-01-07T04:17:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "394254f3145c9539df9f0da3092e6d3500296c14",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-node from 6 to 7 (#437)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-23T14:19:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c39506691e37ebfe28daa40bdc75efd87b6a53e5",
          "body": "Updates the requirements on [syn](https://github.com/dtolnay/syn) to permit the latest version.\n- [Release notes](https://github.com/dtolnay/syn/releases)\n- [Commits](https://github.com/dtolnay/syn/compare/2.0.0...3.0.2)\n\n---\nupdated-dependencies:\n- dependency-name: syn\n  dependency-version: 3.0.2\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update syn requirement from 2 to 3 (#439)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-23T14:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25f4fe119665efc2a7308845da0f2f479d67110f",
          "body": "…(#442)\n\n* Fix flake in factory::tests::lifecycle::test_lifecycle_hooks\n\nThe test asserted synchronously after `Actor::spawn` returned that\n`on_factory_started` had not yet run (state == 0). Nothing enforced that\nordering — under the async-std scheduler the factory could reach the\nlifecycle hook bef\n[…]\neck then fails with lpc == 0.\n\nSplit the single signal into two Notify instances (batch_done and\nresume) so each direction has its own permit slot and neither side can\nself-consume the other's wakeup.",
          "is_bot": false,
          "headline": "[chore] Fix flake in factory::tests::lifecycle::test_lifecycle_hooks …",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-07-22T17:00:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5507aeb5ef9488cc94b0e2af85a2c04c4770962",
          "body": null,
          "is_bot": false,
          "headline": "fix flaky test (#441)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-07-22T15:29:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6502b9e3e3c498d1b52e79016ba2408216e87b9b",
          "body": null,
          "is_bot": false,
          "headline": "[chore] Clippy and fmt (#440)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-07-22T14:14:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de5d4c5322e69983caac4ff353c99b0db40045a6",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 7 (#436)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-15T16:52:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13c02afd79eeee416fffbc09876cf0bb85fa5016",
          "body": "Combines and supersedes the dependabot PRs #430 (rand 0.8 -> 0.10) and\n#432 (getrandom 0.2 -> 0.4), which could not land independently because\nrand 0.10 transitively bumps the getrandom version pulled into WASM\nbuilds and ships breaking API changes.\n\nBumps:\n- rand: 0.8 -> 0.10 in ractor, ractor_clus\n[…]\n:\n- thread_rng() -> rng()\n- distributions -> distr (Alphanumeric)\n- RngCore trait -> Rng (base trait was renamed)\n- Rng extension trait -> RngExt\n- gen() / gen_range(..) -> random() / random_range(..)",
          "is_bot": false,
          "headline": "Update rand to 0.10 and getrandom to 0.4 (#435)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-06-10T16:13:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb2daccb8ad59cec509f66ae733c812aea2d1ef5",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 6 to 7 (#434)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-09T22:33:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cbfab455d006ffab4b7746387dfc3cb9b1978e7e",
          "body": "* Save allocations in registry functions\n\n* Revert to entry API for `register`\n\n---------\n\nCo-authored-by: Jacob Marshall <jacobmarshall@Jacobs-Laptop.local>",
          "is_bot": false,
          "headline": "Save allocations in registry functions (#433)",
          "author_name": "Jacob Marshall",
          "author_login": "jacobchrismarsh",
          "committed_at": "2026-05-25T22:35:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50c6753d2515a2818679e59ca6ac914c91380dd",
          "body": "Updates the requirements on [bon](https://github.com/elastio/bon) to permit the latest version.\n- [Release notes](https://github.com/elastio/bon/releases)\n- [Changelog](https://github.com/elastio/bon/blob/master/release-plz.toml)\n- [Commits](https://github.com/elastio/bon/compare/v2.2.0...v3.9.1)\n\n-\n[…]\nendency-version: 3.9.1\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update bon requirement from 2.2 to 3.9 (#431)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-10T21:05:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "14ec3197cbe3f801e4539b92e925ff146a7c06b9",
          "body": "Updates the requirements on [tokio_with_wasm](https://github.com/cunarist/tokio-with-wasm) to permit the latest version.\n- [Commits](https://github.com/cunarist/tokio-with-wasm/commits)\n\n---\nupdated-dependencies:\n- dependency-name: tokio_with_wasm\n  dependency-version: 0.9.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update tokio_with_wasm requirement from 0.8.2 to 0.9.0 (#429)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-07T13:38:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d73dab685a03e66b2fd3c013490d224171c842eb",
          "body": "The processing_messages counter was only incremented when jobs were\ndispatched directly to workers (in dispatch()), but not when jobs were\ndispatched from the queue (in try_route_next_active_job()). However,\nworker_finished_job() always decremented it. This asymmetry caused the\ncounter to leak downw\n[…]\nomprehensive test that validates the counter through queue\npath with slow workers, using a custom stats layer to track counter\nvalues and assert invariants (max ≤ worker count, no premature collapse).",
          "is_bot": false,
          "headline": "Fix processing_messages counter accounting bug in factory (#428)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-05-05T17:39:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "552c27e4ce2d439eee98ce46631324cb7d36117b",
          "body": "Updates all prost-related dependencies in ractor_cluster to 0.14:\n- prost: 0.13 -> 0.14\n- prost-types: 0.13 -> 0.14\n- prost-build: 0.13 -> 0.14\n\nThis combines the changes from PR #423 (prost) and PR #426 (prost-types)\ninto a single update.\n\nAll tests passing (227 total), clippy clean, no build issues.",
          "is_bot": false,
          "headline": "Update prost dependencies from 0.13 to 0.14 (#427)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-05-05T17:10:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb01927f82d09d4ddab73cef6a6a3f9d54fe2c2a",
          "body": "Updates the requirements on [strum](https://github.com/Peternator7/strum) to permit the latest version.\n- [Release notes](https://github.com/Peternator7/strum/releases)\n- [Changelog](https://github.com/Peternator7/strum/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/Peternator7/strum/compa\n[…]\nndency-version: 0.28.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update strum requirement from 0.26 to 0.28 (#422)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-05T15:01:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "62d77ee4df0b0b1b221d3147daef944a5f061a87",
          "body": "Updates the requirements on [sha2](https://github.com/RustCrypto/hashes) to permit the latest version.\n- [Commits](https://github.com/RustCrypto/hashes/compare/groestl-v0.10.0...sha2-v0.11.0)\n\n---\nupdated-dependencies:\n- dependency-name: sha2\n  dependency-version: 0.11.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update sha2 requirement from 0.10 to 0.11 (#424)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-05T14:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d83f326352870bce4e7dda675b783674e78c80b2",
          "body": "Updates the requirements on [criterion](https://github.com/criterion-rs/criterion.rs) to permit the latest version.\n- [Release notes](https://github.com/criterion-rs/criterion.rs/releases)\n- [Changelog](https://github.com/criterion-rs/criterion.rs/blob/master/CHANGELOG.md)\n- [Commits](https://github\n[…]\nendency-version: 0.8.2\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Update criterion requirement from 0.5 to 0.8 (#425)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-05T13:59:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4518baa7be1ad97d74375987a0f3b4745008db5c",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 5 to 6 (#420)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-29T13:55:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e68265191cf7f4bd866961f14ba55c6a87db0333",
          "body": "* Address network latency with excessive waits\n\nResolves ##389\n\n* Support multiple binding patterns for Windows and other platforms\n\nResolves #376\n\n* update benchmarks comment\n\n* Tests\n\n* Fix flaky test due to race in supervision startup in local thread actors\n\nRoot Cause\nRegular actors: spawn_linke\n[…]\n→ link (sync) → return\nThread-local actors: spawn_local_linked → start → send builder to spawner → return immediately, then builder executes pre_start → link asynchronously\n\n* bump version for release",
          "is_bot": false,
          "headline": "Network fixes for clusters (#412)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-03-09T16:45:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3b41a9879a3abeb97df6a1c29c04fa79d5a3287",
          "body": "Bumps [peter-evans/find-comment](https://github.com/peter-evans/find-comment) from 3 to 4.\n- [Release notes](https://github.com/peter-evans/find-comment/releases)\n- [Commits](https://github.com/peter-evans/find-comment/compare/v3...v4)\n\n---\nupdated-dependencies:\n- dependency-name: peter-evans/find-c\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump peter-evans/find-comment from 3 to 4 (#418)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-09T15:35:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47e011ee6b68780a8fc12df6d982798f99952e65",
          "body": "Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.\n- [Release notes](https://github.com/actions/download-artifact/releases)\n- [Commits](https://github.com/actions/download-artifact/compare/v4...v8)\n\n---\nupdated-dependencies:\n- dependency-name: actions/downlo\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/download-artifact from 4 to 8 (#417)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-09T15:34:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ddbd39bc285bfab4437e955b5eb8be00bd9a765",
          "body": "Bumps [peter-evans/create-or-update-comment](https://github.com/peter-evans/create-or-update-comment) from 4 to 5.\n- [Release notes](https://github.com/peter-evans/create-or-update-comment/releases)\n- [Commits](https://github.com/peter-evans/create-or-update-comment/compare/v4...v5)\n\n---\nupdated-dep\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump peter-evans/create-or-update-comment from 4 to 5 (#414)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-09T15:34:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0c381e927e2e574ca9dc891dd4ddea8041a6858f",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 4 to 6 (#416)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-09T14:08:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17e731836956f7334b2c24013149618539826a50",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/upload-artifact from 4 to 7 (#415)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-09T13:39:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d81cfdabe8a0fa34b1594e45505b6b194a0ea2cb",
          "body": "1. ractor/src/pg.rs — Full rewrite of PgState and all functions\n\n  New GroupState struct bundles members and per-group listeners into one atomically-accessible unit:\n  struct GroupState {\n      members: HashMap<ActorId, ActorCell>,\n      listeners: Vec<ActorCell>,\n  }\n\n  New PgState uses three maps \n[…]\np exists\n  - test_demonitor_scope_fully_unsubscribes — verifies no notifications after demonitor_scope\n  - test_stopped_actor_not_inserted — verifies stopped actors are rejected by join\n\nResolves #374",
          "is_bot": false,
          "headline": "Rewrite PG to fix race condition problems (#411)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-03-06T19:39:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e6174c89fbd5b8998eaac9f4d1fb156149c706d7",
          "body": "* Update factory processing performance in queueing\n\nWhen handling extremely large worker pools, we're spending excessive amounts of time iterating the map of workers. This is causing slowdowns sometimes, and can be optimized at a small cost of memory util in the factory agent.\n\n* bump version numbe\n[…]\ncluster tests on the new Rust runtime.\n\n* Add a benchmark for factory performance of queuer routing (most common) under low and high worker counts.\n\n* Test change to run benchmarks on prs\n\n* try again",
          "is_bot": false,
          "headline": "Update factory processing performance in queueing (#410)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-03-06T18:02:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3b589ad102fe3a0de359443551f0dfc7800f46e",
          "body": "1. Clearer, structured, error messages when variants are mis-set or fields set incorrectly\n2. Cleaner code maintenance and separation of logic\n3. Support RPC variants anywhere in the tuple AND support struct arguments (non-tuple variants)\n\nTests updated to support the new syntax, and all previous co\n[…]\nr 5 — Duplicate #[rpc] attribute:\n  error: Duplicate `#[rpc]` attribute on variant\n\n  Error 6 — Deriving on a struct:\n  error: RactorClusterMessage can only be derived for enums, not structs or unions",
          "is_bot": false,
          "headline": "Rewrite the proc macro crate for the following benefits (#408)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2026-02-27T16:22:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba3e9d7992a5a62f213d1752f445b52e7fe95490",
          "body": "… (#403)",
          "is_bot": false,
          "headline": "Cleanup proc macro to give more structured errors and cleaner parsing…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-12-16T03:15:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a17af24a170da342167a2a152183cdd0c9c0c0e",
          "body": "* Add some AI analysis documentation\n\n* Simple optimizations for clones and lock contention\n\n1. Remove ActorRef Clone's where possible\n2. Spawn Arc Clone optimization to move the state management inside the spawn, removing a clone of an Arc\n3. Collect targets for supervision events under short locks\n[…]\nment\n  Achieved: 4-16% across different workloads, with some benchmarks showing even better results!\n\n* Additional benchmarks for message size sending\n\n* Additional benchmarks for message size sending",
          "is_bot": false,
          "headline": "AI optimizations and documentation (#402)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-12-16T02:25:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c545b33fd96773897e894b45d1f9d687a60d4459",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 5 to 6 (#400)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-15T21:24:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "59f3354f12091360b68f947a90763973524bad62",
          "body": "* feat(derive): Support generic types for Ractor messages\n\n*   Derive macros now correctly propagate generic type parameters when\n    implementing the `ractor::Message` trait.\n*   This enables users to define `RactorMessage` and `RactorClusterMessage`\n    types with generic arguments.\n*   Adds compr\n[…]\nerifies correct serialization and deserialization behavior for\n    generic messages.\n*   Enhances message definition flexibility for complex scenarios.\n\n* fmt\n\n* clippy -> default from derive(default)",
          "is_bot": false,
          "headline": "feat(derive): Support generic types for Ractor messages (#399)",
          "author_name": "iskng",
          "author_login": "iskng",
          "committed_at": "2025-11-03T22:18:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c23afce4bd53eddaf0db26bea86da70f9fe5c458",
          "body": "… (#397)",
          "is_bot": false,
          "headline": "add 'spawn_instant' to thead_local actor, similar to the normal actor…",
          "author_name": "Lukas Rieger",
          "author_login": "0x53A",
          "committed_at": "2025-10-29T22:08:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8654768e82f1e72ab5fb832b87d62ecdc6f2e1ce",
          "body": null,
          "is_bot": false,
          "headline": "bump ractor version for release",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-10-21T13:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be3b23eb9ce3f59abd98e6bfa7afeacf8a6347f5",
          "body": "… docs + tests (#391)\n\n* feat(net): Introduce pluggable external network transports\n\n* Add `ClusterBidiStream` trait for injecting custom network transports.\n* Extend `NetworkStream` with an `External` variant for user-provided streams.\n* Implement `NodeServerMessage::ConnectionOpenedExternal` to ac\n[…]\n `|v| Some(v)` closures with direct `Some` function calls\n  for `output_port.subscribe` in actor benchmarks.\n* Marked `_since` as unused in `wait_for_session_ready` destructuring\n  for clearer intent.",
          "is_bot": false,
          "headline": "ractor_cluster: Add external transport injection (ClusterBidiStream),…",
          "author_name": "iskng",
          "author_login": "iskng",
          "committed_at": "2025-10-17T21:42:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "954f20b101c419673cfd400538ed1212770650d9",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-node from 5 to 6 (#394)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-14T20:54:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "730e8c015212742e0e96470ea96feb8017a35504",
          "body": "… (supports qualified/aliased paths) (#393)",
          "is_bot": false,
          "headline": "derive: fix RpcReplyPort generic extraction using last() path segment…",
          "author_name": "iskng",
          "author_login": "iskng",
          "committed_at": "2025-10-08T00:49:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f8c160a46c5c327e28e9ad2c42afb2cb9635bc2",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-node from 4 to 5 (#388)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-09-04T22:22:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1756043fafaeabbb8b80ea89b2511afabbb7290a",
          "body": "Will yank 0.15.7",
          "is_bot": false,
          "headline": "Fix non-semver break (#385)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-08-19T20:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e2aa0634c066fb63f3ca4cef3036d65050568e7",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v5)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 4 to 5 (#382)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-08-19T19:39:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "995f4d6828465175538bc3056ef81ab07379699a",
          "body": "* OuputPort use a single task to dispatch messages\n\nThe previous implementation did not ensured that all messages arrived to\nsubscribers. Now message send to the output port are guarenteed to be\ndelivered.\n\n* bench OutputPort\n\n* change outport bench msg and receiver numbers\n\n* fix unused warning\n\n* \n[…]\nture, provides previous ouputport implementation by default, the new is accessible with a feature\n\n* update ci to test feature output-port-v2\n\n* change clippy lint name\n\n* added  feature documentation",
          "is_bot": false,
          "headline": "New output port (#369)",
          "author_name": "Olivier",
          "author_login": "Kannen",
          "committed_at": "2025-08-19T18:26:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5e0c654fcf7f5125f5af352d160ad94dda5f8e2",
          "body": "* Update ractor to 0.15.7\n\nSemver checks are clean indicating no need for a major release with these changes\n\n```\n$ cargo semver-checks -p ractor\n    Building ractor v0.15.7 (current)\n       Built [   8.412s] (current)\n     Parsing ractor v0.15.7 (current)\n      Parsed [   0.012s] (current)\n    Buil\n[…]\n  Summary no semver update required\n    Finished [  20.651s] ractor\n```\n\n* DerivedActorRef::send_after bug fix + test coverage\n\n* Formatting\n\n---------\n\nCo-authored-by: Utku Demir <utku@rilla.network>",
          "is_bot": false,
          "headline": "Update ractor to 0.15.7 (#380)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-08-04T22:52:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6670853bc32f68564db0f72773ea0a88ade5fbd",
          "body": null,
          "is_bot": false,
          "headline": "impl PartialEq, Eq, Hash for ActorRef (#368)",
          "author_name": "Benjamin Stürz",
          "author_login": "realchonk",
          "committed_at": "2025-08-04T19:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d77ecaf35d6d234ffbff754b22b2370aa6c8995",
          "body": "Remove MaybeSend, all functions take and return Send futures just like native.\nEnable 'ThreadLocalActor' on WASM.\nThe WASM concurrency backend was partially copied from tokio_with_wasm and adapted to ensure Send'ness.\nNote: ./ractor/src/macros/tests.rs was copied from https://github.com/slawlor/ractor/pull/363",
          "is_bot": false,
          "headline": "align WASM and native w.r.t. Send. (#362)",
          "author_name": "Lukas Rieger",
          "author_login": "0x53A",
          "committed_at": "2025-08-04T18:54:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b2f0006d7527ac0b276c9c6e271b878365217dc",
          "body": null,
          "is_bot": false,
          "headline": "remove unnecessary arcs in ActorProperties (#373)",
          "author_name": "Olivier",
          "author_login": "Kannen",
          "committed_at": "2025-07-23T17:36:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d844062b4741da9757638a482b07d2cef1aad2b",
          "body": "When you send a message to a `DerivedActor`, we convert the message to\nthe receiver's type. If the message sending fails, we deconvert it to\nshow you which message failed. However, if the deconversion fails, you\nget a very terse error message:\n\n```log\nPANIC: Failed to deconvert message to from type\n\n[…]\ninstance you need to fix.\n\n(NOTE: These errors should be very rare. `TryFrom` _should_ be\nimplemented properly. But when very rare errors happen that's exactly\nwhen you need very good error messages.)",
          "is_bot": false,
          "headline": "Improving error messages when we cannot deconvert a type. (#366)",
          "author_name": "Kris Jenkins",
          "author_login": "krisajenkins",
          "committed_at": "2025-07-23T17:18:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f127881d8901ebb1bfcb704b3e418c68aea187e",
          "body": null,
          "is_bot": false,
          "headline": "clippy lints (#375)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-07-23T16:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38faea5de8347f6a02fdea45d7480625ab3b5f79",
          "body": "* fix: mismatched types\n\n* fix: lint issues\n\n---------\n\nCo-authored-by: Igor Durapov <igor.durapov@megogo.net>",
          "is_bot": false,
          "headline": "fix: mismatched types (#360)",
          "author_name": "leoregul",
          "author_login": "leoregul",
          "committed_at": "2025-05-30T13:36:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f6d8e0e909a6ced5f4d75ad1db0b961b1a2f834",
          "body": null,
          "is_bot": false,
          "headline": "apply opinionated rustfmt (#354)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-05-13T21:50:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46ac951cdd2625730e34f12f8450d467bd6632aa",
          "body": "* Add thread-local documentation\n\n* Fix bug in draining non-factory-queued routing\n\nWhen the queueing occurs on workers directly, the factory wasn't tracking the in-flight message count correctly, such that the worker might still have work in-flight when requesting a draining operation.\n\nThis change\n[…]\nsts/draining_requests.rs:221:5:\nassertion `left == right` failed\n  left: 999\n right: 1\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n```\n\n* bump version for fix release",
          "is_bot": false,
          "headline": "Fix bug in draining non-factory-queued routing (#353)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-05-07T14:24:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "642bdcd472afdb3f7c80bf254d963d2c5892b081",
          "body": null,
          "is_bot": false,
          "headline": "[cleanup] Cleanup docs and other stuff on new thread-local actors (#350)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-05-02T02:22:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56e12a68fae1d88f6eef86e2a98f9b9f67d234f4",
          "body": "This PR adds supports for a new actor trait, ThreadLocalActor, which doesn't require the actor now it's internal state to be Send.\n\nThis however does require that it be thread-local and be pinned to execution on a single thread.\n\nAdditionally, due to the actor itself not being Send, we require that \n[…]\ncan be constructed on the local thread, only when needed.\n\nThis should additionally enforce best-practice, as &self in actors shouldn't hold variables, rather should be delgated to Arguments and State",
          "is_bot": false,
          "headline": "thread-local actors (#349)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-05-01T20:49:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1329e21ce603007c4f01d2717f2d0a374aab734",
          "body": "Also this adjusts the unsafe code build failure such that additional,\nnon-allowlisted unsafe code will fail the build for safety.\n\nRactor should have a single unsafe entry in it, specifically for error\nhandling and auto-conversion.",
          "is_bot": false,
          "headline": "cleanup: remove mod.rs and other lints (#347)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-04-24T19:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "346f05a80cd526ff20f10b53e5e6bf8ee1c32f4c",
          "body": "…-unknown-unknown (#346)\n\n* initial working\n\n* optimize log output\n\n* update\n\n* remove `must-fail` test",
          "is_bot": false,
          "headline": "update: use xvfb and headful browser to execute unit tests for wasm32…",
          "author_name": "Officeyutong",
          "author_login": "Officeyutong",
          "committed_at": "2025-04-16T15:22:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e31d320252ff0da291c3c1d960b2faa787c239c",
          "body": null,
          "is_bot": false,
          "headline": "Send call request without requiring await (#345)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-04-16T14:59:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e5d24be16fc393267fc68019fcaff8490f4a731",
          "body": null,
          "is_bot": false,
          "headline": "fix again the getrandom dep",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-04-10T17:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faa897c9ccf1da7dd72ab28d551b01dbf9f74f34",
          "body": null,
          "is_bot": false,
          "headline": "fix getrandom versioning",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-04-10T17:07:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34ea71515be9e748983348bc82d94f82a1f7e81f",
          "body": "Semver compat checked with `cargo semver-checks --default-features` which identified that the MaybeSend bound didn't induce a semver break.",
          "is_bot": false,
          "headline": "Bump crate versions for next release prep (#342)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-04-10T16:34:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4403466acd634c9daf8e2a26eeed965606fa0e9d",
          "body": "* fix example typos (#339)\n\n* adapt target wasm32-unknown-unknown\n\n* adapt unit tests\n\n* Make clippy happy\n\n* update test document\n\n* update\n\n* update\n\n* Ignore `crate::MaybeSend` when `async-trait` is enabled\n\n* Make clippy; move `target_specific` to `concurrency`;\n\n* add a proc macro for examples'\n[…]\n\n* clippy lints\n\n* fix example typos (#339)\n\n---------\n\nCo-authored-by: Yukang <moorekang@gmail.com>\nCo-authored-by: Sean Lawlor <seanlawlor@meta.com>\nCo-authored-by: Sean Lawlor <slawlor@slawlor.com>",
          "is_bot": false,
          "headline": "Initial support for target `wasm32-unknown-unknown` in browser (#341)",
          "author_name": "Officeyutong",
          "author_login": "Officeyutong",
          "committed_at": "2025-04-10T16:12:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2f1d7837f3833e0e96725be24eff2e83b1708e1",
          "body": null,
          "is_bot": false,
          "headline": "fix example typos (#339)",
          "author_name": "Yukang",
          "author_login": "chenyukang",
          "committed_at": "2025-04-10T15:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac6b58e89d2f70222751a521b12e0e262a475f84",
          "body": null,
          "is_bot": false,
          "headline": "rename cargo config for xtask (#338)",
          "author_name": "Yukang",
          "author_login": "chenyukang",
          "committed_at": "2025-03-15T18:25:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ebeecea052dd7986d75abe2ba3cd77175089b6b",
          "body": "* Fix dynamic NodeServer port allocation\n\n - Add NodeServerMessage::PortChanged\n - Add post_start() for net::listener\n\nAfter starting, the net::listener actor compares the user-specified port\nwith the actually used port. If they differ, a PortChanged message will\nbe sent to the supervisor, who then updates the connection string.\n\n* Adapt tests\n\n* cargo fmt\n\n* Review feedback",
          "is_bot": false,
          "headline": "Support dynamic NodeServer port allocation (#335)",
          "author_name": "Nils Deckert",
          "author_login": "NilsDeckert",
          "committed_at": "2025-02-27T02:50:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77ec8d863d761394ac93a5170db12b4f43baee49",
          "body": "…(#333)\n\nThis allows someone to say reload configeration settings, and internally tear-down and rebuild the factory without fully shutting down and restarting.\n\nSome settings are not dynamically settable without tearing down and rebuilding the factory, unless we want to introduce more strong-types t\n[…]\nhose two, there are two choices. (1) tear down and rebuild the factory or (2) thread in dynamic settings to your router and/or queue protocols such that they can internally change their functionality.",
          "is_bot": false,
          "headline": "Add ability for a factory's internal state to be updated dynamically …",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-18T18:39:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f864f22204f6f71f5b831da3a57f5de9ba849bb",
          "body": "…ger respect routing protocols (#332)",
          "is_bot": false,
          "headline": "Missed an edge condition when we're ratelimiting that we might no lon…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-14T01:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01e45fcc860917ce27f39e057f81348c2209cc9c",
          "body": "…331)\n\n* Generalize the factory routing product to be used in all routing decisions so we can centralize future handling logic related to rate limiting.\n\nThe goal is to add a general rate limiting offering which can be used at the routing layer, right before sending the job to a worker.\n\n* Finish the rate limiting plumbing and add tests around the ratelim wrapper\n\n* Added leaky-bucket rate limiter & prep for v0.15 release",
          "is_bot": false,
          "headline": "Generalize the factory routing product & add rate limiting support (#…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-13T21:02:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e0c8a7024e9caaad3c1e4086ce20b0378d32c14",
          "body": "…ing decisions so we can centralize future handling logic related to rate limiting.\"\n\nThis reverts commit a6cfedb4830adb17729fbaf191bb86ad4b1d5a0d as it was accidently commited to main",
          "is_bot": false,
          "headline": "Revert \"Generalize the factory routing product to be used in all rout…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-13T02:53:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6cfedb4830adb17729fbaf191bb86ad4b1d5a0d",
          "body": "…sions so we can centralize future handling logic related to rate limiting.\n\nThe goal is to add a general rate limiting offering which can be used at the routing layer, right before sending the job to a worker.",
          "is_bot": false,
          "headline": "Generalize the factory routing product to be used in all routing deci…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-13T02:49:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14c2286ac62d066eb9ae0cb49544cb447b3fa244",
          "body": null,
          "is_bot": false,
          "headline": "Bind to [::] to listen for both IPv4 and IPv6 connection (#330)",
          "author_name": "Kan-Ru Chen",
          "author_login": "kanru",
          "committed_at": "2025-02-12T02:27:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82a839b49e3681f4ec5254f5ac783ed1c93a268b",
          "body": "(a) the ActorRef for spawning children (instance method of `spawn_linked`)\r\n(b) at the crate root for spawning unmanaged actors",
          "is_bot": false,
          "headline": "Add utility functions for spawning actors on (#329)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-02-05T15:31:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9ccc48d16dcddb9ff87f55987e2089bfb9fbb47",
          "body": null,
          "is_bot": false,
          "headline": "Fix async-std and re-enable Ci for async-std builds (#327)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-23T02:46:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4f92a8118611e89802a7b8d3bd79f0d259476e4",
          "body": null,
          "is_bot": false,
          "headline": "prep for 0.14.6 release (#324)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-15T15:32:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "081c6b791da31a314423ba9a105401041a307a33",
          "body": "Each of NodeSession's message is encoded with a 2 bytes length\r\nprefix followed by the actual object data. Originally when writing\r\nthe message to TcpStream we write them separately, however the\r\nTcpStream is not buffered, so the first 2 bytes write may be pushed\r\nto the underlying network stack as \n[…]\n to one write_all call\r\nto avoid this latency anomaly. Since the message is already\r\nlength prefixed, also skip the length delimiter encoding in proto.\r\n\r\nSigned-off-by: Kan-Ru Chen <kanru@kanru.info>",
          "is_bot": false,
          "headline": "Improve NodeSession TCP performance (#319)",
          "author_name": "Kan-Ru Chen",
          "author_login": "kanru",
          "committed_at": "2025-01-13T18:04:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f8a239d13392e61c8c9ed8b375ea10ebd5826e6",
          "body": "Remote actors and PG memberships are sync after authentication\r\nare done. A new message and NodeEventSubscription callback can\r\nbe used to query the connection ready state. The session setup\r\nis complete from both side once the query returns true.\r\n\r\nSigned-off-by: Kan-Ru Chen <kanru@kanru.info>",
          "is_bot": false,
          "headline": "Add a new after auth handshake to ensure connection is ready (#322)",
          "author_name": "Kan-Ru Chen",
          "author_login": "kanru",
          "committed_at": "2025-01-13T15:36:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b7cf3d578c929e55a143f4234b45c9bc7ff2cbe",
          "body": "…ead safe since it's just an Into() call. (#321)",
          "is_bot": false,
          "headline": "Marking that the converter function in the derived actor is cross-thr…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-09T18:42:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d385bc9bd2401457c49f23db55d51d3e6a032bde",
          "body": "…320)\n\nTime drift happens and time going backwards is common on NTP enabled\r\nservers. When time drift happens it's not worth it to kill the node\r\nsession.\r\n\r\nChange the timestamp payload to use duration against NodeSession\r\nspecific Instant epoch initialized at creation time. This ensures\r\nthe timestamp increases monotonically. It can only go backwards\r\nwhen the payload is malformed.\r\n\r\nSigned-off-by: Kan-Ru Chen <kanru@kanru.info>",
          "is_bot": false,
          "headline": "Make latency measurement in ping message robust against time drift (#…",
          "author_name": "Kan-Ru Chen",
          "author_login": "kanru",
          "committed_at": "2025-01-09T14:16:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0cd1a09d9c3218ecd061d99b11f8713c5a8ba5c",
          "body": "* Re-add the monitor API, but with an option in the map to save allocations when unused.\r\n\r\nAdditionally move to Option<HashMap> types to save on allocations for regular supervisions (if the actor doesn't supervise anything, we don't need to create the empty map)\r\n\r\n* Gate monitor API behind a feature, update crate version, add CI coverage on monitors, and update API and README docs",
          "is_bot": false,
          "headline": "Add monitor API back (#317)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-08T15:34:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f0483fa9ac1c0f1a3397fe0856700eaa06b0ea2",
          "body": null,
          "is_bot": false,
          "headline": "Prep for 0.14.3 release (#314)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-07T02:09:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f45cdd28678c9b4baec0d3d17937b77169630af1",
          "body": "* fix: get_children should not break supervision tree integrity\n\n* Remote take functionality and add test coverage\n\n---------\n\nCo-authored-by: Sean Lawlor <seanlawlor@meta.com>",
          "is_bot": false,
          "headline": "fix: get_children should not break supervision tree integrity (#311)",
          "author_name": "Kan-Ru Chen",
          "author_login": "kanru",
          "committed_at": "2025-01-07T00:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ae5d86cd9e23015d9177db86a635452fe605a2b",
          "body": "…selectively (#313)",
          "is_bot": false,
          "headline": "Expose async-trait to  as a feature which can be enabled or disabled …",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2025-01-06T16:43:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f14e712115a96a34ad92e7fc0dcc82bc017e6711",
          "body": "…inal TMessage (#306)\n\n* added FromActorRef\n\n* Rename FromActorRef to DerivedActorRef and add a few other small implementation details.\n\n* added doc tests\n\n* fixed fmt + doctest\n\n---------\n\nCo-authored-by: Sean Lawlor <seanlawlor@meta.com>",
          "is_bot": false,
          "headline": "FromActorRef<TFrom> which allows to send messages convertible to orig…",
          "author_name": "anabyv042",
          "author_login": "anabyv042",
          "committed_at": "2025-01-02T12:52:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c94f0f2e26179575a96df28d71b019c532ba0bd",
          "body": "This allows someone to wait for the actor's exit without waiting on the JoinHandle",
          "is_bot": false,
          "headline": "Add a `wait()` operator for an actor (#304)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-20T02:30:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6842be7de0a35b460754894df5191d4dff32c82b",
          "body": null,
          "is_bot": false,
          "headline": "Fix broken build for non async-trait builds (#302)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-18T03:58:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f15be0c2dea18febf0e0c90b6c6a926455ac840e",
          "body": null,
          "is_bot": false,
          "headline": "Add proper span handling to factories through extension trait (#300)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-17T22:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a08fe2f50d67b788ab1a9fd052c05fc989bc110",
          "body": null,
          "is_bot": false,
          "headline": "Gate the span propagation with a feature so it can be opted-out (#299)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-11T20:06:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06f9fdf08a060f62337bfa2250d161b047841286",
          "body": null,
          "is_bot": false,
          "headline": "Prep 0.13.4 release",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-06T14:55:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "076ce8261012b4927dcd9bc6d69312ab081f3282",
          "body": null,
          "is_bot": false,
          "headline": "fix: method typo (#298)",
          "author_name": "Marco Mihai Condrache",
          "author_login": "marcocondrache",
          "committed_at": "2024-12-06T14:54:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ceef4931af6d5007fe375efeceec258992b18ebb",
          "body": "Includes updating the generated test certificates for TLS integration tests and a minor addition for stats",
          "is_bot": false,
          "headline": "Fixing broken CI signals (#296)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-05T17:59:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "480a326b175726b738307a1e53de536357b44b86",
          "body": null,
          "is_bot": false,
          "headline": "Prep for v0.13.3",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-05T13:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b57549de9a5710a019514188d081aae884e67ce",
          "body": "Resolves #294",
          "is_bot": false,
          "headline": "Expose ability to extract supervisor from actor cell",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-12-05T13:53:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0663b77649320a5dee7430d113d00245e500697",
          "body": null,
          "is_bot": false,
          "headline": "Prep for v0.13.2 release",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-11-27T17:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd7de354a07bfe5c7c0475b0eaf53d797a7df88c",
          "body": "…. (#293)\n\n* fix: Ensure pending messages are delivered when OutputPort is dropped.\n\n* chore: cargo fmt",
          "is_bot": false,
          "headline": "fix: Ensure pending messages are delivered when OutputPort is dropped…",
          "author_name": "Stuart Carnie",
          "author_login": "stuartcarnie",
          "committed_at": "2024-11-27T13:11:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1949d929df17916028cdc3c69be13db725f42694",
          "body": null,
          "is_bot": false,
          "headline": "Updating the tokio dependencies to support an older version (#291)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-11-26T16:41:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73b62e7768602e902ccb57383266d88c64b1c035",
          "body": "Signed-off-by: zhapich <zhabaloid@gmail.com>",
          "is_bot": false,
          "headline": "Bump ractor dependencies to match their actual use (#285) (#286)",
          "author_name": "Ivan Murashov",
          "author_login": "zhapich",
          "committed_at": "2024-11-19T00:59:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3322d404be7593d51e23607c5ac7517a4fddc43a",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 4 to 5 (#284)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-11-15T11:38:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "337af9e39b2db4f4ac2930a55e695a677dfa9cfc",
          "body": "* docs(factory): Fix typo `single`\n\n* docs(actor): Fix typo `panics`\n\n* docs(registry): Add missing whitespace\n\n* docs(actor): fix typo",
          "is_bot": false,
          "headline": "Fix typos in docs (#283)",
          "author_name": "Matheus Cardoso",
          "author_login": "Cardosaum",
          "committed_at": "2024-11-13T13:31:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30c5db1c95854628936705e0453a0031f4e60dc3",
          "body": null,
          "is_bot": false,
          "headline": "Fix main docs prior to release",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-25T17:27:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3914f6d4fd391000783d7e7b5028aeea73662b12",
          "body": "1. [COMPAT BREAK] Switch to `bon::Builder` for factory arguments and settings which gives compile-time, vs run-time, safety constructing types.\r\n2. Cleanup a lot of debug impl's\r\n3. Cleanup comments in various places.\r\n\r\nAnd bump the version to 0.13.0 because of the migration to bon",
          "is_bot": false,
          "headline": "Large cleanup (#281)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-25T16:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fe3d196ed4459229f25bf8187ebd2efba1447f5",
          "body": "1. Adds ability to access the type id and runtime check the message type of an `ActorCell`. RE: #276\r\n2. Adds ability to stop & drain children actors, by traversing the supervision tree, instead of requiring users to hold the handles themselves in the states. RE: #226",
          "is_bot": false,
          "headline": "This patch does 2 things (#277)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-23T14:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "defec7fdf449c5668ee3dcacaf9317b72c342cf0",
          "body": "… without `async-trait` (#275)\n\n* Adds a silent-retry support for factory messages, such that if a worker dies, the message can be silently retried up to a number of retries, without the caller being notified or having the message dropped.\r\n\r\nAlso: Add debug implementations everywhere and more build deny rules\r\n\r\n* Support factories without the `async-trait` crate, meaning natively.\r\n\r\nResolves #272",
          "is_bot": false,
          "headline": "Add silent-retry support for factory messages + support for factories…",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-16T15:26:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a9a9384e9839ee768568277ce963ded5341f43e",
          "body": null,
          "is_bot": false,
          "headline": "Missing callsites for a bunch of factory stats (#273)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-11T00:32:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1be18126aa93fda5991352fe4e5668939ff17ea4",
          "body": null,
          "is_bot": false,
          "headline": "Adding tests for queueing and fix bug in queue length calculation (#270)",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-07T15:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a5ac8260a540dfb022cb00de454313c0b522e60",
          "body": null,
          "is_bot": false,
          "headline": "update doc crate version for upcoming release",
          "author_name": "Sean Lawlor",
          "author_login": "slawlor",
          "committed_at": "2024-10-04T14:31:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 75,
      "commits_last_year": 42,
      "latest_release_at": "2026-05-05T17:40:04Z",
      "latest_release_tag": "v0.15.13",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 79,
      "mean_days_between_releases": 41
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "xtask",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "automation",
            "macos",
            "release",
            "codesign",
            "xtask",
            "command-line-utilities",
            "development-tools::build-utils"
          ],
          "ecosystem": "crates",
          "matches_repo": false,
          "registry_url": "https://crates.io/crates/xtask",
          "is_deprecated": false,
          "latest_version": "0.1.4",
          "repository_url": "https://github.com/arcboxlabs/xtask",
          "versions_count": 5,
          "total_downloads": 568,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 189,
          "first_published_at": "2026-06-24T11:01:25.012607Z",
          "latest_published_at": "2026-06-30T09:55:36.509458Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 24
        },
        {
          "name": "ractor",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "actor",
            "ractor",
            "asynchronous"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/ractor",
          "is_deprecated": false,
          "latest_version": "0.15.13",
          "repository_url": "https://github.com/slawlor/ractor",
          "versions_count": 75,
          "total_downloads": 927921,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 104428,
          "first_published_at": "2023-01-07T04:26:13.873557Z",
          "latest_published_at": "2026-05-05T17:41:36.976944Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 79
        },
        {
          "name": "ractor_cluster",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "cluster",
            "actor",
            "ractor",
            "asynchronous"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/ractor_cluster",
          "is_deprecated": false,
          "latest_version": "0.15.13",
          "repository_url": "https://github.com/slawlor/ractor",
          "versions_count": 64,
          "total_downloads": 83379,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 1341,
          "first_published_at": "2023-01-30T00:14:37.035262Z",
          "latest_published_at": "2026-05-05T17:42:21.394646Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 79
        },
        {
          "name": "ractor_cluster_derive",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "actor",
            "ractor"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/ractor_cluster_derive",
          "is_deprecated": false,
          "latest_version": "0.15.13",
          "repository_url": "https://github.com/slawlor/ractor",
          "versions_count": 64,
          "total_downloads": 83277,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 1380,
          "first_published_at": "2023-01-30T00:12:22.073038Z",
          "latest_published_at": "2026-05-05T17:41:42.956042Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 79
        }
      ]
    },
    "popularity": {
      "forks": 128,
      "stars": 2067,
      "watchers": 31,
      "fork_history": {
        "days": [
          {
            "date": "2023-01-16",
            "count": 1
          },
          {
            "date": "2023-02-03",
            "count": 1
          },
          {
            "date": "2023-02-16",
            "count": 9
          },
          {
            "date": "2023-02-17",
            "count": 2
          },
          {
            "date": "2023-02-18",
            "count": 4
          },
          {
            "date": "2023-02-19",
            "count": 2
          },
          {
            "date": "2023-02-20",
            "count": 1
          },
          {
            "date": "2023-03-19",
            "count": 1
          },
          {
            "date": "2023-03-28",
            "count": 1
          },
          {
            "date": "2023-03-29",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 1
          },
          {
            "date": "2023-04-12",
            "count": 1
          },
          {
            "date": "2023-04-13",
            "count": 1
          },
          {
            "date": "2023-04-28",
            "count": 1
          },
          {
            "date": "2023-05-07",
            "count": 2
          },
          {
            "date": "2023-05-10",
            "count": 1
          },
          {
            "date": "2023-05-13",
            "count": 1
          },
          {
            "date": "2023-06-13",
            "count": 1
          },
          {
            "date": "2023-06-15",
            "count": 1
          },
          {
            "date": "2023-07-01",
            "count": 1
          },
          {
            "date": "2023-08-01",
            "count": 1
          },
          {
            "date": "2023-08-12",
            "count": 1
          },
          {
            "date": "2023-08-30",
            "count": 1
          },
          {
            "date": "2023-09-17",
            "count": 1
          },
          {
            "date": "2023-10-03",
            "count": 1
          },
          {
            "date": "2023-11-01",
            "count": 1
          },
          {
            "date": "2023-11-04",
            "count": 1
          },
          {
            "date": "2023-11-09",
            "count": 1
          },
          {
            "date": "2023-11-11",
            "count": 1
          },
          {
            "date": "2023-11-28",
            "count": 1
          },
          {
            "date": "2023-12-12",
            "count": 1
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2024-02-09",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-03-06",
            "count": 1
          },
          {
            "date": "2024-03-09",
            "count": 1
          },
          {
            "date": "2024-03-19",
            "count": 1
          },
          {
            "date": "2024-03-23",
            "count": 1
          },
          {
            "date": "2024-03-24",
            "count": 1
          },
          {
            "date": "2024-03-27",
            "count": 1
          },
          {
            "date": "2024-04-13",
            "count": 1
          },
          {
            "date": "2024-04-26",
            "count": 1
          },
          {
            "date": "2024-04-29",
            "count": 1
          },
          {
            "date": "2024-05-03",
            "count": 1
          },
          {
            "date": "2024-05-18",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 1
          },
          {
            "date": "2024-06-16",
            "count": 1
          },
          {
            "date": "2024-07-08",
            "count": 1
          },
          {
            "date": "2024-07-09",
            "count": 1
          },
          {
            "date": "2024-09-11",
            "count": 1
          },
          {
            "date": "2024-10-02",
            "count": 2
          },
          {
            "date": "2024-11-03",
            "count": 1
          },
          {
            "date": "2024-11-06",
            "count": 1
          },
          {
            "date": "2024-11-12",
            "count": 1
          },
          {
            "date": "2024-11-19",
            "count": 1
          },
          {
            "date": "2024-11-27",
            "count": 1
          },
          {
            "date": "2024-12-09",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2024-12-23",
            "count": 1
          },
          {
            "date": "2025-01-06",
            "count": 1
          },
          {
            "date": "2025-01-14",
            "count": 1
          },
          {
            "date": "2025-01-23",
            "count": 1
          },
          {
            "date": "2025-01-28",
            "count": 1
          },
          {
            "date": "2025-02-01",
            "count": 1
          },
          {
            "date": "2025-02-03",
            "count": 1
          },
          {
            "date": "2025-02-17",
            "count": 1
          },
          {
            "date": "2025-02-19",
            "count": 1
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-03-20",
            "count": 1
          },
          {
            "date": "2025-03-24",
            "count": 1
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2025-04-15",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-05-29",
            "count": 1
          },
          {
            "date": "2025-06-03",
            "count": 1
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-06-20",
            "count": 1
          },
          {
            "date": "2025-06-21",
            "count": 1
          },
          {
            "date": "2025-07-08",
            "count": 1
          },
          {
            "date": "2025-07-12",
            "count": 1
          },
          {
            "date": "2025-07-18",
            "count": 1
          },
          {
            "date": "2025-07-29",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 1
          },
          {
            "date": "2025-09-04",
            "count": 1
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-26",
            "count": 1
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 1
          },
          {
            "date": "2025-11-10",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-03-01",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-29",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-23",
            "count": 1
          },
          {
            "date": "2026-05-10",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 2
          },
          {
            "date": "2026-05-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 128,
        "total_forks": 128
      },
      "star_history": null,
      "open_issues_and_prs": 14
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [
        "ractor_cluster/src/protocol/auth.proto",
        "ractor_cluster/src/protocol/control.proto",
        "ractor_cluster/src/protocol/meta.proto",
        "ractor_cluster/src/protocol/node.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "ractor/Cargo.toml",
        "ractor_cluster/Cargo.toml",
        "ractor_cluster_derive/Cargo.toml",
        "ractor_cluster_integration_tests/Cargo.toml",
        "ractor_example_entry_proc/Cargo.toml",
        "ractor_playground/Cargo.toml",
        "xtask/Cargo.toml"
      ],
      "largest_source_bytes": 51580,
      "source_files_sampled": 110,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 12102
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "ractor/Cargo.toml",
        "ractor_cluster/Cargo.toml",
        "ractor_cluster_derive/Cargo.toml",
        "ractor_cluster_integration_tests/Cargo.toml",
        "ractor_example_entry_proc/Cargo.toml",
        "ractor_playground/Cargo.toml",
        "xtask/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "basic-ftp",
            "direct": false,
            "version": "5.0.5",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-5rq4-664w-9x2c",
              "GHSA-6v7q-wjvx-w8wg",
              "GHSA-rp42-5vxx-qpwr",
              "GHSA-rpmf-866q-6p89"
            ],
            "fixed_version": "5.3.1",
            "advisory_count": 4,
            "oldest_advisory_days": 148
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 3,
            "oldest_advisory_days": 252
          },
          {
            "name": "tar-fs",
            "direct": false,
            "version": "3.0.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-8cj5-5rvv-wf4v",
              "GHSA-vj76-c3g6-qr5v"
            ],
            "fixed_version": "3.1.1",
            "advisory_count": 2,
            "oldest_advisory_days": 416
          },
          {
            "name": "ws",
            "direct": false,
            "version": "8.18.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-58qx-3vcg-4xpx",
              "GHSA-96hv-2xvq-fx4p"
            ],
            "fixed_version": "8.21.0",
            "advisory_count": 2,
            "oldest_advisory_days": 66
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "9.0.5",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-v2v4-37r5-5v8g"
            ],
            "fixed_version": "10.1.1",
            "advisory_count": 1,
            "oldest_advisory_days": 79
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3,
          "critical": 1,
          "moderate": 1
        },
        "advisory_count": 12,
        "affected_count": 5,
        "assessed_count": 100,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 46,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "bon",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.9"
        },
        {
          "name": "dashmap",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "6"
        },
        {
          "name": "futures",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "once_cell",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "strum",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.28"
        },
        {
          "name": "async-std",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "async-trait",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tokio",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "serde",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "pot",
          "manifest": "ractor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.0"
        },
        {
          "name": "bytes",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "prost",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        },
        {
          "name": "prost-types",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        },
        {
          "name": "ractor",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.15.0"
        },
        {
          "name": "ractor_cluster_derive",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.15.0"
        },
        {
          "name": "rand",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "socket2",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.6"
        },
        {
          "name": "sha2",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.11"
        },
        {
          "name": "tokio",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio-rustls",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.26"
        },
        {
          "name": "tracing",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "async-trait",
          "manifest": "ractor_cluster/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "proc-macro2",
          "manifest": "ractor_cluster_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "quote",
          "manifest": "ractor_cluster_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "syn",
          "manifest": "ractor_cluster_derive/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "anyhow",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "async-trait",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "clap",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4"
        },
        {
          "name": "ractor",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ractor_cluster",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rand",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "tokio-rustls",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.26"
        },
        {
          "name": "rustls-pemfile",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.1"
        },
        {
          "name": "rustyrepl",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "tokio",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tracing-glog",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "webpki",
          "manifest": "ractor_cluster_integration_tests/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "quote",
          "manifest": "ractor_example_entry_proc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "syn",
          "manifest": "ractor_example_entry_proc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "clap",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4"
        },
        {
          "name": "ractor",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ractor_cluster",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "tokio",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tracing",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tracing-glog",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "ractor_playground/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "xtaskops",
          "manifest": "xtask/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "anyhow",
          "manifest": "xtask/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "anyhow",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "async-std",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "async-trait",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bon",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bytes",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "clap",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "dashmap",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "futures",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "pot",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "proc-macro2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "prost",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "prost-types",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "quote",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "ractor",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "ractor_cluster_derive",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rand",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rustls-pemfile",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rustyrepl",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "socket2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "strum",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio-rustls",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing-glog",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing-subscriber",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "webpki",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "xtaskops",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "backtrace",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "criterion",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "function_name",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "getrandom",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "js-sys",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "paste",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "prost-build",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "protoc-bin-vendored",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serial_test",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio_with_wasm",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing-test",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen-futures",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen-test",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "web-time",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.26.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.25.9",
            "ecosystem": "npm"
          },
          {
            "name": "@puppeteer/browsers",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tootallnate/quickjs-emscripten",
            "direct": false,
            "version": "0.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yauzl",
            "direct": false,
            "version": "2.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ast-types",
            "direct": false,
            "version": "0.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "b4a",
            "direct": false,
            "version": "1.6.7",
            "ecosystem": "npm"
          },
          {
            "name": "bare-events",
            "direct": false,
            "version": "2.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "bare-fs",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bare-os",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "bare-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bare-stream",
            "direct": false,
            "version": "2.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "basic-ftp",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-crc32",
            "direct": false,
            "version": "0.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chromium-bidi",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "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": "cosmiconfig",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "degenerator",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "devtools-protocol",
            "direct": false,
            "version": "0.0.1425554",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "env-paths",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escodegen",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "extract-zip",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "fast-fifo",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fd-slicer",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-uri",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "9.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsbn",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "7.18.3",
            "ecosystem": "npm"
          },
          {
            "name": "mitt",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nan",
            "direct": false,
            "version": "2.22.2",
            "ecosystem": "npm"
          },
          {
            "name": "netmask",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "pac-proxy-agent",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pac-resolver",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pend",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "progress",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-agent",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "puppeteer",
            "direct": false,
            "version": "24.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "puppeteer-core",
            "direct": false,
            "version": "24.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "sleep",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "8.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "streamx",
            "direct": false,
            "version": "2.22.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tar-fs",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "tar-stream",
            "direct": false,
            "version": "3.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "text-decoder",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "typed-query-selector",
            "direct": false,
            "version": "2.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": false,
            "version": "8.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "xvfb",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yauzl",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": false,
            "version": "3.24.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 146,
        "direct_count": 31,
        "indirect_count": 115
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 223,
        "open_issues": 8,
        "closed_ratio": 0.927,
        "closed_issues": 101,
        "closed_unmerged_prs": 33
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "slawlor",
          "commits": 183,
          "avatar_url": "https://avatars.githubusercontent.com/u/9451356?v=4"
        },
        {
          "type": "User",
          "login": "kanru",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/17571?v=4"
        },
        {
          "type": "User",
          "login": "leonqadirie",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/39130739?v=4"
        },
        {
          "type": "User",
          "login": "chenyukang",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/230646?v=4"
        },
        {
          "type": "User",
          "login": "iskng",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/147113485?v=4"
        },
        {
          "type": "User",
          "login": "jsgf",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/147966?v=4"
        },
        {
          "type": "User",
          "login": "0x53A",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/4236651?v=4"
        },
        {
          "type": "User",
          "login": "stalkopat",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/25117613?v=4"
        },
        {
          "type": "User",
          "login": "Kannen",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/11684303?v=4"
        },
        {
          "type": "User",
          "login": "Officeyutong",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/9004058?v=4"
        }
      ],
      "contributors_sampled": 33,
      "top_contributor_share": 0.792
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "bench.yaml",
        "ci.yaml",
        "coverage.yml",
        "integration.yaml",
        "publish.yaml",
        "wasm.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 2/14 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 6 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": "16 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": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "12 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "394254f3145c9539df9f0da3092e6d3500296c14",
        "ran_at": "2026-07-24T17:14:42Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T11:42:35Z",
      "oldest_open_prs": [
        {
          "number": 364,
          "created_at": "2025-06-24T01:52:58Z",
          "last_comment_at": "2025-06-24T18:56:36Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 370,
          "created_at": "2025-07-18T23:47:05Z",
          "last_comment_at": "2025-08-20T22:30:21Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 372,
          "created_at": "2025-07-19T23:24:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 387,
          "created_at": "2025-08-20T19:37:53Z",
          "last_comment_at": "2026-03-10T16:21:54Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 396,
          "created_at": "2025-10-20T19:51:33Z",
          "last_comment_at": "2025-10-21T13:41:16Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 421,
          "created_at": "2026-04-23T17:23:04Z",
          "last_comment_at": "2026-06-10T16:30:15Z",
          "last_comment_author": "slawlor"
        }
      ],
      "last_merged_pr_at": "2026-07-23T14:19:17Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 16,
          "created_at": "2023-01-09T02:45:12Z",
          "last_comment_at": "2025-04-23T15:23:22Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 79,
          "created_at": "2023-04-05T21:58:14Z",
          "last_comment_at": "2023-08-19T15:29:08Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 93,
          "created_at": "2023-04-24T00:29:28Z",
          "last_comment_at": "2023-05-08T14:04:04Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 225,
          "created_at": "2024-03-29T14:28:14Z",
          "last_comment_at": "2026-04-13T18:16:26Z",
          "last_comment_author": "philjb"
        },
        {
          "number": 274,
          "created_at": "2024-10-12T04:56:40Z",
          "last_comment_at": "2024-10-15T15:08:38Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 316,
          "created_at": "2025-01-07T12:31:18Z",
          "last_comment_at": "2025-01-09T14:13:34Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 348,
          "created_at": "2025-04-26T05:29:20Z",
          "last_comment_at": "2025-05-01T20:43:43Z",
          "last_comment_author": "slawlor"
        },
        {
          "number": 398,
          "created_at": "2025-10-27T02:51:16Z",
          "last_comment_at": "2026-01-20T19:49:30Z",
          "last_comment_author": "cerceris"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/slawlor/ractor",
    "host": "github.com",
    "name": "ractor",
    "owner": "slawlor"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 72,
      "inputs": {
        "security": 61,
        "vitality": 84,
        "community": 78,
        "governance": 66,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "commits_last_year": 42,
              "human_commit_share": 0.8,
              "days_since_last_push": 1,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "42 commits in the last year",
                "points": 14.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "16 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 75,
              "latest_release_tag": "v0.15.13",
              "releases_from_tags": false,
              "days_since_latest_release": 79,
              "mean_days_between_releases": 41
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "75 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 75
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 79 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 79
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~41 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 41
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 78,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "forks": 128,
              "stars": 2067,
              "watchers": 31,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2,067 stars",
                "points": 53.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2067
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "128 forks",
                "points": 17.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 128
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "31 watchers",
                "points": 8.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 31
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "packages": [
                "ractor",
                "ractor_cluster",
                "ractor_cluster_derive"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 1094577,
              "monthly_downloads": 107149
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "107,149 downloads/month across crates",
                "points": 67.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 107149,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 66,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 33,
              "top_contributor_share": 0.792
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 79% of commits",
                "points": 4.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 79
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "33 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 33
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 223,
              "open_issues": 8,
              "closed_issues": 101,
              "issue_closed_ratio": 0.927,
              "closed_unmerged_prs": 33
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "93% of issues closed",
                "points": 43.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 93
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "223/256 decided PRs merged",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 223,
                      "decided": 256
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 2/14 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 61,
            "inputs": {
              "followers": 271,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "slawlor",
              "public_repos": 18,
              "account_age_days": 4285
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "271 followers of slawlor",
                "points": 17.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 271,
                      "login": "slawlor"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "18 public repos, account ~11 yr old",
                "points": 21.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 18
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "ractor",
                "ractor_cluster",
                "ractor_cluster_derive"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 79
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 79 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 79
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "75 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 75
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 61,
        "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": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.1
            },
            "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 2/14 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 6 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": "16 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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "12 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 100 resolved dependencies against OSV; 46 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 100
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 46
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 12,
              "affected_packages": 5,
              "assessed_packages": 100,
              "unassessed_packages": 46,
              "affected_by_severity": "critical 1, high 3, moderate 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 100,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 78,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.825,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 12102
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "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": "66 of 80 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 66,
                      "sampled": 80
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "ractor/Cargo.toml",
                "ractor_cluster/Cargo.toml",
                "ractor_cluster_derive/Cargo.toml",
                "ractor_cluster_integration_tests/Cargo.toml",
                "ractor_example_entry_proc/Cargo.toml",
                "ractor_playground/Cargo.toml",
                "xtask/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0.2
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, ractor/Cargo.toml, ractor_cluster/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, ractor/Cargo.toml, ractor_cluster/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "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": "20 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 20,
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 51580,
              "source_files_sampled": 110,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/110 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 110,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "ractor_cluster/src/protocol/auth.proto",
                "ractor_cluster/src/protocol/control.proto",
                "ractor_cluster/src/protocol/meta.proto",
                "ractor_cluster/src/protocol/node.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "ractor_cluster/src/protocol/auth.proto, ractor_cluster/src/protocol/control.proto, ractor_cluster/src/protocol/meta.proto, ractor_cluster/src/protocol/node.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "ractor_cluster/src/protocol/auth.proto, ractor_cluster/src/protocol/control.proto, ractor_cluster/src/protocol/meta.proto, ractor_cluster/src/protocol/node.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "crates package 'xtask' points at a different repository (https://github.com/arcboxlabs/xtask); excluded from ecosystem scoring",
    "Could not fetch crates package 'ractor_playground' from its registry",
    "Could not fetch crates package 'ractor_example_entry_proc' from its registry",
    "Could not fetch crates package 'ractor_cluster_integration_tests' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T17:15:11.782283Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/slawlor/ractor.svg",
  "full_name": "slawlor/ractor",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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