公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-25 16:41 UTC

johanhaleby / occurrent

Unintrusive Event Sourcing Library for the JVM

Java · KotlinApache-2.0★ 161 星标⑂ 20 复刻始于 2020年7月在 GitHub 上查看 ↗

johanhaleby/occurrent 的健康指数为 100 分中的 58 分,处于「中等」区间。 其得分最高的类别是Engineering Quality(77/100),最低的是Vitality(48/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

58
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

Johan Haleby个人账户
414 关注者72 个公开仓库始于 2010年1月Parkster

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Mavenorg.occurrent:occurrent-rewrite0.30.0-112 天前
Mavenorg.occurrent:test-support0.16.6-411075 天前
Mavenorg.occurrent:occurrent-cloudevents-extension0.30.0-112 天前

按类别列示的指标

活力

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

48存在风险 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
15.9/36提交节奏 — 52 周中有 23 周有提交
18/18提交量 — 最近一年 415 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year415
human_commit_share1
days_since_last_push0
active_weeks_last_year23
评分方式
0/27有发布版本 — 未发布任何发布版本
0/36发布时效 — 没有发布版本
0/27发布节奏 — 没有发布版本
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count0
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

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

49存在风险 · 占总体的 18%

流行度与采用

49存在风险
评分方式
35.8/60星标 — 161 个星标
10.7/25复刻 — 20 个复刻
2.7/15关注者 — 4 位关注者
所用输入
forks20
stars161
watchers4
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(Apache-2.0)
0/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

可持续性与治理

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

57中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0.7/22.5提交分布 — 头号贡献者编写了 97% 的提交
9.5/13.5贡献者广度 — 7 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled7
top_contributor_share0.967
评分方式
24.9/46.8议题解决 — 53% 的议题已关闭
31.5/38.3PR 接受 — 已裁定的 PR 中 182/221 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs182
open_issues95
closed_issues108
issue_closed_ratio0.532
closed_unmerged_prs39
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
18.8/25所有者影响力 — johanhaleby 有 414 位关注者
25/25既往记录 — 72 个公开仓库,账户约 16 年
所用输入
followers414
owner_typeUser
is_verified
owner_loginjohanhaleby
public_repos72
account_age_days6,029
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — maven 上有 3 个软件包
35/35发布时效 — 最近一次发布于 12 天前
20/20版本历史 — 41 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesorg.occurrent:occurrent-rewrite, org.occurrent:test-support, org.occurrent:occurrent-cloudevents-extension
ecosystemsmaven
any_deprecated
min_days_since_publish12

工程质量

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

77良好 · 占总体的 20%

工程实践

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

文档

100优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://occurrent.org
10/10仓库描述
10/10主题标签 — 4 个主题标签
10/10Wiki
所用输入
topicscloud-events, event-sourcing, java, kotlin
has_wiki
homepagehttps://occurrent.org
has_readme
has_docs_dir
has_description

安全

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

57中等 · 占总体的 16%

安全态势

49存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
1.8/2.5CI-Tests — 15 out of 19 merged PRs checked by a CI test -- score normalized to 7
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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 — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
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
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4.9
已排除计分(无数据或不适用):packaging, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
12/25间接依赖不含已知公告 — 1 个受影响:com.fasterxml.jackson.core:jackson-databind 2.21.4 (moderate 6.5)
40/40没有长期未处理的公告 — 没有公告公开超过 90 天
所用输入
sourceosv
advisories3
affected_packages1
assessed_packages58
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
比对的是 maven:org.occurrent:occurrent-rewrite@0.30.0 的运行时依赖闭包——安装已发布的软件包时真正被拉取进来的内容——共 58 个软件包。 未对可达性进行分析。

AI 就绪度

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

69中等 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 88 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.88
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes9,428
评分方式
12.6/18一条命令的引导启动 — application/cloudevent-converter/api/pom.xml, application/cloudevent-converter/core/pom.xml, application/cloudevent-converter/generic/pom.xml(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Java(静态类型)
0/10可复现环境
10/10已体现的代理实践 — 最近 100 次提交中有 70 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.7
toolchain_manifestsapplication/cloudevent-converter/api/pom.xml, application/cloudevent-converter/core/pom.xml, application/cloudevent-converter/generic/pom.xml, application/cloudevent-converter/jackson/pom.xml, application/cloudevent-converter/jackson3/pom.xml, application/cloudevent-converter/pom.xml, application/cloudevent-converter/xstream/pom.xml, application/cloudevent-type-mapper/api/pom.xml, application/cloudevent-type-mapper/pom.xml, application/cloudevent-type-mapper/reflection/pom.xml, application/command-composition/pom.xml, application/command-dispatch-annotation/pom.xml, application/command-dispatch-dcb/pom.xml, application/command-dispatch/pom.xml, application/pom.xml, application/service/blocking/pom.xml, application/service/common/pom.xml, application/service/dcb-annotation/pom.xml, application/service/pom.xml, application/service/reactor/pom.xml, application/service/transaction-mongodb-native/pom.xml, application/service/transaction-spring-reactor/pom.xml, application/service/transaction-spring/pom.xml, bom/pom.xml, cloudevents-extension/pom.xml, common/annotation-support/pom.xml, common/eventstore-capability/pom.xml, common/filter/pom.xml, common/functional-support/pom.xml, common/inmemory/filter-matching/pom.xml, common/inmemory/pom.xml, common/mongodb/native/filter-bsonfilter-conversion/pom.xml, common/mongodb/native/pom.xml, common/mongodb/pom.xml, common/mongodb/specialfilterhandling/pom.xml, common/mongodb/spring/filter-query-conversion/pom.xml, common/mongodb/spring/pom.xml, common/mongodb/spring/sort-conversion/pom.xml, common/mongodb/timerepresentation/pom.xml, common/pom.xml, common/retry/pom.xml, common/time/pom.xml, deadline/api/blocking/pom.xml, deadline/api/pom.xml, deadline/inmemory/pom.xml, deadline/jobrunr/pom.xml, deadline/pom.xml, dsl/dcb-dsl/blocking/pom.xml, dsl/dcb-dsl/common/pom.xml, dsl/dcb-dsl/pom.xml, dsl/dcb-dsl/reactor/pom.xml, dsl/decider-arrow/pom.xml, dsl/decider/pom.xml, dsl/module-dsl/blocking/pom.xml, dsl/module-dsl/pom.xml, dsl/pom.xml, dsl/projection-dsl/blocking/pom.xml, dsl/projection-dsl/common/pom.xml, dsl/projection-dsl/pom.xml, dsl/projection-dsl/reactor/pom.xml, dsl/query-dsl/blocking/pom.xml, dsl/query-dsl/pom.xml, dsl/query-dsl/reactor/pom.xml, dsl/saga-dsl/blocking/pom.xml, dsl/saga-dsl/common/pom.xml, dsl/saga-dsl/mongodb-spring/pom.xml, dsl/saga-dsl/pom.xml, dsl/snapshot-dsl/blocking/pom.xml, dsl/snapshot-dsl/common/pom.xml, dsl/snapshot-dsl/mongodb-spring-blocking/pom.xml, dsl/snapshot-dsl/mongodb-spring-reactor/pom.xml, dsl/snapshot-dsl/pom.xml, dsl/snapshot-dsl/reactor/pom.xml, dsl/subscription-dsl/blocking/pom.xml, dsl/subscription-dsl/common/pom.xml, dsl/subscription-dsl/pom.xml, dsl/subscription-dsl/reactor/pom.xml, dsl/view-dsl/pom.xml, eventstore/api/blocking/pom.xml, eventstore/api/common/pom.xml, eventstore/api/dcb-reactor/pom.xml, eventstore/api/dcb/pom.xml, eventstore/api/pom.xml, eventstore/api/reactor/pom.xml, eventstore/inmemory/pom.xml, eventstore/migration/pom.xml, eventstore/migration/position-backfill/pom.xml, eventstore/mongodb/common/pom.xml, eventstore/mongodb/dcb-common/pom.xml, eventstore/mongodb/native/pom.xml, eventstore/mongodb/pom.xml, eventstore/mongodb/spring/blocking/pom.xml, eventstore/mongodb/spring/pom.xml, eventstore/mongodb/spring/reactor/pom.xml, eventstore/pom.xml, example/domain/appointment-scheduling/pom.xml, example/domain/course-enrollment/pom.xml, example/domain/dcb-patterns/pom.xml, example/domain/hotel-booking/pom.xml, example/domain/mastermind/decider-model-kotlin/pom.xml, example/domain/mastermind/pom.xml, example/domain/number-guessing-game/model/pom.xml, example/domain/number-guessing-game/mongodb/native/pom.xml, example/domain/number-guessing-game/mongodb/pom.xml, example/domain/number-guessing-game/mongodb/spring/blocking/pom.xml, example/domain/number-guessing-game/mongodb/spring/pom.xml, example/domain/number-guessing-game/pom.xml, example/domain/pom.xml, example/domain/rps/decider-model/pom.xml, example/domain/rps/decider-web/pom.xml, example/domain/rps/model/pom.xml, example/domain/rps/multiround-decider-model/pom.xml, example/domain/rps/pom.xml, example/domain/rps/pragmatic-model/pom.xml, example/domain/uno/model/pom.xml, example/domain/uno/mongodb/common/pom.xml, example/domain/uno/mongodb/native/pom.xml, example/domain/uno/mongodb/pom.xml, example/domain/uno/mongodb/spring/blocking/pom.xml, example/domain/uno/mongodb/spring/pom.xml, example/domain/uno/pom.xml, example/domain/word-guessing-game/model/pom.xml, example/domain/word-guessing-game/mongodb/pom.xml, example/domain/word-guessing-game/mongodb/spring/blocking/pom.xml, example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/pom.xml, example/domain/word-guessing-game/mongodb/spring/dcb/pom.xml, example/domain/word-guessing-game/mongodb/spring/pom.xml, example/domain/word-guessing-game/pom.xml, example/forwarder/mongodb-subscription-to-spring-event/pom.xml, example/forwarder/pom.xml, example/pom.xml, example/projection/global-position-catchup/pom.xml, example/projection/pom.xml, example/projection/projection-dsl/pom.xml, example/projection/spring-adhoc-eventstore-mongodb-queries/pom.xml, example/projection/spring-reactor-transactional-projection-mongodb/pom.xml, example/projection/spring-subscription-based-mongodb-projections/pom.xml, example/projection/spring-transactional-projection-mongodb/pom.xml, example/saga/order-fulfillment/pom.xml, example/saga/pom.xml, example/snapshot/closing-the-books/pom.xml, example/snapshot/pom.xml, framework/annotations/pom.xml, framework/pom.xml, framework/spring-boot-autoconfigure-mongodb-common/pom.xml, framework/spring-boot-starter-mongodb-reactive/pom.xml, framework/spring-boot-starter-mongodb/pom.xml, library/hederlig/pom.xml, library/pom.xml, pom.xml, rewrite/pom.xml, subscription/api/blocking/pom.xml, subscription/api/pom.xml, subscription/api/reactor/pom.xml, subscription/core/pom.xml, subscription/inmemory/pom.xml, subscription/mongodb/common/base/pom.xml, subscription/mongodb/common/blocking/competing-consumer-strategy/pom.xml, subscription/mongodb/common/blocking/pom.xml, subscription/mongodb/common/pom.xml, subscription/mongodb/native/blocking-checkpoint-storage/pom.xml, subscription/mongodb/native/blocking-competing-consumer-strategy/pom.xml, subscription/mongodb/native/blocking/pom.xml, subscription/mongodb/native/pom.xml, subscription/mongodb/pom.xml, subscription/mongodb/spring/blocking-checkpoint-storage/pom.xml, subscription/mongodb/spring/blocking-competing-consumer-strategy/pom.xml, subscription/mongodb/spring/blocking/pom.xml, subscription/mongodb/spring/common/pom.xml, subscription/mongodb/spring/pom.xml, subscription/mongodb/spring/reactor-checkpoint-storage/pom.xml, subscription/mongodb/spring/reactor/pom.xml, subscription/pom.xml, subscription/push/blocking/pom.xml, subscription/push/pom.xml, subscription/push/reactor/pom.xml, subscription/redis/pom.xml, subscription/redis/spring/blocking-checkpoint-storage/pom.xml, subscription/redis/spring/pom.xml, subscription/synchronous/blocking/pom.xml, subscription/synchronous/pom.xml, subscription/synchronous/reactor/pom.xml, subscription/util/blocking/catchup-subscription/pom.xml, subscription/util/blocking/competing-consumer-subscription/pom.xml, subscription/util/blocking/durable-subscription/pom.xml, subscription/util/blocking/pom.xml, subscription/util/blocking/stream-catchup-subscription/pom.xml, subscription/util/pom.xml, subscription/util/predicates/pom.xml, subscription/util/reactor/catchup-subscription/pom.xml, subscription/util/reactor/durable-subscription/pom.xml, subscription/util/reactor/pom.xml, subscription/util/reactor/stream-catchup-subscription/pom.xml, test-support/pom.xml
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Java(静态类型)
54.8/55可控的文件大小 — 采样的 1,243 个源文件中有 5 个超过 60KB
所用输入
primary_languageJava
largest_source_bytes100,013
source_files_sampled1,243
oversized_source_files5

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — example
所用输入
example_dirsexample
has_mcp_signal
api_schema_files

关键数据

161GitHub 星标
7贡献者
415最近 12 个月提交数
0距最近推送天数
0发布版本数
1巴士系数(bus factor)
95开放议题
Maven软件包生态系统数

数据采集警告

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

更多细节

Star 与 Fork 历史 0 ★ / 20 ⇿
0Star
20Fork

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

0481216202022020-092023-082026-07

每个点涵盖 6 天。

OpenSSF Scorecard 4.9 / 10
4.9综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
7CI-Tests15 out of 19 merged PRs checked by a CI test -- score normalized to 7
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
直接依赖 141
注册表软件包版本约束清单文件
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}application/pom.xml
Mavenorg.occurrent:occurrent-cloudevents-extension${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-capability${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-filter${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-functional-support${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-annotation-support${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-api-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-api-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-api-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-inmemory-filter-matching${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-inmemory${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-time${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-mongodb-timerepresentation${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-mongodb-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-mongodb-specialfilterhandling${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-mongodb-native-filter-bsonfilter-conversion${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-retry${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-mongodb-native${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-mongodb-spring-filter-query-conversion${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-common-mongodb-spring-sort-conversion${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-core${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-common-base${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-api-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-common-blocking-competing-consumer-strategy${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-api-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-push-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-push-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-synchronous-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-synchronous-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactor-checkpoint-storage${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-util-predicates${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-durable-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-checkpoint-storage${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-competing-consumer-strategy${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-checkpoint-storage${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-competing-consumer-strategy${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-redis-spring-blocking-checkpoint-storage${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-durable-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-stream-catchup-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-catchup-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-competing-consumer-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-inmemory${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-converter-api${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-command-composition${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-api${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-converter-generic${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-transaction-mongodb-native${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-transaction-spring${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-transaction-spring-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-application-service-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-dcb-annotation-taggenerator${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-command-dispatch${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-command-dispatch-annotation${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-command-dispatch-dcb${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-converter-xstream${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-reflection${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-converter-jackson${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-cloudevent-converter-jackson3${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-dsl-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-subscription-dsl-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-module-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-query-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-query-dsl-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-decider${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-decider-arrow${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-view-dsl${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-projection-dsl-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-projection-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-projection-dsl-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-saga-dsl-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-saga-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-saga-dsl-mongodb-spring${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-snapshot-dsl-common${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-snapshot-dsl-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-snapshot-dsl-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-annotations${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-mongodb-spring-boot-autoconfigure${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-mongodb-spring-boot-starter${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-mongodb-reactive-spring-boot-starter${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-deadline-api-blocking${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-deadline-jobrunr${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-deadline-inmemory${project.version}bom/pom.xml
Mavenorg.occurrent:occurrent-hederlig${project.version}bom/pom.xml
Mavenorg.jspecify:jspecifycloudevents-extension/pom.xml
Mavenio.cloudevents:cloudevents-corecloudevents-extension/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}common/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}deadline/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}dsl/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}eventstore/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}framework/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}library/pom.xml
Mavenio.cloudevents:cloudevents-bom${cloudevents.version}pom.xml
Mavencom.thoughtworks.xstream:xstream1.4.21pom.xml
Mavenorg.slf4j:slf4j-api2.0.12pom.xml
Mavenio.javalin:javalin3.9.1pom.xml
Mavencom.j2html:j2html1.4.0pom.xml
Mavencom.rabbitmq:amqp-client5.21.0pom.xml
Mavenjakarta.annotation:jakarta.annotation-api2.1.1pom.xml
Mavenorg.jetbrains.kotlin:kotlin-bom${kotlin.version}pom.xml
Mavenorg.jetbrains.kotlinx:kotlinx-collections-immutable-jvm0.3.7pom.xml
Mavenio.arrow-kt:arrow-stack1.2.4pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}pom.xml
Mavenorg.jspecify:jspecify1.0.0pom.xml
Mavenorg.jobrunr:jobrunr${jobrunr.version}pom.xml
Mavenorg.springframework.retry:spring-retry${spring-retry.version}pom.xml
Mavenorg.openrewrite.recipe:rewrite-recipe-bom3.34.0pom.xml
Mavenorg.junit:junit-bom${junit.version}pom.xml
Mavenorg.testcontainers:testcontainers-bom${test-containers.version}pom.xml
Mavenorg.assertj:assertj-bom3.27.4pom.xml
Mavench.qos.logback:logback-classic1.5.32pom.xml
Mavenio.vavr:vavr0.10.3pom.xml
Mavenorg.awaitility:awaitility${awaitility.version}pom.xml
Mavenorg.awaitility:awaitility-kotlin${awaitility.version}pom.xml
Mavennet.jqwik:jqwik1.9.1pom.xml
Mavenio.github.artsok:rerunner-jupiter2.1.6pom.xml
Mavenorg.mockito:mockito-bom5.14.2pom.xml
Mavenio.github.serpro69:kotlin-faker2.0.0-rc.11pom.xml
Mavenorg.jetbrains.kotlin:kotlin-maven-allopen${kotlin.version}pom.xml
Mavenorg.openrewrite:rewrite-javarewrite/pom.xml
Mavenorg.openrewrite:rewrite-kotlinrewrite/pom.xml
Mavenorg.openrewrite:rewrite-mavenrewrite/pom.xml
Mavenorg.openrewrite:rewrite-gradlerewrite/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}subscription/pom.xml
Mavencom.fasterxml.jackson:jackson-bom${jackson2.version}test-support/pom.xml
Mavenorg.jspecify:jspecifytest-support/pom.xml
Mavenorg.mongodb:mongodb-driver-synctest-support/pom.xml
Mavenorg.testcontainers:testcontainers-mongodb${test-containers.version}test-support/pom.xml
Mavenorg.junit.jupiter:junit-jupiter-enginetest-support/pom.xml
Mavenio.cloudevents:cloudevents-coretest-support/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databindtest-support/pom.xml
全部依赖 232

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

注册表软件包版本关系
Mavench.qos.logback:logback-classic直接
Mavench.qos.logback:logback-classic1.5.32直接
Mavencom.fasterxml.jackson.core:jackson-databind直接
Mavencom.fasterxml.jackson:jackson-bom直接
Mavencom.j2html:j2html直接
Mavencom.j2html:j2html1.4.0直接
Mavencom.rabbitmq:amqp-client直接
Mavencom.rabbitmq:amqp-client5.21.0直接
Mavencom.thoughtworks.xstream:xstream直接
Mavencom.thoughtworks.xstream:xstream1.4.21直接
Mavenio.arrow-kt:arrow-stack1.2.4直接
Mavenio.cloudevents:cloudevents-bom4.0.1直接
Mavenio.cloudevents:cloudevents-core直接
Mavenio.github.artsok:rerunner-jupiter直接
Mavenio.github.artsok:rerunner-jupiter2.1.6直接
Mavenio.github.serpro69:kotlin-faker直接
Mavenio.github.serpro69:kotlin-faker2.0.0-rc.11直接
Mavenio.javalin:javalin直接
Mavenio.javalin:javalin3.9.1直接
Mavenio.vavr:vavr直接
Mavenio.vavr:vavr0.10.3直接
Mavenjakarta.annotation:jakarta.annotation-api直接
Mavenjakarta.annotation:jakarta.annotation-api2.1.1直接
Mavennet.jqwik:jqwik直接
Mavennet.jqwik:jqwik1.9.1直接
Mavenorg.assertj:assertj-bom3.27.4直接
Mavenorg.awaitility:awaitility直接
Mavenorg.awaitility:awaitility4.2.2直接
Mavenorg.awaitility:awaitility-kotlin直接
Mavenorg.awaitility:awaitility-kotlin4.2.2直接
Mavenorg.jetbrains.kotlin:kotlin-bom2.3.21直接
Mavenorg.jetbrains.kotlin:kotlin-maven-allopen直接
Mavenorg.jetbrains.kotlin:kotlin-maven-allopen2.3.21直接
Mavenorg.jetbrains.kotlinx:kotlinx-collections-immutable-jvm0.3.4直接
Mavenorg.jetbrains.kotlinx:kotlinx-collections-immutable-jvm0.3.7直接
Mavenorg.jobrunr:jobrunr直接
Mavenorg.jobrunr:jobrunr8.1.0直接
Mavenorg.jspecify:jspecify直接
Mavenorg.jspecify:jspecify1.0.0直接
Mavenorg.junit.jupiter:junit-jupiter-engine直接
Mavenorg.junit:junit-bom5.11.3直接
Mavenorg.mockito:mockito-bom5.14.2直接
Mavenorg.mongodb:mongodb-driver-sync直接
Mavenorg.occurrent:occurrent-annotation-support直接
Mavenorg.occurrent:occurrent-annotations直接
Mavenorg.occurrent:occurrent-application-service-blocking直接
Mavenorg.occurrent:occurrent-application-service-common直接
Mavenorg.occurrent:occurrent-application-service-reactor直接
Mavenorg.occurrent:occurrent-application-service-transaction-mongodb-native直接
Mavenorg.occurrent:occurrent-application-service-transaction-spring直接
Mavenorg.occurrent:occurrent-application-service-transaction-spring-reactor直接
Mavenorg.occurrent:occurrent-cloudevent-converter-api直接
Mavenorg.occurrent:occurrent-cloudevent-converter-generic直接
Mavenorg.occurrent:occurrent-cloudevent-converter-jackson直接
Mavenorg.occurrent:occurrent-cloudevent-converter-jackson3直接
Mavenorg.occurrent:occurrent-cloudevent-converter-xstream直接
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-api直接
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-reflection直接
Mavenorg.occurrent:occurrent-cloudevents-extension直接
Mavenorg.occurrent:occurrent-command-composition直接
Mavenorg.occurrent:occurrent-command-dispatch直接
Mavenorg.occurrent:occurrent-command-dispatch-annotation直接
Mavenorg.occurrent:occurrent-command-dispatch-dcb直接
Mavenorg.occurrent:occurrent-common-inmemory-filter-matching直接
Mavenorg.occurrent:occurrent-common-mongodb-native-filter-bsonfilter-conversion直接
Mavenorg.occurrent:occurrent-common-mongodb-specialfilterhandling直接
Mavenorg.occurrent:occurrent-common-mongodb-spring-filter-query-conversion直接
Mavenorg.occurrent:occurrent-common-mongodb-spring-sort-conversion直接
Mavenorg.occurrent:occurrent-common-mongodb-timerepresentation直接
Mavenorg.occurrent:occurrent-dcb-annotation-taggenerator直接
Mavenorg.occurrent:occurrent-deadline-api-blocking直接
Mavenorg.occurrent:occurrent-deadline-inmemory直接
Mavenorg.occurrent:occurrent-deadline-jobrunr直接
Mavenorg.occurrent:occurrent-decider直接
Mavenorg.occurrent:occurrent-decider-arrow直接
Mavenorg.occurrent:occurrent-eventstore-api-blocking直接
Mavenorg.occurrent:occurrent-eventstore-api-common直接
Mavenorg.occurrent:occurrent-eventstore-api-reactor直接
Mavenorg.occurrent:occurrent-eventstore-capability直接
Mavenorg.occurrent:occurrent-eventstore-inmemory直接
Mavenorg.occurrent:occurrent-eventstore-mongodb-common直接
Mavenorg.occurrent:occurrent-eventstore-mongodb-native直接
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-blocking直接
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-reactor直接
Mavenorg.occurrent:occurrent-filter直接
Mavenorg.occurrent:occurrent-functional-support直接
Mavenorg.occurrent:occurrent-hederlig直接
Mavenorg.occurrent:occurrent-module-dsl-blocking直接
Mavenorg.occurrent:occurrent-mongodb-reactive-spring-boot-starter直接
Mavenorg.occurrent:occurrent-mongodb-spring-boot-autoconfigure直接
Mavenorg.occurrent:occurrent-mongodb-spring-boot-starter直接
Mavenorg.occurrent:occurrent-projection-dsl-blocking直接
Mavenorg.occurrent:occurrent-projection-dsl-common直接
Mavenorg.occurrent:occurrent-projection-dsl-reactor直接
Mavenorg.occurrent:occurrent-query-dsl-blocking直接
Mavenorg.occurrent:occurrent-query-dsl-reactor直接
Mavenorg.occurrent:occurrent-retry直接
Mavenorg.occurrent:occurrent-saga-dsl-blocking直接
Mavenorg.occurrent:occurrent-saga-dsl-common直接
Mavenorg.occurrent:occurrent-saga-dsl-mongodb-spring直接
Mavenorg.occurrent:occurrent-snapshot-dsl-blocking直接
Mavenorg.occurrent:occurrent-snapshot-dsl-common直接
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking直接
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor直接
Mavenorg.occurrent:occurrent-snapshot-dsl-reactor直接
Mavenorg.occurrent:occurrent-subscription-api-blocking直接
Mavenorg.occurrent:occurrent-subscription-api-reactor直接
Mavenorg.occurrent:occurrent-subscription-catchup-blocking直接
Mavenorg.occurrent:occurrent-subscription-competing-consumer-blocking直接
Mavenorg.occurrent:occurrent-subscription-core直接
Mavenorg.occurrent:occurrent-subscription-dsl-blocking直接
Mavenorg.occurrent:occurrent-subscription-dsl-common直接
Mavenorg.occurrent:occurrent-subscription-dsl-reactor直接
Mavenorg.occurrent:occurrent-subscription-durable-blocking直接
Mavenorg.occurrent:occurrent-subscription-durable-reactor直接
Mavenorg.occurrent:occurrent-subscription-inmemory直接
Mavenorg.occurrent:occurrent-subscription-mongodb-common-base直接
Mavenorg.occurrent:occurrent-subscription-mongodb-common-blocking-competing-consumer-strategy直接
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking直接
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-checkpoint-storage直接
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-competing-consumer-strategy直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-checkpoint-storage直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-competing-consumer-strategy直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-common直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactor直接
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactor-checkpoint-storage直接
Mavenorg.occurrent:occurrent-subscription-push-blocking直接
Mavenorg.occurrent:occurrent-subscription-push-reactor直接
Mavenorg.occurrent:occurrent-subscription-redis-spring-blocking-checkpoint-storage直接
Mavenorg.occurrent:occurrent-subscription-stream-catchup-blocking直接
Mavenorg.occurrent:occurrent-subscription-synchronous-blocking直接
Mavenorg.occurrent:occurrent-subscription-synchronous-reactor直接
Mavenorg.occurrent:occurrent-subscription-util-predicates直接
Mavenorg.occurrent:occurrent-time直接
Mavenorg.occurrent:occurrent-view-dsl直接
Mavenorg.openrewrite.recipe:rewrite-recipe-bom3.34.0直接
Mavenorg.openrewrite:rewrite-gradle直接
Mavenorg.openrewrite:rewrite-java直接
Mavenorg.openrewrite:rewrite-kotlin直接
Mavenorg.openrewrite:rewrite-maven直接
Mavenorg.slf4j:slf4j-api直接
Mavenorg.slf4j:slf4j-api2.0.12直接
Mavenorg.springframework.boot:spring-boot-dependencies4.1.0直接
Mavenorg.springframework.retry:spring-retry直接
Mavenorg.springframework.retry:spring-retry2.0.12直接
Mavenorg.testcontainers:testcontainers-bom2.0.5直接
Mavenorg.testcontainers:testcontainers-mongodb直接
Mavencom.fasterxml.jackson.core:jackson-annotations2.21间接
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310间接
Mavencom.fasterxml.jackson.module:jackson-module-kotlin间接
Mavenio.arrow-kt:arrow-core间接
Mavenio.cloudevents:cloudevents-api间接
Mavenio.cloudevents:cloudevents-json-jackson间接
Mavenio.lettuce:lettuce-core间接
Mavenio.projectreactor:reactor-core间接
Mavenio.projectreactor:reactor-test间接
Mavenorg.apache.maven.plugins:maven-gpg-plugin1.6间接
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.5.0间接
Mavenorg.apache.maven.plugins:maven-shade-plugin3.6.0间接
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.1间接
Mavenorg.apache.maven.plugins:maven-surefire-plugin间接
Mavenorg.assertj:assertj-core间接
Mavenorg.codehaus.mojo:build-helper-maven-plugin3.6.1间接
Mavenorg.codehaus.mojo:flatten-maven-plugin间接
Mavenorg.codehaus.mojo:flatten-maven-plugin1.7.2间接
Mavenorg.jetbrains.dokka:dokka-maven-plugin间接
Mavenorg.jetbrains.dokka:dokka-maven-plugin2.0.0间接
Mavenorg.jetbrains.kotlin:kotlin-maven-plugin间接
Mavenorg.jetbrains.kotlin:kotlin-maven-plugin2.3.21间接
Mavenorg.jetbrains.kotlin:kotlin-reflect间接
Mavenorg.jetbrains.kotlin:kotlin-stdlib间接
Mavenorg.jetbrains.kotlin:kotlin-test间接
Mavenorg.jetbrains.kotlinx:kotlinx-html-jvm0.11.0间接
Mavenorg.junit.jupiter:junit-jupiter间接
Mavenorg.junit.jupiter:junit-jupiter-params间接
Mavenorg.mockito:mockito-core间接
Mavenorg.mongodb:mongodb-driver-core间接
Mavenorg.mongodb:mongodb-driver-reactivestreams间接
Mavenorg.occurrent:example-domain-word-guessing-game-model间接
Mavenorg.occurrent:example-number-guessing-game-model间接
Mavenorg.occurrent:example-rps-decider-model间接
Mavenorg.occurrent:example-uno-eventstore-mongodb-common间接
Mavenorg.occurrent:example-uno-model间接
Mavenorg.occurrent:occurrent-cloudevent-converter-core间接
Mavenorg.occurrent:occurrent-dcb-dsl-blocking间接
Mavenorg.occurrent:occurrent-dcb-dsl-common间接
Mavenorg.occurrent:occurrent-dcb-dsl-reactor间接
Mavenorg.occurrent:occurrent-eventstore-api-dcb间接
Mavenorg.occurrent:occurrent-eventstore-api-dcb-reactor间接
Mavenorg.occurrent:occurrent-eventstore-mongodb-dcb-common间接
Mavenorg.occurrent:occurrent-subscription-catchup-reactor间接
Mavenorg.occurrent:occurrent-subscription-stream-catchup-reactor间接
Mavenorg.occurrent:test-support间接
Mavenorg.openrewrite:rewrite-java-21间接
Mavenorg.openrewrite:rewrite-test间接
Mavenorg.slf4j:slf4j-simple2.0.12间接
Mavenorg.sonatype.central:central-publishing-maven-plugin0.7.0间接
Mavenorg.sonatype.plugins:nexus-staging-maven-plugin间接
Mavenorg.sonatype.plugins:nexus-staging-maven-plugin1.6.13间接
Mavenorg.springframework.boot:spring-boot-autoconfigure间接
Mavenorg.springframework.boot:spring-boot-configuration-processor间接
Mavenorg.springframework.boot:spring-boot-data-mongodb间接
Mavenorg.springframework.boot:spring-boot-devtools间接
Mavenorg.springframework.boot:spring-boot-maven-plugin间接
Mavenorg.springframework.boot:spring-boot-maven-plugin4.1.0间接
Mavenorg.springframework.boot:spring-boot-mongodb间接
Mavenorg.springframework.boot:spring-boot-starter间接
Mavenorg.springframework.boot:spring-boot-starter-aspectj间接
Mavenorg.springframework.boot:spring-boot-starter-data-mongodb间接
Mavenorg.springframework.boot:spring-boot-starter-data-mongodb-reactive间接
Mavenorg.springframework.boot:spring-boot-starter-data-redis间接
Mavenorg.springframework.boot:spring-boot-starter-test间接
Mavenorg.springframework.boot:spring-boot-starter-thymeleaf间接
Mavenorg.springframework.boot:spring-boot-starter-webflux间接
Mavenorg.springframework.boot:spring-boot-starter-webmvc间接
Mavenorg.springframework.boot:spring-boot-test间接
Mavenorg.springframework.boot:spring-boot-testcontainers间接
Mavenorg.springframework.data:spring-data-mongodb间接
Mavenorg.springframework.data:spring-data-redis间接
Mavenorg.springframework.hateoas:spring-hateoas间接
Mavenorg.springframework:spring-aspects间接
Mavenorg.springframework:spring-tx间接
Mavenorg.testcontainers:testcontainers间接
Mavenorg.testcontainers:testcontainers-junit-jupiter间接
Mavenorg.testcontainers:testcontainers-rabbitmq间接
Mavenorg.webjars.npm:htmx-ext-sse2.2.3间接
Mavenorg.webjars.npm:htmx.org2.0.6间接
Mavenorg.webjars:webjars-locator-lite1.1.0间接
Maventools.jackson.core:jackson-databind间接
Maventools.jackson.module:jackson-module-kotlin间接
Maventools.jackson:jackson-bom间接
依赖安全公告 1

安装 maven:org.occurrent:occurrent-rewrite@0.30.0 会引入 58 个包(直接与传递):其中 1 个存在已知公告,0 个为直接依赖。

软件包版本关系严重程度公告数修复版本
com.fasterxml.jackson.core:jackson-databind2.21.4间接33.2.1

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "cloud-events",
        "event-sourcing",
        "java",
        "kotlin"
      ],
      "is_fork": false,
      "size_kb": 12582,
      "has_wiki": true,
      "homepage": "https://occurrent.org",
      "languages": {
        "CSS": 1829,
        "HTML": 14026,
        "Java": 5781964,
        "Shell": 2497,
        "Kotlin": 1358681
      },
      "pushed_at": "2026-07-25T15:00:11Z",
      "created_at": "2020-07-06T17:14:59Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T14:11:05Z",
      "description": "Unintrusive Event Sourcing Library for the JVM",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java",
        "Kotlin"
      ]
    },
    "owner": {
      "blog": "https://code.haleby.se",
      "name": "Johan Haleby",
      "type": "User",
      "login": "johanhaleby",
      "company": "Parkster",
      "location": "Sweden",
      "followers": 414,
      "avatar_url": "https://avatars.githubusercontent.com/u/187029?v=4",
      "created_at": "2010-01-21T16:06:56Z",
      "is_verified": null,
      "public_repos": 72,
      "account_age_days": 6029
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "8cc4e9ab11cc3496a98b4315352845ce200ee152",
          "body": "* Let a domain-event feed carry metadata on the live path\n\nA projection keyed by event metadata caught up correctly from a domain-event\nfeed and then broke on every live event. The replay reads the event store so it\nhas CloudEvents and real metadata, but a live domain event has none and folded\nwith \n[…]\n\nreturns and then instructed callers to use accept(...), which is a method on\nCatchupProjectionFeed and DomainEventFeed rather than on that sink.\n\nAlso fixes a duplicated \"and and\" in ORCHESTRATOR.md.",
          "is_bot": false,
          "headline": "Let a domain-event feed carry event metadata on the live path (#424)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T14:10:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d29f682f11e67827c9b2bf8f41c47d99dbc2b931",
          "body": "…422)\n\nFixedSizeCache (blocking stream catch-up, also reached by the DCB catch-up\nmodel through the shared package) and HandoverCache (reactor stream catch-up)\nwere independent implementations of the bounded, insertion-ordered event-id set\nthat BoundedIdCache already provides. Both are deleted and e\n[…]\nles. It pins the eviction order the consolidation depends on.\nThe three consuming modules now declare occurrent-subscription-core explicitly.\n\nNo public API or behaviour change, so no changelog entry.",
          "is_bot": false,
          "headline": "Consolidate the catch-up de-duplication caches into BoundedIdCache (#…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T12:00:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "017c09e7f9f35ac17855ce17fed0866331c5b7e8",
          "body": "The file still listed DCB under unreleased capabilities and used \"DCB is\nunreleased\" to justify keeping DCB churn out of the changelog's Changes\nsection. DCB shipped in 0.30.0 on 2026-07-13, so a change to released DCB\nbehavior belongs in Changes like any other. The changelog rule itself still\nholds\n[…]\n386 invalidated by splitting\nthe Mongo stores into their own mongodb-spring-blocking and\nmongodb-spring-reactor modules, and records the open dcb.events PR that adds\nOccurrent to their libraries page.",
          "is_bot": false,
          "headline": "[ci skip] Correct the orchestrator memory on DCB's release status",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T11:47:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6d7ab7ef287643cb969efb6e15abcf81114b9cd",
          "body": "* Keep only stack-neutral types in the common modules\n\nA blocking-only port sat in a common module that the reactor module also\ndepends on, so the reactor stack transitively imported an interface it can\nnever call, and the blocking half got the unprefixed name by accident of\nplacement rather than by\n[…]\ning it:\nthis ADR had placed SnapshotStore in common, which left the reactor stack\nimporting a blocking interface it can never call. The amendment also records\nthat SnapshotPolicies must not follow it.",
          "is_bot": false,
          "headline": "Keep only stack-neutral types in the common modules (#386)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T10:58:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7cb81822806c7c837d1f200c1766cb6a441b8c16",
          "body": "The file is re-read at every session start, so its size is the dominant\nrecurring token cost. It had accumulated per-branch build narration for work\nthat has all merged: test counts, which container runs flaked, stopgaps applied\nand later dropped, per-file LOC deltas, and which review threads were r\n[…]\nng\nlessons) with every do-not-regress invariant preserved verbatim in substance.\n\nAlso drops a bullet that appeared twice and refreshes the module inventory.\n\n63.9K from 102.8K, 7.9k words from 12.4k.",
          "is_bot": false,
          "headline": "[ci skip] Compact the orchestrator memory file",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T10:53:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5df9073348b1332eec0d4bb797efa07c533597b7",
          "body": "* Thread event metadata through the reactor catch-up replay\n\nThe reactor CatchupProjectionFeed folded replayed events through a\nFunction<E, Mono<Void>> built by Projections.reactiveUpdate, which\nhardwires EventMetadata.empty(). A projection keyed via\nProjection.idWithMetadata() therefore mis-keyed e\n[…]\nt instead.\n\nRenamed to name the accessor it actually covers, and the comment now records\nboth failure modes and points at the issue tracking support for metadata on the\nlive path. No behaviour change.",
          "is_bot": false,
          "headline": "Extract the catch-up handover into one engine per stack (#387)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T10:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "82c5195083eae16dfafcfe2af562cad8707fb952",
          "body": "…ion epics in orchestrator memory\n\nIssues #392, #393 and #388 (plus children) were filed with no code yet. Captures the\nissue map and the four decisions that constrain the work: CDC rather than position\npolling as the SQL live source and its coupling to the position strategy, the broker\nconsume side as a bridge into Pushable rather than a new SubscriptionModel, the\nannotation-machinery move needed before a SQL starter, and DDL ownership as an\nexplicit decision.",
          "is_bot": false,
          "headline": "[ci skip] Record the planned TCK, SQL event store and broker integrat…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T10:34:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f1939aeff0a1ce9013270478599599c3eb288df",
          "body": "… reactor stack (#385)\n\n* Thread event metadata through the reactor catch-up replay\n\nThe reactor CatchupProjectionFeed folded replayed events through a\nFunction<E, Mono<Void>> built by Projections.reactiveUpdate, which\nhardwires EventMetadata.empty(). A projection keyed via\nProjection.idWithMetadata\n[…]\nt instead.\n\nRenamed to name the accessor it actually covers, and the comment now records\nboth failure modes and points at the issue tracking support for metadata on the\nlive path. No behaviour change.",
          "is_bot": false,
          "headline": "Fix metadata-keyed projections mis-keying every replayed event on the…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-25T10:27:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b59c4a8ecfb33d122a27d6c5780275ccdf549bc",
          "body": "…he decider (#384)\n\nRecords the rationale for keying DCB snapshots by the resolved DcbCriteria\nrather than the decider, so the decision is discoverable and not reversed later\nby mistake. Adds a dated amendment to ADR 0061 (which owns the DCB-key\ndecision): the decider is a per-type constant, so deci\n[…]\nent from ADR 0069 and adds terse \"see ADR 0061\"\npointers to the SnapshotDcbDecider / ReactiveSnapshotDcbDecider keyFunction\njavadoc and DcbSnapshotKeys.\n\nDocumentation only, no API or behavior change.",
          "is_bot": false,
          "headline": "Document why the DCB snapshot key is derived from the criteria, not t…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T16:46:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96588c1cbe5e0e1f89004f6ec585775b1fb3049d",
          "body": "… registrars (#383)\n\nSplit the blocking and reactive MongoDB annotation bean-post-processors into thin coordinators plus package-private per-annotation registrars over a shared StartPositionSupport, lift the identical shouldWaitUntilStarted helper to common, add characterization tests, and fix two pre-existing Copilot-flagged nits. Behavior-preserving.",
          "is_bot": false,
          "headline": "Decompose MongoDB annotation bean-post-processors into per-annotation…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T16:01:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce84350fb6f04606e21f70d7bdc657c5018775b7",
          "body": "…ec (#381)\n\n* Reshape programmatic snapshot API to global facade + per-aggregate spec\n\nThe snapshot executors (SnapshotDeciderApplicationService,\nSnapshotDcbDeciderApplicationService) and the SnapshotViews reader, plus their\nreactor twins, are now constructed once around only the shared infrastructu\n[…]\ned a null value\" NPE. The guard sits in the fold (seed and\naccumulator), mirroring requireNonNullState in the reactor decider services.\n\nAddresses a Copilot review comment on the snapshot API reshape.",
          "is_bot": false,
          "headline": "Reshape programmatic snapshot API to global facade + per-aggregate sp…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T14:55:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "907e9d5861acc798097c80a0abcfa9135e1459ad",
          "body": "….position is unset (#382)\n\n* Fix NullPointerException when occurrent.event-store.stream.position is unset\n\nThe blocking OccurrentMongoAutoConfiguration unboxed the stream.position\nproperty with `if (streamPosition)`, which throws when the property is unset\n(null), so the Mongo starter's Application\n[…]\nc branch of the stream-position auto-config guard, where\na false position property is skipped (withoutStreamPosition() is rejected with\nDCB) so the context still loads and the default position stands.",
          "is_bot": false,
          "headline": "Fix ApplicationContext load failure when occurrent.event-store.stream…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T14:42:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fd95d2b5d1a4c9cd1068cc8e5dc5afde5f3c7a7",
          "body": null,
          "is_bot": false,
          "headline": "Some minor cleanup",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T11:00:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8198a003908af0012ac15d2851a8ce85bdf83f8f",
          "body": "…esh) (#380)\n\n* Make SnapshotViews an instance facade with a pure readState and explicit refresh\n\nSnapshotViews was a static six-argument utility whose readState secretly\nwrote a snapshot per a SnapshotPolicy, so a plain read demanded a when-to-save\ntrigger. Replace it with an instance built once vi\n[…]\nrites-when-already-up-to-date test only checked snapshot equality, so\nit would pass even if refresh skipped save. Count save invocations with a\nwrapping store and assert it runs twice, on both stacks.",
          "is_bot": false,
          "headline": "Make SnapshotViews an instance facade (pure readState + explicit refr…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T08:18:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "378fbe9c7145176b54ca7243748c80ec906b4d42",
          "body": "…m clarification in Closing the Books docs",
          "is_bot": false,
          "headline": "[ci skip] Orchestrator memory: note inline example + per-period-strea…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-24T08:04:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5408a9aef159f49266721e5f3e7405c541d1f206",
          "body": "* Move the saga CompetingConsumerStrategy from run(...) onto the SagaRunner\n\nAdd a fluent SagaRunner.competingConsumerStrategy(strategy) that returns a\nconfigured copy, and drop the strategy parameter from run(...). The strategy is\ntimer-poller infrastructure that belongs with the subscription model\n[…]\ngy, leaseKey, and holderId can legitimately be null, so mark them\n@Nullable in this @NullMarked class. The lambda captures the narrowed non-null\nkey/holder locals, keeping the hasLock deref null-safe.",
          "is_bot": false,
          "headline": "Move the saga CompetingConsumerStrategy onto the SagaRunner (#379)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-23T09:08:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3006375da21590fb92909bb9844865ead8a08e3",
          "body": "…le package (#378)",
          "is_bot": false,
          "headline": "Rename saga 'machine core' naming to 'core' in javadoc/kdoc and examp…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-23T07:05:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b22ccea0722cfff43a6d7b84a48c8661c1c127ae",
          "body": "…B twin merged (PR #374)",
          "is_bot": false,
          "headline": "[ci skip] Orchestrator memory: record command-dispatch factories + DC…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T17:59:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49d69ccab49934d7c70b57446f76fee4e308ab75",
          "body": "…a DCB dispatcher factory (#374)\n\n* Move CommandDispatchers into occurrent-command-dispatch and add a DCB twin\n\nRelocate the stream CommandDispatchers.decider factory out of the saga DSL\ninto occurrent-command-dispatch (its natural home, package\norg.occurrent.command), so command dispatch is a self-\n[…]\nexecute(command, dcbDecider) directly instead of wrapping it in\nList.of(command). Avoids a per-dispatch list allocation and mirrors the\nsingle-command call the stream CommandDispatchers.decider makes.",
          "is_bot": false,
          "headline": "Relocate CommandDispatchers into the command-dispatch module and add …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T17:57:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "982c7d4578f1c6b192e08461f1c278f5fafbaab5",
          "body": "… (#376)\n\n* Move command-dispatch modules from application-service to application\n\nCommandDispatcher and StreamIdResolver (package org.occurrent.command) are a\ncommand-production concern, not the application-service write engine, and\ncommand-dispatch has no dependency on application-service-common. \n[…]\n the no-stale-reference claim to build files to avoid a self-contradiction.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move command-dispatch modules from application-service to application…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T17:30:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a19fe90cd4d5169f974a390dddb02e7942f40bc4",
          "body": "* Hide flow-saga bookkeeping behind a narrow FlowState interface\n\nFlowState was a record, so all eight components were public accessors,\nexposing five transition-bookkeeping fields (windowStart, stepEntryIndex,\npreviousStep, lastAction, matchedBranchIndex) to anyone holding the state.\n\nSplit it into\n[…]\nImpl javadoc: author via FlowSaga, not a FlowState builder\n\nFlowState has no builder; flow sagas are authored through FlowSaga (or the\nKotlin saga block) and their state is observed through FlowState.",
          "is_bot": false,
          "headline": "Hide flow-saga bookkeeping behind a narrow FlowState interface (#375)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T16:56:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3b894e245c1df795e129762898a915edeaed370f",
          "body": "* Add correlateAll to the saga flow DSL\n\nThe flow DSL (saga { } / FlowSaga.Builder) only offered per-event-type\ncorrelate<T>, while the machine-core builder already had a correlateAll\nfallback. For a sealed event hierarchy with a shared id that meant\nrepeating the same { it.orderId } on every event \n[…]\nderId(), matching the concrete-record\naccess used elsewhere in the example.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add correlateAll to the saga flow DSL (#373)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T16:26:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aa0cb6b7f235702022aabc97e3475360e2b27ee9",
          "body": "The Continuation.GoTo record, its goTo(..) factory, and the Kotlin\nStepScope.goTo receiver method become TransitionTo / transitionTo(..).\ntransitionTo reads as state-machine vocabulary alongside next and end,\nand sidesteps the reserved Java keyword goto that blocks a lowercase form.",
          "is_bot": false,
          "headline": "Rename flow-saga goTo continuation to transitionTo (#372)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T15:49:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f50447f40834f3257f007148226d70f5df72ed0",
          "body": "* Harden the flaky example-domain MongoDB tests\n\nTwo distinct root causes behind the intermittent example-domain shard\nfailures.\n\nStartup readiness: the example @ServiceConnection tests start a fresh\nper-class MongoDBContainer.withReplicaSet() with no host-side readiness\ngate, so on a loaded runner \n[…]\nout to the\nsame 2s so a mid-handshake stall also fails within the deadline.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Harden the flaky example-domain MongoDB tests (#371)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T15:23:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8d0c466bca9167ddefbc6a40e13eba15214bbc0f",
          "body": null,
          "is_bot": false,
          "headline": "Add a join example that reads the joined events in whenFulfilled",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T15:22:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02f1f5f28d58b6c3fbdd0a293dd7e2a3989fd4c2",
          "body": "Change the signature from vararg-only to a leading required Expectation\nplus vararg, so join() with zero expectations no longer compiles. A join\nwith nothing to wait for is degenerate. Add a test proving a single\nexpectation builds and fulfils.",
          "is_bot": false,
          "headline": "Require at least one expectation for StepScope.join",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T15:05:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1351d306410418fa726ac8c12da3f04acfdfae7",
          "body": "The Kotlin first() extension returned Optional<T>, leaking a Java-interop\ntype through the Kotlin-facing surface. Return T? instead (via orElse(null))\nso callers can use ?., ?: and let. Add a reified any(): Boolean that\nshort-circuits via first(type).isPresent rather than scanning with count.\nCover all five reified extensions with unit tests.",
          "is_bot": false,
          "headline": "Return T? from first() and add any() to ReceivedEvents extensions",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T14:58:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49062ce368423d3ebbf7ebec935de006e5de1173",
          "body": "The GameStartJoin scenario declared expect<PlayerJoined>(2) but no test\nisolated the count: every unfulfilled case was also missing the move, so\ndropping the count to 1 left all tests green. Add two tests that pin the\ncount > 1 semantics: one PlayerJoined plus the move does not fulfil, and\nthe second PlayerJoined tips the join over regardless of arrival order.",
          "is_bot": false,
          "headline": "Prove the join expect(count) multiplicity is enforced",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T14:55:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76cfeefe08a00b9e4dbecd2195fb5b9d8ae63c79",
          "body": null,
          "is_bot": false,
          "headline": "Cleanup to SagaFlowExtensions",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T14:32:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f8e2d77ac3caf1b168c316db08efbb48aea4ba4",
          "body": "* Extract the shared annotated-member reflection scanner\n\nAnnotationTagGenerator (dcb-annotation) and AnnotationStreamIdResolver\n(command-dispatch-annotation) carried ~150 near-verbatim lines of reflection:\nthe record-component/getter/field traversal, getter-preferred dedup, hierarchy\nwalk, MethodHa\n[…]\ned order, so the\ngetter/field path cannot promise source declaration order.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Extract the shared annotated-member reflection scanner (#370)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T13:35:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2338bf92f3070d562fcb441c6fea8b9a2dc1489d",
          "body": "The annotated command member holds a stream id (a String), not a stream, and it\nfeeds StreamIdResolver, so naming it for the id it carries is more precise and\nconsistent than @TargetStream. Unreleased (0.31.0), so this is a free rename.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename @TargetStream to @TargetStreamId (#369)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T12:39:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "31bfc1ee9ad50e04215380cf50c07296708e5eaa",
          "body": "…(#368)\n\n* Extract a reusable command-dispatch module with stream-id resolution\n\nCommandDispatcher<C> was the Saga DSL's producer-facing port for issuing a\ncommand, but it is useful to any command producer, not just a saga. Move it into\na new dependency-light occurrent-command-dispatch module (org.o\n[…]\nhe\nexisting AnnotationTagGenerator and needs a shared-module-home decision.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Extract a reusable command-dispatch module with stream-id resolution …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T12:13:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9433ff890f1eef5ad3f5a80e4ee5c4415d7dfe07",
          "body": "…without the starter (#367)\n\n* Fix EventMetadata references missed when it moved to cloudevents-extension (#366)\n\n#366 relocated EventMetadata from org.occurrent.dsl.subscription to\norg.occurrent.cloudevents and updated the SubscriptionAnnotations class, but two\ntest imports (SubscriptionAnnotations\n[…]\n.31.0 features, so there\nis no OpenRewrite recipe or migration-guide entry.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make the Spring saga/snapshot stores and transaction executor usable …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T09:41:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b4f8ffa5b62d6db06bd9b2039b64b89fae34be05",
          "body": null,
          "is_bot": false,
          "headline": "[ci skip] Minor test improvements",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T09:07:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdf67570c599b389eedd90c6c9b3b48d59fe130c",
          "body": "…seKey\n\nPlainer wording throughout the class and run() javadoc: drop the\ncolon-introductions, \"gated by\", \"no-op\", and \"head-of-line blocking\" jargon\nfor direct phrasing, without losing the two-path failure-handling contrast.\n\nAdd a pointer for DCB: to receive DCB-appended events use agnostic. Expla\n[…]\nom public to package-private. It is only called by\nrun() and by SagaRunnerTest, both in this package, so it need not be part of\nthe public API.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Simplify SagaRunner javadoc, add DCB pointer, hide timerLea…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T08:58:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64b3c147a617ad31598142ae19a56d33637a6f4b",
          "body": "\"A saga folds both kinds through the same evolve and react\" described the\nmechanism in the abstract. Say it plainly: both go to the same evolve and\nreact, and there is no separate method for timers.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Plainer wording in the SagaInput javadoc",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T08:25:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8e25477a25cb53e0a839758d22766adafd98a158",
          "body": "\"The closed input alphabet of a Saga\" is automata-theory jargon that does not\nsay what the type is. Lead with the plain statement (what a saga reacts to: a\ndomain event or one of its own fired timers) and add a note on who meets the\ntype: most sagas never touch it because the builder and flow DSL di\n[…]\naga.create form or when\nfeeding a saga inputs in a test. Also clarify that the E type parameter is the\nevent type carried by the Event variant.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Simplify the SagaInput javadoc",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T08:21:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b2f1bcc8d90123b94361be37789df544608e9ce7",
          "body": "The class javadoc opened by defining a saga as the mirror of Decider, so\nunderstanding a saga required knowing Decider first. Reorder it: lead with a\nstandalone definition of the process manager (reacts to events and its own\ntimeouts by issuing commands, pure data and functions, executor does the I/\n[…]\nmove the Decider duality into a skippable\n\"If you already know Decider\" section. No content lost, the duality is just no\nlonger a prerequisite.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Lead the Saga javadoc with a self-contained definition",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T08:18:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c9026e0cb0103258647c2437de84377f6fd3e483",
          "body": null,
          "is_bot": false,
          "headline": "[ci skip] Suppressing false nullable issues",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T08:13:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b54d41f6269f5f52db2b2b14a5bb3edf014093a0",
          "body": "…(#366)\n\n* Relocate EventMetadata to cloudevents-extension as a Java type\n\nEventMetadata became the shared metadata currency across the saga,\nprojection, view, and DCB DSLs (ADR 65) but lived in and was named for the\nsubscription DSL. Move it to org.occurrent.cloudevents.EventMetadata, next\nto the C\n[…]\ne\n  description, which previously described only the annotation enum moves.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move EventMetadata to cloudevents-extension (0.31.0 breaking change) …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T07:50:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8f63d30011c44fc0e3beba23db52164eff49094b",
          "body": "…tion (#365)\n\n* Add @StreamId and @StreamVersion subscription-handler parameter injection\n\nA subscription handler can now receive the delivered event's stream id or stream\nversion directly by annotating a parameter, so\n\n    void on(MyEvent event, @StreamId String streamId, @StreamVersion long stream\n[…]\nguous handler signature. Fail\nfast at startup with a clear message instead.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add @StreamId and @StreamVersion subscription-handler parameter injec…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-22T07:49:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "edeff03ef0c152c66edc36a6685abd12d821d49c",
          "body": "Two ADRs shared number 0065 during the unreleased 0.31.0 cycle:\nevent-metadata-in-the-dsls (#363) and rename-checkpoint-storage-module-\ncoordinates (#362). Renumber the less-referenced one to the next free\nnumber and update its heading and the changelog reference. 0065 now\nuniquely belongs to the checkpoint-storage rename ADR.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Renumber duplicate ADR 0065 (event-metadata DSLs) to 0068",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-21T17:57:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7c29c530cdc06a592a69f814a8f3814c2f07672d",
          "body": "…s (#364)\n\n* Allow configuring batchSize and maxAwaitTime for MongoDB subscriptions\n\nExpose the two change-stream cursor tuning knobs on the subscription\nconfig, opt-in and defaulting to unset so the driver/server defaults are\npreserved and no existing subscription changes behavior on upgrade:\n\n* Na\n[…]\ntions\nthat truncate to 0 ms; the ADR text still said non-zero/non-negative.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Allow configuring batchSize and maxAwaitTime for MongoDB subscription…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-21T16:25:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a800aa2bc81f014af78ba7744dc052a7f771246f",
          "body": "* Add EventMetadata.empty() for metadata-less fold and replay paths\n\nShared foundation for threading event metadata into the saga and\nprojection/view DSLs: the delegating event-only overloads and the\non-demand query-replay path (which has no CloudEvent) fold with this\nempty metadata.\n\nCo-Authored-By\n[…]\n  and the metadata reactiveUpdateWithMetadata(..., singletonKey) overloads.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Expose event metadata to the saga and projection/view DSLs (#363)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-21T14:21:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "52bc8c799f4f50de4b5efb1c70a95c2bbb8e01d8",
          "body": "…efinement (#347)\n\nConvert DcbCriteriaBuilder to Kotlin so type<A>()/types<A,B>()/types<A,B,C>() are reified members with the base event type inferred, add the KClass forms type(A::class)/types(first, vararg rest), and add criteria(boundary: DcbCriterion) on DcbDomainEventQueries and DcbSubscription\n[…]\n0066 to resolve the collision with 0063-saga-dsl.md (0064/0065 were also taken); updated the changelog and ORCHESTRATOR references accordingly.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Kotlin ergonomics for DCB criteria: reified type/types and boundary r…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-21T09:38:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ec7a505961643da31926ed8b0f85113871e97953",
          "body": "…pointStorage type (#362)\n\nADR 46 renamed the SubscriptionPosition type family to Checkpoint in 0.30.0,\nincluding the storage adapter classes (NativeMongoCheckpointStorage and the\nothers), but left the four modules that ship them named -position-storage. This\nfinishes that rename for the module coor\n[…]\nr link in NativeMongoSubscriptionModel.\n\nDocs-site changes are held on the docs/checkpoint-storage-module-rename branch\nfor the 0.31.0 release.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename the checkpoint-storage module coordinates to match their Check…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-21T09:11:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f68898c910cd252030d65a4dd47da66348d6731",
          "body": "…ntime flag\n\nThe interface javadoc claimed it is \"only implemented by stores where\nwritesPosition() is true\", which contradicts the next sentence and the\nimplementations. A STREAM-only store implements PositionOrderedReader\nunconditionally and reports writesPosition() == false when configured withou\n[…]\neck\nwritesPosition() before the read methods, and note that an instanceof check\nalone does not tell you whether the instance writes a position.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Fix PositionOrderedReader javadoc: writesPosition() is a ru…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T17:07:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0959440cfd3f580e6d11b0d496a11dcdf24fea0f",
          "body": "The \"Changelog next version\" section had standalone entries describing\nrefinements to features that debut in this same release: the flow-saga bounded\nwindow, the saga timer poller gating, snapshot reset-handling, snapshot module\nlayering, projection hardening, and saga footgun guards. Framed as \"now\n[…]\ndevelopment history. Record the\nrule in AGENTS.md so future refinements to still-unreleased features are folded\nin instead of added as changes.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fold unreleased-feature refinements into their changelog entries (#360)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T16:59:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "814acd7e9b0a55d8f25e745c79915d3734c3bac1",
          "body": "* Default the saga timer poll interval to 15s instead of 1s\n\nThe poll interval only bounds how late a due timer fires, not event delivery,\nand saga timeouts run at a minutes-to-days timescale, so polling the state\nstore every second was mostly empty queries. Raise the default to 15 seconds,\nthe same\n[…]\njavadoc in\nSagaRunnerConfig and OccurrentProperties to read more naturally.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Default the saga timer poll interval to 15s instead of 1s (#359)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T16:40:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b12bd1a7734ec6ca96f71fec2b6645b5f4f8726",
          "body": "The saga event path is already single-active across instances by default\n(the injected Subscribable is a competing-consumer subscription model), but\nthe timer poller was not: SagaRunner.run starts a ScheduledExecutorService on\nevery instance that queries SagaStateStore.findWithDueTimers each interva\n[…]\nnt\ndispatch, ADR 63); this removes the redundant query load. The residual\ncross-node duplicate-dispatch race is unchanged. Rationale in ADR 64.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Lease-gate the saga timer poller for multi-instance deployments (#358)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T14:48:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "768ff4b1e7d1e8e77b13309aac8d9ec9a83a6312",
          "body": "* Snapshot layering + cross-module + doc reframes (PR6)\n\nRestores ADR 61's stated layering: SnapshotPolicies.whenTerminal(Decider) moves\nout of snapshot-dsl-common into the blocking and reactor executor modules, and\ncommon's pom.xml drops its occurrent-decider dependency, so a SnapshotView-only\ncons\n[…]\n4.8 <noreply@anthropic.com>\n\n* Replace an em-dash in SnapshotPolicy javadoc\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Snapshot module layering and API-review polish (#357)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T11:54:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f99ae9cc0ae65ea21c2a31b2282081bd13930274",
          "body": "* Harden the Projection DSL: duplicate-id guard, Java project(), DcbProjection filter rejection\n\n- DomainEventFeed.register (blocking + reactor) rejects a second registration\n  under an id already in use, mirroring RegisteringSubscribable's checkpoint-key\n  uniqueness guard.\n- Projections.project(pr\n[…]\ne, race-safe gate, this is\nan optimization on top of it, not a replacement.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Harden the projection DSL against silent misuse (#356)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T11:42:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "76df74838afb988afd2200feb628fa86f037b84a",
          "body": "* Saga hardening: guards and delivery-contract docs (PR3, G2)\n\nG1: warn when a fired timer resolves to no handler (typo stall) instead of\nstalling the instance silently, in SagaExecutionSupport. Adds slf4j-api to\nsaga-dsl-common.\n\nG7: FlowSaga.Builder.startsOn now rejects a type already registered b\n[…]\nlarge and could misalign a join or throw\nIndexOutOfBounds after an upgrade.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bound the flow-saga event log and close saga DSL footguns (#355)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T11:28:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a22975959b8b300b06d31eab18788eee38bac67",
          "body": "* Fix snapshot version drift on a reset stream (S1)\n\nA snapshot whose version is ahead of the stream's true head means the stream\nwas reset (truncated) below a snapshot written against the longer stream.\nResuming from it folds onto state the stream no longer holds. Only stream paths\nare affected; a \n[…]\n that residual window. Noted in ADR 61 as a tried and reverted\nalternative.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Stop trusting a stale snapshot after a stream reset (#351)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T11:09:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "23ab64816b507a3a6c35f9e1b27aaa1f40d00609",
          "body": "…. (#350)\n\nThe synchronous-subscription modules (blocking and reactor) and the\napplication-service native-transaction and reactor modules are now\nmanaged versions in the BOM, matching the existing entry shape.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add four published-but-unmanaged modules to BOM dependency management…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-20T10:47:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9bbb382379d0189727390244e9082a9be4ff2c85",
          "body": "…name\n\nReplace the two inline org.occurrent.dsl.saga.internal.TypeDispatch references\nwith a plain import, the only gratuitous FQN in the saga code. The remaining\nqualified names are deliberate: the @Saga/@Projection/@Snapshot annotations share\na simple name with their DSL descriptor types, so one of each pair must stay\nqualified.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Import TypeDispatch in FlowSaga instead of using its fully-qualified …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T20:25:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c4adfafe252a4ced9ff201dc88d305be84332b6",
          "body": "Add a Current State entry and module-boundary note for the saga-dsl family,\ncapturing the durable decisions (executor-polled timers over the deadline module,\nat-least-once dispatch with the outbox deferred, both authoring surfaces on one\ndescriptor, docs held on the release-gated docs/saga-dsl branch).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record the merged Saga DSL (PR #348) in ORCHESTRATOR.md",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T20:19:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d909f096381e30a3ac0bda1bdeb8a6cefdd7be9c",
          "body": "* Add saga DSL machine-core descriptor (occurrent-saga-dsl-common)\n\nIntroduce the pure saga (process-manager) descriptor: the command-issuing\ndual of Decider. Saga<E, S, C> folds events and its own timeouts into\ncommands via a strict evolve/react split, so replay (which folds evolve\nonly) never re-i\n[…]\nhing the guarantee Builder.build() already gives for\na missing startsOn(...).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add a Saga DSL for event-driven process managers (#348)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T20:17:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f63ee362929d674e68740340d74abc6c7c279e01",
          "body": "A student deregistered while still enrolled lingered in the course-detail\nread and on the dashboard, and their seat stayed occupied in the enrollment\nwrite model, so the freed seat could not be reused.\n\nAdd a WhenStudentDeregisteredThenUnenrollFromAllCourses policy: a durable\n@DcbSubscription on Stu\n[…]\nrolledInCourseException, and so on), and have the policy catch\nonly StudentNotEnrolledInCourseException so an unrelated error is not\nswallowed.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Unenroll deregistered students from their courses",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T09:26:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1cdb70194dac3dc1101c1d6e0853fe5151f963f",
          "body": "… AGENTS.md",
          "is_bot": false,
          "headline": "[ci skip] Move durable Testcontainers gotchas from ORCHESTRATOR.md to…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T08:54:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7732270e28f3316d747f234a052ec3200e64de19",
          "body": "…ame in ORCHESTRATOR.md",
          "is_bot": false,
          "headline": "[ci skip] Mark PR #345 merged and record PR #346 follow-up + docs ren…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T08:39:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5d0afe73887c43600bd92ca6c60c5f74855b6d0",
          "body": "Add a Testcontainers test for a @Projection(source = PUSH) whose store is a\nMaterializedView rather than a ViewStateRepository, covering the reactive\nbean-post-processor branch that drives the view with a reactive fold and uses the\nprojection only for the replay filter. Follow-up to #345, which added the branch\nbut only tested the ViewStateRepository path.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Test the reactor domain-push MaterializedView store branch (#346)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T08:31:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2df6988a5b9b43ed3a4df452cb88528228987d5e",
          "body": "…ly change streams (#345)\n\n* Add a generic push subscription model for feeding projections from external sources\n\nExtract the shared register-and-route machinery of SynchronousSubscriptionModel\ninto RegisteringSubscribable (blocking + reactor api modules) and add a new\nPushSubscriptionModel driven b\n[…]\nProjectionFeed.accept and CatchupThenPushSubscriptionModel's live handover.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feed projections from external push sources (RabbitMQ, Kafka), not on…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-19T07:28:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1595ae8f2441f115a2b1b9f2986ed072b62cb50e",
          "body": "…ntally (post-0.30.0 review) (#344)\n\n- C4: project(projection) now throws on a keyed projection instead of silently\n  blending every instance into one state, and a new project(projection,\n  instanceId) overload folds a single instance (stream pull reader, blocking and\n  reactor). A singleton project\n[…]\nStream) folds incrementally in one pass instead of collecting\n  the whole history first, and the snapshot readState tail is folded the same way\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix keyed on-demand projection reads and fold on-demand reads increme…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-18T06:16:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "408e1372e0a0c74bd58c3fc009039cc9696f8dc7",
          "body": "The maintained DCB snapshot read and materialized the whole boundary range\nbefore checking the everyNEvents throttle, so a higher throttle read more, not\nless. Gate first on the position delta, since the number of matching events\ncannot exceed position minus base.version(). The exact range.size() check stays,\nso the save cadence is unchanged, and it is a no-op at the default\neveryNEvents = 1.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Gate the DCB @Snapshot maintain path before the range read (P1) (#343)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-18T06:16:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "485657f727fe3d6decfc0a2cb41fcb8658c1905a",
          "body": "… review) (#342)\n\n- C2/C7: one uniform execute* matrix across all four decider facades (execute\n  plus executeAndReturnDecision/State/Events, single and list, stream adds\n  String/UUID id). The snapshot facades hold store/options/keyFunction in the\n  constructor and are generic in the state type, so\n[…]\niption, covered by the\n  UpgradeToOccurrent_0_31 OpenRewrite recipe\n- D2: @Projection/@Snapshot rename startAtPosition to startAtGlobalPosition\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Unify the decider facades and hoist the annotation enums (post-0.30.0…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-18T06:04:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "efb70933eb761207251691e70704a607428f226b",
          "body": "…(#341)\n\nAll of these touch unreleased code, so there is no changelog entry.\n\n- C1: drop the nullable-state bound on the reactor snapshot state-returning\n  methods so a Mono<S> no longer promises a null it cannot carry\n- B1: preserve sideEffect and fromStreamVersion across the stream ExecuteOptions\n\n[…]\nadable snapshot\n- reject startupMode combined with mode = SYNCHRONOUS\n- ADR 0057 to 0061 corrections and @Snapshot/SnapshotPolicy javadoc fixes\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix correctness and API-hygiene findings from the post-0.30.0 review …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-18T05:48:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e245a1da6fc13c2b50c9e745dd8817c728ab56bb",
          "body": "…ORCHESTRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record the settled reactor snapshot null-state contract in …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-18T05:30:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4fb8ad6f8f1bc5b4ba3888d6fcb60d604ce5f9ab",
          "body": "…44) in ORCHESTRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record the post-0.30.0 review remediation stack (PRs #341-3…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T22:36:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "109648ce99c981aa31cc62bb28c55629a056bee3",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Mark first-class snapshots merged (PR #340) in ORCHESTRATOR.md",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T18:49:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8b6c9ffd57911a4991b536e19407fcf6792adbdd",
          "body": "* Add first-class snapshot support (stream + DCB, decider- and view-based)\n\nAn opt-in replay optimization: a command execute folds only the events\nwritten after a saved state instead of the whole history. A snapshot is a\ndiscardable, schema-versioned cache of a fold result at a known version, so\na c\n[…]\nn before). @Projection\nis unreleased, and the pairing was always a footgun.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add first-class snapshot support (#340)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T17:41:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "272626b12ef693c3628f79d54ac99c5d90bd74d9",
          "body": "…R.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record PR #339 (javadoc/kdoc simplification) in ORCHESTRATO…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T09:15:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "010553d6922a2272f5b2c93020f5eb00bf1fd22b",
          "body": "* Simplify projection DSL and @Projection javadoc/kdoc\n\nTighten the verbose javadoc/kdoc across the projection DSL and the\n@Projection annotation per the code-comment style: lead with what the\ntype does, cut internal-mechanism narration and roadmap asides, drop\nprose semicolons, and bias toward shor\n[…]\nan em-dash or semicolon,\nmatching the prose style used across the codebase.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Simplify the javadoc and kdoc added since 0.30.0 (#339)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T09:15:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a4442554a2ff286f81617f7f02d616879574cba4",
          "body": "…R.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record the public-library reasoning learning in ORCHESTRATO…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T08:19:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f94c5f4e0ded104c553d6754f21706d89a3c897a",
          "body": "…in ORCHESTRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record PR #338 (optional projection id / singleton) merged …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T08:18:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d84f04a6724f4ee0dc3ec94d71b4826f3d2b4cb",
          "body": "* Make the projection id optional with a single-instance default\n\nThe projection id function is now optional. A single-instance read model\ndeclares singleton() on the Java Projection.Builder, or uses the dedicated\nKotlin builders singletonProjection/dcbSingletonProjection, dropping the\nper-event id.\n[…]\n.md note to singletonBuilder(...) for the Java\nsingle-instance entry point.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make the projection id optional with a single-instance default (#338)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-17T08:17:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c23317f52c1f8635522ab2ab64aef10788a975c",
          "body": "…vadoc fix in ORCHESTRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record DcbProjectionRunner factory PR #337 and the retry-ja…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T13:24:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6a7c2fabb8393eeb584210d385f8f5a7d3e5d547",
          "body": "ProjectionRunner is built with static factories (agnostic/stream) but\nDcbProjectionRunner exposed a public constructor, so the two runner\nfamilies were created two different ways. Give DcbProjectionRunner and\nReactiveDcbProjectionRunner a static create(...) factory and make the\nconstructor private, matching the non-DCB runners. Update the two call\nsites and the javadoc. No behaviour change.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Create DcbProjectionRunner through a static factory (#337)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T13:23:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "589c2cc3fa795c973550afbaf578e6cd6788b2cb",
          "body": "The ViewStateRepository overloads said \"no optimistic-locking retry is\napplied\", which read as if a failed update is dropped. Clarify that the\nsubscription model's retry strategy still redelivers a failed event, and\nthat the fine-grained re-read-and-reapply retry is what materialized(...)\nadds for concurrent writers to the same instance. Doc only.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Clarify projection materialization retry javadoc",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T12:53:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b30d2a8bf2734321ed5d44f5f3b1377ac95374d3",
          "body": "…TOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record ProjectionFilters internal move PR #336 in ORCHESTRA…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T11:09:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98bb61d0f05ee770260024b9a1133041617e005a",
          "body": "ProjectionFilters is plumbing shared by the blocking and reactor runners\nand the annotation registrar, not something callers construct like the\nProjection and DcbProjection descriptors. Move it from\norg.occurrent.dsl.projection to org.occurrent.dsl.projection.internal so\nexternal users see it is not part of the public API, matching the repo's\ninternal-package convention. Pure move, no behaviour change.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move ProjectionFilters into an internal package (#336)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T11:09:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5dd837b6a3eaca5110bbfaeb023ce53786b1983",
          "body": "…R.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record @Component projection example PR #335 in ORCHESTRATO…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T10:31:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e5e1a3a9d3267a5591641ce74f8d024aef2d1d40",
          "body": "The @Projection factory method does not need to be a @Bean in a\n@Configuration class: the registrar scans every Spring bean's methods\nfor @Projection. Move the course dashboard to a plain @Component (renamed\nCourseDashboardProjectionConfiguration to CourseDashboardProjection),\nwhich reads better for\n[…]\ntion and avoids the extra\nunused descriptor bean plus double factory invocation the @Bean form\ncauses. Note the same in the annotation Javadoc.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Show @Projection on a @Component in the course-enrollment example (#335)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T10:31:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "68855c4757c4195106053118346f0bdc08de56d8",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record store-by-Class PR #334 merged in ORCHESTRATOR.md",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T09:41:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edacc94c2bfd7cc55f925a7d8fbde88513821a78",
          "body": "…disambiguator (#334)\n\n* Reference the @Projection store by Class, not only by bean name\n\n@Projection.store() changes from a String bean name to a Class<?> that\nselects the store bean by type (Void.class means unset). A new\nstoreName() gives the optional bean name, used on its own or as a\ndisambigua\n[…]\ning, so the test no longer collides with a local MongoDB or a\nparallel run.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reference the @Projection store by Class, with an optional bean-name …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T09:40:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2047965a6d6d991f30003373db2b421110e79411",
          "body": "* Move the projection-dsl example to example-projection\n\nRelocates example/domain/projection-dsl to example/projection/projection-dsl\nand renames its package from org.occurrent.example.domain.projection to\norg.occurrent.example.projection.dsl, matching the example-projection group's\nnaming (for exam\n[…]\nprojection-dsl and\norg.occurrent.example.projection.dsl to match this move.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move the projection-dsl example to example-projection (#333)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T07:09:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "363edb74aa054ef9ec9d758767434c2053bc136d",
          "body": "…RATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record PR #332 merged and #2 store-by-Class plan in ORCHEST…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T07:00:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c1c9587c3b31e13c734f419d177054e4352f4372",
          "body": "…hboard (#332)\n\n* Reject a second call to single-assignment projection builder methods\n\nThe Projection.Builder id and filter setters and the Kotlin\nDcbProjectionBuilder criteria setter silently overwrote a prior value\nwhen called twice. Make each throw IllegalStateException on a second\ncall so a dup\n[…]\nequired. It rebuilds from the whole\nevent history regardless of write path.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Reject duplicate projection builder calls and simplify the course das…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T06:58:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2600f0939943f2063f0d620d5941299269f9574a",
          "body": "…HESTRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Note singleton Projection DSL follow-up (issue #331) in ORC…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-16T06:07:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b5dc400a72e514754d438f11b7e484d164af7dd",
          "body": "…TRATOR.md\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record annotation enum unification PR #330 merged in ORCHES…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T19:48:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "61a11cf1f36284b3002c1215774eb542dfdaef84",
          "body": "…ms (#330)\n\n* Unify annotation ResumeBehavior/StartupMode into shared top-level enums\n\n@Subscription, @StreamSubscription, @DcbSubscription, and @Projection each\ndeclared their own identical nested ResumeBehavior { SAME_AS_START_AT, DEFAULT }\nand StartupMode { DEFAULT, WAIT_UNTIL_STARTED, BACKGROUND\n[…]\nFAULT/WAIT_UNTIL_STARTED/BACKGROUND so\nthe test mirrors the real migration.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Unify annotation ResumeBehavior/StartupMode into shared top-level enu…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T19:46:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "14f6c80145db14561bbeb56b5c88cbcbccc6d80b",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record @Projection PR #329 merged in ORCHESTRATOR.md",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T17:25:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5105146a7d7ec839f3ad87829e0269c4ecebab7f",
          "body": "* Add @Projection annotation and the Spring-free resume-gate helper\n\nFoundation for the @Projection follow-up. @Projection (framework/annotations) is a method annotation for a factory returning a Projection/DcbProjection descriptor, with id/startAt/startAtPosition/resumeBehavior/startupMode/capabili\n[…]\ntrol of the key. The store adapters intentionally mirror the view DSL here.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add a @Projection annotation for declarative catch-up read models (#329)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T17:22:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29e7a479e677ab8c7dbad98308cf63d58c17eeca",
          "body": "* Add a higher-level read-model Projection DSL\n\nIntroduce a read-side counterpart to DcbDecider: a Projection couples the existing pure View with an id-derivation, its handled event types, and an optional Filter; a DcbProjection adds a DcbCriteria read boundary. A type-safe per-event-type handler bu\n[…]\nProjection DSL, fixed here because this PR's CI is the first to surface it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add a higher-level read-model Projection DSL (#328)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T13:05:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f7f6ef4437e6d513612283e87ccc1b877e860209",
          "body": "* Add synchronous subscriptions: core seam + blocking model\n\nIntroduce the foundation for invoking subscription handlers synchronously from\nthe application service before execute returns, so a projection can be updated\nin the write path and, with a transaction, atomically with the event write.\n\n- Tr\n[…]\nact violation fails fast rather than passing\nthrough. Blocking and reactor.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add synchronous subscriptions (#327)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T09:20:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4481e961c2bef51f30a7b0b2a873610af36f70fb",
          "body": "* Shard CI tests across parallel runners after a shared build\n\nThe single `mvn -B package` over the whole reactor ran ~13-14 min per JDK\nleg, dominated by sequential Testcontainers/Awaitility tests (compile is a\nsmall fraction). Split CI into a cheap `build` job (`install -DskipTests`,\nper JDK) that\n[…]\ns) so each runner does about half the churn. The retry stays as a\nbackstop.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Shard CI tests across parallel runners after a shared build (#326)",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-15T05:40:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f45a90193b78e72154d0067733cd5be590227804",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Note dcb-patterns examples-table follow-up on next release",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-14T14:42:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2728b2b2f4bc3ab2214e79eb4d2a3114f26e4ec3",
          "body": "…work\n\nCorrect the upkeep rule: fold the memory update into the same pull request or\npush as the change it describes, so it lands atomically. The direct-to-main\n[ci skip] commit is only the fallback for work that already merged or a\nstandalone memory refresh.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Prefer updating ORCHESTRATOR.md in the same PR/push as the …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-14T14:22:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b1af3e32041db1ad6bb7c9b556380ab4dd4c7222",
          "body": "…upkeep rule to AGENTS.md\n\nORCHESTRATOR.md: add the 2026-07-14 Java decider facades entry (PR #325,\nunreleased on main) plus the held docs PR occurrent-org.github.io#5 reminder\nwith release-detection signals, and note it in the header.\n\nAGENTS.md: under \"Deeper context\", require updating .context/OR\n[…]\nerge to main when the change warrants it, note it may be\ncommitted straight to main without a PR, and that such commits use a [ci skip]\nprefix.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "[ci skip] Record Java decider facades in ORCHESTRATOR.md and add its …",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-14T14:20:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "15310eaa51be4f06280dcfc13a41ee99ac456131",
          "body": "…les (#324)\n\n* Add DCB read direction/limit and a dcb-patterns example catalog\n\nExtend DcbReadOptions with an optional Direction (FORWARD/BACKWARD) and a\nlimit, plus the backwardsLimited(n) factory, implemented across the\nin-memory, native, Spring blocking, and Spring reactor DCB stores.\nDirection a\n[…]\nhreads or hang. Refresh the\norchestrator note now that the work is in a PR.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add DCB read direction/limit and cover the remaining dcb.events examp…",
          "author_name": "Johan Haleby",
          "author_login": "johanhaleby",
          "committed_at": "2026-07-14T14:12:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 415,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 23,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "org.occurrent:occurrent-rewrite",
          "exists": true,
          "license": "Apache 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": true,
          "registry_url": "https://central.sonatype.com/artifact/org.occurrent/occurrent-rewrite",
          "is_deprecated": false,
          "latest_version": "0.30.0",
          "repository_url": "https://github.com/johanhaleby/occurrent.git/occurrent-rewrite",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-13T09:30:05Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 12
        },
        {
          "name": "org.occurrent:test-support",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/org.occurrent/test-support",
          "is_deprecated": false,
          "latest_version": "0.16.6",
          "repository_url": null,
          "versions_count": 41,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2023-08-15T06:46:06Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 1075
        },
        {
          "name": "org.occurrent:occurrent-cloudevents-extension",
          "exists": true,
          "license": "Apache 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": true,
          "registry_url": "https://central.sonatype.com/artifact/org.occurrent/occurrent-cloudevents-extension",
          "is_deprecated": false,
          "latest_version": "0.30.0",
          "repository_url": "https://github.com/johanhaleby/occurrent.git/occurrent-cloudevents-extension",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-13T09:29:34Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 12
        }
      ]
    },
    "popularity": {
      "forks": 20,
      "stars": 161,
      "watchers": 4,
      "fork_history": {
        "days": [
          {
            "date": "2020-09-12",
            "count": 1
          },
          {
            "date": "2020-09-20",
            "count": 1
          },
          {
            "date": "2020-09-29",
            "count": 1
          },
          {
            "date": "2020-09-30",
            "count": 1
          },
          {
            "date": "2020-11-11",
            "count": 1
          },
          {
            "date": "2021-02-05",
            "count": 1
          },
          {
            "date": "2021-08-02",
            "count": 1
          },
          {
            "date": "2021-08-05",
            "count": 1
          },
          {
            "date": "2021-08-13",
            "count": 1
          },
          {
            "date": "2021-08-30",
            "count": 1
          },
          {
            "date": "2021-11-04",
            "count": 1
          },
          {
            "date": "2022-07-11",
            "count": 1
          },
          {
            "date": "2023-02-07",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 1
          },
          {
            "date": "2024-03-19",
            "count": 1
          },
          {
            "date": "2024-10-16",
            "count": 1
          },
          {
            "date": "2025-05-23",
            "count": 1
          },
          {
            "date": "2025-11-08",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 1
          },
          {
            "date": "2026-07-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 20,
        "total_forks": 20
      },
      "star_history": null,
      "open_issues_and_prs": 96
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "application/cloudevent-converter/api/pom.xml",
        "application/cloudevent-converter/core/pom.xml",
        "application/cloudevent-converter/generic/pom.xml",
        "application/cloudevent-converter/jackson/pom.xml",
        "application/cloudevent-converter/jackson3/pom.xml",
        "application/cloudevent-converter/pom.xml",
        "application/cloudevent-converter/xstream/pom.xml",
        "application/cloudevent-type-mapper/api/pom.xml",
        "application/cloudevent-type-mapper/pom.xml",
        "application/cloudevent-type-mapper/reflection/pom.xml",
        "application/command-composition/pom.xml",
        "application/command-dispatch-annotation/pom.xml",
        "application/command-dispatch-dcb/pom.xml",
        "application/command-dispatch/pom.xml",
        "application/pom.xml",
        "application/service/blocking/pom.xml",
        "application/service/common/pom.xml",
        "application/service/dcb-annotation/pom.xml",
        "application/service/pom.xml",
        "application/service/reactor/pom.xml",
        "application/service/transaction-mongodb-native/pom.xml",
        "application/service/transaction-spring-reactor/pom.xml",
        "application/service/transaction-spring/pom.xml",
        "bom/pom.xml",
        "cloudevents-extension/pom.xml",
        "common/annotation-support/pom.xml",
        "common/eventstore-capability/pom.xml",
        "common/filter/pom.xml",
        "common/functional-support/pom.xml",
        "common/inmemory/filter-matching/pom.xml",
        "common/inmemory/pom.xml",
        "common/mongodb/native/filter-bsonfilter-conversion/pom.xml",
        "common/mongodb/native/pom.xml",
        "common/mongodb/pom.xml",
        "common/mongodb/specialfilterhandling/pom.xml",
        "common/mongodb/spring/filter-query-conversion/pom.xml",
        "common/mongodb/spring/pom.xml",
        "common/mongodb/spring/sort-conversion/pom.xml",
        "common/mongodb/timerepresentation/pom.xml",
        "common/pom.xml",
        "common/retry/pom.xml",
        "common/time/pom.xml",
        "deadline/api/blocking/pom.xml",
        "deadline/api/pom.xml",
        "deadline/inmemory/pom.xml",
        "deadline/jobrunr/pom.xml",
        "deadline/pom.xml",
        "dsl/dcb-dsl/blocking/pom.xml",
        "dsl/dcb-dsl/common/pom.xml",
        "dsl/dcb-dsl/pom.xml",
        "dsl/dcb-dsl/reactor/pom.xml",
        "dsl/decider-arrow/pom.xml",
        "dsl/decider/pom.xml",
        "dsl/module-dsl/blocking/pom.xml",
        "dsl/module-dsl/pom.xml",
        "dsl/pom.xml",
        "dsl/projection-dsl/blocking/pom.xml",
        "dsl/projection-dsl/common/pom.xml",
        "dsl/projection-dsl/pom.xml",
        "dsl/projection-dsl/reactor/pom.xml",
        "dsl/query-dsl/blocking/pom.xml",
        "dsl/query-dsl/pom.xml",
        "dsl/query-dsl/reactor/pom.xml",
        "dsl/saga-dsl/blocking/pom.xml",
        "dsl/saga-dsl/common/pom.xml",
        "dsl/saga-dsl/mongodb-spring/pom.xml",
        "dsl/saga-dsl/pom.xml",
        "dsl/snapshot-dsl/blocking/pom.xml",
        "dsl/snapshot-dsl/common/pom.xml",
        "dsl/snapshot-dsl/mongodb-spring-blocking/pom.xml",
        "dsl/snapshot-dsl/mongodb-spring-reactor/pom.xml",
        "dsl/snapshot-dsl/pom.xml",
        "dsl/snapshot-dsl/reactor/pom.xml",
        "dsl/subscription-dsl/blocking/pom.xml",
        "dsl/subscription-dsl/common/pom.xml",
        "dsl/subscription-dsl/pom.xml",
        "dsl/subscription-dsl/reactor/pom.xml",
        "dsl/view-dsl/pom.xml",
        "eventstore/api/blocking/pom.xml",
        "eventstore/api/common/pom.xml",
        "eventstore/api/dcb-reactor/pom.xml",
        "eventstore/api/dcb/pom.xml",
        "eventstore/api/pom.xml",
        "eventstore/api/reactor/pom.xml",
        "eventstore/inmemory/pom.xml",
        "eventstore/migration/pom.xml",
        "eventstore/migration/position-backfill/pom.xml",
        "eventstore/mongodb/common/pom.xml",
        "eventstore/mongodb/dcb-common/pom.xml",
        "eventstore/mongodb/native/pom.xml",
        "eventstore/mongodb/pom.xml",
        "eventstore/mongodb/spring/blocking/pom.xml",
        "eventstore/mongodb/spring/pom.xml",
        "eventstore/mongodb/spring/reactor/pom.xml",
        "eventstore/pom.xml",
        "example/domain/appointment-scheduling/pom.xml",
        "example/domain/course-enrollment/pom.xml",
        "example/domain/dcb-patterns/pom.xml",
        "example/domain/hotel-booking/pom.xml",
        "example/domain/mastermind/decider-model-kotlin/pom.xml",
        "example/domain/mastermind/pom.xml",
        "example/domain/number-guessing-game/model/pom.xml",
        "example/domain/number-guessing-game/mongodb/native/pom.xml",
        "example/domain/number-guessing-game/mongodb/pom.xml",
        "example/domain/number-guessing-game/mongodb/spring/blocking/pom.xml",
        "example/domain/number-guessing-game/mongodb/spring/pom.xml",
        "example/domain/number-guessing-game/pom.xml",
        "example/domain/pom.xml",
        "example/domain/rps/decider-model/pom.xml",
        "example/domain/rps/decider-web/pom.xml",
        "example/domain/rps/model/pom.xml",
        "example/domain/rps/multiround-decider-model/pom.xml",
        "example/domain/rps/pom.xml",
        "example/domain/rps/pragmatic-model/pom.xml",
        "example/domain/uno/model/pom.xml",
        "example/domain/uno/mongodb/common/pom.xml",
        "example/domain/uno/mongodb/native/pom.xml",
        "example/domain/uno/mongodb/pom.xml",
        "example/domain/uno/mongodb/spring/blocking/pom.xml",
        "example/domain/uno/mongodb/spring/pom.xml",
        "example/domain/uno/pom.xml",
        "example/domain/word-guessing-game/model/pom.xml",
        "example/domain/word-guessing-game/mongodb/pom.xml",
        "example/domain/word-guessing-game/mongodb/spring/blocking/pom.xml",
        "example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/pom.xml",
        "example/domain/word-guessing-game/mongodb/spring/dcb/pom.xml",
        "example/domain/word-guessing-game/mongodb/spring/pom.xml",
        "example/domain/word-guessing-game/pom.xml",
        "example/forwarder/mongodb-subscription-to-spring-event/pom.xml",
        "example/forwarder/pom.xml",
        "example/pom.xml",
        "example/projection/global-position-catchup/pom.xml",
        "example/projection/pom.xml",
        "example/projection/projection-dsl/pom.xml",
        "example/projection/spring-adhoc-eventstore-mongodb-queries/pom.xml",
        "example/projection/spring-reactor-transactional-projection-mongodb/pom.xml",
        "example/projection/spring-subscription-based-mongodb-projections/pom.xml",
        "example/projection/spring-transactional-projection-mongodb/pom.xml",
        "example/saga/order-fulfillment/pom.xml",
        "example/saga/pom.xml",
        "example/snapshot/closing-the-books/pom.xml",
        "example/snapshot/pom.xml",
        "framework/annotations/pom.xml",
        "framework/pom.xml",
        "framework/spring-boot-autoconfigure-mongodb-common/pom.xml",
        "framework/spring-boot-starter-mongodb-reactive/pom.xml",
        "framework/spring-boot-starter-mongodb/pom.xml",
        "library/hederlig/pom.xml",
        "library/pom.xml",
        "pom.xml",
        "rewrite/pom.xml",
        "subscription/api/blocking/pom.xml",
        "subscription/api/pom.xml",
        "subscription/api/reactor/pom.xml",
        "subscription/core/pom.xml",
        "subscription/inmemory/pom.xml",
        "subscription/mongodb/common/base/pom.xml",
        "subscription/mongodb/common/blocking/competing-consumer-strategy/pom.xml",
        "subscription/mongodb/common/blocking/pom.xml",
        "subscription/mongodb/common/pom.xml",
        "subscription/mongodb/native/blocking-checkpoint-storage/pom.xml",
        "subscription/mongodb/native/blocking-competing-consumer-strategy/pom.xml",
        "subscription/mongodb/native/blocking/pom.xml",
        "subscription/mongodb/native/pom.xml",
        "subscription/mongodb/pom.xml",
        "subscription/mongodb/spring/blocking-checkpoint-storage/pom.xml",
        "subscription/mongodb/spring/blocking-competing-consumer-strategy/pom.xml",
        "subscription/mongodb/spring/blocking/pom.xml",
        "subscription/mongodb/spring/common/pom.xml",
        "subscription/mongodb/spring/pom.xml",
        "subscription/mongodb/spring/reactor-checkpoint-storage/pom.xml",
        "subscription/mongodb/spring/reactor/pom.xml",
        "subscription/pom.xml",
        "subscription/push/blocking/pom.xml",
        "subscription/push/pom.xml",
        "subscription/push/reactor/pom.xml",
        "subscription/redis/pom.xml",
        "subscription/redis/spring/blocking-checkpoint-storage/pom.xml",
        "subscription/redis/spring/pom.xml",
        "subscription/synchronous/blocking/pom.xml",
        "subscription/synchronous/pom.xml",
        "subscription/synchronous/reactor/pom.xml",
        "subscription/util/blocking/catchup-subscription/pom.xml",
        "subscription/util/blocking/competing-consumer-subscription/pom.xml",
        "subscription/util/blocking/durable-subscription/pom.xml",
        "subscription/util/blocking/pom.xml",
        "subscription/util/blocking/stream-catchup-subscription/pom.xml",
        "subscription/util/pom.xml",
        "subscription/util/predicates/pom.xml",
        "subscription/util/reactor/catchup-subscription/pom.xml",
        "subscription/util/reactor/durable-subscription/pom.xml",
        "subscription/util/reactor/pom.xml",
        "subscription/util/reactor/stream-catchup-subscription/pom.xml",
        "test-support/pom.xml"
      ],
      "largest_source_bytes": 100013,
      "source_files_sampled": 1243,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 9428
    },
    "dependencies": {
      "manifests": [
        "application/pom.xml",
        "bom/pom.xml",
        "cloudevents-extension/pom.xml",
        "common/pom.xml",
        "deadline/pom.xml",
        "dsl/pom.xml",
        "eventstore/pom.xml",
        "example/pom.xml",
        "framework/pom.xml",
        "library/pom.xml",
        "pom.xml",
        "rewrite/pom.xml",
        "subscription/pom.xml",
        "test-support/pom.xml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": false,
            "version": "2.21.4",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5gvw-p9qm-jgwh",
              "GHSA-5jmj-h7xm-6q6v",
              "GHSA-mhm7-754m-9p8w"
            ],
            "fixed_version": "3.2.1",
            "advisory_count": 3,
            "oldest_advisory_days": 31
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "moderate": 1
        },
        "advisory_count": 3,
        "affected_count": 1,
        "assessed_count": 58,
        "malicious_count": 0,
        "assessed_package": "maven:org.occurrent:occurrent-rewrite@0.30.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven"
      ],
      "dependencies": [
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "application/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevents-extension",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-capability",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-filter",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-functional-support",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-annotation-support",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-api-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-api-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-api-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-inmemory-filter-matching",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-inmemory",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-time",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-mongodb-timerepresentation",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-mongodb-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-mongodb-specialfilterhandling",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-mongodb-native-filter-bsonfilter-conversion",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-retry",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-mongodb-native",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-mongodb-spring-filter-query-conversion",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-common-mongodb-spring-sort-conversion",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-mongodb-spring-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-eventstore-mongodb-spring-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-core",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-common-base",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-api-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-common-blocking-competing-consumer-strategy",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-api-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-push-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-push-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-synchronous-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-synchronous-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-reactor-checkpoint-storage",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-util-predicates",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-durable-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking-checkpoint-storage",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking-competing-consumer-strategy",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking-checkpoint-storage",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking-competing-consumer-strategy",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-redis-spring-blocking-checkpoint-storage",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-durable-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-stream-catchup-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-catchup-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-competing-consumer-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-inmemory",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-converter-api",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-command-composition",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-type-mapper-api",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-converter-generic",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-transaction-mongodb-native",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-transaction-spring",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-transaction-spring-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-application-service-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-dcb-annotation-taggenerator",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-command-dispatch",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-command-dispatch-annotation",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-command-dispatch-dcb",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-converter-xstream",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-type-mapper-reflection",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-converter-jackson",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-cloudevent-converter-jackson3",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-dsl-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-subscription-dsl-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-module-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-query-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-query-dsl-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-decider",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-decider-arrow",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-view-dsl",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-projection-dsl-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-projection-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-projection-dsl-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-saga-dsl-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-saga-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-saga-dsl-mongodb-spring",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-snapshot-dsl-common",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-snapshot-dsl-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-snapshot-dsl-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-annotations",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-mongodb-spring-boot-autoconfigure",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-mongodb-spring-boot-starter",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-mongodb-reactive-spring-boot-starter",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-deadline-api-blocking",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-deadline-jobrunr",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-deadline-inmemory",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.occurrent:occurrent-hederlig",
          "manifest": "bom/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.jspecify:jspecify",
          "manifest": "cloudevents-extension/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.cloudevents:cloudevents-core",
          "manifest": "cloudevents-extension/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "deadline/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "dsl/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "eventstore/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "framework/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "library/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "io.cloudevents:cloudevents-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${cloudevents.version}"
        },
        {
          "name": "com.thoughtworks.xstream:xstream",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.4.21"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.0.12"
        },
        {
          "name": "io.javalin:javalin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.9.1"
        },
        {
          "name": "com.j2html:j2html",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.4.0"
        },
        {
          "name": "com.rabbitmq:amqp-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "5.21.0"
        },
        {
          "name": "jakarta.annotation:jakarta.annotation-api",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.1.1"
        },
        {
          "name": "org.jetbrains.kotlin:kotlin-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${kotlin.version}"
        },
        {
          "name": "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "0.3.7"
        },
        {
          "name": "io.arrow-kt:arrow-stack",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.2.4"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.jspecify:jspecify",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.0.0"
        },
        {
          "name": "org.jobrunr:jobrunr",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jobrunr.version}"
        },
        {
          "name": "org.springframework.retry:spring-retry",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-retry.version}"
        },
        {
          "name": "org.openrewrite.recipe:rewrite-recipe-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.34.0"
        },
        {
          "name": "org.junit:junit-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${junit.version}"
        },
        {
          "name": "org.testcontainers:testcontainers-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${test-containers.version}"
        },
        {
          "name": "org.assertj:assertj-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.27.4"
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.5.32"
        },
        {
          "name": "io.vavr:vavr",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "0.10.3"
        },
        {
          "name": "org.awaitility:awaitility",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${awaitility.version}"
        },
        {
          "name": "org.awaitility:awaitility-kotlin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${awaitility.version}"
        },
        {
          "name": "net.jqwik:jqwik",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.9.1"
        },
        {
          "name": "io.github.artsok:rerunner-jupiter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.1.6"
        },
        {
          "name": "org.mockito:mockito-bom",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "5.14.2"
        },
        {
          "name": "io.github.serpro69:kotlin-faker",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.0.0-rc.11"
        },
        {
          "name": "org.jetbrains.kotlin:kotlin-maven-allopen",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${kotlin.version}"
        },
        {
          "name": "org.openrewrite:rewrite-java",
          "manifest": "rewrite/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.openrewrite:rewrite-kotlin",
          "manifest": "rewrite/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.openrewrite:rewrite-maven",
          "manifest": "rewrite/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.openrewrite:rewrite-gradle",
          "manifest": "rewrite/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "subscription/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "com.fasterxml.jackson:jackson-bom",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson2.version}"
        },
        {
          "name": "org.jspecify:jspecify",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.mongodb:mongodb-driver-sync",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.testcontainers:testcontainers-mongodb",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${test-containers.version}"
        },
        {
          "name": "org.junit.jupiter:junit-jupiter-engine",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.cloudevents:cloudevents-core",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "test-support/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "ch.qos.logback:logback-classic",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "ch.qos.logback:logback-classic",
            "direct": true,
            "version": "1.5.32",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson:jackson-bom",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.j2html:j2html",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.j2html:j2html",
            "direct": true,
            "version": "1.4.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.rabbitmq:amqp-client",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.rabbitmq:amqp-client",
            "direct": true,
            "version": "5.21.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.thoughtworks.xstream:xstream",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.thoughtworks.xstream:xstream",
            "direct": true,
            "version": "1.4.21",
            "ecosystem": "maven"
          },
          {
            "name": "io.arrow-kt:arrow-stack",
            "direct": true,
            "version": "1.2.4",
            "ecosystem": "maven"
          },
          {
            "name": "io.cloudevents:cloudevents-bom",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "maven"
          },
          {
            "name": "io.cloudevents:cloudevents-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.artsok:rerunner-jupiter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.artsok:rerunner-jupiter",
            "direct": true,
            "version": "2.1.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.github.serpro69:kotlin-faker",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.serpro69:kotlin-faker",
            "direct": true,
            "version": "2.0.0-rc.11",
            "ecosystem": "maven"
          },
          {
            "name": "io.javalin:javalin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.javalin:javalin",
            "direct": true,
            "version": "3.9.1",
            "ecosystem": "maven"
          },
          {
            "name": "io.vavr:vavr",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vavr:vavr",
            "direct": true,
            "version": "0.10.3",
            "ecosystem": "maven"
          },
          {
            "name": "jakarta.annotation:jakarta.annotation-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "jakarta.annotation:jakarta.annotation-api",
            "direct": true,
            "version": "2.1.1",
            "ecosystem": "maven"
          },
          {
            "name": "net.jqwik:jqwik",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "net.jqwik:jqwik",
            "direct": true,
            "version": "1.9.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.assertj:assertj-bom",
            "direct": true,
            "version": "3.27.4",
            "ecosystem": "maven"
          },
          {
            "name": "org.awaitility:awaitility",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.awaitility:awaitility",
            "direct": true,
            "version": "4.2.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.awaitility:awaitility-kotlin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.awaitility:awaitility-kotlin",
            "direct": true,
            "version": "4.2.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-bom",
            "direct": true,
            "version": "2.3.21",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-maven-allopen",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-maven-allopen",
            "direct": true,
            "version": "2.3.21",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm",
            "direct": true,
            "version": "0.3.4",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm",
            "direct": true,
            "version": "0.3.7",
            "ecosystem": "maven"
          },
          {
            "name": "org.jobrunr:jobrunr",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jobrunr:jobrunr",
            "direct": true,
            "version": "8.1.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.jspecify:jspecify",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jspecify:jspecify",
            "direct": true,
            "version": "1.0.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter-engine",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.junit:junit-bom",
            "direct": true,
            "version": "5.11.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.mockito:mockito-bom",
            "direct": true,
            "version": "5.14.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.mongodb:mongodb-driver-sync",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-annotation-support",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-annotations",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-transaction-mongodb-native",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-transaction-spring",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-application-service-transaction-spring-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-generic",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-jackson",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-jackson3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-xstream",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-type-mapper-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-type-mapper-reflection",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevents-extension",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-command-composition",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-command-dispatch",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-command-dispatch-annotation",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-command-dispatch-dcb",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-inmemory-filter-matching",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-mongodb-native-filter-bsonfilter-conversion",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-mongodb-specialfilterhandling",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-mongodb-spring-filter-query-conversion",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-mongodb-spring-sort-conversion",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-common-mongodb-timerepresentation",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-dcb-annotation-taggenerator",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-deadline-api-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-deadline-inmemory",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-deadline-jobrunr",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-decider",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-decider-arrow",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-api-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-api-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-api-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-capability",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-inmemory",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-mongodb-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-mongodb-native",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-mongodb-spring-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-mongodb-spring-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-filter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-functional-support",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-hederlig",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-module-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-mongodb-reactive-spring-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-mongodb-spring-boot-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-mongodb-spring-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-projection-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-projection-dsl-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-projection-dsl-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-query-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-query-dsl-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-retry",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-saga-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-saga-dsl-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-saga-dsl-mongodb-spring",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-snapshot-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-snapshot-dsl-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-snapshot-dsl-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-api-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-api-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-catchup-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-competing-consumer-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-dsl-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-dsl-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-dsl-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-durable-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-durable-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-inmemory",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-common-base",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-common-blocking-competing-consumer-strategy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking-checkpoint-storage",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-native-blocking-competing-consumer-strategy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking-checkpoint-storage",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-blocking-competing-consumer-strategy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-mongodb-spring-reactor-checkpoint-storage",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-push-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-push-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-redis-spring-blocking-checkpoint-storage",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-stream-catchup-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-synchronous-blocking",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-synchronous-reactor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-util-predicates",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-time",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-view-dsl",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite.recipe:rewrite-recipe-bom",
            "direct": true,
            "version": "3.34.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-gradle",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-java",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-kotlin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-maven",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": "2.0.12",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "4.1.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.retry:spring-retry",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.retry:spring-retry",
            "direct": true,
            "version": "2.0.12",
            "ecosystem": "maven"
          },
          {
            "name": "org.testcontainers:testcontainers-bom",
            "direct": true,
            "version": "2.0.5",
            "ecosystem": "maven"
          },
          {
            "name": "org.testcontainers:testcontainers-mongodb",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-annotations",
            "direct": false,
            "version": "2.21",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.module:jackson-module-kotlin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.arrow-kt:arrow-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.cloudevents:cloudevents-api",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.cloudevents:cloudevents-json-jackson",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.lettuce:lettuce-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.projectreactor:reactor-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.projectreactor:reactor-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-gpg-plugin",
            "direct": false,
            "version": "1.6",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-shade-plugin",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-surefire-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.assertj:assertj-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:build-helper-maven-plugin",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:flatten-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:flatten-maven-plugin",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.dokka:dokka-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.dokka:dokka-maven-plugin",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-maven-plugin",
            "direct": false,
            "version": "2.3.21",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-reflect",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-stdlib",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlinx:kotlinx-html-jvm",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter-params",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mockito:mockito-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mongodb:mongodb-driver-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mongodb:mongodb-driver-reactivestreams",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:example-domain-word-guessing-game-model",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:example-number-guessing-game-model",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:example-rps-decider-model",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:example-uno-eventstore-mongodb-common",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:example-uno-model",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-cloudevent-converter-core",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-dcb-dsl-blocking",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-dcb-dsl-common",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-dcb-dsl-reactor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-api-dcb",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-api-dcb-reactor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-eventstore-mongodb-dcb-common",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-catchup-reactor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:occurrent-subscription-stream-catchup-reactor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.occurrent:test-support",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-java-21",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.openrewrite:rewrite-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-simple",
            "direct": false,
            "version": "2.0.12",
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.central:central-publishing-maven-plugin",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.plugins:nexus-staging-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.plugins:nexus-staging-maven-plugin",
            "direct": false,
            "version": "1.6.13",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-autoconfigure",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-configuration-processor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-data-mongodb",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-devtools",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-maven-plugin",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-mongodb",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-aspectj",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-data-mongodb",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-data-mongodb-reactive",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-data-redis",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-thymeleaf",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-webflux",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-webmvc",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-testcontainers",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.data:spring-data-mongodb",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.data:spring-data-redis",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.hateoas:spring-hateoas",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-aspects",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-tx",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.testcontainers:testcontainers",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.testcontainers:testcontainers-junit-jupiter",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.testcontainers:testcontainers-rabbitmq",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.webjars.npm:htmx-ext-sse",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.webjars.npm:htmx.org",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "maven"
          },
          {
            "name": "org.webjars:webjars-locator-lite",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.module:jackson-module-kotlin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson:jackson-bom",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 232,
        "direct_count": 148,
        "indirect_count": 84
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 182,
        "open_issues": 95,
        "closed_ratio": 0.532,
        "closed_issues": 108,
        "closed_unmerged_prs": 39
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "johanhaleby",
          "commits": 1763,
          "avatar_url": "https://avatars.githubusercontent.com/u/187029?v=4"
        },
        {
          "type": "User",
          "login": "gavvvr",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/1719646?v=4"
        },
        {
          "type": "User",
          "login": "JanGroot",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/4427488?v=4"
        },
        {
          "type": "User",
          "login": "DaveOfMalmo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2962708?v=4"
        },
        {
          "type": "User",
          "login": "slinkydeveloper",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/6706544?v=4"
        },
        {
          "type": "User",
          "login": "MateuszNaKodach",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/18637116?v=4"
        },
        {
          "type": "User",
          "login": "chrisdginn",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/159921?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.967
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "maven.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 7,
            "reason": "15 out of 19 merged PRs checked by a CI test -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "8cc4e9ab11cc3496a98b4315352845ce200ee152",
        "ran_at": "2026-07-25T16:40:26Z",
        "aggregate_score": 4.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-25T14:17:00Z",
      "oldest_open_prs": [
        {
          "number": 426,
          "created_at": "2026-07-25T14:16:14Z",
          "last_comment_at": "2026-07-25T14:38:30Z",
          "last_comment_author": "johanhaleby"
        }
      ],
      "last_merged_pr_at": "2026-07-25T14:10:34Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 6,
          "created_at": "2020-09-04T06:05:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2020-09-04T07:09:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 11,
          "created_at": "2020-09-14T10:31:47Z",
          "last_comment_at": "2020-10-18T05:54:45Z",
          "last_comment_author": "johanhaleby"
        },
        {
          "number": 13,
          "created_at": "2020-09-25T12:18:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 15,
          "created_at": "2020-10-07T08:37:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 16,
          "created_at": "2020-10-09T06:49:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 19,
          "created_at": "2020-10-20T05:00:36Z",
          "last_comment_at": "2020-10-20T05:41:22Z",
          "last_comment_author": "johanhaleby"
        },
        {
          "number": 22,
          "created_at": "2020-10-23T04:57:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 23,
          "created_at": "2020-10-27T08:27:14Z",
          "last_comment_at": "2020-11-28T17:43:50Z",
          "last_comment_author": "johanhaleby"
        },
        {
          "number": 24,
          "created_at": "2020-10-29T06:48:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 27,
          "created_at": "2020-11-02T08:28:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 31,
          "created_at": "2020-11-03T08:00:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 32,
          "created_at": "2020-11-03T08:02:05Z",
          "last_comment_at": "2020-11-28T17:41:36Z",
          "last_comment_author": "johanhaleby"
        },
        {
          "number": 34,
          "created_at": "2020-11-09T11:09:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 49,
          "created_at": "2020-12-21T08:46:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 50,
          "created_at": "2020-12-21T13:30:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 54,
          "created_at": "2020-12-22T14:36:54Z",
          "last_comment_at": "2020-12-22T14:37:50Z",
          "last_comment_author": "johanhaleby"
        },
        {
          "number": 55,
          "created_at": "2020-12-22T14:37:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 56,
          "created_at": "2020-12-23T08:48:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 58,
          "created_at": "2020-12-31T11:06:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/johanhaleby/occurrent",
    "host": "github.com",
    "name": "occurrent",
    "owner": "johanhaleby"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 57,
        "vitality": 48,
        "community": 49,
        "governance": 57,
        "engineering": 77
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 48,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "commits_last_year": 415,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 23
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "23/52 weeks with commits",
                "points": 15.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 23
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "415 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 415
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 49,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 49,
            "inputs": {
              "forks": 20,
              "stars": 161,
              "watchers": 4,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "161 stars",
                "points": 35.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 161
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "20 forks",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "4 watchers",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.967
            },
            "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 97% of commits",
                "points": 0.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "merged_prs": 182,
              "open_issues": 95,
              "closed_issues": 108,
              "issue_closed_ratio": 0.532,
              "closed_unmerged_prs": 39
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "53% of issues closed",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 53
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "182/221 decided PRs merged",
                "points": 31.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 182,
                      "decided": 221
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "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": 67,
            "inputs": {
              "followers": 414,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "johanhaleby",
              "public_repos": 72,
              "account_age_days": 6029
            },
            "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": "414 followers of johanhaleby",
                "points": 18.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 414,
                      "login": "johanhaleby"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "72 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 72
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "org.occurrent:occurrent-rewrite",
                "org.occurrent:test-support",
                "org.occurrent:occurrent-cloudevents-extension"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 12
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 12 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "41 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 41
                    }
                  }
                ],
                "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": 77,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "15 out of 19 merged PRs checked by a CI test -- score normalized to 7",
                "points": 14,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "cloud-events",
                "event-sourcing",
                "java",
                "kotlin"
              ],
              "has_wiki": true,
              "homepage": "https://occurrent.org",
              "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": "https://occurrent.org",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 57,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 49,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "15 out of 19 merged PRs checked by a CI test -- score normalized to 7",
                "points": 1.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Matched the maven:org.occurrent:occurrent-rewrite@0.30.0 runtime dependency closure — what installing the published package pulls in — 58 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:org.occurrent:occurrent-rewrite@0.30.0",
                  "assessed": 58
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 87,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 1,
              "assessed_packages": 58,
              "unassessed_packages": 0,
              "affected_by_severity": "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": "1 affected: com.fasterxml.jackson.core:jackson-databind 2.21.4 (moderate 6.5)",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "com.fasterxml.jackson.core:jackson-databind 2.21.4 (moderate 6.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "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": 58,
              "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": 8
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 69,
        "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.88,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 9428
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "88 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 88,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.7,
              "toolchain_manifests": [
                "application/cloudevent-converter/api/pom.xml",
                "application/cloudevent-converter/core/pom.xml",
                "application/cloudevent-converter/generic/pom.xml",
                "application/cloudevent-converter/jackson/pom.xml",
                "application/cloudevent-converter/jackson3/pom.xml",
                "application/cloudevent-converter/pom.xml",
                "application/cloudevent-converter/xstream/pom.xml",
                "application/cloudevent-type-mapper/api/pom.xml",
                "application/cloudevent-type-mapper/pom.xml",
                "application/cloudevent-type-mapper/reflection/pom.xml",
                "application/command-composition/pom.xml",
                "application/command-dispatch-annotation/pom.xml",
                "application/command-dispatch-dcb/pom.xml",
                "application/command-dispatch/pom.xml",
                "application/pom.xml",
                "application/service/blocking/pom.xml",
                "application/service/common/pom.xml",
                "application/service/dcb-annotation/pom.xml",
                "application/service/pom.xml",
                "application/service/reactor/pom.xml",
                "application/service/transaction-mongodb-native/pom.xml",
                "application/service/transaction-spring-reactor/pom.xml",
                "application/service/transaction-spring/pom.xml",
                "bom/pom.xml",
                "cloudevents-extension/pom.xml",
                "common/annotation-support/pom.xml",
                "common/eventstore-capability/pom.xml",
                "common/filter/pom.xml",
                "common/functional-support/pom.xml",
                "common/inmemory/filter-matching/pom.xml",
                "common/inmemory/pom.xml",
                "common/mongodb/native/filter-bsonfilter-conversion/pom.xml",
                "common/mongodb/native/pom.xml",
                "common/mongodb/pom.xml",
                "common/mongodb/specialfilterhandling/pom.xml",
                "common/mongodb/spring/filter-query-conversion/pom.xml",
                "common/mongodb/spring/pom.xml",
                "common/mongodb/spring/sort-conversion/pom.xml",
                "common/mongodb/timerepresentation/pom.xml",
                "common/pom.xml",
                "common/retry/pom.xml",
                "common/time/pom.xml",
                "deadline/api/blocking/pom.xml",
                "deadline/api/pom.xml",
                "deadline/inmemory/pom.xml",
                "deadline/jobrunr/pom.xml",
                "deadline/pom.xml",
                "dsl/dcb-dsl/blocking/pom.xml",
                "dsl/dcb-dsl/common/pom.xml",
                "dsl/dcb-dsl/pom.xml",
                "dsl/dcb-dsl/reactor/pom.xml",
                "dsl/decider-arrow/pom.xml",
                "dsl/decider/pom.xml",
                "dsl/module-dsl/blocking/pom.xml",
                "dsl/module-dsl/pom.xml",
                "dsl/pom.xml",
                "dsl/projection-dsl/blocking/pom.xml",
                "dsl/projection-dsl/common/pom.xml",
                "dsl/projection-dsl/pom.xml",
                "dsl/projection-dsl/reactor/pom.xml",
                "dsl/query-dsl/blocking/pom.xml",
                "dsl/query-dsl/pom.xml",
                "dsl/query-dsl/reactor/pom.xml",
                "dsl/saga-dsl/blocking/pom.xml",
                "dsl/saga-dsl/common/pom.xml",
                "dsl/saga-dsl/mongodb-spring/pom.xml",
                "dsl/saga-dsl/pom.xml",
                "dsl/snapshot-dsl/blocking/pom.xml",
                "dsl/snapshot-dsl/common/pom.xml",
                "dsl/snapshot-dsl/mongodb-spring-blocking/pom.xml",
                "dsl/snapshot-dsl/mongodb-spring-reactor/pom.xml",
                "dsl/snapshot-dsl/pom.xml",
                "dsl/snapshot-dsl/reactor/pom.xml",
                "dsl/subscription-dsl/blocking/pom.xml",
                "dsl/subscription-dsl/common/pom.xml",
                "dsl/subscription-dsl/pom.xml",
                "dsl/subscription-dsl/reactor/pom.xml",
                "dsl/view-dsl/pom.xml",
                "eventstore/api/blocking/pom.xml",
                "eventstore/api/common/pom.xml",
                "eventstore/api/dcb-reactor/pom.xml",
                "eventstore/api/dcb/pom.xml",
                "eventstore/api/pom.xml",
                "eventstore/api/reactor/pom.xml",
                "eventstore/inmemory/pom.xml",
                "eventstore/migration/pom.xml",
                "eventstore/migration/position-backfill/pom.xml",
                "eventstore/mongodb/common/pom.xml",
                "eventstore/mongodb/dcb-common/pom.xml",
                "eventstore/mongodb/native/pom.xml",
                "eventstore/mongodb/pom.xml",
                "eventstore/mongodb/spring/blocking/pom.xml",
                "eventstore/mongodb/spring/pom.xml",
                "eventstore/mongodb/spring/reactor/pom.xml",
                "eventstore/pom.xml",
                "example/domain/appointment-scheduling/pom.xml",
                "example/domain/course-enrollment/pom.xml",
                "example/domain/dcb-patterns/pom.xml",
                "example/domain/hotel-booking/pom.xml",
                "example/domain/mastermind/decider-model-kotlin/pom.xml",
                "example/domain/mastermind/pom.xml",
                "example/domain/number-guessing-game/model/pom.xml",
                "example/domain/number-guessing-game/mongodb/native/pom.xml",
                "example/domain/number-guessing-game/mongodb/pom.xml",
                "example/domain/number-guessing-game/mongodb/spring/blocking/pom.xml",
                "example/domain/number-guessing-game/mongodb/spring/pom.xml",
                "example/domain/number-guessing-game/pom.xml",
                "example/domain/pom.xml",
                "example/domain/rps/decider-model/pom.xml",
                "example/domain/rps/decider-web/pom.xml",
                "example/domain/rps/model/pom.xml",
                "example/domain/rps/multiround-decider-model/pom.xml",
                "example/domain/rps/pom.xml",
                "example/domain/rps/pragmatic-model/pom.xml",
                "example/domain/uno/model/pom.xml",
                "example/domain/uno/mongodb/common/pom.xml",
                "example/domain/uno/mongodb/native/pom.xml",
                "example/domain/uno/mongodb/pom.xml",
                "example/domain/uno/mongodb/spring/blocking/pom.xml",
                "example/domain/uno/mongodb/spring/pom.xml",
                "example/domain/uno/pom.xml",
                "example/domain/word-guessing-game/model/pom.xml",
                "example/domain/word-guessing-game/mongodb/pom.xml",
                "example/domain/word-guessing-game/mongodb/spring/blocking/pom.xml",
                "example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/pom.xml",
                "example/domain/word-guessing-game/mongodb/spring/dcb/pom.xml",
                "example/domain/word-guessing-game/mongodb/spring/pom.xml",
                "example/domain/word-guessing-game/pom.xml",
                "example/forwarder/mongodb-subscription-to-spring-event/pom.xml",
                "example/forwarder/pom.xml",
                "example/pom.xml",
                "example/projection/global-position-catchup/pom.xml",
                "example/projection/pom.xml",
                "example/projection/projection-dsl/pom.xml",
                "example/projection/spring-adhoc-eventstore-mongodb-queries/pom.xml",
                "example/projection/spring-reactor-transactional-projection-mongodb/pom.xml",
                "example/projection/spring-subscription-based-mongodb-projections/pom.xml",
                "example/projection/spring-transactional-projection-mongodb/pom.xml",
                "example/saga/order-fulfillment/pom.xml",
                "example/saga/pom.xml",
                "example/snapshot/closing-the-books/pom.xml",
                "example/snapshot/pom.xml",
                "framework/annotations/pom.xml",
                "framework/pom.xml",
                "framework/spring-boot-autoconfigure-mongodb-common/pom.xml",
                "framework/spring-boot-starter-mongodb-reactive/pom.xml",
                "framework/spring-boot-starter-mongodb/pom.xml",
                "library/hederlig/pom.xml",
                "library/pom.xml",
                "pom.xml",
                "rewrite/pom.xml",
                "subscription/api/blocking/pom.xml",
                "subscription/api/pom.xml",
                "subscription/api/reactor/pom.xml",
                "subscription/core/pom.xml",
                "subscription/inmemory/pom.xml",
                "subscription/mongodb/common/base/pom.xml",
                "subscription/mongodb/common/blocking/competing-consumer-strategy/pom.xml",
                "subscription/mongodb/common/blocking/pom.xml",
                "subscription/mongodb/common/pom.xml",
                "subscription/mongodb/native/blocking-checkpoint-storage/pom.xml",
                "subscription/mongodb/native/blocking-competing-consumer-strategy/pom.xml",
                "subscription/mongodb/native/blocking/pom.xml",
                "subscription/mongodb/native/pom.xml",
                "subscription/mongodb/pom.xml",
                "subscription/mongodb/spring/blocking-checkpoint-storage/pom.xml",
                "subscription/mongodb/spring/blocking-competing-consumer-strategy/pom.xml",
                "subscription/mongodb/spring/blocking/pom.xml",
                "subscription/mongodb/spring/common/pom.xml",
                "subscription/mongodb/spring/pom.xml",
                "subscription/mongodb/spring/reactor-checkpoint-storage/pom.xml",
                "subscription/mongodb/spring/reactor/pom.xml",
                "subscription/pom.xml",
                "subscription/push/blocking/pom.xml",
                "subscription/push/pom.xml",
                "subscription/push/reactor/pom.xml",
                "subscription/redis/pom.xml",
                "subscription/redis/spring/blocking-checkpoint-storage/pom.xml",
                "subscription/redis/spring/pom.xml",
                "subscription/synchronous/blocking/pom.xml",
                "subscription/synchronous/pom.xml",
                "subscription/synchronous/reactor/pom.xml",
                "subscription/util/blocking/catchup-subscription/pom.xml",
                "subscription/util/blocking/competing-consumer-subscription/pom.xml",
                "subscription/util/blocking/durable-subscription/pom.xml",
                "subscription/util/blocking/pom.xml",
                "subscription/util/blocking/stream-catchup-subscription/pom.xml",
                "subscription/util/pom.xml",
                "subscription/util/predicates/pom.xml",
                "subscription/util/reactor/catchup-subscription/pom.xml",
                "subscription/util/reactor/durable-subscription/pom.xml",
                "subscription/util/reactor/pom.xml",
                "subscription/util/reactor/stream-catchup-subscription/pom.xml",
                "test-support/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "application/cloudevent-converter/api/pom.xml, application/cloudevent-converter/core/pom.xml, application/cloudevent-converter/generic/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "application/cloudevent-converter/api/pom.xml, application/cloudevent-converter/core/pom.xml, application/cloudevent-converter/generic/pom.xml"
                    }
                  }
                ],
                "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": "Java (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "70 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 70,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 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": "Java",
              "largest_source_bytes": 100013,
              "source_files_sampled": 1243,
              "oversized_source_files": 5
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Java (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "5/1243 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1243,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T16:41:37.896394Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/johanhaleby/occurrent.svg",
  "full_name": "johanhaleby/occurrent",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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