Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-25 16:41 UTC

johanhaleby / occurrent

Unintrusive Event Sourcing Library for the JVM

Java · KotlinApache-2.0★ 161 stars⑂ 20 forkssince Jul 2020View on GitHub ↗

johanhaleby/occurrent holds a health index of 58 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (77/100) and lowest on Vitality (48/100). It was last updated today. A single contributor accounts for most of its recent work.

58
overall / 100
Moderate

Software health index

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

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

Score profile

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

Ownership

Johan HalebyPersonal account
414 followers72 public repossince Jan 2010Parkster

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Mavenorg.occurrent:occurrent-rewrite0.30.0-112 days ago
Mavenorg.occurrent:test-support0.16.6-411075 days ago
Mavenorg.occurrent:occurrent-cloudevents-extension0.30.0-112 days ago

Metrics by category

Vitality

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

48At risk · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.9/36Commit cadence — 23/52 weeks with commits
18/18Commit volume — 415 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year415
human_commit_share1
days_since_last_push0
active_weeks_last_year23
How it's scored
0/27Ships releases — no releases published
0/36Release recency — no releases
0/27Release cadence — no releases
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count0
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

49At risk · 18% of overall
How it's scored
35.8/60Stars — 161 stars
10.7/25Forks — 20 forks
2.7/15Watchers — 4 watchers
Inputs used
forks20
stars161
watchers4
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

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

57Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.7/22.5Commit distribution — top contributor authored 97% of commits
9.5/13.5Contributor breadth — 7 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled7
top_contributor_share0.967
How it's scored
24.9/46.8Issue resolution — 53% of issues closed
31.5/38.3PR acceptance — 182/221 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs182
open_issues95
closed_issues108
issue_closed_ratio0.532
closed_unmerged_prs39
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
18.8/25Owner reach — 414 followers of johanhaleby
25/25Track record — 72 public repos, account ~16 yr old
Inputs used
followers414
owner_typeUser
is_verified
owner_loginjohanhaleby
public_repos72
account_age_days6,029
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 3 package(s) on maven
35/35Publish recency — latest publish 12 days ago
20/20Version history — 41 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesorg.occurrent:occurrent-rewrite, org.occurrent:test-support, org.occurrent:occurrent-cloudevents-extension
ecosystemsmaven
any_deprecatedno
min_days_since_publish12

Engineering Quality

Are baseline engineering and documentation practices in place?

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

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://occurrent.org
10/10Repository description
10/10Topics — 4 topics
10/10Wiki
Inputs used
topicscloud-events, event-sourcing, java, kotlin
has_wikiyes
homepagehttps://occurrent.org
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

57Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 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.5License — 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 — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4.9
Excluded from scoring (no data or not applicable): packaging, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
12/25Indirect dependencies free of known advisories — 1 affected: com.fasterxml.jackson.core:jackson-databind 2.21.4 (moderate 6.5)
40/40No advisories left outstanding — no advisory has been public longer than 90 days
Inputs used
sourceosv
advisories3
affected_packages1
assessed_packages58
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
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.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

69Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 88 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.88
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes9,428
How it's scored
12.6/18One-command bootstrap — application/cloudevent-converter/api/pom.xml, application/cloudevent-converter/core/pom.xml, application/cloudevent-converter/generic/pom.xml (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — Java (statically typed)
0/10Reproducible environment
10/10Demonstrated agent practice — 70 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
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
How it's scored
45/45Type-checkable code — Java (statically typed)
54.8/55Manageable file sizes — 5/1,243 source files over 60KB
Inputs used
primary_languageJava
largest_source_bytes100,013
source_files_sampled1,243
oversized_source_files5
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — example
Inputs used
example_dirsexample
has_mcp_signalno
api_schema_files

Key facts

161GitHub stars
7contributors
415commits, last 12 months
0days since last push
0releases
1bus factor
95open issues
Mavenpackage ecosystems

Data collection warnings

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

More detail

Star and fork history 0 ★ / 20 ⇿
0Stars
20Forks

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

0481216202022020-092023-082026-07

Each point covers 6 days.

OpenSSF Scorecard 4.9 / 10
4.9aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-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
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 141
RegistryPackageVersion constraintManifest
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
All dependencies 232

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

RegistryPackageVersionRelation
Mavench.qos.logback:logback-classicdirect
Mavench.qos.logback:logback-classic1.5.32direct
Mavencom.fasterxml.jackson.core:jackson-databinddirect
Mavencom.fasterxml.jackson:jackson-bomdirect
Mavencom.j2html:j2htmldirect
Mavencom.j2html:j2html1.4.0direct
Mavencom.rabbitmq:amqp-clientdirect
Mavencom.rabbitmq:amqp-client5.21.0direct
Mavencom.thoughtworks.xstream:xstreamdirect
Mavencom.thoughtworks.xstream:xstream1.4.21direct
Mavenio.arrow-kt:arrow-stack1.2.4direct
Mavenio.cloudevents:cloudevents-bom4.0.1direct
Mavenio.cloudevents:cloudevents-coredirect
Mavenio.github.artsok:rerunner-jupiterdirect
Mavenio.github.artsok:rerunner-jupiter2.1.6direct
Mavenio.github.serpro69:kotlin-fakerdirect
Mavenio.github.serpro69:kotlin-faker2.0.0-rc.11direct
Mavenio.javalin:javalindirect
Mavenio.javalin:javalin3.9.1direct
Mavenio.vavr:vavrdirect
Mavenio.vavr:vavr0.10.3direct
Mavenjakarta.annotation:jakarta.annotation-apidirect
Mavenjakarta.annotation:jakarta.annotation-api2.1.1direct
Mavennet.jqwik:jqwikdirect
Mavennet.jqwik:jqwik1.9.1direct
Mavenorg.assertj:assertj-bom3.27.4direct
Mavenorg.awaitility:awaitilitydirect
Mavenorg.awaitility:awaitility4.2.2direct
Mavenorg.awaitility:awaitility-kotlindirect
Mavenorg.awaitility:awaitility-kotlin4.2.2direct
Mavenorg.jetbrains.kotlin:kotlin-bom2.3.21direct
Mavenorg.jetbrains.kotlin:kotlin-maven-allopendirect
Mavenorg.jetbrains.kotlin:kotlin-maven-allopen2.3.21direct
Mavenorg.jetbrains.kotlinx:kotlinx-collections-immutable-jvm0.3.4direct
Mavenorg.jetbrains.kotlinx:kotlinx-collections-immutable-jvm0.3.7direct
Mavenorg.jobrunr:jobrunrdirect
Mavenorg.jobrunr:jobrunr8.1.0direct
Mavenorg.jspecify:jspecifydirect
Mavenorg.jspecify:jspecify1.0.0direct
Mavenorg.junit.jupiter:junit-jupiter-enginedirect
Mavenorg.junit:junit-bom5.11.3direct
Mavenorg.mockito:mockito-bom5.14.2direct
Mavenorg.mongodb:mongodb-driver-syncdirect
Mavenorg.occurrent:occurrent-annotation-supportdirect
Mavenorg.occurrent:occurrent-annotationsdirect
Mavenorg.occurrent:occurrent-application-service-blockingdirect
Mavenorg.occurrent:occurrent-application-service-commondirect
Mavenorg.occurrent:occurrent-application-service-reactordirect
Mavenorg.occurrent:occurrent-application-service-transaction-mongodb-nativedirect
Mavenorg.occurrent:occurrent-application-service-transaction-springdirect
Mavenorg.occurrent:occurrent-application-service-transaction-spring-reactordirect
Mavenorg.occurrent:occurrent-cloudevent-converter-apidirect
Mavenorg.occurrent:occurrent-cloudevent-converter-genericdirect
Mavenorg.occurrent:occurrent-cloudevent-converter-jacksondirect
Mavenorg.occurrent:occurrent-cloudevent-converter-jackson3direct
Mavenorg.occurrent:occurrent-cloudevent-converter-xstreamdirect
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-apidirect
Mavenorg.occurrent:occurrent-cloudevent-type-mapper-reflectiondirect
Mavenorg.occurrent:occurrent-cloudevents-extensiondirect
Mavenorg.occurrent:occurrent-command-compositiondirect
Mavenorg.occurrent:occurrent-command-dispatchdirect
Mavenorg.occurrent:occurrent-command-dispatch-annotationdirect
Mavenorg.occurrent:occurrent-command-dispatch-dcbdirect
Mavenorg.occurrent:occurrent-common-inmemory-filter-matchingdirect
Mavenorg.occurrent:occurrent-common-mongodb-native-filter-bsonfilter-conversiondirect
Mavenorg.occurrent:occurrent-common-mongodb-specialfilterhandlingdirect
Mavenorg.occurrent:occurrent-common-mongodb-spring-filter-query-conversiondirect
Mavenorg.occurrent:occurrent-common-mongodb-spring-sort-conversiondirect
Mavenorg.occurrent:occurrent-common-mongodb-timerepresentationdirect
Mavenorg.occurrent:occurrent-dcb-annotation-taggeneratordirect
Mavenorg.occurrent:occurrent-deadline-api-blockingdirect
Mavenorg.occurrent:occurrent-deadline-inmemorydirect
Mavenorg.occurrent:occurrent-deadline-jobrunrdirect
Mavenorg.occurrent:occurrent-deciderdirect
Mavenorg.occurrent:occurrent-decider-arrowdirect
Mavenorg.occurrent:occurrent-eventstore-api-blockingdirect
Mavenorg.occurrent:occurrent-eventstore-api-commondirect
Mavenorg.occurrent:occurrent-eventstore-api-reactordirect
Mavenorg.occurrent:occurrent-eventstore-capabilitydirect
Mavenorg.occurrent:occurrent-eventstore-inmemorydirect
Mavenorg.occurrent:occurrent-eventstore-mongodb-commondirect
Mavenorg.occurrent:occurrent-eventstore-mongodb-nativedirect
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-blockingdirect
Mavenorg.occurrent:occurrent-eventstore-mongodb-spring-reactordirect
Mavenorg.occurrent:occurrent-filterdirect
Mavenorg.occurrent:occurrent-functional-supportdirect
Mavenorg.occurrent:occurrent-hederligdirect
Mavenorg.occurrent:occurrent-module-dsl-blockingdirect
Mavenorg.occurrent:occurrent-mongodb-reactive-spring-boot-starterdirect
Mavenorg.occurrent:occurrent-mongodb-spring-boot-autoconfiguredirect
Mavenorg.occurrent:occurrent-mongodb-spring-boot-starterdirect
Mavenorg.occurrent:occurrent-projection-dsl-blockingdirect
Mavenorg.occurrent:occurrent-projection-dsl-commondirect
Mavenorg.occurrent:occurrent-projection-dsl-reactordirect
Mavenorg.occurrent:occurrent-query-dsl-blockingdirect
Mavenorg.occurrent:occurrent-query-dsl-reactordirect
Mavenorg.occurrent:occurrent-retrydirect
Mavenorg.occurrent:occurrent-saga-dsl-blockingdirect
Mavenorg.occurrent:occurrent-saga-dsl-commondirect
Mavenorg.occurrent:occurrent-saga-dsl-mongodb-springdirect
Mavenorg.occurrent:occurrent-snapshot-dsl-blockingdirect
Mavenorg.occurrent:occurrent-snapshot-dsl-commondirect
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-blockingdirect
Mavenorg.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactordirect
Mavenorg.occurrent:occurrent-snapshot-dsl-reactordirect
Mavenorg.occurrent:occurrent-subscription-api-blockingdirect
Mavenorg.occurrent:occurrent-subscription-api-reactordirect
Mavenorg.occurrent:occurrent-subscription-catchup-blockingdirect
Mavenorg.occurrent:occurrent-subscription-competing-consumer-blockingdirect
Mavenorg.occurrent:occurrent-subscription-coredirect
Mavenorg.occurrent:occurrent-subscription-dsl-blockingdirect
Mavenorg.occurrent:occurrent-subscription-dsl-commondirect
Mavenorg.occurrent:occurrent-subscription-dsl-reactordirect
Mavenorg.occurrent:occurrent-subscription-durable-blockingdirect
Mavenorg.occurrent:occurrent-subscription-durable-reactordirect
Mavenorg.occurrent:occurrent-subscription-inmemorydirect
Mavenorg.occurrent:occurrent-subscription-mongodb-common-basedirect
Mavenorg.occurrent:occurrent-subscription-mongodb-common-blocking-competing-consumer-strategydirect
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blockingdirect
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-checkpoint-storagedirect
Mavenorg.occurrent:occurrent-subscription-mongodb-native-blocking-competing-consumer-strategydirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blockingdirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-checkpoint-storagedirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-blocking-competing-consumer-strategydirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-commondirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactordirect
Mavenorg.occurrent:occurrent-subscription-mongodb-spring-reactor-checkpoint-storagedirect
Mavenorg.occurrent:occurrent-subscription-push-blockingdirect
Mavenorg.occurrent:occurrent-subscription-push-reactordirect
Mavenorg.occurrent:occurrent-subscription-redis-spring-blocking-checkpoint-storagedirect
Mavenorg.occurrent:occurrent-subscription-stream-catchup-blockingdirect
Mavenorg.occurrent:occurrent-subscription-synchronous-blockingdirect
Mavenorg.occurrent:occurrent-subscription-synchronous-reactordirect
Mavenorg.occurrent:occurrent-subscription-util-predicatesdirect
Mavenorg.occurrent:occurrent-timedirect
Mavenorg.occurrent:occurrent-view-dsldirect
Mavenorg.openrewrite.recipe:rewrite-recipe-bom3.34.0direct
Mavenorg.openrewrite:rewrite-gradledirect
Mavenorg.openrewrite:rewrite-javadirect
Mavenorg.openrewrite:rewrite-kotlindirect
Mavenorg.openrewrite:rewrite-mavendirect
Mavenorg.slf4j:slf4j-apidirect
Mavenorg.slf4j:slf4j-api2.0.12direct
Mavenorg.springframework.boot:spring-boot-dependencies4.1.0direct
Mavenorg.springframework.retry:spring-retrydirect
Mavenorg.springframework.retry:spring-retry2.0.12direct
Mavenorg.testcontainers:testcontainers-bom2.0.5direct
Mavenorg.testcontainers:testcontainers-mongodbdirect
Mavencom.fasterxml.jackson.core:jackson-annotations2.21indirect
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310indirect
Mavencom.fasterxml.jackson.module:jackson-module-kotlinindirect
Mavenio.arrow-kt:arrow-coreindirect
Mavenio.cloudevents:cloudevents-apiindirect
Mavenio.cloudevents:cloudevents-json-jacksonindirect
Mavenio.lettuce:lettuce-coreindirect
Mavenio.projectreactor:reactor-coreindirect
Mavenio.projectreactor:reactor-testindirect
Mavenorg.apache.maven.plugins:maven-gpg-plugin1.6indirect
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.5.0indirect
Mavenorg.apache.maven.plugins:maven-shade-plugin3.6.0indirect
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.1indirect
Mavenorg.apache.maven.plugins:maven-surefire-pluginindirect
Mavenorg.assertj:assertj-coreindirect
Mavenorg.codehaus.mojo:build-helper-maven-plugin3.6.1indirect
Mavenorg.codehaus.mojo:flatten-maven-pluginindirect
Mavenorg.codehaus.mojo:flatten-maven-plugin1.7.2indirect
Mavenorg.jetbrains.dokka:dokka-maven-pluginindirect
Mavenorg.jetbrains.dokka:dokka-maven-plugin2.0.0indirect
Mavenorg.jetbrains.kotlin:kotlin-maven-pluginindirect
Mavenorg.jetbrains.kotlin:kotlin-maven-plugin2.3.21indirect
Mavenorg.jetbrains.kotlin:kotlin-reflectindirect
Mavenorg.jetbrains.kotlin:kotlin-stdlibindirect
Mavenorg.jetbrains.kotlin:kotlin-testindirect
Mavenorg.jetbrains.kotlinx:kotlinx-html-jvm0.11.0indirect
Mavenorg.junit.jupiter:junit-jupiterindirect
Mavenorg.junit.jupiter:junit-jupiter-paramsindirect
Mavenorg.mockito:mockito-coreindirect
Mavenorg.mongodb:mongodb-driver-coreindirect
Mavenorg.mongodb:mongodb-driver-reactivestreamsindirect
Mavenorg.occurrent:example-domain-word-guessing-game-modelindirect
Mavenorg.occurrent:example-number-guessing-game-modelindirect
Mavenorg.occurrent:example-rps-decider-modelindirect
Mavenorg.occurrent:example-uno-eventstore-mongodb-commonindirect
Mavenorg.occurrent:example-uno-modelindirect
Mavenorg.occurrent:occurrent-cloudevent-converter-coreindirect
Mavenorg.occurrent:occurrent-dcb-dsl-blockingindirect
Mavenorg.occurrent:occurrent-dcb-dsl-commonindirect
Mavenorg.occurrent:occurrent-dcb-dsl-reactorindirect
Mavenorg.occurrent:occurrent-eventstore-api-dcbindirect
Mavenorg.occurrent:occurrent-eventstore-api-dcb-reactorindirect
Mavenorg.occurrent:occurrent-eventstore-mongodb-dcb-commonindirect
Mavenorg.occurrent:occurrent-subscription-catchup-reactorindirect
Mavenorg.occurrent:occurrent-subscription-stream-catchup-reactorindirect
Mavenorg.occurrent:test-supportindirect
Mavenorg.openrewrite:rewrite-java-21indirect
Mavenorg.openrewrite:rewrite-testindirect
Mavenorg.slf4j:slf4j-simple2.0.12indirect
Mavenorg.sonatype.central:central-publishing-maven-plugin0.7.0indirect
Mavenorg.sonatype.plugins:nexus-staging-maven-pluginindirect
Mavenorg.sonatype.plugins:nexus-staging-maven-plugin1.6.13indirect
Mavenorg.springframework.boot:spring-boot-autoconfigureindirect
Mavenorg.springframework.boot:spring-boot-configuration-processorindirect
Mavenorg.springframework.boot:spring-boot-data-mongodbindirect
Mavenorg.springframework.boot:spring-boot-devtoolsindirect
Mavenorg.springframework.boot:spring-boot-maven-pluginindirect
Mavenorg.springframework.boot:spring-boot-maven-plugin4.1.0indirect
Mavenorg.springframework.boot:spring-boot-mongodbindirect
Mavenorg.springframework.boot:spring-boot-starterindirect
Mavenorg.springframework.boot:spring-boot-starter-aspectjindirect
Mavenorg.springframework.boot:spring-boot-starter-data-mongodbindirect
Mavenorg.springframework.boot:spring-boot-starter-data-mongodb-reactiveindirect
Mavenorg.springframework.boot:spring-boot-starter-data-redisindirect
Mavenorg.springframework.boot:spring-boot-starter-testindirect
Mavenorg.springframework.boot:spring-boot-starter-thymeleafindirect
Mavenorg.springframework.boot:spring-boot-starter-webfluxindirect
Mavenorg.springframework.boot:spring-boot-starter-webmvcindirect
Mavenorg.springframework.boot:spring-boot-testindirect
Mavenorg.springframework.boot:spring-boot-testcontainersindirect
Mavenorg.springframework.data:spring-data-mongodbindirect
Mavenorg.springframework.data:spring-data-redisindirect
Mavenorg.springframework.hateoas:spring-hateoasindirect
Mavenorg.springframework:spring-aspectsindirect
Mavenorg.springframework:spring-txindirect
Mavenorg.testcontainers:testcontainersindirect
Mavenorg.testcontainers:testcontainers-junit-jupiterindirect
Mavenorg.testcontainers:testcontainers-rabbitmqindirect
Mavenorg.webjars.npm:htmx-ext-sse2.2.3indirect
Mavenorg.webjars.npm:htmx.org2.0.6indirect
Mavenorg.webjars:webjars-locator-lite1.1.0indirect
Maventools.jackson.core:jackson-databindindirect
Maventools.jackson.module:jackson-module-kotlinindirect
Maventools.jackson:jackson-bomindirect
Dependency advisories 1

Installing maven:org.occurrent:occurrent-rewrite@0.30.0 pulls in 58 packages, direct and transitive: 1 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
com.fasterxml.jackson.core:jackson-databind2.21.4indirectmoderate33.2.1

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

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "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"
}

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

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

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