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

luminion / spring-boot-starter

A Spring Boot Starter for common scenarios.

JavaApache-2.0★ 5 星标⑂ 1 复刻始于 2024年12月在 GitHub 上查看 ↗

luminion/spring-boot-starter 的健康指数为 100 分中的 46 分,处于「存在风险」区间。 其得分最高的类别是Vitality(82/100),最低的是Community & Adoption(29/100)。 最近一次更新在 8 天前。 近期的大部分工作由 1 位贡献者完成。

46
总分 / 100
存在风险

软件健康指数

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

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

评分画像

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

所有权

luminion个人账户
4 关注者20 个公开仓库始于 2018年8月

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

软件包生态系统

按类别列示的指标

活力

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

82良好 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 8 天前
20.8/36提交节奏 — 52 周中有 30 周有提交
18/18提交量 — 最近一年 216 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year216
human_commit_share1
days_since_last_push8
active_weeks_last_year30

发布纪律

88优秀
评分方式
16.2/27有发布版本 — 4 个版本标签(无 GitHub 发布版本)
36/36发布时效 — 最近一次发布版本于 8 天前
27/27发布节奏 — 约每 24.7 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count4
latest_release_tag1.3.0
releases_from_tags
days_since_latest_release8
mean_days_between_releases24.7
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

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

29危急 · 占总体的 18%
评分方式
9.8/60星标 — 5 个星标
0/25复刻 — 1 个复刻
0/15关注者 — 1 位关注者
所用输入
forks1
stars5
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

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

可持续性与治理

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

33存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
0/10OpenSSF Scorecard:Contributors — project has 0 contributing companies or organizations -- score normalized to 0
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
0/46.8议题解决 — 没有议题或无数据
0/38.3PR 接受 — 没有已裁定的拉取请求或无数据
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
已排除计分(无数据或不适用):议题解决, PR 接受。 其余权重已重新归一化。
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
5/25所有者影响力 — luminion 有 4 位关注者
21.6/25既往记录 — 20 个公开仓库,账户约 7 年
所用输入
followers4
owner_typeUser
is_verified
owner_loginluminion
public_repos20
account_age_days2,893
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — maven 上有 8 个软件包
35/35发布时效 — 最近一次发布于 8 天前
12/20版本历史 — 4 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesio.github.luminion:velo-autoconfigure-javax, io.github.luminion:velo-autoconfigure-common, io.github.luminion:velo-spring-boot2-starter, io.github.luminion:velo-spring-boot3-starter, io.github.luminion:velo-spring-boot4-starter, io.github.luminion:velo-autoconfigure-jakarta, io.github.luminion:velo-autoconfigure-jackson2, io.github.luminion:velo-autoconfigure-jackson3
ecosystemsmaven
any_deprecated
min_days_since_publish8

工程质量

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

38存在风险 · 占总体的 20%

工程实践

30存在风险
评分方式
0/24CI 工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 无数据
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
已排除计分(无数据或不适用):OpenSSF Scorecard:CI-Tests。 其余权重已重新归一化。

文档

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

安全

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

42存在风险 · 占总体的 16%

安全态势

36存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
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/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — 无数据
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — 无数据
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — 无数据
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3.6
已排除计分(无数据或不适用):ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
7/25间接依赖不含已知公告 — 4 个受影响:org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3),另有 1 个
24.8/40没有长期未处理的公告 — 4 个携带公告的软件包超过 90 天未处理;最早一条发布于 703 天前
所用输入
sourceosv
advisories6
affected_packages4
assessed_packages11
unassessed_packages0
affected_by_severityhigh 2, moderate 2
direct_affected_packages0
比对的是 maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 的运行时依赖闭包——安装已发布的软件包时真正被拉取进来的内容——共 11 个软件包。 未对可达性进行分析。

AI 就绪度

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

56中等 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
评分方式
12.6/18一条命令的引导启动 — pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Java(静态类型)
0/10可复现环境
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — 无数据
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestspom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml, velo-autoconfigure-jackson3/pom.xml, velo-autoconfigure-jakarta/pom.xml, velo-autoconfigure-javax/pom.xml, velo-spring-boot2-autoconfigure/pom.xml, velo-spring-boot2-dependencies/pom.xml, velo-spring-boot2-starter/pom.xml, velo-spring-boot3-autoconfigure/pom.xml, velo-spring-boot3-dependencies/pom.xml, velo-spring-boot3-starter/pom.xml, velo-spring-boot4-autoconfigure/pom.xml, velo-spring-boot4-dependencies/pom.xml, velo-spring-boot4-starter/pom.xml
dependency_bot_commit_share0
已排除计分(无数据或不适用):OpenSSF Scorecard:Pinned-Dependencies。 其余权重已重新归一化。
评分方式
45/45可类型检查的代码 — Java(静态类型)
55/55可控的文件大小 — 采样的 201 个源文件中有 0 个超过 60KB
所用输入
primary_languageJava
largest_source_bytes25,506
source_files_sampled201
oversized_source_files0

关键数据

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

数据采集警告

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

更多细节

