原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 2708,
"has_wiki": true,
"homepage": null,
"languages": {
"Java": 3188942,
"Shell": 3737,
"Python": 7155,
"Dockerfile": 622
},
"pushed_at": "2026-07-09T15:06:42Z",
"created_at": "2024-12-22T11:41:13Z",
"owner_type": "User",
"updated_at": "2026-07-09T15:08:01Z",
"description": "uniweb基础类库",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Java",
"significant_languages": [
"Java"
]
},
"owner": {
"blog": null,
"name": "axeon",
"type": "User",
"login": "axeon",
"company": null,
"location": "GuangZhou, china",
"followers": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/10541706?v=4",
"created_at": "2015-01-15T03:57:34Z",
"is_verified": null,
"public_repos": 18,
"account_age_days": 4207
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [],
"recent_commits": [
{
"oid": "7d889578363f4ebbf8aebdcb55fb9b1927ebbb18",
"body": "- 新增 TaskDelayer 延迟任务类型,基于 Redis zset 多实例竞争 poll\n- 使用 Lua 原子 ZRANGEBYSCORE+ZREM 取出到期任务,替代 classic TTL+DLX 延迟队列\n- 规避 per-message TTL 队头阻塞问题,执行能力随实例数水平扩展、无 Leader 单点\n- 业务方通过 TaskFactory.delayTask() 投递,配置/限速/重试/告警/统计与 Runner/Croner 完全对称\n- TaskData 改为手工 KryoSerializable 序列化,消息体更小更快\n- 添加升级注意事项文档,包括序列化格式变更和 Redis 依赖要求",
"is_bot": false,
"headline": "feat(task): 新增延迟任务类型 TaskDelayer",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T11:13:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81f33f81cb067f687c3133e4f049c414015d23cb",
"body": "- 移除 TaskDelayerContainer 中的 synchronized 关键字,通过 TaskServiceRegistrar.configLock 实现线程安全\n- 修复 TaskFactory 中重试间隔算法,将睡眠时间从 i * 500ms 改为 i * 100ms\n- 在数据库表中添加 alert_fail_config_rate 配置失败率字段和 retry_times_by_program 程序异常重试次数字段\n- 重命名 task_delayer_stats 表中的 time_wait_delay 字段为 time_wait\n- 更新 TaskCronerInfoCo\n[…]\nyer 三种类型\n- 修正 TaskDelayerInfoQueryParam 中的延迟超时字段名称从 alert_delay_overtime 改为 alert_wait_timeout\n- 为 TaskCronerInfoQueryParam 和 TaskDelayerInfoQueryParam 添加配置失败率和数据失败率的查询参数\n- 修正定时任务和队列任务 ES 日志查询参数类的注释描述",
"is_bot": false,
"headline": "feat(task): 优化任务调度系统线程安全和数据库结构",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T11:09:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b86e4acb0f761ff41e5008eb9840fa9dc74541f0",
"body": "- 统一停止方法命名:stopTask/stopDelayer 重命名为 stop 以保持一致性\n- 增强异常处理和日志记录:添加业务上下文信息便于排查配置失败问题\n- 优化 Crone r统计逻辑:将统计和日志落盘从触发回调移到可运行体内部\n- 修复 Delayer 任务执行异常处理:添加外层捕获确保任务不丢失\n- 更新降级恢复逻辑注释:修正方法名描述准确性\n- 优化资源配置管理:调整配置键覆盖和实例查找逻辑\n- 增强 Delayer 统计功能:实现活跃执行线程数统计\n- 修复重试机制:调整退避算法和重试参数传递",
"is_bot": false,
"headline": "refactor(task): 重构任务调度容器和服务注册逻辑",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T10:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0a1fa5d9be83624a49b6ab503bf3760f7b063ea",
"body": "- 优化 TaskAutoConfiguration 中的注释描述,明确组件间依赖关系\n- 统一容器销毁方法命名,将 stopAllTaskXxx 改为 destroyAll 更准确表达意图\n- 简化 TaskMetaInfoManager 中的配置键构建逻辑,提取公共方法减少重复代码\n- 移除 TaskServiceRegistrar 中不再使用的 RabbitMQ 连接工厂和管理器依赖\n- 重构配置更新逻辑,将 updateXxxConfig 方法重命名为 fetchXxxConfig 体现数据获取职责\n- 完善延迟任务配置处理,支持增量拉取和热更新机制\n- 优化队列监听器注册流程,将具体实现下沉至对应容器类\n- 统一任务容器的挂起和销毁操作接口,提升代码一致性",
"is_bot": false,
"headline": "refactor(task): 重构任务配置管理与容器生命周期",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T04:21:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "977fa77c39c35910400d498c03b73d14b275ed85",
"body": "- 移除 TaskMetaInfoManager 中静态 delayerConfigMap 配置缓存字段\n- 将 delayerConfigMap 重新定义为实例字段并移至类末尾\n- 修改 getConfigKey 方法为实例方法,支持动态调用\n- 更新 TaskDelayerContainer 中配置键获取方式,使用实例方法替代静态调用\n- 移除相关单元测试中的静态方法验证逻辑\n- 优化配置缓存管理的一致性和实例化流程",
"is_bot": false,
"headline": "refactor(task): 重构任务元信息管理器配置缓存结构",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T01:44:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eea3ebfc4a636a16f73d18229f3ea0e44762f04e",
"body": "- 调整 channelCacheSize 下限从 25 改为 10\n- 优化 TaskFactory 构造函数参数顺序和文档注释\n- 重排 TaskRunnerContainer、TaskDelayerContainer 和 TaskCronerContainer 构造函数参数顺序\n- 修复 TaskServiceRegistrar 中延迟任务配置初始化逻辑,捕获服务端响应获取真实 ID\n- 为 TaskRunner listener destroy 添加异常处理,避免单个监听器销毁失败阻断整体停机\n- 添加应用主机信息获取兜底逻辑,当 Nacos 未接入时使用本机 IP\n- 为队列积压查询\n[…]\n述中的 IP 到 HOST 字样错误\n- 优化延迟任务统计查询性能,预建 taskId 到 configKey 的反向索引\n- 为 TaskRunner 添加兜底异常处理,确保消息不丢失并更新统计日志\n- 改进序列化反序列化异常处理,避免内部信息泄露\n- 修复任务配置默认值和文档注释问题\n- 为 RPC 调用超时添加专门的错误处理逻辑\n- 修复 TaskListenerManager 方法注释错误",
"is_bot": false,
"headline": "refactor(task): 重构任务模块配置和容器初始化逻辑",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T01:29:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ec2c96008e6bfe133227b8385e0502f4da7ebf1",
"body": "- 在应用关闭时使用锁机制确保任务停止的安全性,防止并发访问导致的资源泄漏\n- 添加 Redis 故障时的任务 ID 生成异常处理,避免静默吞掉调度日志\n- 为任务运行器添加兜底异常捕获机制,防止消息丢失并记录错误信息\n- 优化配置更新时的任务清理逻辑,及时停止废弃的定时任务和消息监听器",
"is_bot": false,
"headline": "fix(task): 解决任务关闭时的并发安全和异常处理问题",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-09T00:42:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b995af729db6ded57e04e71054f647b14dc40b2c",
"body": "- 为 LimitedVirtualThreadExecutor 添加 shutdownNow 方法支持强制关闭\n- 修复 TaskApiClient 日志消息中的描述错误,统一使用准确的功能描述\n- 重构 TaskAutoConfiguration 中的任务容器启动逻辑,实现统一的配置驱动启动\n- 添加对 Redis 和 RabbitMQ 连接工厂的优雅关闭支持\n- 实现任务容器的本地降级模式,当中心配置不可用时使用默认配置启动\n- 添加主机禁用/启用功能,支持动态停止和恢复任务执行\n- 优化 TaskCronerContainer 使用配置键索引替代 ID,支持本地降级切换\n- 改进 TaskDelayerContainer 使用配置键索引并添加错投防御机制\n- 统一异常处理和资源清理逻辑,提升系统的稳定性和可靠性",
"is_bot": false,
"headline": "feat(task): 优化任务框架的配置管理和容器生命周期控制",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T16:30:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f3b469c2c8dbbc962ba2019940c13b476cb49eb",
"body": "- 新增 TaskDelayerConfig 配置实体和相关 API 接口\n- 实现延迟任务容器 TaskDelayerContainer 和执行逻辑\n- 添加延迟任务配置的初始化、拉取和管理功能\n- 支持延迟任务执行日志异步写入到 ES\n- 优化 RabbitMQ 连接工厂的 channel 缓存大小动态调整\n- 完善任务服务注册器中的延迟任务配置更新机制\n- 增加延迟任务相关的统计信息上报功能",
"is_bot": false,
"headline": "feat(task): 添加延迟任务功能支持",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T13:24:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c230277b57402b3e859599976bfd72ee6abae2ee",
"body": "- 新增 TaskDelayerConfig 配置实体和相关 API 接口\n- 实现延迟任务容器 TaskDelayerContainer 和执行逻辑\n- 添加延迟任务配置的初始化、拉取和管理功能\n- 支持延迟任务执行日志异步写入到 ES\n- 优化 RabbitMQ 连接工厂的 channel 缓存大小动态调整\n- 完善任务服务注册器中的延迟任务配置更新机制\n- 增加延迟任务相关的统计信息上报功能",
"is_bot": false,
"headline": "feat(task): 添加延迟任务功能支持",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T13:23:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be6d6bc6f2d83b4fe979f8103f7bf4d579ba8b1b",
"body": "- 扩展 ShardingTableUtils 类功能,支持按 id 取模和按日期两种分片策略\n- 新增 unionAllShards 方法构建跨区间按天分表的 UNION ALL 查询\n- 提供完整的 Javadoc 文档说明分片策略和使用方法\n- 实现跨天报表查询避免单表数据遗漏问题\n- 添加日期区间验证和空结果集保护机制",
"is_bot": false,
"headline": "feat(dao): 添加分表路由与跨分表查询工具",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T10:46:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07dba0ee0c2c544472a38e074a7ae2272da4f87e",
"body": "- 修改构造函数,添加 threadNamePrefix 参数用于标识虚拟线程\n- 添加线程名称前缀参数校验逻辑\n- 使用 ThreadFactory 配置虚拟线程命名规则\n- 更新 README 文档中的构造函数签名说明\n- 在 SystemClock 中添加时钟监控线程关闭方法,解决内存泄漏警告",
"is_bot": false,
"headline": "refactor(threading): 重构限流虚拟线程执行器支持自定义线程名称前缀",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T10:20:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a0cd82bfd28193f69f05d8586a76c58509bb30b",
"body": "- 实现了 GlobalSortedSet 延迟队列场景的完整测试覆盖\n- 验证基本延迟与到期功能,确保按时序正确处理到期元素\n- 测试 member 唯一性陷阱,确认相同对象不会互相覆盖\n- 验证不队头阻塞特性,长延迟任务不会阻挡短延迟任务处理\n- 实现脏数据逐条兜底测试,确保反序列化失败元素被跳过\n- 将 spring-boot-test 依赖更新为 spring-boot-starter-test",
"is_bot": false,
"headline": "test(cache): 添加全局排序集延迟队列功能测试",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-08T10:17:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e3fd9d3d7a04f4f5d3131188b5cc5966becf3b5",
"body": "- 移除多余的反斜杠转义字符\n- 确保字符串格式正确传递给查询方法\n- 保持测试功能不变但提高代码可读性",
"is_bot": false,
"headline": "fix(test): 修复DSL测试中的转义字符问题",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-07T06:56:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ddbf3ec4eb78443747b337426d690be5ce1f1cc",
"body": "- 在 mvn-deploy.sh 中新增 -p/--parent-only 参数选项\n- 实现仅构建和发布 uw-base parent POM 的功能(使用 -N 参数)\n- 添加参数冲突检查防止与其他部署模式同时使用\n- 更新使用说明文档显示新的部署选项\n- 同步更新 pom.xml 和 README.md 中的版本号至 2026.0601.0012\n- 调整 springdoc-openapi 版本回退至 2.8.16",
"is_bot": false,
"headline": "feat(script): 添加仅发布 parent 模式的 Maven 部署脚本",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-07T06:24:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f5e2acadc052cb11cf4d188945b067f4f0bcd47",
"body": "- 将项目修订版本从 2026.0601.0010 更新为 2026.0601.0011\n- 更新 uw-auth-service 依赖版本从 6.2.65 到 6.2.66\n- 同步更新 README.md 中的版本号引用",
"is_bot": false,
"headline": "chore(version): 更新项目版本号和依赖版本",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-06T10:14:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00572bbe282d3a2a39b6edc3a5fb51eeb6c08dfc",
"body": "- 将 authTokenData 变量声明提前到方法开始处\n- 重构 userType 为 ANY 类型时的处理逻辑\n- 使用 else 分支包裹非匿名用户的令牌验证流程\n- 保持原有的令牌缓存和验证机制不变\n- 确保令牌过期检查逻辑的一致性",
"is_bot": false,
"headline": "refactor(auth): 优化令牌验证逻辑以支持匿名用户类型",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-07-06T10:05:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b4c3d7c9392b38dfcfb2c9b28067561c5e48fd6",
"body": "- 移除 ResponseCode 接口中的 getFullCode 方法,统一使用 getCode 方法获取完整响应码\n- 实现自动国际化消息源加载机制,基于 codePrefix 自动推导 basename 并缓存资源\n- 添加 MESSAGE_SOURCE_CACHE 集中管理国际化资源,避免重复加载资源包\n- 为 ResponseCode 接口增加 codePrefix 和 code 方法支持前缀拼接\n- 更新 ResponseData 中的响应码获取方式,统一使用 getCode 替代 getFullCode\n- 修改 ResponseCodeUtils 工具类使用 getCode \n[…]\nValidateResponseCode 枚举实现新的国际化机制\n- 为 JsonConfigParam 接口添加国际化标题支持,实现自动按 Locale 解析\n- 优化 JsonConfigHelper 中的参数验证逻辑,使用国际化标题进行错误提示\n- 简化枚举类实现,移除手动创建 MessageSource 的代码\n- 为配置参数添加 configPrefix 支持,实现配置项标题的国际化功能",
"is_bot": false,
"headline": "refactor(response): 重构响应码国际化机制并优化配置参数国际化",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-29T14:01:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ecc2b9f9276999674db0ba1e93846b8b10e3044",
"body": "- 将DateUtils类重命名为DateTools\n- 更新JsonUtils中对DateUtils的引用为DateTools\n- 更新CommonAppAutoConfiguration中对DateUtils的引用为DateTools\n- 更新JsonConfigHelper中对DateUtils的引用为DateTools\n- 更新JsonObjectMapperImpl中对DateUtils的引用为DateTools\n- 更新XmlObjectMapperImpl中对DateUtils的引用为DateTools\n- 更新oauth2-client中对DateUtils的引用为DateTools\n- 在README.md中更新类名引用和文档说明\n- 在CHANGELOG.md中记录类名变更\n- 更新pom.xml中的版本号从2026.0601.0008到2026.0601.0009及依赖版本\n- 更新主README.md中的类名引用",
"is_bot": false,
"headline": "refactor(common): 将DateUtils重命名为DateTools以解决AI导入错误",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-26T08:13:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a8ac217802d1e7897670d12255a74ef72f02d5e",
"body": "- 将 ChineseUtils 中的 ngram 和 lcs 相似度算法移至 StringTools 类\n- 移除 ChineseUtils 中的全角半角转换方法\n- 新增 StringTools 工具类,包含字符串数组集合互转、SQL占位符生成等功能\n- 更新注释引用指向新的 StringTools 实现\n- 移除 ChineseUtils 中的 HashMap 和 Map 导入声明",
"is_bot": false,
"headline": "refactor(utils): 重构字符串处理工具类",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-25T14:55:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc1155483df974215cd9429f56d417e712900ba1",
"body": "- 修复 macOS 兼容性问题,改进项目根目录计算逻辑\n- 移除 clean 命令的 -q 参数以便错误调试\n- 完善 deploy 失败后的 .flattened-pom.xml 清理机制\n- 更新项目版本号从 2026.0601.0005 到 2026.0601.0006\n- 升级 uw-ai、uw-auth-client、uw-httpclient 等多个依赖包版本\n- 更新 CHANGELOG.md 版本说明信息",
"is_bot": false,
"headline": "build(deploy): 优化部署脚本并更新依赖版本",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-22T06:50:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04b3f65f42d7981879332f6ebc0390052316959f",
"body": "- 更新底层实现描述从 OkHttp 4.12 到 OkHttp 5.3.x(okhttp-jvm 服务端版)\n- 添加默认请求头、Cookie 持久化、应用/网络拦截器等新配置选项\n- 增加取响应头和重试/重定向次数的功能说明\n- 扩展 HttpDataProcessor 接口增加完整 Request 版本的方法\n- 添加默认请求头、CookieJar 和拦截器的配置参数说明\n- 详细说明异常分类语义和 DataMapperException 冒泡机制\n- 补充响应头获取、retryCount 自动启用和异常处理的最佳实践指南",
"is_bot": false,
"headline": "docs(uw-httpclient): 更新文档包含新功能和详细配置说明",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-22T04:55:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a85cbf3d23e3c42185acbd31f27270c939757c1",
"body": "fix(security): 修复HMAC签名验证中的时序攻击漏洞\n\n- 添加MessageDigest导入用于安全比较\n- 使用MessageDigest.isEqual进行常量时间字符串比较\n- 避免时序攻击通过字节推断签名的安全风险\n```",
"is_bot": false,
"headline": "```",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-22T04:35:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbba9d075a376986deb689477af81b093ccf9cc4",
"body": "- 简化异常处理约定描述,移除冗余的安全警告表述\n- 明确调用建议,包括外部边界接口异常捕获和批量读取场景处理\n- 移除具体的反面教材示例,精简文档内容\n- 更新参考实现实例,保持文档简洁性",
"is_bot": false,
"headline": "docs(common): 更新 Kryo 反序列化异常处理文档",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-22T01:11:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de817e5ecee181a982886c937c92e25f64215b19",
"body": "- 补充 TableShardingTask 仅预创建当前/下一分片表的说明\n- 新增定时清理/批量任务与分表的处理指南\n- 提供按 date 和 id 分片类型的遍历方式对比\n- 添加枚举所有分表的通用 Java 代码示例\n- 强调业务侧清理任务应判断表是否配置分表的设计建议\n- 修正跨分片表查询标题为查询/清理跨多个分片表数据\n- 补充删除/清理任务需遍历分表的重要提醒\n\nfeat(notify): 完善通知客户端配置与消息体约束说明\n\n- 更新 UwNotifyProperties 中关于配置前缀的服务发现说明\n- 明确 WebNotifyMsg 中 userId 必须为全局唯一且大于0的有效用户ID\n- 说明当前 notify-center 仅支持向单个在线用户定向投递的限制\n- 更新 WebNotifyMsg 类中 userId 和 saasId 字段的约束描述\n- 添加详细的 Javadoc 注释说明各方法的参数要求\n- 修改 NotifyClientHelper 中推送失败的错误信息为固定文案\n- 强调推送消息体中 userId 必须大于0的校验要求",
"is_bot": false,
"headline": "docs(dao): 更新分表文档说明与清理任务最佳实践",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T15:16:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b79ba6b5af0ae9754e46c9a303e636e77936d849",
"body": "- 新增 SaasRateLimitParam 类,支持运营商限速策略参数定义\n- 添加 Builder 模式构造器,支持链式调用设置参数\n- 更新 GatewayClientHelper.updateSaasRateLimit 方法签名,使用新参数类\n- 修改请求方式从表单提交改为 JSON 格式请求体\n- 更新 README 文档,添加新参数类使用说明和示例\n- 支持多种限速维度:IP、SAAS等级、用户类型、用户ID等\n- 添加参数前置校验逻辑,确保必要字段不为空",
"is_bot": false,
"headline": "feat(gateway): 添加运营商限速策略参数类和更新方法",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T12:54:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f19817648565cd4be6d355ce5fcb3ed4c8e5220e",
"body": "- 在GlobalCache中添加try-catch块处理反序列化失败,返回null并记录错误日志\n- 在GlobalHashSet的random、pop、list方法中逐条处理反序列化,跳过失败数据并记录警告\n- 在GlobalSortedSet的listRangeByScore方法中逐条处理反序列化,跳过失败数据并记录警告\n- 更新KryoUtils文档,明确对外报错安全方针,防止序列化内部信息泄露\n- 在README中补充Kryo异常与对外报错安全使用规范说明",
"is_bot": false,
"headline": "fix(cache): 解决缓存反序列化异常处理问题",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T03:53:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adee242bf5e2f05aa11fe62778de822764994fe8",
"body": "- 新增KryoDataRedisSerializer支持KryoData接口的高性能序列化\n- 重构KryoRedisSerializer支持类型已知和类型未知两种构造模式\n- 移动KryoRedisSerializer到uw.cache.serializer包路径\n- 更新文档说明两种序列化器的选择和使用方式\n- 优化序列化性能通过LambdaMetafactory实现快速实例创建\n- 添加详细的JavaDoc注释说明序列化器的使用约束和特性",
"is_bot": false,
"headline": "feat(cache): 添加KryoDataRedisSerializer并重构KryoRedisSerializer",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T03:03:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4058020eab8c0ae6ca9b32abbbd77811a1308808",
"body": "- 重构 LocalOcrCaptchaService 移除占位符实现,明确注释说明需集成真实 OCR 引擎\n- 改进 TwoCaptchaService API 请求方式,通过 POST body 传递 key 参数避免泄露到 URL 日志\n- 优化 BrowserBotPool 分层架构描述,明确 Browser 进程级复用和 Tab 级别隔离机制\n- 增强 BrowserGroup 轮询负载均衡策略,实现流量均匀分布到所有实例\n- 完善 BrowserInstance 线程安全和超时处理机制,增加幂等关闭和异步清理功能\n- 更新 BrowserTab 文档说明 Context 一次性使用模式,新增 addInitScript 方法支持反检测脚本注入\n- 优化 LocalProxyPool 轮询算法和健康检查逻辑,提高代理资源管理效率\n- 调整 StealthService 实现方式,通过初始化脚本在页面加载前注入反检测措施\n- 修复 ProxyManager 和 StealthManager 注释错误,统一命名空间和服务获取逻辑",
"is_bot": false,
"headline": "refactor(webot): 优化浏览器机器人池和验证码服务实现",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T03:02:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8d36ba3fe85e8932f8f91897238807223b17266",
"body": "- 移除 KryoRedisSerializer 目录项\n- 调整 vo 目录下的子目录层级结构\n- 更新值对象目录的组织方式",
"is_bot": false,
"headline": "refactor(docs): 更新 README.md 目录结构",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T03:02:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d905a676e42620e94ceab5a7e2970c94c7b7ec8",
"body": "- 在文档注释中添加新的deserializeData方法引用\n- 将默认缓冲区大小从2048调整为2560\n- 新增deserializeData(byte[], Class)方法,支持通过Class反射创建实例并填充数据\n- 实现基于公开无参构造函数的反射实例化机制\n- 提供完整的异常处理和错误信息包装\n- 保持与现有接口式手工序列化方法的一致性设计",
"is_bot": false,
"headline": "feat(utils): 添加Kryo工具类的反射反序列化功能",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T03:01:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e698c32d59a87b067a1ecaa46b540780d9db3424",
"body": "- 移除StringUtils.isBlank检查,改用简单的null检查以提高性能\n- 修正AiImageRpcImpl中的字段映射,确保userPrompt正确绑定到服务端\n- 将AiImageRpcImpl的内容类型从application/json改为multipart/form-data\n- 保持与AiChatRpcImpl的一致性,避免LinkedMultiValueMap的错误序列化\n- 更新AiTranslateMapParam类的注释和文档描述,准确反映其功能",
"is_bot": false,
"headline": "refactor(ai): 优化AI服务RPC实现的参数验证和内容类型配置",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T02:15:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f94458349cb262f5c58a8097a0cf620f53d587e",
"body": "- 完善OAuth2ClientAuthStatus、OAuth2ClientAuthType和OAuth2ClientResponseCode的JavaDoc\n- 修正INVALID_HTTP_CODE错误码描述,从\"无效的授权码\"改为\"无效的HTTP状态码\"\n- 优化AbstractOAuth2Provider的类注释和方法注释,增加技术细节说明\n- 为AlipayOAuth2Provider、AppleOAuth2Provider、StandardOAuth2Provider和WechatOAuth2Provider添加详细注释\n- 更新OAuth2StateId类的注释,明确其组成结构和用途\n- 补充各个provider实现类的具体差异点和技术要点说明",
"is_bot": false,
"headline": "docs(oauth2): 更新OAuth2客户端文档注释和错误描述",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T02:14:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5059e2e9a8490f3b55584b689fca9dd914268a4",
"body": "- 更新 UwAiAutoConfiguration 注释,明确装配 RPC Bean 与静态门面功能\n- 优化各 RPC 实现类注释,明确服务端调用方式与认证信息透传机制\n- 修复 AiChatRpcImpl 中 multipart 请求体构建逻辑,统一处理认证四元组\n- 改进工具元数据同步逻辑,增强空值防御与方法过滤机制\n- 添加完整的单元测试覆盖关键参数传递与数据清洗功能\n- 优化 AiTool 接口文档,明确版本控制与服务中心回调机制\n- 统一各 RPC 接口注释格式,增强可读性与维护性",
"is_bot": false,
"headline": "refactor(uw-ai): 重构 AI 模块配置与工具元数据管理",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T02:00:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f56a2ca43e798a23af73be97134a25dabef9e071",
"body": "- 完善 uw-gateway-client、uw-mydb-client、uw-notify-client 和 uw-tinyurl-client\n 的自动配置类注释说明\n- 更新各 Properties 配置类的文档注释,明确配置前缀和字段说明\n- 优化 GatewayClientHelper 中的参数校验逻辑和返回类型安全性\n- 增强 DataNode 类的构造函数验证逻辑,添加更详细的使用说明\n- 重构 NotifyClientHelper 中的通知消息体结构,改进 API 设计\n- 为所有客户端组件添加完整的 README.md 文档,包含使用示例和 API 说明\n- 统一各客户端 Helper 类的静态注入模式和错误处理机制",
"is_bot": false,
"headline": "docs(client): 更新客户端库文档与代码规范",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-21T01:59:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "40224b0d7f0378b88c3ad56bff2eb0956cacc076",
"body": "- 补充Captcha策略类详细功能描述和参数说明\n- 完善AES加解密工具类算法说明和异常处理说明\n- 添加图片处理工具类资源管理和高斯模糊相关方法注释\n- 扩展随机工具类方法参数和返回值说明\n- 更新Captcha数据传输对象结构说明\n- 完善Captcha服务类生成和校验流程注释\n- 添加MFA自动配置类Bean创建和依赖注入说明\n- 补充配置属性类业务分类和Redis连接说明\n- 更新HMAC算法枚举RFC规范和兼容性说明\n- 完善设备类型枚举值含义和业务路由说明\n- 添加响应码枚举国际化和错误处理说明\n- 扩展Captcha帮助类频率限制和一次性消费机制说明\n- 更新设备验证码帮助类发送流程和模板占位符说明",
"is_bot": false,
"headline": "docs(mfa): 更新MFA模块注释文档",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T19:14:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbf2e2206f4d2945973b698271df00eb21c2202f",
"body": "- 添加了对 maxKiloBytesOfBatch 参数的最小值验证\n- 当配置值小于 1 时自动调整为 1\n- 更新了相关注释说明默认值和最小值限制\n- 确保了配置参数的有效性检查逻辑",
"is_bot": false,
"headline": "fix(logback): 修复批量提交阈值配置验证问题",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T19:10:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "597dd436e457bc60c57521a8f4d9da0152f56845",
"body": "- 添加了详细的类和方法 JavaDoc 注释,说明功能和参数用途\n- 更新了 README.md 包含工作原理、注意事项和配置说明\n- 改进了代码注释的准确性和完整性\n- 统一了命名规范,将 esHost 改为 esServer 保持一致性\n- 优化了异常处理和错误提示信息\n- 增强了 JSON 转义功能防止 NDJSON 结构损坏",
"is_bot": false,
"headline": "docs(logback-es): 更新 Elasticsearch 日志 Appender 文档与注释",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T19:04:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "beedbd5a7b7e1ddcac789b9154ace1037a703ff8",
"body": "- 修改 sys_crit_log 表定义,更新表注释从 uw_auth2 到 saas_mall\n- 重命名 sys_data_history 表注释,统一命名空间为 saas_mall\n- 优化 CommonAppAutoConfiguration 类的 JavaDoc 注释和字段说明\n- 更新 CommonAppProperties 配置类的文档注释和 getter/setter 方法注释\n- 为 CommonConstants、CommonResponseCode、CommonState 等常量类添加详细文档\n- 重构查询参数类的继承关系注释,明确各参数类的使用场景\n- 移除 SysCritLogQueryParam 中重复的 mchId/userId/userType 字段定义\n- 优化数据库表字段的数据类型定义和注释描述",
"is_bot": false,
"headline": "refactor(database): 重构数据库表结构和代码注释优化",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T18:56:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e51f1e88a99754ac2d7bfaf209df42e45ac804bb",
"body": "- 覆盖 LogClient 的聚合转换工具方法测试\n- 添加分页映射逻辑的单元测试验证\n- 测试聚合桶扁平化转换功能\n- 验证聚合桶列表映射转换功能\n- 测试嵌套聚合桶扁平映射转换\n- 添加查询响应到分页列表映射测试\n- 验证大数值总数支持long类型\n- 测试批量日志按级别过滤功能",
"is_bot": false,
"headline": "test(log-es): 添加日志客户端聚合转换和分页映射单元测试",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T18:43:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aac69cbef5226f56a1f958466de0c9d59013c773",
"body": "- 完善 LogService 中 getQuotedRawIndexName 和 getQuotedQueryIndexName 方法注释\n- 为 IndexConfigVo 类及构造函数、getter 方法添加详细 JavaDoc 注释\n- 为 ObjectAsStringDeserializer 类及 deserialize 方法添加完整注释说明\n- 为 BulkResponse、DeleteScrollIdRequest、LogBaseVo、LogLevel、ScrollResponse\n 等 VO 类添加类注释和方法注释\n- 重构 README.md 文档,更新项目介绍、配置说明、使用示例等内容\n- 修复 DeleteScrollResponse 在 scrollId 为 null 时的 NPE 问题",
"is_bot": false,
"headline": "docs(log-es): 更新日志客户端文档与代码注释",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T18:26:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a6e9aafe566e389c496aa99cfb9c3455fd87e40",
"body": "- 为GlobalExceptionAdvice添加详细的异常处理说明和作者信息\n- 为GlobalResponseAdvice补充响应包裹处理和操作日志记录的功能描述\n- 为MscPermDeclare注解增加权限声明的详细说明和使用注意事项\n- 为ResponseAdviceIgnore注解添加跳过响应包裹的功能描述\n- 为AuthServiceAutoConfiguration增加自动装配的核心组件说明\n- 为AuthServiceProperties补充配置属性的详细描述和新增日志缓存限制字段\n- 为ActionLog枚举添加操作日志级别的完整说明和使用关联\n- 为AuthServic\n[…]\nenType枚举添加Token安全等级的权限判定说明\n- 为UserType枚举完善用户类型的权限匹配和管理关系说明\n- 为各个Token相关异常类添加抛出时机和HTTP状态码映射说明\n- 为AuthServiceFilter补充认证授权过滤器的完整处理流程\n- 为AuthCriticalLogStorage接口增加关键日志存储的实现说明\n- 为RPC实现类添加远程调用接口的功能描述和参数编码修复",
"is_bot": false,
"headline": "docs(auth): 更新认证服务模块的API文档注释",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T18:22:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f931a4880aefb6481cf65b40118cad6f9e31d739",
"body": "- 为 DataMapperException 添加序列化/反序列化异常场景说明\n- 为 HttpRequestException 添加 HTTP 请求阶段错误类型说明\n- 为 DataObjectMapper 接口及方法添加详细的泛型绑定和序列化/反序列化功能描述\n- 为 HttpConfig 添加不可变配置对象说明和构建器推荐用法\n- 为 HttpData 接口及方法添加请求/响应上下文记录功能描述\n- 为 HttpDataLogLevel 添加日志级别控制范围说明和简化布尔判断逻辑\n- 为 HttpDataProcessor 添加请求生命周期处理回调说明\n- 为 HttpDefaultD\n[…]\nMapperImpl 添加 Jackson2 实现和预配置说明\n- 为 BufferRequestBody 添加内存缓冲区请求体构造工具说明\n- 为 HttpBasicAuthenticator 添加 Basic 认证和防无限重试功能说明\n- 为 MediaTypes 添加常用 MediaType 常量集合说明\n- 为 SSLContextUtils 添加 SSL/TLS 上下文工具和安全警告说明",
"is_bot": false,
"headline": "docs(httpclient): 更新 HTTP 客户端组件的 Javadoc 注释",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T18:21:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5b48d597469c84de8e975b429aabae5212826c17",
"body": "- 更新UwCacheAutoConfiguration添加ConditionalOnClass和ConditionalOnMissingBean条件\n- 为各RedisTemplate Bean添加详细的JavaDoc文档说明用途和参数\n- 优化RedisMessageListenerContainer使用虚拟线程执行器避免线程数量失控\n- 为FusionCacheNotifyListener添加集群缓存一致性处理逻辑说明\n- 改进GlobalFusionCacheLoader异常处理使用failProtectMillis兜底策略\n- 为各缓存加载器组件添加完整的泛型类型参数和使用约束说明\n- 优化FusionCache重试逻辑修复过期数据重试空转问题并添加重复配置警告\n- 为各公共方法添加详细的参数和返回值说明提高代码可维护性",
"is_bot": false,
"headline": "refactor(cache): 重构uw-cache组件的自动配置和文档注释",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T17:48:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe537749ba2d3a993beb5b3cfa640c2da00189c7",
"body": "- 实现了 PostgreSQLDialect 类继承 Dialect 基类\n- 提供 PostgreSQL 原生 LIMIT/OFFSET 分页语法支持\n- 重写 getPagedSQL 方法生成 limit ? offset ? 分页查询\n- 注意参数顺序与 MySQL 相反:limit 后为行数,offset 后为偏移量\n- 对应驱动类名 org.postgresql.Driver 由 DialectManager 自动选用",
"is_bot": false,
"headline": "feat(dao): 添加 PostgreSQL 数据库方言支持",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T17:42:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "843fe283fa779fcf60ef92f629ea641eae47450c",
"body": "- 在spring.factories中注册AuthClientExcludeAutoConfigProcessor\n- 实现环境后处理功能以支持认证客户端自动配置排除",
"is_bot": false,
"headline": "feat(auth): 添加环境后处理器配置",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T17:42:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0666f3978ba0563733ae8097f84064bca7b6117",
"body": "- 实现通用字符串脱敏方法mask,支持自定义前后缀保留长度和掩码字符串\n- 提供针对中国特有业务场景的脱敏方法,包括手机号、身份证、姓名、车牌等\n- 添加邮箱、银行卡、护照、IMEI、微信号、IP地址等常见敏感信息脱敏功能\n- 实现固定掩码和按原长填星两种脱敏策略,满足不同安全需求场景\n- 编写完整的单元测试覆盖各类脱敏方法的边界条件和异常情况\n- 更新README文档,补充util包中新增脱敏工具的使用说明和API文档",
"is_bot": false,
"headline": "feat(util): 添加数据脱敏工具类MaskUtils及单元测试",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T17:42:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ae2869416f609490dcf9ad914b7adc39155cec1",
"body": "- 移除自定义mask方法,改用MaskUtils.maskSecret进行令牌脱敏\n- 添加MaskUtils导入依赖\n- 保持令牌和刷新令牌的脱敏输出以防止日志泄露",
"is_bot": false,
"headline": "refactor(auth): 使用统一脱敏工具处理令牌信息",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T17:33:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "acc99a10859b394aceea87543ec49d9ae69e176b",
"body": "- 使用 @AutoConfiguration 替代 @Configuration 并添加条件配置\n- 实现 Spring Cloud 模式开关,支持 @LoadBalanced 条件启用\n- 重构 RestClient 和 WebClient 的 Bean 配置结构\n- 优化 Token 服务并发模型,使用读写锁避免重复登录\n- 添加 Token 响应脱敏处理,保护敏感信息\n- 修复 WebClient 延迟获取 Token 的阻塞问题\n- 更新连接池默认配置参数\n- 改进错误日志输出和重试机制",
"is_bot": false,
"headline": "refactor(auth): 重构认证客户端配置和并发模型",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T16:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1b495b9b156e8dea28697d40795268d36f56535",
"body": "- 重构 Redis 连接池配置逻辑,仅在用户配置 lettuce.pool 时启用连接池\n- 优化数据库连接池配置,添加未配置时返回 null 的处理逻辑\n- 实现配置热更新功能,清空路由缓存使新配置立即生效\n- 抽取 HikariDataSource 构建逻辑为公共方法,统一连接超时和安全约束\n- 增强连接池异常处理,对未配置的连接池抛出明确异常而非返回 null\n- 完善数据库方言文档,详细说明各数据库分页语法差异和参数绑定规则\n- 添加 PostgreSQL 数据库方言支持,扩展数据库兼容性\n- 优化批处理操作,确保批量更新在事务中运行并验证连接状态\n- 修复查询方法中连接名称传递问题,保证读写分离路由正确\n- 改进 SQL 查询结果处理,增强数值类型转换的 null 值处理能力\n- 优化事务管理,仅在用户显式设置时应用事务隔离级别\n- 增强发号器可用性检查,支持 Redis 不可用时自动降级到数据库方案",
"is_bot": false,
"headline": "refactor(dao): 优化连接池配置和数据库方言处理",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T16:23:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f2ce8bc34c0d84513f20234113f2a02bfe5e041",
"body": "- 为 TaskApiClient 添加详细功能描述及参数说明\n- 为 TaskAutoConfiguration 重构应用就绪事件处理逻辑并增加安全关闭检查\n- 优化 TaskMetaInfoManager 中的配置键生成逻辑及队列匹配算法\n- 改进 TaskServiceRegistrar 中的队列监控性能及错误日志级别\n- 为各枚举类补充完整 JavaDoc 文档及使用说明",
"is_bot": false,
"headline": "docs(uw-task): 更新任务框架文档注释并优化代码健壮性",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T15:11:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "559463ac32ceee1f258455b75af0715674643168",
"body": "- 使用 KryoUtils 替代自定义 Kryo 池实现消息序列化\n- 重构 TaskGlobalLocker 采用 Lua 脚本实现原子性 Leader 选举\n- 重写 TaskGlobalRateLimiter 采用固定窗口算法并优化 Redis 脚本\n- 优化 TaskSequenceManager 的 RedisSequence 号段模式实现\n- 统一异常处理策略,增强代码健壮性\n- 完善 Javadoc 文档和注释说明",
"is_bot": false,
"headline": "refactor(task): 优化消息转换和分布式组件实现",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T09:17:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1b5804cf65ec2a9885dba5ae80f33084dfdcdca",
"body": "- 将FusionCacheNotifyListener中的KryoCacheUtils替换为KryoUtils\n- 简化KryoCacheUtils类,移除重复的序列化实现并委托给KryoUtils\n- 在GlobalCache中将type2Class方法调用从KryoCacheUtils改为KryoUtils\n- 在GlobalHashSet和GlobalSortedSet中将序列化反序列化方法替换为KryoUtils\n- 移除KryoCacheUtils中的冗余Kryo池管理和类型转换逻辑\n- 更新RedisKeyUtils中的方法访问修饰符去除final关键字",
"is_bot": false,
"headline": "refactor(cache): 将Kryo序列化工具统一收敛到公共模块",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T09:16:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9494dac4f3845bcea039735f9eee16470365ec4",
"body": "- 新增KryoData接口支持手工序列化/反序列化\n- 重构KryoUtils使用JCTools无锁队列替代官方Pool提升并发性能\n- 添加多种序列化方式:整对象读写、自定义读写完整版/轻量版、接口式手工序列化\n- 预注册常用JDK集合/时间类与uw-common数据类提升序列化效率\n- 实现后台自动缩容机制维持池对象数量在合理范围\n- 提供详细的性能测试数据和选型指导文档\n- 优化异常处理策略统一抛出RuntimeException便于调用方处理",
"is_bot": false,
"headline": "feat(common): 添加KryoData接口及优化序列化工具类",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T09:16:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1dbf421478c8cc579bdbfecb4d530bf0cc842040",
"body": "- 实现乐观锁机制,使用 INSERT IGNORE 和 UPDATE WHERE 确保并发安全\n- 引入号段缓存模型,支持整段申请和本地缓存,提升性能\n- 添加指数退避重试机制,优化失败重试策略\n- 实现 Redis Lua 脚本原子操作,确保分布式环境下的数据一致性\n- 支持 Dao 和 Fusion 两种序列生成模式的混合调用\n- 添加安全解锁机制,避免误删他人持有的分布式锁\n- 实现零丢号的段切换逻辑,保证序列号连续性\n- 增加段对齐功能,支持分库等需要 ID 对齐的场景\n- 添加全面的单元测试覆盖,确保重构后行为一致",
"is_bot": false,
"headline": "refactor(sequence): 重构序列工厂实现以支持高并发和段缓存",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-20T09:16:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c951ed219a2f2d19a469c4d480c8b4ead2b44313",
"body": "- 修改包名为uw.common.util\n- 保持原有功能不变,仅调整目录结构",
"is_bot": false,
"headline": "refactor(common): 将KryoUtils类从kryo包移动到util包",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T10:56:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ade67bb28b7eeed2a642984c1183fb079326c178",
"body": "- 将KryoCacheUtils中的序列化逻辑重构为独立的KryoUtils工具类\n- 从uw-cache模块迁移Kryo序列化功能至uw-common模块\n- 移除不必要的output.flush()和output.reset()调用优化性能\n- 添加Kryo依赖到common模块的pom.xml配置文件\n- 优化TaskMessageConverter中的资源管理和字符编码处理\n- 完善类型转换和反序列化过程中的异常处理机制",
"is_bot": false,
"headline": "refactor(cache): 重构Kryo序列化工具类并迁移至公共模块",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T09:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd6183b0bcc2e2c07e1940f2529d8946fbdac47e",
"body": "- 将ThreadLocal改为Pool实现以提升性能\n- 默认池子容量从16调整为32\n- 移除output本地线程缓存改为池化管理\n- 添加正确的资源释放机制确保池对象回收\n- 优化Input流处理使用try-with-resources语法\n- 统一池化对象的获取和释放流程",
"is_bot": false,
"headline": "refactor(task): 优化任务消息转换器的Kryo池实现",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T08:28:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c447b191f910e684b1f222f174ea496b3c937a9",
"body": "- 将所有 /liteList 接口路径统一更改为 /listLite\n- 更新前端 API 调用中的接口地址映射\n- 修改后端控制器中的请求映射注解\n- 保持接口功能和参数不变,仅调整 URL 规范\n- 确保前后端接口调用的一致性",
"is_bot": false,
"headline": "refactor(api): 统一轻量级列表接口命名规范",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T04:24:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d440ffdca4dc8d9d6c60cb1d9a83e311518a3f95",
"body": "- 在mvn-deploy.sh中添加deploy失败时清理.flattened-pom.xml残留文件\n- 为uw-ai模块增加图片生成和模型配置查询功能说明\n- 更新AI模块核心特性和功能详解章节内容\n- 添加图片生成和模型配置查询的API使用示例\n- 更新核心类说明和最佳实践建议\n- 修正项目版本号从2026.0601.0002到2026.0601.0003\n- 升级uw-ai版本依赖至1.1.29和central-publishing-maven-plugin至0.11.0",
"is_bot": false,
"headline": "docs(uw-ai): 更新AI模块文档并完善部署脚本清理机制",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T04:23:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1e8ebe08da90662fdc96028ebaf2b2f3c38f1e4d",
"body": "- 将AiModelInfoVo重命名为AiModelConfigVo并更新所有引用\n- 在AiModelConfigVo中添加vendorClass字段用于供应商分类\n- 更新AiConfigRpc接口及其实现类的方法返回类型\n- 修改AiClientHelper中的模型配置查询方法参数类型\n- 重新整理AiClientHelper中模型配置相关辅助方法\n- 为AiTranslateRpc接口添加类级别文档注释\n- 重命名AiImageResultData中的imageUrls字段为imageUrlList",
"is_bot": false,
"headline": "refactor(ai): 重构AI模型配置相关类和方法",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-18T03:44:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc6d942345576fcce6d52909256792a3698125e7",
"body": null,
"is_bot": false,
"headline": "fix:补充前面漏交的代码",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-17T08:07:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04a320b084abd9f17616c9e8ba1902e4b6437d12",
"body": "- 移除了 BrowserTab 类中关于直接操作 Page 对象的方法说明\n- 移除了 SessionService 中 setSession 方法的返回值文档\n- 移除了 WebotManager 中 updateSession 方法的返回值文档",
"is_bot": false,
"headline": "docs(api): 移除方法文档中的冗余返回值描述",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-17T00:56:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8978d29325d7ecb79f133b12ca81a5d6b27c160c",
"body": "- 更新 uw-auth-client 从 6.2.21 到 6.2.22\n- 更新 uw-auth-service 从 6.2.59 到 6.2.60\n- 更新 uw-cache 从 1.2.96 到 1.2.97\n- 更新 uw-common 从 1.1.101 到 1.1.102\n- 更新 uw-common-app 从 1.1.103 到 1.1.105\n- 更新 uw-dao 从 5.3.35 到 5.3.36\n- 更新 uw-gateway-client 从 1.1.6 到 1.1.7\n- 更新 uw-httpclient 从 2.2.132 到 2.2.133\n- 更新 uw-l\n[…]\n 1.1.27 到 1.1.28\n- 更新 uw-notify-client 从 1.1.26 到 1.1.27\n- 更新 uw-oauth2-client 从 1.1.16 到 1.1.17\n- 更新 uw-task 从 5.1.125 到 5.1.126\n- 更新 uw-tinyurl-client 从 1.1.26 到 1.1.27\n- 更新 uw-webot 从 1.0.6 到 1.0.7",
"is_bot": false,
"headline": "chore(deps): 更新项目依赖版本",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-17T00:53:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "adb56bdf3e025642c398622f2c0cee687a999367",
"body": null,
"is_bot": false,
"headline": "补齐configCode参数",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-16T11:03:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "706cfe4cb8764e7a82d32017d6cf9f2557406e7e",
"body": null,
"is_bot": false,
"headline": "新增查询维度configCode",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-16T09:13:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "589e1466b866b40aadf845bfd52aaef9df46b1bd",
"body": null,
"is_bot": false,
"headline": "细分模型配置查询维度",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-16T07:51:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c099328775dfb3d78ee31f2f27980ad8635dfd5e",
"body": "- 将AiApiConfigVo重命名为AiModelApiVo并更新字段定义\n- 将AiModelConfigVo重命名为AiModelInfoVo并调整字段结构\n- 更新AiConfigRpc接口及其实现类的返回类型\n- 修改AiClientHelper中的方法签名以使用新的VO类\n- 在VO类中添加saasId、mchId等新字段和对应的getter/setter方法\n- 更新pom.xml中的版本号信息",
"is_bot": false,
"headline": "refactor(ai): 重构AI配置相关数据传输对象",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-16T02:33:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9247ca241f97e4019c852e2ded2709558f3236e6",
"body": null,
"is_bot": false,
"headline": "LocalDate退回date类型",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-16T01:50:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eba545435e38449bd8bef451042c87de13a50460",
"body": null,
"is_bot": false,
"headline": "优化代码规范",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-16T01:42:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "389bc870c1445a6bba1f49fe38ff379a90c740d2",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-15T06:31:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f464288d2b26c2a055b4403790ef0860eb1d0245",
"body": null,
"is_bot": false,
"headline": "新增图片生成RPC接口",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-15T06:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e4f634701178aa17beea194aac724ab48804411",
"body": "- 将所有 PageTable 类型引用更改为 PageRowSet\n- 更新 DaoFactoryImpl 中的 Javadoc 注释\n- 更新 SQLCommandImpl 中的类描述\n- 更新 DaoFactory 接口的返回类型说明\n- 更新 DaoManager 的方法注释\n- 更新 CHANGELOG.md 中的类型变更记录",
"is_bot": false,
"headline": "docs(dao): 更新文档注释中的返回类型名称",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-12T09:35:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "281d3c36625e541c390c31acdc3a0c7f3cc4374f",
"body": null,
"is_bot": false,
"headline": "清理临时修改的代码",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-12T03:54:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a98e96b8c65242395d0a242e83631c78bf02c70",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-12T03:50:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c669fd63e71b74cac49dce5d0a6eaf0eacdb130",
"body": "- 将 StringUtils 替换为 Strings.CS 和 Strings.CI 以提高性能\n- 使用 RandomStringUtils.secure() 替代 randomNumeric 提升随机数安全性\n- 更新 SnowflakeIdGenerator 中的 threadId 获取方式\n- 升级项目版本号从 2026.0601.0000 到 2026.0601.0001\n- 更新依赖版本号 uw-common.version 从 1.1.100 到 1.1.101\n- 修改 CHANGELOG 版本说明从 2026.0501.0001 到 2026.0601.0001",
"is_bot": false,
"headline": "refactor(common): 优化字符串处理和随机数生成安全性",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-12T03:40:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "95559ef678853309a9124cd1ddffa1f8276199fc",
"body": "- 修改恢复简化日期字符串方法注释,明确说明加上横杠的功能\n- 移除计算时间差方法中的冗余变量声明,直接返回计算结果\n- 重命名getDatesBetween方法为getDateList,并修改返回类型为Date列表\n- 新增getDateStringList方法,支持获取日期范围内的字符串列表\n- 删除日历设置中的冗余年份和月份赋值操作\n- 修正endOfLastYear方法注释,从\"去年开年第一天时间\"改为\"去年最后一天结束时间\"\n- 修正endOfNextYear方法注释,从\"去年开年第一天时间\"改为\"明年最后一天结束时间\"\n- 修正endOfMonth方法注释,从\"当月第一天时间\"改为\"当月最后一天结束时间\"\n- 修正endOfLastMonth方法注释,从\"上月第一天时间\"改为\"上月最后一天结束时间\"\n- 修正endOfNextMonth方法注释,从\"下月第一天时间\"改为\"下月最后一天结束时间\"\n- 更新日期解析逻辑中的注释,添加Unix时间戳相关说明",
"is_bot": false,
"headline": "refactor(utils): 优化日期工具类代码结构",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-12T03:28:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1e2cde3a58044d974e8ec0832345647bed778264",
"body": "- 新增 ChineseUtils 工具类,提供汉字转拼音、相似度计算、全角半角转换功能\n- 新增 CurrencyUtils 货币工具类,提供货币实例获取和验证功能\n- 扩展 MoneyUtils 添加中文大写金额转换功能\n- 引入 jpinyin 依赖库支持拼音转换\n- 更新项目版本号及依赖库版本至最新稳定版",
"is_bot": false,
"headline": "feat(common): 添加汉字拼音转换和货币工具类",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-12T03:01:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce354bf5da71fbc6f0484802ffb7d1e9db3e0e2b",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-12T01:42:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "191dd91c9ca3cb27cfe5731dfa686b49fefaf53d",
"body": null,
"is_bot": false,
"headline": "临时提交",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-12T01:42:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9bf7ac9b182199f5ff319cdc948d750735af598d",
"body": null,
"is_bot": false,
"headline": "chore(deps): 更新项目依赖版本从 2026.0501.0006 升级到 2026.0501.0008",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T11:24:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcc0b6d487522898b9a4c96c99c0c71d3ec71ba0",
"body": "- 添加索引边界检查防止数组越界异常\n- 更新uw-common版本从1.1.98到1.1.99\n- 更新uw-dao版本从5.3.32到5.3.33\n- 更新基础项目版本号从2026.0501.0006到2026.0501.0008",
"is_bot": false,
"headline": "fix(common): 修复PageList索引越界问题并更新版本依赖",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T11:22:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d1eca90fb4e107e3bb3d870134383ea4c19def7",
"body": "- 将PageList构造函数中的ArrayList参数改为List接口类型,增强灵活性\n- 为PageList添加toArrayList私有方法,统一列表类型转换逻辑\n- 将PageRowSet构造函数中的ArrayList参数改为List接口类型,增强灵活性\n- 为PageRowSet添加toArrayList私有方法,统一列表类型转换逻辑\n- 更新PageList和PageRowSet中reset方法的类型转换实现\n- 升级版本号从2026.0501.0005到2026.0501.0006\n- 更新uw-common依赖版本从1.1.97到1.1.98",
"is_bot": false,
"headline": "refactor(common): 优化PageList和PageRowSet的数据类型处理",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T10:51:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1186a265d2c9409d40711fd2592413b8a2a8251a",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main'",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T10:38:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e11792ee62145384fc1b0daaaf3eaa096265f165",
"body": "- 修改 PageList 构造函数参数类型为 ArrayList 并移除 toArrayList 方法\n- 为 PageList 的所有方法添加 @JsonIgnore 注解以避免序列化问题\n- 重命名 PageRowSet 的 columns 字段为 columnNames 并更新相关方法\n- 将 PageRowSet 构造函数参数类型改为 ArrayList 并移除 toArrayList 方法\n- 为 PageRowSet 的所有业务方法添加 @JsonIgnore 注解\n- 新增 QueryParamHelper 工具类用于将对象属性转换为 URI 查询参数\n- 在 QueryParamHelper 中实现魔法参数自动映射和参数过滤功能\n- 更新项目版本号从 2026.0501.0003 到 2026.0501.0005\n- 更新依赖模块版本号及 README 中的版本引用",
"is_bot": false,
"headline": "refactor(common): 优化分页组件并新增查询参数构建工具",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T10:37:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6bd6d5ba816e62fdf54baae7c04b307e30cea01",
"body": null,
"is_bot": false,
"headline": "新增AI模型配置RPC调用方法",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-11T08:44:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1dcd2b092cf3cf23b2fa4fe19cc894e71fdff337",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-11T08:23:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e77b238030aa67311174bad3f12806baabedc71",
"body": "- 将DataSet类替换为PageRowSet类\n- 将queryForSingleObject方法替换为queryForObject方法\n- 将queryForSingleValue方法替换为queryForValue方法\n- 更新相关的方法引用和文档描述\n- 修正README.md中的目录链接和方法名称",
"is_bot": false,
"headline": "docs(uw-dao): 更新文档中的类名和方法名",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T03:09:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6564134a3595fa667b9e313ac6f06de2ff6ec7b",
"body": "- 更新FAQ文档中关于列表返回类型的描述\n- 修改README文档中的代码示例,将DataList替换为PageList\n- 更新CHANGELOG中相关功能说明\n- 统一uw-dao模块中所有分页查询的返回类型\n- 修改uw-auth-service中的用户列表接口返回类型\n- 更新uw-oauth2-client中OAuth信息查询的返回类型\n- 替换uw-log-es模块中分页结果的包装类型",
"is_bot": false,
"headline": "refactor(dao): 将DataList替换为PageList作为分页结果返回类型",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-11T02:06:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5cc95487f02aca10f1b7a5248a58894534ed26d2",
"body": "- 将Java版本从21升级到25\n- 添加maven.compiler.release配置项\n- 升级flatten-maven-plugin从1.2.7到1.7.0版本",
"is_bot": false,
"headline": "chore(build): 更新Java版本至25并升级Maven插件",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-10T07:09:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca1d0cbecc50935885f168ccfd1205459c5e36fb",
"body": "# Conflicts:\n#\tuw-ai/src/main/java/uw/ai/AiClientHelper.java\n#\tuw-ai/src/main/java/uw/ai/rpc/AiConfigRpc.java\n#\tuw-ai/src/main/java/uw/ai/rpc/impl/AiConfigRpcImpl.java\n#\tuw-ai/src/main/java/uw/ai/vo/AiModelConfigVo.java",
"is_bot": false,
"headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-10T06:37:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a70065339a66f3b0337f56ca2e0659121c37361",
"body": null,
"is_bot": false,
"headline": "AiConfigRpc实现类",
"author_name": "tanlx",
"author_login": "XSunin0922",
"committed_at": "2026-06-10T06:23:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adcfead33afa4154d84d722a6ff49839acc9cbb4",
"body": "feat(script): 增强mvn-deploy.sh脚本功能\n\n- 添加命令行参数解析支持(-a, --skip-parent, -h)\n- 实现全量发布和指定模块发布的选项\n- 支持跳过parent模块发布的功能\n- 添加参数冲突检测和错误处理\n- 优化命令构建逻辑和执行流程\n- 移除调试输出并精简脚本结构\n```",
"is_bot": false,
"headline": "```",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-10T04:39:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "814e9d499ba0b3c21aeae1da241aa78ac558901d",
"body": "- 修改mvn-deploy.sh脚本,将跳过测试参数从-DskipTests改为-Dmaven.test.skip=true\n- 重构AuthClientAutoConfiguration类,优化RestClient配置方式,移除ConditionalOnProperty条件判断\n- 完善AuthClientAutoConfiguration类文档注释,明确两类HTTP客户端职责分工\n- 修改AuthClientTokenService类,简化登录URL构建方式,移除不必要的URI创建\n- 重构CommonAppAutoConfiguration中的LoadBalancerCacheMana\n[…]\n本\n- 重构MscAclHelper类,使用RestClient替代RestTemplate进行HTTP调用\n- 统一项目内ResponseData导入路径,使用uw.common.response.ResponseData\n- 替换网关中心ACME模块中的DAO方法调用,使用新方法名保持一致性\n- 更新访问日志控制器中的分页数据类型,使用PageList替代DataList和ESDataList",
"is_bot": false,
"headline": "refactor(auth): 重构认证客户端配置与网关中心代码结构",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-10T03:37:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fc308fb35d7056435821afd93dc9f4c5376219de",
"body": "- 将类型转换逻辑重构为resolveConcreteClass方法\n- 为泛型集合类型提供具体的实现类映射\n- 使用instanceof模式匹配简化类型判断\n- 统一参数化类型和原始类型的处理方式\n\nfeat(common): 更新PageList和PageRowSet的数据结构实现\n\n- 将内部list字段从Collections.emptyList()改为ArrayList\n- 添加toArrayList辅助方法确保类型一致性\n- 重构构造函数中的列表初始化逻辑\n- 修正空值检查顺序以提高代码可读性\n- 更新EMPTY实例的初始化方式\n\nchore(base): 升级项目版本号及相关依赖\n\n- 更新revision从2026.0501.0001到2026.0501.0002\n- 升级uw-cache版本至1.2.95\n- 升级uw-common版本至1.1.96",
"is_bot": false,
"headline": "refactor(cache): 优化Kryo缓存工具类的类型解析逻辑",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T16:58:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d3bb8ce6b0591e1fe0d1aa8f9e13b23d37c1c39",
"body": "- 将 mapQueryResponseToDataList 方法重命名为 mapQueryResponseToPageList\n- 更新 CHANGELOG 版本号从 2026.0501.0000 到 2026.0501.0001\n- 更新 pom.xml 中 uw-log-es 模块版本到 3.1.96\n- 在 pom.xml 中添加 uw-oauth2-client 依赖项\n- 更新 README.md 中父模块版本引用",
"is_bot": false,
"headline": "fix(log): 修复日志客户端查询响应映射方法命名错误",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T16:24:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbc41c141e04b564878b712762868748ec9929cd",
"body": "- 在 pom.xml 中添加 uw-oauth2-client.version 依赖版本\n- 更新 central-publishing-maven-plugin 插件版本至 0.7.0\n- 更新 maven-javadoc-plugin 插件版本至 3.11.2\n- 更新 maven-gpg-plugin 插件版本至 3.2.7\n- 修复 LoggingHttpServletRequestWrapper 构造函数缓存大小配置",
"is_bot": false,
"headline": "chore(deps): 更新依赖版本并修复请求包装器配置",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T14:53:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ec96baa2be9f612e3eb3e14851cf43a0804577c",
"body": "- 将 uw-ai.version 从 1.0.26 升级到 1.1.26\n- 将 uw-auth-client.version 从 6.1.19 升级到 6.2.19\n- 将 uw-auth-service.version 从 6.1.58 升级到 6.2.58\n- 将 uw-cache.version 从 1.1.93 升级到 1.2.93\n- 将 uw-common.version 从 1.0.93 升级到 1.1.95\n- 将 uw-common-app.version 从 1.0.100 升级到 1.1.100\n- 将 uw-dao.version 从 5.2.31 升级到 5.3.\n[…]\n 从 1.0.26 升级到 1.1.26\n- 将 uw-notify-client.version 从 1.0.25 升级到 1.1.25\n- 将 uw-task.version 从 5.0.123 升级到 5.1.123\n- 将 uw-tinyurl-client.version 从 1.0.25 升级到 1.1.25\n- 将 uw-webot.version 从 1.0.3 升级到 1.0.5",
"is_bot": false,
"headline": "chore(deps): 更新项目依赖版本",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T14:35:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bb4d33c7d6198df9149c977deb367a32bfdb2e3d",
"body": "- 将uw.common.dto.ResponseCode和ResponseData的导入路径更新到uw.common.response包\n- 将uw.dao.QueryParam等类的导入路径更新到uw.common.dto和uw.common.data包\n- 将所有RestTemplate实例替换为RestClient以使用更现代的HTTP客户端API\n- 重构AI服务中的RPC实现类,统一使用RestClient进行HTTP请求处理\n- 删除过时的DataList、DataSet等类及相应的QueryParam、PageQueryParam类\n- 更新API调用方式,使用RestClient的链式调用风格替代exchange方法\n- 添加批量迁移脚本migrate-202605.py用于自动化重构Java代码中的导入和类名替换",
"is_bot": false,
"headline": "refactor(ai): 将RestTemplate替换为RestClient并更新API导入路径",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T14:30:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6168089485177df2a5235da2b3e739e1cb11f179",
"body": "- 将uw.common.dto.ResponseCode和ResponseData的导入路径更新到uw.common.response包\n- 将uw.dao.QueryParam等类的导入路径更新到uw.common.dto和uw.common.data包\n- 将所有RestTemplate实例替换为RestClient以使用更现代的HTTP客户端API\n- 重构AI服务中的RPC实现类,统一使用RestClient进行HTTP请求处理\n- 删除过时的DataList、DataSet等类及相应的QueryParam、PageQueryParam类\n- 更新API调用方式,使用RestClient的链式调用风格替代exchange方法\n- 添加批量迁移脚本migrate-202605.py用于自动化重构Java代码中的导入和类名替换",
"is_bot": false,
"headline": "refactor(ai): 将RestTemplate替换为RestClient并更新API导入路径",
"author_name": "zhangjin",
"author_login": "axeon",
"committed_at": "2026-06-09T14:29:55Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 0,
"commits_last_year": 157,
"latest_release_at": null,
"latest_release_tag": null,
"releases_from_tags": false,
"days_since_last_push": 14,
"active_weeks_last_year": 16,
"days_since_latest_release": null,
"mean_days_between_releases": null
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "com.umtone:uw-ai",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-ai",
"is_deprecated": false,
"latest_version": "1.1.36",
"repository_url": null,
"versions_count": 32,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:23Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-dao",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-dao",
"is_deprecated": false,
"latest_version": "5.3.52",
"repository_url": null,
"versions_count": 40,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:27Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-mfa",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-mfa",
"is_deprecated": false,
"latest_version": "1.1.71",
"repository_url": null,
"versions_count": 31,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:34Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-task",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-task",
"is_deprecated": false,
"latest_version": "5.1.135",
"repository_url": null,
"versions_count": 38,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:36Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-cache",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-cache",
"is_deprecated": false,
"latest_version": "1.2.103",
"repository_url": null,
"versions_count": 25,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:24Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-webot",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-webot",
"is_deprecated": false,
"latest_version": "1.0.15",
"repository_url": null,
"versions_count": 13,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:39Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-common",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-common",
"is_deprecated": false,
"latest_version": "1.1.112",
"repository_url": null,
"versions_count": 50,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:33Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
},
{
"name": "com.umtone:uw-log-es",
"exists": true,
"license": "The Apache Software License, Version 2.0",
"keywords": [],
"ecosystem": "maven",
"matches_repo": null,
"registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-log-es",
"is_deprecated": false,
"latest_version": "3.1.106",
"repository_url": null,
"versions_count": 26,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-14T11:15:36Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
}
]
},
"popularity": {
"forks": 0,
"stars": 3,
"watchers": 1,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"pom.xml",
"uw-ai/pom.xml",
"uw-auth-client/pom.xml",
"uw-auth-service/pom.xml",
"uw-cache/pom.xml",
"uw-common-app/pom.xml",
"uw-common/pom.xml",
"uw-dao/pom.xml",
"uw-gateway-client/pom.xml",
"uw-httpclient/pom.xml",
"uw-log-es/pom.xml",
"uw-logback-es/pom.xml",
"uw-mfa/pom.xml",
"uw-mydb-client/pom.xml",
"uw-notify-client/pom.xml",
"uw-oauth2-client/pom.xml",
"uw-task/pom.xml",
"uw-tinyurl-client/pom.xml",
"uw-webot/pom.xml"
],
"largest_source_bytes": 96434,
"source_files_sampled": 486,
"oversized_source_files": 3,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"pom.xml",
"uw-ai/pom.xml",
"uw-auth-client/pom.xml",
"uw-auth-service/pom.xml",
"uw-cache/pom.xml",
"uw-common-app/pom.xml",
"uw-common/pom.xml",
"uw-dao/pom.xml",
"uw-gateway-client/pom.xml",
"uw-httpclient/pom.xml",
"uw-log-es/pom.xml",
"uw-logback-es/pom.xml",
"uw-mfa/pom.xml",
"uw-mydb-client/pom.xml",
"uw-notify-client/pom.xml",
"uw-oauth2-client/pom.xml",
"uw-task/pom.xml",
"uw-tinyurl-client/pom.xml",
"uw-webot/pom.xml"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [
{
"name": "io.netty:netty-codec-compression",
"direct": false,
"version": "4.2.15.Final",
"severity": "high",
"ecosystem": "maven",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-558v-64gr-wgg4"
],
"fixed_version": "4.2.16.Final",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "io.netty:netty-codec-http",
"direct": false,
"version": "4.2.15.Final",
"severity": "high",
"ecosystem": "maven",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-4mp9-239f-g9hg",
"GHSA-6cqp-g7gg-8hr5",
"GHSA-6jqx-86gh-f27w",
"GHSA-gcjf-9mgh-3p7g",
"GHSA-jppx-w49h-x2qq",
"GHSA-mvh2-crg5-v77c",
"GHSA-q4f6-jm68-57ww"
],
"fixed_version": "4.2.16.Final",
"advisory_count": 7,
"oldest_advisory_days": 1
},
{
"name": "io.netty:netty-codec-http3",
"direct": false,
"version": "4.2.15.Final",
"severity": "high",
"ecosystem": "maven",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-hpcc-26xq-25fv"
],
"fixed_version": "4.2.16.Final",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "tools.jackson.core:jackson-databind",
"direct": false,
"version": "3.1.4",
"severity": "moderate",
"ecosystem": "maven",
"cvss_score": 6.5,
"advisory_ids": [
"GHSA-5gvw-p9qm-jgwh"
],
"fixed_version": "3.2.1",
"advisory_count": 1,
"oldest_advisory_days": 2
},
{
"name": "io.netty:netty-codec-http2",
"direct": false,
"version": "4.2.15.Final",
"severity": "low",
"ecosystem": "maven",
"cvss_score": 0,
"advisory_ids": [
"GHSA-c69g-56f8-xwqj"
],
"fixed_version": "4.2.16.Final",
"advisory_count": 1,
"oldest_advisory_days": 1
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 3,
"moderate": 1
},
"advisory_count": 11,
"affected_count": 5,
"assessed_count": 110,
"malicious_count": 0,
"assessed_package": "maven:com.umtone:uw-ai@1.1.36",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"maven"
],
"dependencies": [
{
"name": "org.springframework.cloud:spring-cloud-dependencies",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${spring-cloud.version}"
},
{
"name": "com.alibaba.cloud:spring-cloud-alibaba-dependencies",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${spring-cloud.alibaba.version}"
},
{
"name": "com.umtone:uw-ai",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-ai.version}"
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-auth-client.version}"
},
{
"name": "com.umtone:uw-auth-service",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-auth-service.version}"
},
{
"name": "com.umtone:uw-cache",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-cache.version}"
},
{
"name": "com.umtone:uw-common",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-common.version}"
},
{
"name": "com.umtone:uw-common-app",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-common-app.version}"
},
{
"name": "com.umtone:uw-dao",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-dao.version}"
},
{
"name": "com.umtone:uw-gateway-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-gateway-client.version}"
},
{
"name": "com.umtone:uw-httpclient",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-httpclient.version}"
},
{
"name": "com.umtone:uw-log-es",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-log-es.version}"
},
{
"name": "com.umtone:uw-logback-es",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-logback-es.version}"
},
{
"name": "com.umtone:uw-mfa",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-mfa.version}"
},
{
"name": "com.umtone:uw-mydb-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-mydb-client.version}"
},
{
"name": "com.umtone:uw-notify-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-notify-client.version}"
},
{
"name": "com.umtone:uw-oauth2-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-oauth2-client.version}"
},
{
"name": "com.umtone:uw-task",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-task.version}"
},
{
"name": "com.umtone:uw-tinyurl-client",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-tinyurl-client.version}"
},
{
"name": "com.umtone:uw-webot",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "${uw-webot.version}"
},
{
"name": "org.openjdk.jmh:jmh-core",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "1.37"
},
{
"name": "org.openjdk.jmh:jmh-generator-annprocess",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "1.37"
},
{
"name": "org.springdoc:springdoc-openapi-starter-webmvc-ui",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "2.8.16"
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "2.2.50"
},
{
"name": "org.apache.commons:commons-lang3",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "3.20.0"
},
{
"name": "com.google.guava:guava",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "33.6.0-jre"
},
{
"name": "org.reflections:reflections",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "0.10.2"
},
{
"name": "com.esotericsoftware:kryo",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "5.6.2"
},
{
"name": "com.github.victools:jsonschema-generator",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "4.38.0"
},
{
"name": "com.github.victools:jsonschema-module-jackson",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "4.38.0"
},
{
"name": "com.github.victools:jsonschema-module-swagger-2",
"manifest": "pom.xml",
"ecosystem": "maven",
"version_constraint": "4.38.0"
},
{
"name": "com.umtone:uw-auth-service",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.reflections:reflections",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.victools:jsonschema-generator",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.victools:jsonschema-module-jackson",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.victools:jsonschema-module-swagger-2",
"manifest": "uw-ai/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-web",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-webflux",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.cloud:spring-cloud-commons",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.httpcomponents.client5:httpclient5",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-auth-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-web",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-log-es",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.ben-manes.caffeine:caffeine",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-auth-service/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-data-redis",
"manifest": "uw-cache/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.ben-manes.caffeine:caffeine",
"manifest": "uw-cache/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.esotericsoftware:kryo",
"manifest": "uw-cache/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-pool2",
"manifest": "uw-cache/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-cache/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-dao",
"manifest": "uw-common-app/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-service",
"manifest": "uw-common-app/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.cloud:spring-cloud-loadbalancer",
"manifest": "uw-common-app/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springdoc:springdoc-openapi-starter-webmvc-ui",
"manifest": "uw-common-app/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery",
"manifest": "uw-common-app/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-annotations",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-databind",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.module:jackson-module-parameter-names",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.esotericsoftware:kryo",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.jctools:jctools-core",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": "4.0.5"
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-lang3",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework:spring-context",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.ben-manes.caffeine:caffeine",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.reflections:reflections",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.github.stuxuhai:jpinyin",
"manifest": "uw-common/pom.xml",
"ecosystem": "maven",
"version_constraint": "1.1.8"
},
{
"name": "org.springframework.boot:spring-boot-starter-data-redis",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.mysql:mysql-connector-j",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-annotations",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-lang3",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.zaxxer:HikariCP",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-pool2",
"manifest": "uw-dao/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-gateway-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-gateway-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-gateway-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.squareup.okhttp3:okhttp-jvm",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": "5.3.2"
},
{
"name": "org.apache.commons:commons-lang3",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-core",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-databind",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.core:jackson-annotations",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.dataformat:jackson-dataformat-xml",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-httpclient/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter",
"manifest": "uw-log-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-log-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-httpclient",
"manifest": "uw-log-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.google.guava:guava",
"manifest": "uw-log-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-log-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.slf4j:slf4j-api",
"manifest": "uw-logback-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "ch.qos.logback:logback-classic",
"manifest": "uw-logback-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-logback-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-httpclient",
"manifest": "uw-logback-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.google.guava:guava",
"manifest": "uw-logback-es/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-data-redis",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-lang3",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "commons-codec:commons-codec",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-pool2",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.google.zxing:core",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": "3.5.3"
},
{
"name": "com.google.zxing:javase",
"manifest": "uw-mfa/pom.xml",
"ecosystem": "maven",
"version_constraint": "3.5.3"
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-mydb-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-mydb-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-mydb-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-notify-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-notify-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-notify-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-httpclient",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-cache",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.auth0:java-jwt",
"manifest": "uw-oauth2-client/pom.xml",
"ecosystem": "maven",
"version_constraint": "4.5.0"
},
{
"name": "org.springframework.boot:spring-boot-starter-amqp",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-data-redis",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.esotericsoftware:kryo",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.apache.commons:commons-pool2",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-log-es",
"manifest": "uw-task/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-tinyurl-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-auth-client",
"manifest": "uw-tinyurl-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "io.swagger.core.v3:swagger-annotations",
"manifest": "uw-tinyurl-client/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "org.springframework.boot:spring-boot-starter-validation",
"manifest": "uw-webot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.microsoft.playwright:playwright",
"manifest": "uw-webot/pom.xml",
"ecosystem": "maven",
"version_constraint": "1.58.0"
},
{
"name": "com.umtone:uw-cache",
"manifest": "uw-webot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-common",
"manifest": "uw-webot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
},
{
"name": "com.umtone:uw-httpclient",
"manifest": "uw-webot/pom.xml",
"ecosystem": "maven",
"version_constraint": null
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"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": "axeon",
"commits": 613,
"avatar_url": "https://avatars.githubusercontent.com/u/10541706?v=4"
},
{
"type": "User",
"login": "XSunin0922",
"commits": 19,
"avatar_url": "https://avatars.githubusercontent.com/u/132500124?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.97
},
"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": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "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": 0,
"reason": "17 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "7d889578363f4ebbf8aebdcb55fb9b1927ebbb18",
"ran_at": "2026-07-24T02:42:06Z",
"aggregate_score": 2.5,
"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/axeon/uw-base",
"host": "github.com",
"name": "uw-base",
"owner": "axeon"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 36,
"inputs": {
"security": 36,
"vitality": 41,
"community": 26,
"governance": 36,
"engineering": 38
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 41,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"commits_last_year": 157,
"human_commit_share": 1,
"days_since_last_push": 14,
"active_weeks_last_year": 16
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 14 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 14
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "16/52 weeks with commits",
"points": 11.1,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 16
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "157 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 157
}
}
],
"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": "critical",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"releases_count": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "no releases published",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases_published",
"params": {}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 14,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 14 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 14
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 26,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 5,
"inputs": {
"forks": 0,
"stars": 3,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "3 stars",
"points": 4.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 3
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"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": 36,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.97
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 97% of commits",
"points": 0.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 97
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "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": 47,
"inputs": {
"followers": 7,
"owner_type": "User",
"is_verified": null,
"owner_login": "axeon",
"public_repos": 18,
"account_age_days": 4207
},
"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": "7 followers of axeon",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 7,
"login": "axeon"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "18 public repos, account ~11 yr old",
"points": 21.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 18
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"com.umtone:uw-ai",
"com.umtone:uw-dao",
"com.umtone:uw-mfa",
"com.umtone:uw-task",
"com.umtone:uw-cache",
"com.umtone:uw-webot",
"com.umtone:uw-common",
"com.umtone:uw-log-es"
],
"ecosystems": "maven",
"any_deprecated": false,
"min_days_since_publish": 9
},
"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 9 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 9
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "50 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 50
}
}
],
"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": 36,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 25,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 2.5
},
"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 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no 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": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"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": "17 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "good",
"name": "Dependency advisories",
"note": "Matched the maven:com.umtone:uw-ai@1.1.36 runtime dependency closure — what installing the published package pulls in — 110 packages. Reachability is not analyzed.",
"notes": [
{
"code": "advisories_scope_published",
"params": {
"package": "maven:com.umtone:uw-ai@1.1.36",
"assessed": 110
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 82,
"inputs": {
"source": "osv",
"advisories": 11,
"affected_packages": 5,
"assessed_packages": 110,
"unassessed_packages": 0,
"affected_by_severity": "high 3, moderate 1, low 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "5 affected: io.netty:netty-codec-compression 4.2.15.Final (high 7.5), io.netty:netty-codec-http 4.2.15.Final (high 7.5), io.netty:netty-codec-http3 4.2.15.Final (high 7.5), +2 more",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 5,
"packages": "io.netty:netty-codec-compression 4.2.15.Final (high 7.5), io.netty:netty-codec-http 4.2.15.Final (high 7.5), io.netty:netty-codec-http3 4.2.15.Final (high 7.5)"
}
},
{
"code": "advisories_affected_more",
"params": {
"count": 2
}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 110,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 55,
"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": 0.84,
"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": "84 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 84,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"pom.xml",
"uw-ai/pom.xml",
"uw-auth-client/pom.xml",
"uw-auth-service/pom.xml",
"uw-cache/pom.xml",
"uw-common-app/pom.xml",
"uw-common/pom.xml",
"uw-dao/pom.xml",
"uw-gateway-client/pom.xml",
"uw-httpclient/pom.xml",
"uw-log-es/pom.xml",
"uw-logback-es/pom.xml",
"uw-mfa/pom.xml",
"uw-mydb-client/pom.xml",
"uw-notify-client/pom.xml",
"uw-oauth2-client/pom.xml",
"uw-task/pom.xml",
"uw-tinyurl-client/pom.xml",
"uw-webot/pom.xml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "pom.xml, uw-ai/pom.xml, uw-auth-client/pom.xml (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "pom.xml, uw-ai/pom.xml, uw-auth-client/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": "Dockerfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile"
}
}
],
"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": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Java",
"largest_source_bytes": 96434,
"source_files_sampled": 486,
"oversized_source_files": 3
},
"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": "3/486 source files over 60KB",
"points": 54.7,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 486,
"oversized": 3
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-24T02:42:36.862729Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/axeon/uw-base.svg",
"full_name": "axeon/uw-base",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}