JSON-Rohbericht maschinenlesbar
{
"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"
}