OpenSSF Scorecard 3.6 / 10
3.6综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
不适用Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
不适用Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
不适用Token-PermissionsNo tokens found
9Vulnerabilities1 existing vulnerabilities detected
直接依赖 87
注册表软件包版本约束清单文件
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-common/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-common/pom.xml
Mavencom.baomidou:mybatis-plus-core${mybatis-plus.version}velo-autoconfigure-common/pom.xml
Mavencom.baomidou:mybatis-plus-extension${mybatis-plus.version}velo-autoconfigure-common/pom.xml
Mavenio.github.openfeign:feign-core${feign-core.version}velo-autoconfigure-common/pom.xml
Mavenorg.redisson:redisson-spring-boot-startervelo-autoconfigure-common/pom.xml
Mavencom.github.ben-manes.caffeine:caffeinevelo-autoconfigure-common/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-common/pom.xml
Mavencom.alibaba:easyexcel4.0.3velo-autoconfigure-common/pom.xml
Mavencn.idev.excel:fastexcel1.3.0velo-autoconfigure-common/pom.xml
Mavenorg.apache.fesod:fesod-sheet2.0.1-incubatingvelo-autoconfigure-common/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-jackson2/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisvelo-autoconfigure-jackson2/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-jackson2/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databindvelo-autoconfigure-jackson2/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310velo-autoconfigure-jackson2/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-autoconfigure-jackson3/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-jacksonvelo-autoconfigure-jackson3/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisvelo-autoconfigure-jackson3/pom.xml
Maventools.jackson.core:jackson-databindvelo-autoconfigure-jackson3/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-autoconfigure-jakarta/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-jakarta/pom.xml
Mavenjakarta.validation:jakarta.validation-apivelo-autoconfigure-jakarta/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-mailvelo-autoconfigure-jakarta/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot3-startervelo-autoconfigure-jakarta/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-jakarta/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-autoconfigure-javax/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-autoconfigurevelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-configuration-processorvelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webvelo-autoconfigure-javax/pom.xml
Mavenjavax.validation:validation-apivelo-autoconfigure-javax/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-mailvelo-autoconfigure-javax/pom.xml
Mavencom.baomidou:mybatis-plus-boot-startervelo-autoconfigure-javax/pom.xml
Mavenorg.jsoup:jsoupvelo-autoconfigure-javax/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-javax${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson2${project.version}velo-spring-boot2-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot2-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-boot-starter${mybatis-plus.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot2-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot2-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot2-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot2-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot2-dependencies${project.version}velo-spring-boot2-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot2-autoconfigure${project.version}velo-spring-boot2-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aopvelo-spring-boot2-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jakarta${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson2${project.version}velo-spring-boot3-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot3-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot3-starter${mybatis-plus.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot3-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot3-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot3-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot3-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot3-dependencies${project.version}velo-spring-boot3-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot3-autoconfigure${project.version}velo-spring-boot3-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aopvelo-spring-boot3-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-common${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jakarta${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenio.github.luminion:velo-autoconfigure-jackson3${project.version}velo-spring-boot4-autoconfigure/pom.xml
Mavenorg.springframework.boot:spring-boot-dependencies${spring-boot.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.redisson:redisson-spring-boot-starter${redisson.version}velo-spring-boot4-dependencies/pom.xml
Mavencom.baomidou:mybatis-plus-spring-boot4-starter${mybatis-plus.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.jsoup:jsoup${jsoup.version}velo-spring-boot4-dependencies/pom.xml
Mavencom.alibaba:easyexcel${easyexcel.version}velo-spring-boot4-dependencies/pom.xml
Mavencn.idev.excel:fastexcel${fastexcel.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.apache.fesod:fesod-sheet${fesod-sheet.version}velo-spring-boot4-dependencies/pom.xml
Mavenorg.projectlombok:lombok${lombok.version}velo-spring-boot4-dependencies/pom.xml
Mavenio.github.luminion:velo-spring-boot4-dependencies${project.version}velo-spring-boot4-starter/pom.xml
Mavenio.github.luminion:velo-spring-boot4-autoconfigure${project.version}velo-spring-boot4-starter/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-aspectjvelo-spring-boot4-starter/pom.xml
全部依赖 62

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

注册表软件包版本关系
Mavencn.idev.excel:fastexcel1.3.0直接
Mavencom.alibaba:easyexcel4.0.3直接
Mavencom.baomidou:mybatis-plus-boot-starter直接
Mavencom.baomidou:mybatis-plus-boot-starter3.5.14直接
Mavencom.baomidou:mybatis-plus-core3.5.14直接
Mavencom.baomidou:mybatis-plus-extension3.5.14直接
Mavencom.baomidou:mybatis-plus-spring-boot3-starter直接
Mavencom.baomidou:mybatis-plus-spring-boot3-starter3.5.14直接
Mavencom.baomidou:mybatis-plus-spring-boot4-starter3.5.14直接
Mavencom.fasterxml.jackson.core:jackson-databind直接
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310直接
Mavencom.github.ben-manes.caffeine:caffeine直接
Mavenio.github.luminion:velo-autoconfigure-common直接
Mavenio.github.luminion:velo-autoconfigure-jackson2直接
Mavenio.github.luminion:velo-autoconfigure-jackson3直接
Mavenio.github.luminion:velo-autoconfigure-jakarta直接
Mavenio.github.luminion:velo-autoconfigure-javax直接
Mavenio.github.luminion:velo-spring-boot2-autoconfigure直接
Mavenio.github.luminion:velo-spring-boot2-dependencies直接
Mavenio.github.luminion:velo-spring-boot3-autoconfigure直接
Mavenio.github.luminion:velo-spring-boot3-dependencies直接
Mavenio.github.luminion:velo-spring-boot4-autoconfigure直接
Mavenio.github.luminion:velo-spring-boot4-dependencies直接
Mavenio.github.openfeign:feign-core11.10直接
Mavenjakarta.validation:jakarta.validation-api直接
Mavenjavax.validation:validation-api直接
Mavenorg.apache.fesod:fesod-sheet2.0.1-incubating直接
Mavenorg.jsoup:jsoup直接
Mavenorg.jsoup:jsoup1.21.1直接
Mavenorg.projectlombok:lombok直接
Mavenorg.projectlombok:lombok1.18.42直接
Mavenorg.redisson:redisson-spring-boot-starter直接
Mavenorg.redisson:redisson-spring-boot-starter3.40.0直接
Mavenorg.springframework.boot:spring-boot-autoconfigure直接
Mavenorg.springframework.boot:spring-boot-configuration-processor直接
Mavenorg.springframework.boot:spring-boot-dependencies2.7.18直接
Mavenorg.springframework.boot:spring-boot-dependencies3.5.9直接
Mavenorg.springframework.boot:spring-boot-dependencies4.0.5直接
Mavenorg.springframework.boot:spring-boot-jackson直接
Mavenorg.springframework.boot:spring-boot-starter-aop直接
Mavenorg.springframework.boot:spring-boot-starter-aspectj直接
Mavenorg.springframework.boot:spring-boot-starter-data-redis直接
Mavenorg.springframework.boot:spring-boot-starter-mail直接
Mavenorg.springframework.boot:spring-boot-starter-web直接
Maventools.jackson.core:jackson-databind直接
Mavenorg.apache.maven.plugins:maven-compiler-plugin间接
Mavenorg.apache.maven.plugins:maven-compiler-plugin3.13.0间接
Mavenorg.apache.maven.plugins:maven-gpg-plugin3.2.7间接
Mavenorg.apache.maven.plugins:maven-jar-plugin3.4.2间接
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.10.0间接
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.1间接
Mavenorg.aspectj:aspectjweaver间接
Mavenorg.codehaus.mojo:flatten-maven-plugin1.7.2间接
Mavenorg.junit.jupiter:junit-jupiter间接
Mavenorg.slf4j:slf4j-api间接
Mavenorg.sonatype.central:central-publishing-maven-plugin0.9.0间接
Mavenorg.springframework.boot:spring-boot-starter-test间接
Mavenorg.springframework.data:spring-data-redis间接
Mavenorg.springframework:spring-aop间接
Mavenorg.springframework:spring-context间接
Mavenorg.springframework:spring-expression间接
Mavenorg.springframework:spring-web间接
依赖安全公告 4

安装 maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 会引入 11 个包(直接与传递):其中 4 个存在已知公告,0 个为直接依赖。

软件包版本关系严重程度公告数修复版本
org.springframework.boot:spring-boot2.7.18间接24.0.6
org.springframework:spring-core5.3.31间接16.2.11
org.springframework:spring-context5.3.31间接26.2.7
org.springframework:spring-expression5.3.31间接15.3.39

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1189,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 648551
      },
      "pushed_at": "2026-07-15T16:44:23Z",
      "created_at": "2024-12-18T01:25:26Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T03:39:02Z",
      "description": "A Spring Boot Starter for common scenarios.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "luminion",
      "company": null,
      "location": null,
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/42614491?v=4",
      "created_at": "2018-08-22T15:01:26Z",
      "is_verified": null,
      "public_repos": 20,
      "account_age_days": 2893
    },
    "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": [
        {
          "tag": "1.3.0",
          "kind": "minor",
          "published_at": "2026-07-15T16:43:32Z"
        },
        {
          "tag": "1.2.0",
          "kind": "minor",
          "published_at": "2026-06-11T07:53:01Z"
        },
        {
          "tag": "1.1.0",
          "kind": "minor",
          "published_at": "2026-05-31T07:26:53Z"
        },
        {
          "tag": "1.0.0",
          "kind": "major",
          "published_at": "2026-05-02T15:48:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0ae8908a2a54e8850cfc371e45d774c647a35626",
          "body": "- 统一移除幂等、锁、限流相关注解和接口中原有的时间单位参数,统一使用毫秒作为单位\n- 调整幂等处理器实现,更新时间单位转换逻辑为毫秒\n- 锁相关实现移除单位参数,所有等待和持有时间均按毫秒解析处理\n- 限流相关实现移除单位参数,窗口时间统一为毫秒单位\n- 调整异常类中时间相关字段及构造器,去除时间单位字段,相关说明文档注明单位为毫秒\n- 修改日志支持,统一慢日志阈值字段及检查逻辑,调整日志输出格式,增强可读性\n- 优化调试和测试用例,校正默认值为毫秒单位,保证一致性\n- 调整幂等和锁相关常量顺序和注释,提升代码可读性和逻辑清晰度",
          "is_bot": false,
          "headline": "refactor(core): 优化并统一幂等锁限流窗口单位及日志格式",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T16:43:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75377afcfb2c9da5c01e1383b0465a2ab7cae5ef",
          "body": "- 调整 Feign 调用日志切面,调用时分别写入进入 (ENTRY) 和退出 (EXIT) 两条日志记录\n- Controller 和统一方法调用日志切面同步改为入口和出口日志分开打印,含入参和耗时/结果或异常\n- 新增 InvocationPhase 枚举区分日志阶段,兼容旧的单行慢日志格式\n- Slf4JInvocationLogWriter 支持基于 InvocationPhase 格式化进入和退出日志行\n- 慢调用日志独立切面处理,日志级别可通过配置项 velo.log.slow.level 设置,默认 WARN\n- 调整测试覆盖入口和出口日志的正确生成与格式输出\n- VeloProperties 增加慢调用日志等级配置支持\n- 优化调用日志切面异常处理逻辑,异常日志始终使用 ERROR 级别\n- 移除调用日志切面中对慢日志注解的处理,防止与慢日志切面冲突\n- 所有调用日志切面均改为先写 ENTRY 再执行方法,最终写 EXIT 日志,保证日志完整性",
          "is_bot": false,
          "headline": "feat(logging): 统一调用日志改为进入与退出两条记录",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T14:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc4abb0db83de249fa9fb8eab9ddb2266c4d50c4",
          "body": "- 将默认方法指纹由“全限定类名#方法名”变更为“全限定类名#方法名(参数类型...)”,避免重载方法共享幂等窗口、限流桶或锁\n- 所有并发控制相关注解(@Idempotent、@Lock、@RateLimit)均采用新的方法指纹格式进行 key 生成\n- 修改并完善相关测试,验证不同重载方法可产生不同并发控制 key,避免冲突\n- 优化本地幂等处理,改用单调纳秒时间记录 TTL,支持更精细的时间单位且防止时间回拨影响\n- Redis 锁处理增强,支持同线程可重入,非整毫秒租约向上取整,避免短于配置值的 TTL,锁续租和释放逻辑更安全\n- 调整调用日志和慢日志以使用纳秒精度,提升时间计算准确性\n[…]\n允许代理头为仅含空白或带空白的“unknown”,回退至直连地址\n- 移除@Lock空 key强制非空校验,改为安静降级至方法级锁,行为与@Idempotent空key保持一致\n- 改进RedisLockHandler锁失败时的ThreadLocal状态处理,防止异常时残留无效线程本地变量\n- WebUtilsSupport中增强了IP首个有效地址提取的空白和未知字符串处理逻辑,保证稳定性和准确性",
          "is_bot": false,
          "headline": "refactor(core): 统一方法指纹为全限定类名和参数列表格式",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-15T01:47:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2552800a717e9aff18e1843e93db021c33e56e37",
          "body": "- 使用safeBuildArgsText和safeBuildResultText捕获序列化异常,避免日志序列化失败影响业务\n- 使用safeWrite捕获调用日志写入异常,防止日志写入错误导致调用失败\n- 对Feign调用异常日志捕获后安全写入日志,保证异常不被吞噬\n- 增加相关单元测试覆盖序列化与写入失败场景,确保可靠性提升",
          "is_bot": false,
          "headline": "fix(feign): 保护Feign调用日志序列化与写入安全",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-10T07:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d40b5dbdba8fb312debdfdd8527763ab37c4f707",
          "body": "…ocal locks\n\n- 移除 CaffeineLockHandler 类,简化本地锁实现\n- Caffeine 档位复用 JdkLockHandler,避免重复代码\n- 保持 CAFFEINE 档位兼容性,确保配置不破坏使用体验\n- RedisLockHandler 支持同线程重入,避免死锁并优化性能\n- 优化锁释放逻辑及本地持有计数管理,确保锁的正确释放\n- IdempotentAspect 拼接 key 时增加方法指纹前缀防止冲突\n- WebUtilsSupport 修复 IPv6 环回地址识别兼容性问题\n- VeloTraceEnvironmentPostProcessor 删除对日志日期格式的修改,仅增强日志级别输出\n- 移除 UnsafeBigIntegerToStringSerializer 序列化器\n- 更新相关测试用例,确认锁处理及幂等功能改动稳定性",
          "is_bot": false,
          "headline": "refactor(lock): replace CaffeineLockHandler with JdkLockHandler for l…",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-05T15:33:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "327010b7b9ae41133af9afff2370fe06589fa4d8",
          "body": "- 将 EasyExcel、FastExcel 和 FesodExcelHelper 的支持类型由 NUMBER 改为 STRING,确保浮点单元格能正确读取\n- ReadCellData 类新增 originalNumberValue,支持解析和校正浮点数精度问题\n- 优化 IP 解析逻辑,支持多代理头中 unknown 的回退处理及 IPv6 环回地址转换\n- 幂等切面异常处理中增加清理异常捕获,避免覆盖原始异常\n- 本地锁实现改用引用计数管理,避免缓存淘汰时锁被误释放,保障高并发下的互斥性\n- 添加分布式锁和幂等操作被 Redis 事务或 pipeline 包裹时的 WARN 提示,提醒用户避免误用\n- 限流令牌桶计算修复,防止高速率叠加长时间空闲时整数溢出导致永久卡死\n- 异常处理返回文案兜底,避免 null 出现和潜在空指针异常\n- Feign 调用日志中未配置 traceId 时跳过处理,避免链路追踪丢失",
          "is_bot": false,
          "headline": "feat(excel): 修复浮点单元格类型读取为null的问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-07-04T11:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c70f398abaeba4cff7d68a4f3a99bdcf1d57d444",
          "body": "- 启动横幅默认关闭,需通过 velo.banner.enabled=true 显式开启\n- 横幅中并发能力(幂等、限流、锁)显示实际生效的处理器类型\n- 支持展示用户自定义处理器类名,便于确认 AUTO 模式下后端实现\n- 缓存过期时间和日志、Web 模块的相关状态详情改为友好格式展示\n- 相关自动配置类新增对处理器的 ObjectProvider 注入支持\n- 删除幂等、限流、锁模块中启动时的日志打印,减小启动日志噪声",
          "is_bot": false,
          "headline": "feat(core): 优化启动横幅展示实际后端与功能状态",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-30T09:00:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02ba07b908855e5ad2a33a4bf9df5996d3061001",
          "body": "- 启动横幅默认关闭,需通过 velo.banner.enabled=true 显式开启\n- 横幅中并发能力(幂等、限流、锁)显示实际生效的处理器类型\n- 支持展示用户自定义处理器类名,便于确认 AUTO 模式下后端实现\n- 缓存过期时间和日志、Web 模块的相关状态详情改为友好格式展示\n- 相关自动配置类新增对处理器的 ObjectProvider 注入支持\n- 删除幂等、限流、锁模块中启动时的日志打印,减小启动日志噪声",
          "is_bot": false,
          "headline": "feat(core): 优化启动横幅展示实际后端与功能状态",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-27T09:37:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77836da63d598995d5a72eaa6d53004deab51aea",
          "body": "- 从 RedisCacheTimeMapProvider 中删除 TTL 抖动计算\n- VeloCacheAutoConfiguration 配置中不再预计算并应用TTL抖动\n- 通过 JitterRedisCacheWriter 统一在写入时按 key 应用 TTL 抖动\n\nfeat(core): 新增 VeloMessageResolver 和 VeloBannerPrinter Bean\n\n- VeloCoreAutoConfiguration 自动注册 VeloMessageResolver\n- 自动注册 VeloBannerPrinter,支持启动横幅配置\n\nfeat(core):\n[…]\n\nrefactor(idempotent): 改进幂等切面,支持唯一 token 识别和消息解析\n\n- IdempotentAspect 中为每次请求生成唯一 token,防止误删幂等记录\n- 使用带 token 的 tryRecord 和 removeIfMatch 接口,保证清理安全\n- 幂等失败抛出 IdempotentException,携带 key、ttl、单位等信息\n- Idempot",
          "is_bot": false,
          "headline": "refactor(cache): 移除缓存TTL抖动逻辑,交由写入时统一处理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-25T02:42:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78d97f118810b793f7ab461f73e72f8925f79825",
          "body": "- 为 RedisCacheTimeMapProvider 添加 TTL 抖动支持,防止缓存雪崩问题\n- VeloCacheAutoConfiguration 支持缓存空值配置和 TTL 抖动百分比\n- FeignLogAspect 实现 Ordered 接口,支持切面执行顺序自定义\n- IdempotentAspect、LockAspect、RateLimitAspect 实现 Ordered 接口,支持切面顺序配置\n- RedisLockHandler 支持同线程同 Key 嵌套加锁,避免锁误删\n- CaffeineLockHandler 限制缓存大小和过期时间,防止内存泄漏\n- JdkI\n[…]\n志性能优化\n- VeloProperties 增加切面执行顺序配置,优化配置管理\n- XssStringConverter 修复空字符串处理,避免空指针异常\n- 增加 RedisCacheTimeMapProvider 和 VeloCacheAutoConfiguration 单元测试,覆盖新功能和配置\n- Lock 注解 lease 默认调整为 30 秒,提示长任务需手动设置更大 lease 值",
          "is_bot": false,
          "headline": "feat(core): 优化缓存与切面等模块,提升灵活性和稳定性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-20T13:29:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb1e68aea92e1c5ff20092e3f8084e40a9a670d4",
          "body": "- 在 VeloCacheAutoConfiguration、VeloFeignAutoConfiguration、VeloRedisAutoConfiguration、\n  VeloWebAutoConfiguration 等自动配置类中引入 SLF4J Logger\n- 使用 Lambda 表达式实现 RedisSerializer、InvocationLogWriter、RuntimeJsonSerializer\n  等 Bean 的惰性加载,并增加相应的调试日志输出\n- 修正 EasyExcelHelper、FastExcelHelper 及 FesodExcelHelper 中 Bo\n[…]\n统一改为 STRING\n- 在 VeloRedisAutoConfiguration 中抽象出默认 RedisSerializer 方法,统一日志输出\n- 在 VeloWebAutoConfiguration 中针对 RequestMappingHandlerAdapter 为空情况增加日志\n- 添加单元测试验证 BooleanConverter 是否正确声明支持的 CELL 类型为 STRING",
          "is_bot": false,
          "headline": "refactor(logging): 优化自动配置中日志的惰性初始化和类型修正",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-11T07:53:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13dfb31421297f1b7e98632d4bda0b8ba16356c3",
          "body": "- 将 max-payload-length 默认值调整为 -1,表示不限制长度\n- 用正则表达式 sensitive-pattern 替代敏感字段列表,提升匹配灵活性\n- 详细说明 max-payload-length 参数含义及各取值影响\n- 更新 Controller 和 Feign 调用日志相关说明,统一日志格式描述\n- 删除过时的截断默认值说明,明确目前默认不限长配置",
          "is_bot": false,
          "headline": "docs(logging): 优化调用日志配置及说明文档",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T03:22:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e42dc8fea9fee6e6d5a66f7a9dcf6a6237cd41a8",
          "body": "- 修改Feign和Controller日志切面配置,支持InvocationLogWriter的可选注入,缺失时使用Slf4JInvocationLogWriter作为默认实现\n- 优化Redis模板配置,支持通过ObjectProvider注入RedisSerializer,缺省时使用GenericJackson2JsonRedisSerializer作为默认序列化器\n- 调整VeloProperties中日志最大负载长度默认值为-1,实现无限输出\n- 补充相关自动配置单元测试,验证日志切面及Redis模板在缺失依赖情况下的回退行为和外部自定义序列化器的支持",
          "is_bot": false,
          "headline": "refactor(config): 优化日志组件配置及默认序列化器支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T03:20:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef3a7c08569dd459179c71fd47c376f35d08db70",
          "body": "- 收敛Controller、Feign、@InvokeLog、@SlowLog日志为统一调用日志模型\n- InvocationLogRecord新增loggerName字段,Slf4JInvocationLogWriter支持按照日志名缓存Logger\n- 日志默认输出调用完成态日志,包含调用耗时、状态、参数、结果和错误摘要\n- 新增traceId自动生成、MDC注入和响应头透传,默认开启并支持配置关闭\n- Feign日志target格式调整,剔除clientAddress前缀,提高日志简洁度\n- 统一日志相关配置归整至velo.log.invocation和velo.log.trace\n- VeloTraceEnvironmentPostProcessor增加日志日期格式配置支持\n- 调整InvokeLogAspect、SlowLogAspect、ControllerLogAspect,支持loggerName赋值,完善调用链日志采集\n- 测试覆盖日志新特性,增加loggerName相关断言,兼容性调整\n- 删除旧的日志拆分注解和Writer SPI,简化日志体系结构",
          "is_bot": false,
          "headline": "refactor(log): 统一调用日志模型及traceId功能增强",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-10T02:06:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e70c71ddbbf805c075c013a6a5aabc7b2ddd3762",
          "body": "- 替换原日志记录为InvocationLogWriter写入,移除对Logger及LogLevel依赖\n- 增加自动生成和清理TraceId支持,结合TraceContext管理MDC\n- FeignLogSupport简化为只构建调用目标字符串,不再处理日志等级或打印\n- 调整配置项路径,新增了统一调用日志相关配置属性\n- FeignLogAspect新增构造参数InvocationLogWriter,实现调用日志结构化输出\n- FeignTraceRequestInterceptor新增,用于Feign请求中传递TraceId\n- VeloFeignAutoConfiguration根据新配置及依赖创建FeignLogAspect和FeignTraceRequestInterceptor\n- 单元测试覆盖Feign调用日志改造后的行为及配置开关\n- 移除旧的基于Slf4j的日志判定和打印相关代码,实现调用日志的统一管理",
          "is_bot": false,
          "headline": "refactor(feign): 重构Feign调用日志为统一调用日志体系",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-06-08T10:09:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d75f47d8c0611da2b4adfac1d2a033bea27673a",
          "body": "- 将@see com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration注释,避免文档误导\n- 保持类注释清晰,便于维护和阅读\n- 无其他逻辑改动,仅注释层面调整",
          "is_bot": false,
          "headline": "refactor(mybatisplus): 注释掉无效的@see标签",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T09:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ba6e811a9a3227c73103c30603f3b75760a5b8",
          "body": "- 将FeignClientMetadataResolver中客户端名称解析方法重命名为resolveClientAddress\n- 优化Feign客户端地址解析逻辑,支持value和contextId组合显示\n- FeignLogAspect中使用resolveClientAddress替代resolveClientName\n- FeignLogSupport调整buildArgsText方法使用MethodSignature及目标对象参数\n- 改进buildInvocationPrefix,去除“Feign”前缀并优化前缀格式\n- 优化方法参数名解析逻辑,支持通过InvocationUtils获取参数名\n- 更新测试用例,匹配新的日志前缀格式,去除“Feign”字样",
          "is_bot": false,
          "headline": "refactor(feign): 优化Feign客户端地址解析与日志构建",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T07:26:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f37d66ed139aa1852d7aea631b61a55d6d69ec8",
          "body": "- 删除 FeignLogBeanPostProcessor,改用 FeignLogAspect 进行日志切面处理\n- FeignLogAspect 中实现请求与响应的详细日志记录,保持原有功能\n- 在 VeloFeignAutoConfiguration 中替换原 BeanPostProcessor 为 FeignLogAspect\n- 支持 request-logging-max-payload-length 设置为 -1 时无限制输出日志内容\n- ControllerLogAspect 及 FeignLogSupport 中添加负载长度限制逻辑,支持负数表示无限制\n- 增加单元测试覆盖无限制负载长度日志功能\n- 更新 README 文档,说明日志负载长度配置及特殊取值的含义\n- 在自动配置测试中引入 AopAutoConfiguration 保证切面生效\n- 修复日志中响应字段错别字,提升日志准确性和一致性",
          "is_bot": false,
          "headline": "refactor(feign): 重构Feign日志记录为切面实现,支持无限制负载长度",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T07:04:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bfa4efed243a9824dfa9d4f89ee2588c352c087",
          "body": "- 添加 `velo.feign.enabled`、`request-logging-enabled` 与 `request-logging-max-payload-length` 三项配置\n- 实现 FeignClientMetadataResolver 用于解析 Feign 客户端元数据以支持请求日志\n- 在 Spring Boot 各版本自动配置中引入 Feign 自动配置类\n- Feign 日志可按 Controller 请求日志格式输出,支持截断过长请求响应数据\n- jackson 配置新增 `longAsString` 替代 `unsafeIntegerAsString` 并新增 \n[…]\nbigDecimalStripTrailingZeros` 支持\n- 删除 UnsafeLongToStringSerializer,改用 LongToStringSerializer 简化序列化逻辑\n- 增加 Jackson 2/3 系列测试,验证 long 及 BigDecimal 序列化行为与配置兼容\n- 更新 README 和 CHANGELOG,详细说明新 Feign 日志功能及配置用法",
          "is_bot": false,
          "headline": "feat(feign): 新增 Feign 调试日志支持及相关配置项",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-31T06:05:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb2b671f471cd9222ba64ac1d88ded9aa25b36eb",
          "body": "- 新增 Controller 请求日志最大截取长度配置项\n- 允许在未引入 jsoup 时启用 ESCAPE XSS 策略\n- 添加 1.0.0 版本首个发版基线说明",
          "is_bot": false,
          "headline": "chore(release): 更新发布日志及配置说明",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-25T04:45:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be55dd5c29e26e0c080d889bd40663a5bd9341d1",
          "body": "- 新增配置项 requestLoggingMaxPayloadLength,默认值为 2000\n- 控制请求和响应体日志内容的最大长度,超出部分自动截断并加省略号\n- 日志中优先使用 Controller 映射路径模板替代原始请求路径\n- 修改 ControllerLogAspect 以支持按最大长度截断日志内容\n- 测试中增加对该配置项的默认值和截断效果的验证\n- 文档中添加默认开启及该配置的说明说明",
          "is_bot": false,
          "headline": "feat(web): 添加请求日志最大载荷长度配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-25T04:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75b4d1528d977e246911503918de44e59ee68607",
          "body": "- 将pom.xml中的revision属性从1.0.0修改为1.0.1\n- 保持Java编译版本为8\n- 未修改其他构建配置参数",
          "is_bot": false,
          "headline": "chore(build): 更新项目版本号至1.0.1",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-07T08:29:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0afec90a6e9866ff1bb7063397b9b5dda4e092a3",
          "body": "- 实现了基于JSoup的XSS清理器,支持多种清理策略\n- 新增基于Spring HtmlUtils的XSS转义清理器,适用于ESCAPE策略且无JSoup环境\n- 提供XssStringConverter用于整合XssCleaner组件,支持字符串转换清洗\n- 添加自动配置类,支持根据环境条件动态加载对应的XSS清理实现\n- 编写单元测试验证自动配置及清理器的正确创建和功能\n- 完成velo-autoconfigure-javax与jakarta两个模块的同步支持\n- 新增velo-autoconfigure-javax的Maven配置文件,完善依赖管理\n- 在common模块中实现SpringHtmlEscapeXssCleaner类\n- 更新README文档,添加XSS安全策略配置说明及使用示例",
          "is_bot": false,
          "headline": "feat(xss): 新增基于JSoup和Spring的XSS自动配置模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-07T08:29:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a03260da31e024a012fa9598a8359790ae41813",
          "body": "- 修改注解说明,空 key 时使用类名和方法名生成固定 Key\n- 删去强制要求 key 表达式的校验,直接使用注解中的 key\n- 修正 RedissonIdempotentHandler 中超时转换,兼容 Java 8 Duration API\n- 调整 RedisRateLimitHandler 中的速率计算,改为 per 毫秒代替每秒\n- 修复 Lua 脚本拼接格式,避免缩进错误影响脚本执行\n- 新增幂等处理和限流处理相关单元测试,确保关键逻辑正确执行",
          "is_bot": false,
          "headline": "fix(idempotent): 优化幂等键的默认生成与时长转换逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-05-02T15:48:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ffc8fbf4aac9f7af8ca12f90c21ede25d3617e",
          "body": "- 将内置 Excel 转换器自动注册功能默认启用设为 true\n- 更新相关单元测试确保新的默认启用配置通过验证",
          "is_bot": false,
          "headline": "feat(config): 启用内置 Excel 转换器自动注册",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "451fd8ea4161e126610983bc4e20316d6f874509",
          "body": "- 移除了 README 文件中关于构建验证的章节\n- 删除了 Maven 编译和测试的示例命令\n- 精简文档内容,提高可读性",
          "is_bot": false,
          "headline": "docs(readme): 删除构建验证部分",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:39:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c84a4eb6320d1db323a49f30f4025a514db296c",
          "body": "- 新增项目介绍与主要特性说明\n- 添加 Maven 依赖配置示例,支持 Spring Boot 2/3/4\n- 详细说明缓存、Excel、幂等、限流、锁、日志、XSS、Jackson、MyBatis-Plus、Redis 等自动配置\n- 提供各功能注解及使用示例代码\n- 说明开箱即用能力及常用配置开启与关闭方法\n- 补充编译参数建议及构建验证命令\n- 集中管理配置键及默认值说明,方便快速上手和二次开发",
          "is_bot": false,
          "headline": "docs(readme): 添加 Velo Spring Boot Starter 详细使用文档",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T07:37:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d21e9f124dd1f705feb8af43a2d999fd0963a46e",
          "body": "- 新增InvocationUtils辅助调用方法参数名称解析和格式化输出\n- 实现Slf4JLogWriter,支持多日志级别的调用参数、结果、慢日志和错误日志写入\n- 增加ControllerLogAspect,利用Spring AOP拦截RestController方法调用并记录请求参数及响应\n- ControllerLogAspect支持请求日志截断、敏感数据省略和请求上下文信息记录\n- 为VELo Web模块添加单元测试,覆盖ControllerLogAspect的日志记录功能\n- 新增项目父POM配置,统一多模块管理与 Maven 插件配置",
          "is_bot": false,
          "headline": "feat(logging): 添加基础调用链路日志支持与Controller日志切面",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T05:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "383c7a28f21226d5a5e9b6bbc2a547c8302357c8",
          "body": "- 新增VeloDateTimeFormatAutoConfiguration,实现字符串到日期时间类型转换的自动配置\n- 提供基于VeloProperties的日期时间格式和时区配置支持\n- 新增VeloWebAutoConfiguration,实现Web MVC相关配置及Controller请求日志切面自动注册\n- 支持基于请求处理适配器的RuntimeJsonSerializer实现JSON序列化\n- 通过条件注解支持开关控制相关自动配置启用与禁用\n- 添加自动配置单元测试,覆盖日期时间转换及Web自动配置功能验证\n- 补充README文档,详细介绍Starter功能、依赖及配置使用方法",
          "is_bot": false,
          "headline": "feat(autoconfigure): 新增日期时间转换和Web MVC自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-30T02:49:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "769c5f8106b2896f6d034838e69de3f524313829",
          "body": "- 删除 date-time-enabled 配置项的缺省匹配,使其必须显式开启\n- 修改测试用例,确保默认情况下不注册日期时间转换器 bean\n\nstyle(web): 设置 VeloWebMvcConfigurer 的执行顺序为最低优先级\n\n- 为 jakarta 和 javax 版本的 VeloWebMvcConfigurer 类添加 @Order 注解\n- 确保配置类在 Spring MVC 配置中的调用顺序正确",
          "is_bot": false,
          "headline": "fix(converter): 修正日期时间转换器自动配置逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T07:55:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a76db0cf6185afe533db4faf6d63f1b50492e2a",
          "body": "- 新增 VeloWebExceptionHandler 作为基础Web异常处理器,支持多种常见异常响应\n- 实现对参数校验(MethodArgumentNotValidException, BindException等)的详细处理和日志记录\n- 支持业务异常限流、幂等性和分布式锁异常的专门处理\n- 新增 VeloValidationWebExceptionHandler 支持 Bean Validation @RequestParam/@PathVariable 参数校验异常处理\n- 新增 Jakarta 和 javax 两套自动配置模块的 Maven 配置文件,统一依赖管理及版本控制\n- 完善日志输出便于调试和定位请求异常问题",
          "is_bot": false,
          "headline": "feat(exception): 添加统一Web异常处理及Bean Validation支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T07:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc93146073700b136db883ac29f4bc26523688d3",
          "body": "- 新增 VeloProperties 类,包含丰富的配置属性结构\n- 实现 VeloDateTimeFormatAutoConfiguration,自动注册日期时间类型转换器\n- 添加 VeloWebMvcConfigurer,支持日期时间格式化和XSS字符串转换器注册\n- 增加单元测试,覆盖日期时间转换自动配置和WebMvcConfigurer配置\n- 完善配置元数据测试,确保配置属性元信息正确生成\n- 设置默认配置属性安全合理,满足生产环境默认需求",
          "is_bot": false,
          "headline": "feat(config): 添加Velo配置属性及日期时间转换自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T06:26:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cba146b63c0be3f2001f8465b629cad04daeffe4",
          "body": "- 实现基于Jackson 3的VeloJacksonAutoConfiguration自动配置\n- 支持不安全整数、BigDecimal、浮点数字符串序列化配置\n- 集成日期时间格式化及时区配置\n- 增加字符串编码解码和XSS清理功能支持\n- 提供Redis序列化器配置及验证\n- 实现对JsonEnum注解及枚举描述序列化处理\n- 编写大量单元测试覆盖各配置选项与序列化行为\n- 新增Jackson 3字符串反序列化器,支持注解和XSS清洗",
          "is_bot": false,
          "headline": "feat(jackson): 添加Jackson 3自动配置及全面单元测试覆盖",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T05:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebe403b3f6fd3f064c102fd11c7d727c5382cf16",
          "body": "- 新增 VeloCoreAutoConfiguration,提供核心Bean自动装配,包括Fingerprinter、NamingSuffixStrategy和JsonProcessorProvider\n- 新增 VeloProperties,集中管理starter的配置属性,涵盖日期时间格式、幂等、限流、锁、Redis、缓存、Excel、Jackson、日志、MyBatis-Plus及Web配置\n- 新增 JsonEnum注解支持,用于枚举字段的JSON序列化扩展\n- 实现 JacksonStringDeserializer,支持统一字符串反序列化并集成XSS过滤与自定义JSON解码\n- \n[…]\nr,增强枚举序列化支持枚举名称字段输出\n- 添加 VeloJacksonAutoConfiguration,定制Jackson时间格式、数值转字符串序列化及XSS清理相关序列化器和反序列化器\n- 增加 Redis的Jackson序列化配置,保证Redis读写的对象映射兼容性及类型信息完整\n- 编写测试,验证核心配置默认值和Jackson自动配置的反序列化及序列化功能,确保安全默认及配置覆盖正确生效",
          "is_bot": false,
          "headline": "feat(config): 添加核心自动配置和Jackson自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T05:31:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac019153f6b07aee5d852d018893a3301903ee08",
          "body": "- 添加EasyExcelHelper,支持多种数据类型转换及自定义格式化\n- 添加FastExcelHelper,集成类似转换功能,支持多种时间格式和数据类型\n- 添加FesodExcelHelper,实现多种类型转换器及注册方法\n- 提供默认转换器注册及支持自定义时区和格式\n- 实现类型转换时的空值处理及安全数范围判断\n- 新增VeloCacheAutoConfiguration,支持基于Redis的缓存自动配置\n- 支持缓存键前缀定制及缓存时间TTL配置\n- 兼容多种Spring Cache组件和自动配置顺序",
          "is_bot": false,
          "headline": "feat(excel): 新增多种Excel转换器及注册工具类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-29T01:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf5da04d4c5ebfdfdf578a956777cd879aa4db5a",
          "body": "- 添加 RedisCacheTimeMapProvider 支持按缓存名称定制缓存过期时间\n- 实现 VeloCacheAutoConfiguration 自动配置 RedisCacheManager 及相关组件\n- 支持通过配置属性设置缓存键前缀、分隔符及默认TTL\n- 移除 VeloDateTimeFormatAutoConfiguration 中日期时间转换器的属性条件\n- 新增 VeloCoreAutoConfiguration 提供核心Bean注册\n- 新增 VeloIdempotentAutoConfiguration、VeloLockAutoConfiguration、VeloRateLimitAutoConfiguration自动配置类\n- 调整 VeloRedisAutoConfiguration,移除条件属性限制,简化模板Bean创建\n- 扩展 VeloProperties 支持缓存、核心、幂等、限流、锁等配置\n- 添加对应单元测试验证自动配置及功能正确性",
          "is_bot": false,
          "headline": "feat(cache): 新增基于Redis的缓存时间映射与自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T10:06:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "809c544e05c645a9df53b267072239b1c12e3292",
          "body": "- 统一更新各模块对 VeloProperties 的导入路径\n- 新增 Excel 扩展转换器注册器支持多种实现自动注册\n- 实现幂等模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 实现锁模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 实现限流模块的多后端自动配置(JDK、Caffeine、Redis、Redisson)\n- 添加幂等、锁、限流切面实现,支持自动注入相关Handler和Fingerprinter\n- 新增工具类 ConcurrencyAnnotationUtils 的单元测试覆盖\n- 添加条件注解 @ConditionalOnListProperty 及其测试用例,增强配置灵活性\n- 提供默认安全的注解配置参数测试,保证默认值合理性",
          "is_bot": false,
          "headline": "feat(core): 重构并完善并发控制自动配置及相关切面实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T05:54:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dc13f83d56911c512a4948a35349144a344e4b2",
          "body": "- 在EasyExcelHelper中添加最大安全整数常量,避免超出JS安全整数范围时错误转换\n- 修改支持的Excel单元格类型为NUMBER而非STRING\n- 调整Long类型写入逻辑,超出安全范围时写入字符串,否则写入BigDecimal\n- 调整BigInteger类型写入逻辑,超出安全范围时写入字符串,否则写入BigDecimal\n- 在FastExcelHelper和FesodExcelHelper中同步上述相同的修改和逻辑调整",
          "is_bot": false,
          "headline": "fix(excel): 修正数字类型单元格的数据写入逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c217175fb17d18a1acc53a7fd93b250a5964ec4e",
          "body": "- 从VeloDateTimeFormatAutoConfiguration删除了StringToSqlDate、StringToSqlTime和StringToSqlTimestamp转换器及相关配置\n- 从VeloProperties中移除了sqlTimestampConverterEnabled、sqlDateConverterEnabled和sqlTimeConverterEnabled配置字段\n- 新增EasyExcelHelper,用于注册EasyExcel相关的多种数据类型转换器,支持多格式日期时间及布尔、数字等类型转换\n- 新增FastExcelHelper,提供类似EasyExcel的转换器注册功能,适配FastExcel库\n- 新增FesodExcelHelper,实现Fesod库的Excel转换器注册,支持日期时间和基本类型可靠转换\n- 各Excel转换器均实现严格的字符串修剪和空值处理,保证转换的稳定性和一致性",
          "is_bot": false,
          "headline": "feat(excel): 移除SQL时间转换器并新增Excel转换器注册工具类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0c7b6200aaf4231d8b5dd2388da4bc995ef193",
          "body": "- 新增velo-autoconfigure-common模块的pom.xml定义,管理依赖版本和插件\n- 引入spring-context、mybatis-plus、redis等核心依赖,提供可选扩展\n- 配置maven编译插件,支持spring-boot配置处理器和lombok注解处理\n- 实现VeloMybatisPlusAutoConfiguration自动配置类,条件化加载MybatisPlus拦截器\n- 支持分页、乐观锁和防攻击内置拦截器的动态注册\n- 采用条件注解确保兼容性和按需加载,提高启动灵活性与性能",
          "is_bot": false,
          "headline": "feat(veloconfigure): 添加Mybatis Plus自动配置与依赖管理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-28T03:16:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d9f3c8ccde11abd83405dd6a75811f1ca349a46",
          "body": "- 新增@RateLimit注解,支持请求数限制及时间窗口配置\n- 支持SpEL表达式动态生成限流key,实现按方法+表达式结果分桶限流\n- 限流提示信息可自定义,默认提示访问人数较多\n- 实现RateLimitAspect切面,方法和类上的限流注解均可生效\n- 采用Fingerprinter生成限流Key,支持方法指纹和SpEL表达式指纹组合\n- 当限流失败时,抛出RateLimitException异常\n- 添加单元测试覆盖限流切面和注解解析逻辑,包括接口代理和多方法不同SpEL key场景\n- 更新README,详细说明@RateLimit功能及key策略",
          "is_bot": false,
          "headline": "feat(ratelimit): 添加限流注解及切面支持方法和类级别限流",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:35:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e4b87c0c5af873a8f7d56c20fdc7510469cc072",
          "body": null,
          "is_bot": false,
          "headline": "feat(core): 默认启用控制器请求日志",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e71a895cec0a5fa2195bd34cf41298f1215a38f",
          "body": "- 新增 VeloProperties 配置属性类,实现丰富的配置项支持\n- 包含核心、幂等、限流、锁、Redis、缓存、Excel、Jackson、日志、MyBatis-Plus 和 Web 等子配置\n- 加入默认配置值,保证安全的生产环境默认行为\n- 添加 VeloConfigurationMetadataTest 和 VeloPropertiesDefaultsTest,验证配置元数据生成及默认值正确性\n\nrefactor(web): 优化 ControllerLogAspect 实现和日志逻辑\n\n- 重构 ControllerLogAspect,固定请求日志最大负载长度为 2000 字\n[…]\n逻辑\n\ntest(web): 增加 VeloWebAutoConfiguration 相关测试用例\n\n- 验证默认情况下 VeloWebMvcConfigurer 自动装配生效\n- 测试开启请求日志时 ControllerLogAspect 和序列化器正确注入\n- 验证使用自定义 Jackson ObjectMapper 的 JSON 序列化效果\n- 确认日志截断、请求参数序列化和日志格式符合预期",
          "is_bot": false,
          "headline": "feat(core): 添加核心配置属性类及测试覆盖",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:22:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3c2a87dd7c1e6d469ae6c7159abfaceda2bf75e",
          "body": "- 调整日志输出,增加请求查询参数信息,提升请求日志可读性\n- 移除 InvocationUtils 依赖,简化代码结构\n- 新增 ControllerLogAspect 中对请求查询参数的独立构建方法\n- 细化日志输出内容,支持请求参数和响应体的有效截断\n- 添加 HttpMessageConverterRuntimeJsonSerializer 实现,支持通过消息转换器序列化 JSON\n- 补充丰富单元测试覆盖,验证请求日志及序列化逻辑准确性\n- 实现对不安全参数和循环引用的 JSON 序列化安全处理\n- 新增对非 Web 环境下请求日志的防护和空处理逻辑",
          "is_bot": false,
          "headline": "feat(web): 优化 Controller 访问日志输出格式并添加单元测试",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-27T08:07:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c20701fc130b98494af46b0acea75476f8613a4",
          "body": "- 新增InvocationUtils工具类,支持方法签名和参数格式化\n- 添加VeloProperties配置类,集中管理Starter配置属性\n- 实现ControllerLogAspect切面,记录Controller请求调用日志\n- 提供VeloWebAutoConfiguration自动配置,集成MVC配置和日志切面\n- 编写单元测试验证默认配置和日志切面行为\n- 支持请求参数和响应体的JSON序列化与长度限制\n- 增强日志信息包含请求方法、URI等上下文内容",
          "is_bot": false,
          "headline": "feat(web): 添加Controller调用日志切面和Web自动配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T16:31:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c26a125e18fa31f31266c3e6d2807dce0e41398",
          "body": "- 新增 OnConcurrencyBackendCondition 条件判断类,实现基于配置和环境自动匹配后端类型\n- 移除 VeloProperties 中多余的后端开关类,简化配置结构\n- 补充核心配置属性元数据测试,确保配置项正确生成\n- 添加 VeloProperties 默认值单元测试,验证默认安全配置\n- 完善幂等、锁、限流模块的自动配置单元测试,验证不同后端选择逻辑\n- 引入对 Redisson、Redis、Caffeine 和 JDK 后端的优先级和显式配置支持\n- 增强自动配置的容错性,缺失依赖时报错机制验证\n- 新增各核心自动配置下的切面存在性测试,保证 AOP 织入正确",
          "is_bot": false,
          "headline": "feat(core): 添加条件注解以支持并发后端选择",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T14:56:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e384ed366895d7ff81371bb526909c1c21deef1a",
          "body": "- 在velo-autoconfigure-common模块中添加VeloProperties配置类,明确各功能模块配置项\n- 新增基于Caffeine、JDK、Redis以及Redisson的幂等处理器自动配置类,支持根据配置及环境自动选用\n- 新增基于Caffeine、JDK、Redis以及Redisson的锁处理器自动配置类,实现灵活的锁策略自动装配\n- 新增基于Caffeine、JDK、Redis以及Redisson的限流处理器自动配置类,提升流量控制能力及兼容多应用场景\n- 提供条件注解@ConditionalOnConcurrencyBackend用于根据后端类型和环境自动生效配置\n- 补充幂等功能单元测试,覆盖多种后端的Bean注入及优先级行为\n- 所有自动配置均支持属性控制启用/禁用,便于用户按需定制应用行为",
          "is_bot": false,
          "headline": "feat(autoconfigure): 新增幂等、锁和限流多种后端自动配置支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-25T14:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535b47cd85c2421a8b67c06b3545f384aa631591",
          "body": "- 添加 VeloProperties 及其内部多层次配置属性类\n- 实现 Jackson 自动配置支持 Jackson 2 和 Jackson 3 的不同版本\n- 配置 Jackson 序列化和反序列化细节,包括日期时间格式和数字转字符串策略\n- 提供 Redis 序列化配置,确保稳定的对象映射支持多态处理\n- 编写 VeloConfigurationMetadataTest 检测配置元数据生成完整性\n- 编写 VeloPropertiesDefaultsTest 验证默认配置值的合理性\n- 添加 VeloJacksonAutoConfigurationTests 以测试 Jackson 配置的功能和行为",
          "is_bot": false,
          "headline": "feat(core): 新增 VeloProperties 核心配置类及相关自动配置和测试",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-24T16:10:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd01076e962e8e473b33bc02a595d57c422fbb71",
          "body": "- 将 autoconfigure 中 spring-boot-starter-aop 替换为 spring-aop 和 aspectjweaver,且设置为 provided 范围\n- 精简 velo-spring-boot2/3/4-starter,仅保留基础 aop 依赖,移除 Web、Validation、Redis、Cache 等传递依赖\n- pom.xml 中版本号由 1.0.0-SNAPSHOT 更新为 1.0.0\n- README 详细说明基础 starter 的定位为低侵入、按需引入,建议业务项目显式声明所需技术栈依赖\n- README 补充示例说明如何按需引入 Redis、Cache、Redisson、Web、MyBatis-Plus 等依赖\n- README 结构调整,明确 starter 模块仅聚合依赖,自动配置放在 autoconfigure 模块",
          "is_bot": false,
          "headline": "chore(deps): 优化 starter 模块及依赖管理",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-10T16:09:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "800dd9a734c19bb425a7cfcf5f0739055cc103d9",
          "body": "- 新增 CaffeineLockHandler 实现,支持单 JVM 内的锁互斥\n- 新增 VeloLockCaffeineAutoConfiguration 自动配置,替代默认 JDK 实现\n- 修改 VeloLockAutoConfiguration 引入 Caffeine 配置\n- 优化 JdkLockHandler,支持锁状态引用计数以便自动清理\n- LockHandler 接口增加对持有时间的说明\n- 锁注解属性添加 key 属性非空校验,支持 SpEL 表达式并严格检查\n- LockAspect 中增强对参数的校验,防止无效的等待和持有时间\n- SpelFingerprinter\n[…]\nmpotent 和 Lock 注解关键配置参数增加非空和有效性检查\n- VeloProperties 新增对 Caffeine 锁后端的配置支持,默认开启\n- 添加 SpelFingerprinterTests、JdkLockHandlerTests、LockAspectTests 和 RateLimitAspectTests 单元测试\n- 优化日志提示,明确指出本地锁和本地限流器的适用场景和限制",
          "is_bot": false,
          "headline": "refactor(lock): 添加基于 Caffeine 的本地锁支持并优化锁处理逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-04T16:56:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c04d10ba3e3273d69262a0be140db00accef32fa",
          "body": "- 新增 RateLimitWindow 组件,统一处理速率、容量和时间间隔的计算\n- 修改 Caffeine、JDK、本地 Redis 和 Redisson 限流器,使用统一窗口参数\n- 令牌桶令牌补充算法根据规范化容量和间隔时间计算,提升一致性\n- Redisson 限流器新增配置匹配检测,动态更新不匹配的限流配置\n- Redis 限流器调整令牌计算,提前归一化每毫秒恢复速率\n- 修正 Jakarta 和 Javax 模块中日志自动配置解析多 Bean 行为,支持单个自定义写入器\n- 更新 WebMvcConfigurer,修正日期格式化器使用日期而非日期时间模式\n- 添加 RateLimitWindow 及 RedissonRateLimitHandler 单元测试覆盖新逻辑\n- 增加 Jakarta 模块日志自动配置单元测试验证自定义写入器注入功能\n- 增加 WebMvcConfigurer 测试,验证 Java Util Date 格式化应用自定义日期格式及时区",
          "is_bot": false,
          "headline": "refactor(ratelimit): 统一限流窗口计算逻辑以支持分数速率",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-04T15:58:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b911ef020151785dbfde32d2109fffe9a11861ba",
          "body": "- 移除缓存自动配置相关类,精简缓存实现\n- 删除日期时间转换器相关代码,清理过时转换器\n- 删除条件注解与条件判断实现,移除自定义条件支持\n- 删除基于SpEL的指纹签名器实现及接口\n- 移除各种脱敏处理器实现,减少不必要的功能代码\n- 删除JSON处理器提供者及默认实现\n- 清理后缀提供器和枚举字段转化约定接口\n- 删除AOP相关的工具类及方法参数格式化工具\n- 移除Web请求相关的工具方法和请求响应处理\n- 大幅度精简核心模块,优化项目结构和依赖关系",
          "is_bot": false,
          "headline": "refactor(core): 删除所有核心工具类和SPI相关代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-02T00:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90e2c493e236229313b4840e0a586add0fe3c4e1",
          "body": "- 移除缓存自动配置相关类,精简缓存实现\n- 删除日期时间转换器相关代码,清理过时转换器\n- 删除条件注解与条件判断实现,移除自定义条件支持\n- 删除基于SpEL的指纹签名器实现及接口\n- 移除各种脱敏处理器实现,减少不必要的功能代码\n- 删除JSON处理器提供者及默认实现\n- 清理后缀提供器和枚举字段转化约定接口\n- 删除AOP相关的工具类及方法参数格式化工具\n- 移除Web请求相关的工具方法和请求响应处理\n- 大幅度精简核心模块,优化项目结构和依赖关系",
          "is_bot": false,
          "headline": "refactor(core): 删除所有核心工具类和SPI相关代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-04-02T00:36:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8c6d6412d580e3443ff8f1f2cfedb95b7631068",
          "body": "- 添加 .claude 目录到忽略列表\n- 添加 AGENTS.md 文件到忽略列表\n- 添加 CLAUDE.md 文件到忽略列表\n- 添加 /plans/ 目录下所有文件到忽略列表",
          "is_bot": false,
          "headline": "chore(git): 更新 .gitignore 文件忽略规则",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-27T14:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f2b0cda8da733e23acd129723377c932e20c8b",
          "body": "- 将modulesAppend替换为modules方法进行模块注册\n- 确保枚举模块正确集成到Jackson配置中\n- 修复可能的模块注册覆盖问题",
          "is_bot": false,
          "headline": "fix(jackson): 修正枚举模块注册方法",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-15T03:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b13740b6c15a8d424c4e5d402a4d223924fced3",
          "body": "- 为 RateLimit 注解添加 timeout 和 unit 参数支持可配置时间窗口\n- 修改 RateLimitHandler 接口方法签名以支持时间窗口参数\n- 更新所有限流处理器实现(Caffeine、JDK、Redis、Redisson)以支持令牌桶算法\n- 将固定窗口算法改为令牌桶算法提供更精确的限流控制\n- 为 JDK 实现的幂等和锁处理器添加分布式环境警告日志\n- 优化 Redis 限流器的 Lua 脚本使用毫秒级时间戳提高精度",
          "is_bot": false,
          "headline": "feat(ratelimit): 扩展限流功能支持可配置时间窗口",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-06T14:49:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e5e43e5d46e8a158c8aa0a32fa35d14083f498f",
          "body": "- 在幂等处理接口及各个实现类中新增 unlock 方法,完善锁释放功能\n- 修改切面逻辑,确保执行业务方法后释放幂等锁,防止死锁\n- 调整 Redis 幂等自动配置,替换 RedissonClient 依赖为 RedisTemplate\n- 修正 Jackson 配置中枚举模块的加载方式,改为追加模块\n- 更新日志自动配置,改为依赖 Slf4JLogWriter 防止日志切面加载异常\n- Prop 配置类日期时间和 Web 配置属性添加默认初始化实例\n- 删除速率限制配置中@ConditionalOnClass注解,防止条件判断失效",
          "is_bot": false,
          "headline": "fix(idempotent): 添加幂等锁释放机制及优化配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-06T06:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cff1f0bdf3732dbf02f82e881abc6b104274e71",
          "body": "- 调整JsonEnumSerializerModifier中的方法参数缩进\n- 统一LuminionJacksonConfig中配置类和方法的注释格式\n- 优化Jackson2ObjectMapperBuilderCustomizerConfiguration配置的代码缩进和换行\n- 规范JacksonRedisConfiguration中redisSerializer方法的注释和代码排版\n- 保持代码风格一致,提升可读性和维护性",
          "is_bot": false,
          "headline": "refactor(jackson): 优化Jackson配置代码格式和注释风格",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-03T05:25:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bf0a093ef81ab88ab796f63c1bd93901312fa41",
          "body": "- 调整注解中默认超时时间由5秒改为3秒,移除autoRelease字段及相关逻辑\n- IdempotentAspect中移除自动释放锁的代码,简化执行流程\n- CaffeineIdempotentHandler改用自定义过期策略Expiry动态控制缓存条目存活时间\n- JdkIdempotentHandler引入异步清理机制,避免阻塞并发性能下降,简化释放逻辑\n- Redis和Redisson幂等处理器中移除释放锁的相关方法实现\n- 接口IdempotentHandler移除释放锁方法定义,统一接口职责",
          "is_bot": false,
          "headline": "refactor(idempotent): 优化幂等处理逻辑和缓存过期策略",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-03T02:05:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b93f3165b4543cae6438bb35eff5e5c1aff31c1",
          "body": "- 将所有类和配置中的 @since 注释从 1.0.1 修改为 1.0.0\n- 涉及幂等处理器、分布式锁、限流相关实现及配置类\n- 保持版本注释统一,便于版本管理和文档维护",
          "is_bot": false,
          "headline": "chore(version): 统一修正所有模块的 @since 注释版本号",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:57:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a34793c35aadfdede38e74e82268eaa62f24a3e",
          "body": "- 删除幂等模块中基于Guava实现的自动配置和处理器类\n- 删除限流模块中基于Guava实现的自动配置和处理器类\n- 取消自动配置中Guava相关的class条件依赖\n- 修改Jdk自动配置类的依赖优先级,均改为依赖Caffeine相关配置\n- 更新spring.factories文件,注释禁用Guava相关自动配置\n- pom.xml中升级jsoup版本到1.21.1",
          "is_bot": false,
          "headline": "refactor(config): 移除Guava相关自动配置和实现,调整依赖关系",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2659bbbdaf3f676212dc469b4301eeed4ab8d98",
          "body": "- 调整了多个依赖在pom.xml中的顺序,使其更加规范\n- 移除了重复的依赖声明,避免冗余\n- 删除了明确版本号以便于版本统一管理\n- 确保可选依赖标记一致,方便模块化配置",
          "is_bot": false,
          "headline": "chore(deps): 优化依赖顺序调整及版本配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:49:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d052218758ac9f29effd7bcfa1335b14ef49ccf5",
          "body": "- 将令牌桶时间戳改为秒的小数形式,支持更高频率请求的精确控制\n- 保证容量至少为1,避免burst值为0导致异常\n- Lua脚本中失败时不更新last_time,防止高频请求导致令牌永久耗尽\n- 注释禁用Guava自动配置,避免不必要的类加载",
          "is_bot": false,
          "headline": "fix(rateLimit): 优化令牌桶算法时间单位及避免高频请求问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4354b166d97f2be2a34ec6728ab38934ae7ed4ee",
          "body": "- 移除 LuminionLockConfig 与 LuminionRateLimitConfig 中对不同实现的内嵌配置\n- 新增 Redisson、Redis 和 JDK 三种锁实现的独立自动配置类\n- 新增 Redisson、Redis、Caffeine、Guava 和 JDK 五种限流实现的独立自动配置类\n- 更新 AutoConfiguration.imports 文件,注册所有新拆分的自动配置类\n- 精简原配置类,仅保留基础公共配置,提升模块可维护性与扩展性",
          "is_bot": false,
          "headline": "refactor(config): 重构锁和限流自动配置拆分为多个独立模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T09:22:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a03269482370b4dcea4c4d8657f0b1debd1a96a8",
          "body": "- 在 AutoConfiguration.imports 文件中新增 LuminionIdempotentConfig\n- 支持幂等相关配置的自动装配功能\n- 保持与现有幂等和锁配置的一致性\n- 促进幂等功能模块的自动加载和管理",
          "is_bot": false,
          "headline": "feat(config): 添加幂等配置类到自动装配列表",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T08:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f17820c7ebd67e44034cf08501d802fcc2960c",
          "body": "- 删除原有的多功能复合幂等配置类\n- 新增独立的 Redisson 配置类,优先使用 Redisson 实现\n- 新增独立的 Redis 配置类,作为 Redis 实现选项\n- 新增独立的 Caffeine 配置类,提供本地缓存实现\n- 新增独立的 Guava 配置类,为 Guava 缓存实现提供支持\n- 新增独立的 JDK 配置类,作为兜底实现\n- 更新 AutoConfiguration.imports 文件,按需加载全新的多种幂等自动配置\n- 保持优先级顺序:Redisson > Redis > Caffeine > Guava > JDK\n- 保留幂等切面 IdempotentAspect 的自动装配依赖关系",
          "is_bot": false,
          "headline": "refactor(idempotent): 重构幂等自动配置拆分为多模块配置类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T08:04:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0498f7699507eddec3cd141d218454286a904f4",
          "body": "- 删除原有的LuminionIdempotentConfig文件\n- 将幂等自动配置拆分为多个文件,分别对应Redisson、Redis、Caffeine、Guava、JDK实现\n- 每个配置类移至idempotent.config包下,明确配置职责和依赖关系\n- 更新AutoConfiguration.imports文件中幂等配置的导入路径\n- 保持原有幂等实现优先级和逻辑一致,提升代码结构清晰度和可维护性",
          "is_bot": false,
          "headline": "refactor(idempotent): 重构幂等自动配置拆分至独立模块",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9959b9250e10bf4e1ebe11d319bc74ef654bd92",
          "body": "- 去除对RedisSerializer Bean的强制依赖,改用ObjectProvider延迟获取\n- 提供默认的GenericJackson2JsonRedisSerializer作为序列化器备选\n- 兼容spring.cache.type配置,默认启用Redis缓存管理器\n- 优化RedisCacheConfiguration,修正缓存序列化设置和过期时间\n- 调整自动配置类的注解顺序和加载条件,保障配置生效顺序正确",
          "is_bot": false,
          "headline": "fix(cache): 修复Redis缓存配置的序列化器兼容性问题",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ceda0aab79d73e1281557bea7cb7193615aa3e0",
          "body": "- 删除了 StringDecryptor 的导入\n- 去除了 Spring BeanFactory 的导入\n- 保持了反序列化相关导入不变\n- 优化了类的依赖,减少多余引用",
          "is_bot": false,
          "headline": "refactor(jackson): 移除未使用的导入优化代码结构",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2075da233e987403d583fe830adf97899f29b37f",
          "body": "- 优化注解功能描述,增加分布式支持及自定义实现说明\n- 合并并简化注解JSON字段功能说明,添加枚举转义支持\n- 精简日志注解描述,突出入参、返回值、错误信息及执行时长\n- 补充自动配置相关内容,明确spring-cache-redis和MyBatis-Plus插件配置\n- 增加Web参数转换器及Spring converter支持说明\n- 新增web容器上下文工具、全局异常处理和XSS处理相关描述",
          "is_bot": false,
          "headline": "docs(readme): 更新功能特性描述内容",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:19:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c686f12ad204f7b0b6ae41bb6de7b5b3c609a8f",
          "body": "- 优化项目简介,简化功能描述\n- 新增当前迭代声明,明确版本信息\n- 添加旧版本地址链接,方便用户查阅历史版本\n- 格式调整,提升文档可读性",
          "is_bot": false,
          "headline": "docs(readme): 更新项目说明文档,添加旧版本地址链接",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:09:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cc546e5e5a090fad2cae791cb2a6c0970ad310b",
          "body": "- 新增JsonProcessorProvider接口定义JSON处理器实例获取方法\n- 实现DefaultJsonProcessorProvider,根据Spring容器或反射实例化处理器\n- README完善功能特性,详细描述注解防重提交、限流、加密、日志等功能支持\n- spring自动配置文件中默认禁用缓存模块,需用户手动导入使用",
          "is_bot": false,
          "headline": "feat(core): 增加JSON处理器自动获取机制",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec086cb3950f3cee89f891e85d4d7ac9962aff91",
          "body": "- 将多个脱敏器类从 StringMasker 接口改为实现 java.util.function.Function<String, String>\n- 移动脱敏器类包路径由 spi.masker 重命名为 spi.func\n- 删除旧的 StringMasker、StringEncryptor、StringDecryptor 接口及相关注解 JsonMask\n- 重命名 JsonDecrypt 和 JsonEncrypt 注解为 JsonDecode 和 JsonEncode,调整其属性类型为 Function<String,String>\n- 重构 Jackson 序列化和反序列化器,支持\n[…]\n 更新 Jackson 配置类,改用 BeanFactory 延迟获取 JsonProcessorProvider 和 XssCleaner,统一字符串处理逻辑\n- 删除 LuminionMaskerAutoConfiguration,相关 Bean 由其他配置类管理\n- 新增 JsonProcessorProvider Bean,提供转换函数实例支持\n- 优化包结构与组件依赖,提升扩展性和规范性",
          "is_bot": false,
          "headline": "refactor(core): 重构脱敏器为函数接口,简化处理逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T07:05:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "032d834420ac386cde961744d7e1d25caa1bcf5b",
          "body": "- 新增通用文件下载响应头设置方法,解决中文乱码和空格问题\n- 兼容现代浏览器和旧版IE的Content-Disposition写法\n- 设置跨域时前端可访问Content-Disposition响应头\n- 新增获取Excel、CSV、Word、PDF、ZIP和通用二进制文件的输出流方法\n- 统一使用UTF-8编码确保文件名正确显示",
          "is_bot": false,
          "headline": "feat(web): 添加文件下载响应头及多种格式输出流支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-03-02T05:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6fdd38c51aa6d44475c64f90a9cfdf181106df6",
          "body": "- 从 LuminionConverterConfig 中移除 feature.converter.datetime 包导入\n- 从 LuminionIdempotentConfig 中移除 feature.idempotent.support 包导入\n- 从 LuminionRateLimitConfig 中移除 feature.ratelimit.support 包导入\n- 统一使用新的支持包路径替代旧的特性模块导入",
          "is_bot": false,
          "headline": "refactor(config): 移除过时的包导入路径",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:46:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a56d93554c798186ce669b923ce87f227b8618d",
          "body": "- 将 feature.cache 包重命名为 cache\n- 将 feature.converter 包重命名为 converter\n- 将 feature.idempotent 包重命名为 idempotent\n- 将 feature.jackson 包重命名为 jackson\n- 将 feature.lock 包重命名为 lock\n- 将 feature.log 包重命名为 log\n- 移除 core 模块中的 masker 相关组件\n- 更新 Prop 类中 XssStrategy 的导入路径\n- 调整 Jackson 配置类中序列化器和反序列化器的导入路径\n- 修改日志切面中注解引用的包路径",
          "is_bot": false,
          "headline": "refactor(starter): 重构包结构并移除核心功能组件",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:42:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe75f9b43e77f3100333a9225fd5006814376f0c",
          "body": "- 将 CorePreConfig 重命名为 LuminionCoreAutoConfiguration 并移至 core 包\n- 将 Prop 类从 starter 包移至 core 包并启用配置属性\n- 将 CacheConfig 重命名为 LuminionCacheAutoConfiguration 并配置 Redisson 自动配置依赖\n- 将 ConverterConfig 重命名为 LuminionConverterConfig 并更新 Prop 导入路径\n- 将 IdempotentConfig 重命名为 LuminionIdempotentConfig 并更新 Prop 导入路\n[…]\nrop 导入路径\n- 将 RedisConfig 重命名为 LuminionRedisConfig\n- 将 WebMvcConfig 重命名为 LuminionWebAutoConfiguration 并更新 Prop 导入路径\n- 移除原有的 LuminionAutoConfiguration 配置类\n- 更新 AutoConfiguration.imports 文件中的自动配置类列表和加载顺序",
          "is_bot": false,
          "headline": "refactor(config): 重构自动配置类结构并更新导入配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-26T02:01:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aba5f8b82bc30e3aedce5644d5e708ac520c7b60",
          "body": "- 将 RateLimit 注解的默认限流速率从 10 QPS 调整为 50 QPS\n- 更新了限流配置的默认参数设置",
          "is_bot": false,
          "headline": "chore(ratelimit): 修改限流注解默认值",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T10:09:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3224d4d920cf6d2e93342cb3b0e10bcc390ab3bf",
          "body": "- 删除了 JavaUtilDateFormatter、LocalDateFormatter、LocalDateTimeFormatter 和 LocalTimeFormatter 类\n- 移除了 MaskAnnotationFormatterFactory 和 UnmaskAnnotationFormatterFactory 格式化工厂\n- 删除了 XssFormatter XSS清理格式化器\n- 将 BaseExceptionHandler 重命名为 WebExceptionHandler\n- 更新了 WebExceptionHandler 的类名引用和构造函数名称",
          "is_bot": false,
          "headline": "refactor(formatter): 移除日期格式化器并重命名异常处理器",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:59:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c6be5eecdc420b8cadc7ff0caa7eea897ef2c57",
          "body": "- 将switch语句替换为if-else条件判断结构\n- 保持原有的XssStrategy枚举类型处理逻辑不变\n- 提高代码可读性和维护性",
          "is_bot": false,
          "headline": "refactor(xss): 重构Jsoup XSS清理器策略选择逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:31:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fdeb1fa82124b2d63a51c2a7ea77acc9e197801",
          "body": "- 将 WebContextHolder 重命名为 WebUtils 并移至 core.util 包\n- 将 AspectUtils 类改为抽象类并添加 NoArgsConstructor 注解\n- 在 ConverterConfig 上添加 Deprecated 注解和相关文档说明\n- 修复 JacksonStringSerializer 中的泛型类型声明\n- 更新 RequestLogWriter 中的导入路径和方法调用\n- 移除 WebMvcConfig 中的 WebMvcConfigurer 实现接口\n- 将 BaseWebMvcConfigurer 重命名为 WebMvcEnhanceConfigurer\n- 简化 WebMvcEnhanceConfigurer 的构造函数逻辑",
          "is_bot": false,
          "headline": "refactor(core): 重构工具类结构并优化配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T09:27:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e09aa752540461c2329487c06284a585b806aedd",
          "body": "- 将 StringToDateConverter 重命名为 StringToJavaUtilDateConverter\n- 移除 XssStringConverter、MaskAnnotationFormatterFactory 和相关依赖\n- 移除 ApplicationContext 依赖以简化配置\n- 注释掉 SQL 日期转换器相关 Bean 配置\n- 将 UnmaskAnnotationFormatterFactory 类注释为临时禁用\n- 从 BaseWebMvcConfigurer 中移除注解驱动格式化器注册\n- 添加 WebProperties 配置类支持 CORS 控制\n- 在 CORS 配置中添加条件判断控制跨域启用",
          "is_bot": false,
          "headline": "refactor(converter): 重构日期转换器并移除废弃功能",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T08:45:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "728c9d61492d58843449d2bb571f522be8da023f",
          "body": "- 从 ConverterConfig 中移除 MaskAnnotationFormatterFactory 和 UnmaskAnnotationFormatterFactory 的 Bean 定义\n- 从 LuminionAutoConfiguration 中移除 MaskConfig 配置类的引用\n- 简化了转换器配置,移除了不必要的注解格式化功能\n- 减少了自动配置的复杂性,提高了启动性能",
          "is_bot": false,
          "headline": "refactor(feature): 移除掩码注解格式化工厂配置",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T08:30:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d034a4ab81366c5675a8f2044c02c1688b864d16",
          "body": "- 将 StringToDateConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalDateConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalDateTimeConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToLocalTi\n[…]\nmeConverter\n- 将 StringToSqlTimeConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter\n- 将 StringToSqlTimestampConverter 的接口从 CompatibleStringToDateTimeConverter 更改为 DateTimeConverter",
          "is_bot": false,
          "headline": "refactor(datetime): 更新日期时间转换器接口实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T07:56:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db6708c4544c419687d6903482ede102e797bda2",
          "body": "- 移除 CoreConfig、IdempotentConfig 和 RateLimitConfig 自动配置类\n- 将脱敏策略类移动到 core.spi.masker 包下并实现 StringMasker 接口\n- 将 MethodFingerprinter 重命名为 Fingerprinter 并移动到 core.spi 包\n- 创建新的 CorePreConfig 替代原有的 MaskConfig 进行核心预配置\n- 将缓存相关组件移动到 feature.cache 子包\n- 将日期时间转换器移动到 feature.converter.datetime 子包\n- 更新幂等性相关组件到 feature.idempotent 子包并使用新的 Fingerprinter 接口\n- 移除 XSS 清理转换器的自动配置\n- 重构 AspectUtils 工具类并添加新的参数字符串生成功能",
          "is_bot": false,
          "headline": "refactor(core): 重构核心组件结构并移除自动配置类",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-25T07:55:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "201687e5934c775f92c7f751e06c11f77831415e",
          "body": "- 将RateLimiter接口重命名为RateLimitHandler\n- 修改相关实现类名称,统一后缀为RateLimitHandler\n- 更新RateLimitConfig配置类中相关Bean定义及依赖注入\n- 调整RateLimitAspect中使用的限流处理器变量名和类型\n- 保持原有逻辑不变,仅限于接口及类名重构和相关引用更新",
          "is_bot": false,
          "headline": "refactor(ratelimit): 重命名限流相关接口及实现类以提升一致性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "113625ab995172c47dc24e2b90fad10251da7d59",
          "body": "- 删除 LimitType 枚举及相关代码\n- 取消根据 IP、用户及全局维度生成限流 Key 的实现\n- 修改限流 Key 生成策略为仅使用方法指纹(类名+方法名+参数内容)\n- 删除获取客户端 IP 和用户 ID 的相关方法\n- 精简限流切面逻辑,优化异常抛出流程",
          "is_bot": false,
          "headline": "refactor(ratelimit): 移除限流类型支持并简化Key生成逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d6e9b9d698c8bdb56095a960553f9b75a365b14",
          "body": "- RateLimit 注解支持类和方法级别配置,合并并简化限流速率及 Key 配置\n- RateLimitAspect 限流切面增强,支持方法覆盖类注解配置,简化令牌桶参数\n- RateLimiter 接口修改,移除突发量参数,统一只传递速率值\n- 新增本地限流实现:基于 Caffeine、Guava 和 JDK 固定窗口的限流器,提供多种降级选择\n- 移除旧的 LocalRateLimiter,改用更灵活的 CaffeineRateLimiter\n- RateLimitConfig 调整,根据条件装配优先 Redis 分布式限流,依次降级至 Caffeine、Guava 和 JDK 实现\n- 修改 RedisRateLimiter,兼容新版接口及参数\n- Idempotent 注解调整默认 autoRelease 为 false,提示信息更新为“您的请求已提交,请勿重复操作”",
          "is_bot": false,
          "headline": "feat(ratelimit): 优化限流器及注解实现,新增多种本地限流支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T06:06:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9d1f710aeed34556559ea3712509b1958e38004",
          "body": "- 基于 Caffeine Cache 实现本地幂等处理器,存储过期时间戳并保证原子性\n- 基于 Guava Cache 实现本地幂等处理器,提供兜底过期策略防止内存泄漏\n- 基于 JDK ConcurrentHashMap 实现幂等处理器,作为基础兜底方案,支持过期键清理\n- 各实现均通过 compute 方法保证操作的原子性,确保并发安全\n- 提供键的尝试加锁和释放接口,为幂等控制提供底层支持",
          "is_bot": false,
          "headline": "feat(idempotent): 添加本地幂等处理器实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0f2672a186ae76b7297cb54496ba2f1cbd0e6dc",
          "body": "- 删除基于 Caffeine 的本地幂等处理器 LocalIdempotentHandler\n- 新增支持多种幂等处理方案:Caffeine、Guava、JDK ConcurrentHashMap\n- 优先使用 Redis 实现,按顺序降级至其他实现\n- 调整 IdempotentAspect 构造函数实现,去除 lombok 依赖@RequiredArgsConstructor\n- 细化幂等处理器 Bean 装配顺序及条件注解\n- 增强配置类的可读性及扩展性",
          "is_bot": false,
          "headline": "refactor(idempotent): 优化幂等处理器配置和实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "793a7232d4ee32d6884d7bb3d4e97734a4c19b64",
          "body": "- 新增isWebContext方法判断当前请求是否为Web请求上下文\n- 使用RequestContextHolder的getRequestAttributes方法实现判断\n- 通过判断请求属性是否为ServletRequestAttributes实例来确定上下文类型\n- 方便调用者快速判断当前环境是否为Web请求上下文环境",
          "is_bot": false,
          "headline": "feat(web): 添加判断当前是否在Web请求上下文的方法",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "337665c1d90b1bdc1c8913ef3f5583a8af4cacb7",
          "body": "- 在日志配置类中新增 ErrorLogWriter 和 ErrorLogAspect 相关 Bean 定义\n- 在 @InvokeLog 注解中增加 @ErrorLog 支持,统一处理出错日志\n- 在 Slf4JLogWriter 实现 ErrorLogWriter 接口,支持错误日志输出\n- 新增 EmailLogWriter 实现,通过邮件发送异常错误通知\n- 优化邮件错误通知的内容格式,包含应用名、端口、请求信息、方法及堆栈信息\n- 修正邮件中 HTML 样式及格式细节,改善邮件可读性",
          "is_bot": false,
          "headline": "feat(log): 增加错误日志支持及邮件通知功能",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62b3dc266bd20c2ac82101b860f9ae9e587c902a",
          "body": "- 取消注释并启用 @AutoConfiguration 注解\n- 添加 @ConditionalOnBean(Prop.class) 限制自动配置生效条件\n- 移除类的 @Deprecated 标记\n- 确保配置类只有在 Prop bean 存在时加载",
          "is_bot": false,
          "headline": "feat(config): 启用自动配置并添加条件注解",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T05:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22b688a8d30e139f5b757bb312cf1457b786ac86",
          "body": "- 移除 InvokeLogAspect 和相关抽象日志写入器接口及实现,简化日志体系\n- 新增 ArgsLog、ResultLog、InvokeLog(复合注解)分别支持入参与返回值日志\n- 引入 SlowLog 注解与 SlowLogAspect 实现慢日志切面功能,优化性能监控\n- 新增 Slf4JLogWriter 实现日志写入,并提供默认 Bean 配置支持入参、结果及慢日志\n- 调整 LogConfig 自动配置,新增多个日志切面 Bean 的条件加载\n- 新增 AspectUtils 工具类,统一方法签名日志处理逻辑\n- 修改 EmailLogWriter 采用 AspectUtils 提供的格式化方法完善邮件通知信息\n- BaseWebMvcConfigurer 增加 allowCrossOrigin 方法支持跨域配置,方便子类调用\n- 标记 ConverterConfig 为弃用,移除 lombok @Slf4j 注解\n- 代码中统一移除多处 lombok @Slf4j 注解,简化日志依赖与管理",
          "is_bot": false,
          "headline": "refactor(log): 重构日志相关组件与注解,移除过时代码",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T03:47:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba204041377b7984459b1771bcac02b0c8a9dfc2",
          "body": "- 将 MethodLog 重命名为 InvokeLog 并新增记录入参和返回值的开关配置\n- 将 TimeLog 重命名为 SlowLog,新增阈值时间单位和默认阈值,调整日志等级默认值\n- MethodLogAspect 改为 InvokeLogAspect,支持按需记录入参和返回值,计算并传递调用耗时\n- 删除 TimeLogAspect,新增 SlowLogAspect 作为慢日志切面实现\n- 抽象日志写入接口及实现类均重命名为 InvokeLogWriter 相关命名,统一日志写入接口\n- RequestLogWriter 继承更新后的 Slf4JInvokeLogWriter,添加请求信息前缀\n- 修改 EmailLogWriter,修复邮件发送异常捕获,调整方法参数及格式化细节\n- LogConfig 配置类更新为 InvokeLog 相关 Bean 的加载及条件判断逻辑",
          "is_bot": false,
          "headline": "refactor(log): 重构并重命名日志相关注解和类,优化日志功能实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-23T02:39:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c9ae2d050b742779da9642550a4b6c5d2534c85",
          "body": "- 将 MethodLogWriter 接口的 before 方法重命名为 printMethodArgs\n- 将 MethodLogWriter 接口的 after 方法重命名为 printReturnValue\n- 修改 MethodLogAspect 中对应调用以匹配新的方法名\n- 更新 Slf4JMethodLogWriter 实现类中相应方法名和日志内容描述",
          "is_bot": false,
          "headline": "refactor(log): 重命名日志打印方法以提高表达准确性",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-14T01:11:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78d5182fa2bbb8426e03358a3f43a6243e858fb9",
          "body": "- 移除对Spring StopWatch的依赖,改用System.nanoTime实现计时\n- 修改时间转换为毫秒,确保计时更精确\n- 优化日志输出格式与日志等级判断逻辑\n- 保留原阈值判断避免无效日志打印\n- 代码结构更简洁,提升性能和可维护性",
          "is_bot": false,
          "headline": "refactor(log): 优化方法执行时间记录逻辑",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T14:38:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a2a68e78dc34cae0578017bb7747ba67e527df8",
          "body": "- 将日志注解Log重命名为MethodLog,计时注解Timer重命名为TimeLog并迁移包路径\n- 将日志切面LogAspect重命名为MethodLogAspect,计时切面TimerAspect重命名为TimeLogAspect并改进日志级别支持\n- 重命名相关日志支持类如AbstractLogWriter、Slf4jLogWriter、LogWriter接口以支持MethodLog命名\n- LogConfig配置类中日志相关Bean从LogWriter切换为MethodLogWriter并相应修改依赖\n- 改进TimeLog注解,添加阈值和日志等级配置,TimeLogAspect根据阈值和等级进行日志输出\n- Prop配置类新增日志级别属性logLevel,支持日志等级配置管理\n- 移除多余的注释和包导入,调整代码格式提高可读性和一致性",
          "is_bot": false,
          "headline": "refactor(log): 重构日志和计时相关代码,统一命名和改进实现",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T14:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3ad36c6e008d82cad2f7426d8cccda9b486da19",
          "body": "- 将所有自动配置类从 autoconfig 包重命名并移动到 config 包下\n- 修改类名为更简洁的 XxxConfig 格式,统一命名规范\n- 更新 LuminionAutoConfiguration 中的导入路径以匹配新包和类名\n- 注释部分自动配置类导入以配合当前代码结构调整\n- 移除部分无用或重复的 import 声明,优化代码整洁性",
          "is_bot": false,
          "headline": "refactor(config): 将自动配置类移动至 config 包并重命名",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T13:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9ebe8892a72d3ebe655d0e90ee28cdb6a02c50c",
          "body": "- 引入 Prop 配置类,实现幂等和限流关键字前缀管理\n- 修改 IdempotentAspect 和 RateLimitAspect,在构造时传入前缀参数\n- 在生成幂等和限流 Key 时使用前缀拼接,支持灵活配置\n- 删除 LogAspect 中对异常的捕获,简化日志处理逻辑\n- 移除 Slf4jLogWriter 中 error 方法及 LogWriter 接口对应定义\n- 精简 Prop 配置类,移除无用的 servlet 过滤器属性及注释内容",
          "is_bot": false,
          "headline": "refactor(config): 在幂等和限流配置中添加前缀支持",
          "author_name": "luminion",
          "author_login": "luminion",
          "committed_at": "2026-02-13T13:17:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 216,
      "latest_release_at": "2026-07-15T16:43:32Z",
      "latest_release_tag": "1.3.0",
      "releases_from_tags": true,
      "days_since_last_push": 8,
      "active_weeks_last_year": 30,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 24.7
    },
    "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": "io.github.luminion:velo-autoconfigure-javax",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-javax",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:49Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-common",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:41Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot2-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:57:00Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot3-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:57Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-starter",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-spring-boot4-starter",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:57:02Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jakarta",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:50Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jackson2",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:49Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson3",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/io.github.luminion/velo-autoconfigure-jackson3",
          "is_deprecated": false,
          "latest_version": "1.3.0",
          "repository_url": null,
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-15T16:56:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 5,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2025-10-24",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "pom.xml",
        "velo-autoconfigure-common/pom.xml",
        "velo-autoconfigure-jackson2/pom.xml",
        "velo-autoconfigure-jackson3/pom.xml",
        "velo-autoconfigure-jakarta/pom.xml",
        "velo-autoconfigure-javax/pom.xml",
        "velo-spring-boot2-autoconfigure/pom.xml",
        "velo-spring-boot2-dependencies/pom.xml",
        "velo-spring-boot2-starter/pom.xml",
        "velo-spring-boot3-autoconfigure/pom.xml",
        "velo-spring-boot3-dependencies/pom.xml",
        "velo-spring-boot3-starter/pom.xml",
        "velo-spring-boot4-autoconfigure/pom.xml",
        "velo-spring-boot4-dependencies/pom.xml",
        "velo-spring-boot4-starter/pom.xml"
      ],
      "largest_source_bytes": 25506,
      "source_files_sampled": 201,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pom.xml",
        "velo-autoconfigure-common/pom.xml",
        "velo-autoconfigure-jackson2/pom.xml",
        "velo-autoconfigure-jackson3/pom.xml",
        "velo-autoconfigure-jakarta/pom.xml",
        "velo-autoconfigure-javax/pom.xml",
        "velo-spring-boot2-autoconfigure/pom.xml",
        "velo-spring-boot2-dependencies/pom.xml",
        "velo-spring-boot2-starter/pom.xml",
        "velo-spring-boot3-autoconfigure/pom.xml",
        "velo-spring-boot3-dependencies/pom.xml",
        "velo-spring-boot3-starter/pom.xml",
        "velo-spring-boot4-autoconfigure/pom.xml",
        "velo-spring-boot4-dependencies/pom.xml",
        "velo-spring-boot4-starter/pom.xml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "org.springframework.boot:spring-boot",
            "direct": false,
            "version": "2.7.18",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-rc42-6c7j-7h5r",
              "GHSA-wwpq-f5c3-7hvx"
            ],
            "fixed_version": "4.0.6",
            "advisory_count": 2,
            "oldest_advisory_days": 452
          },
          {
            "name": "org.springframework:spring-core",
            "direct": false,
            "version": "5.3.31",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-jmp9-x22r-554x"
            ],
            "fixed_version": "6.2.11",
            "advisory_count": 1,
            "oldest_advisory_days": 311
          },
          {
            "name": "org.springframework:spring-context",
            "direct": false,
            "version": "5.3.31",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-4gc7-5j7h-4qph",
              "GHSA-4wp7-92pw-q264"
            ],
            "fixed_version": "6.2.7",
            "advisory_count": 2,
            "oldest_advisory_days": 644
          },
          {
            "name": "org.springframework:spring-expression",
            "direct": false,
            "version": "5.3.31",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 4.3,
            "advisory_ids": [
              "GHSA-9cmq-m9j5-mvww"
            ],
            "fixed_version": "5.3.39",
            "advisory_count": 1,
            "oldest_advisory_days": 703
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 2,
          "moderate": 2
        },
        "advisory_count": 6,
        "affected_count": 4,
        "assessed_count": 11,
        "malicious_count": 0,
        "assessed_package": "maven:io.github.luminion:velo-autoconfigure-javax@1.3.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven"
      ],
      "dependencies": [
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-core",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-extension",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "io.github.openfeign:feign-core",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${feign-core.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.ben-manes.caffeine:caffeine",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.0.3"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.3.0"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-autoconfigure-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.0.1-incubating"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
          "manifest": "velo-autoconfigure-jackson2/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-jackson",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "tools.jackson.core:jackson-databind",
          "manifest": "velo-autoconfigure-jackson3/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "jakarta.validation:jakarta.validation-api",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-mail",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-jakarta/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-autoconfigure",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-configuration-processor",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "javax.validation:validation-api",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-mail",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.baomidou:mybatis-plus-boot-starter",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-autoconfigure-javax/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-javax",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "manifest": "velo-spring-boot2-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-boot-starter",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot2-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-dependencies",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot2-autoconfigure",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aop",
          "manifest": "velo-spring-boot2-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson2",
          "manifest": "velo-spring-boot3-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot3-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-dependencies",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot3-autoconfigure",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aop",
          "manifest": "velo-spring-boot3-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-common",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jakarta",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-autoconfigure-jackson3",
          "manifest": "velo-spring-boot4-autoconfigure/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-boot.version}"
        },
        {
          "name": "org.redisson:redisson-spring-boot-starter",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${redisson.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-spring-boot4-starter",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.jsoup:jsoup",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jsoup.version}"
        },
        {
          "name": "com.alibaba:easyexcel",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easyexcel.version}"
        },
        {
          "name": "cn.idev.excel:fastexcel",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastexcel.version}"
        },
        {
          "name": "org.apache.fesod:fesod-sheet",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fesod-sheet.version}"
        },
        {
          "name": "org.projectlombok:lombok",
          "manifest": "velo-spring-boot4-dependencies/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${lombok.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-dependencies",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "io.github.luminion:velo-spring-boot4-autoconfigure",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${project.version}"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-aspectj",
          "manifest": "velo-spring-boot4-starter/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "cn.idev.excel:fastexcel",
            "direct": true,
            "version": "1.3.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.alibaba:easyexcel",
            "direct": true,
            "version": "4.0.3",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-core",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-extension",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot4-starter",
            "direct": true,
            "version": "3.5.14",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.github.ben-manes.caffeine:caffeine",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-common",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jackson2",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jackson3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-jakarta",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-autoconfigure-javax",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot2-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot2-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot3-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot3-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot4-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.luminion:velo-spring-boot4-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.github.openfeign:feign-core",
            "direct": true,
            "version": "11.10",
            "ecosystem": "maven"
          },
          {
            "name": "jakarta.validation:jakarta.validation-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "javax.validation:validation-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.fesod:fesod-sheet",
            "direct": true,
            "version": "2.0.1-incubating",
            "ecosystem": "maven"
          },
          {
            "name": "org.jsoup:jsoup",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jsoup:jsoup",
            "direct": true,
            "version": "1.21.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": true,
            "version": "1.18.42",
            "ecosystem": "maven"
          },
          {
            "name": "org.redisson:redisson-spring-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.redisson:redisson-spring-boot-starter",
            "direct": true,
            "version": "3.40.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-autoconfigure",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-configuration-processor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "2.7.18",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "3.5.9",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "4.0.5",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-jackson",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-aop",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-aspectj",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-data-redis",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-mail",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-web",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": "3.13.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-gpg-plugin",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-jar-plugin",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.aspectj:aspectjweaver",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:flatten-maven-plugin",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.central:central-publishing-maven-plugin",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-starter-test",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.data:spring-data-redis",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-aop",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-context",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-expression",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-web",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 62,
        "direct_count": 45,
        "indirect_count": 17
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "luminion",
          "commits": 286,
          "avatar_url": "https://avatars.githubusercontent.com/u/42614491?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "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": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no 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 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0ae8908a2a54e8850cfc371e45d774c647a35626",
        "ran_at": "2026-07-24T16:07:18Z",
        "aggregate_score": 3.6,
        "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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/luminion/spring-boot-starter",
    "host": "github.com",
    "name": "spring-boot-starter",
    "owner": "luminion"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 42,
        "vitality": 82,
        "community": 29,
        "governance": 33,
        "engineering": 38
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 216,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 30
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "30/52 weeks with commits",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "216 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 216
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "1.3.0",
              "releases_from_tags": true,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 24.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~24.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 24.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 29,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "forks": 1,
              "stars": 5,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "5 stars",
                "points": 9.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 33,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "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": "at_risk",
            "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": 46,
            "inputs": {
              "followers": 4,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "luminion",
              "public_repos": 20,
              "account_age_days": 2893
            },
            "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": "4 followers of luminion",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "luminion"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "20 public repos, account ~7 yr old",
                "points": 21.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 20
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "io.github.luminion:velo-autoconfigure-javax",
                "io.github.luminion:velo-autoconfigure-common",
                "io.github.luminion:velo-spring-boot2-starter",
                "io.github.luminion:velo-spring-boot3-starter",
                "io.github.luminion:velo-spring-boot4-starter",
                "io.github.luminion:velo-autoconfigure-jakarta",
                "io.github.luminion:velo-autoconfigure-jackson2",
                "io.github.luminion:velo-autoconfigure-jackson3"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 3.6
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "moderate",
            "name": "Dependency advisories",
            "note": "Matched the maven:io.github.luminion:velo-autoconfigure-javax@1.3.0 runtime dependency closure — what installing the published package pulls in — 11 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:io.github.luminion:velo-autoconfigure-javax@1.3.0",
                  "assessed": 11
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 67,
            "inputs": {
              "source": "osv",
              "advisories": 6,
              "affected_packages": 4,
              "assessed_packages": 11,
              "unassessed_packages": 0,
              "affected_by_severity": "high 2, moderate 2",
              "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": "4 affected: org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3), +1 more",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 4,
                      "packages": "org.springframework.boot:spring-boot 2.7.18 (high 7.3), org.springframework:spring-core 5.3.31 (high 7.5), org.springframework:spring-context 5.3.31 (moderate 5.3)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "4 advisory-carrying package(s) unaddressed past 90 days; oldest published 703 days ago",
                "points": 24.8,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 4,
                      "oldest": 703
                    }
                  }
                ],
                "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": 11,
              "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
              }
            ]
          }
        ],
        "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": 56,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "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,
              "toolchain_manifests": [
                "pom.xml",
                "velo-autoconfigure-common/pom.xml",
                "velo-autoconfigure-jackson2/pom.xml",
                "velo-autoconfigure-jackson3/pom.xml",
                "velo-autoconfigure-jakarta/pom.xml",
                "velo-autoconfigure-javax/pom.xml",
                "velo-spring-boot2-autoconfigure/pom.xml",
                "velo-spring-boot2-dependencies/pom.xml",
                "velo-spring-boot2-starter/pom.xml",
                "velo-spring-boot3-autoconfigure/pom.xml",
                "velo-spring-boot3-dependencies/pom.xml",
                "velo-spring-boot3-starter/pom.xml",
                "velo-spring-boot4-autoconfigure/pom.xml",
                "velo-spring-boot4-dependencies/pom.xml",
                "velo-spring-boot4-starter/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "pom.xml, velo-autoconfigure-common/pom.xml, velo-autoconfigure-jackson2/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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 25506,
              "source_files_sampled": 201,
              "oversized_source_files": 0
            },
            "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": "0/201 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 201,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T16:07:22.898509Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/luminion/spring-boot-starter.svg",
  "full_name": "luminion/spring-boot-starter",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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