原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 812,
"has_wiki": true,
"homepage": "https://doc.x-lf.com/docs/bamboo-base-go",
"languages": {
"Go": 539394,
"HTML": 7987,
"Makefile": 3218
},
"pushed_at": "2026-07-24T18:10:16Z",
"created_at": "2025-08-21T09:05:47Z",
"owner_type": "Organization",
"updated_at": "2026-07-24T18:11:14Z",
"description": "筱工具 | 一个基于 Gin 框架开发的基础集成工具库,用于简化开发以及项目准备阶段所制作",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "master",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "www.x-lf.com",
"name": "筱服务",
"type": "Organization",
"login": "bamboo-services",
"company": null,
"location": "China",
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/168822165?v=4",
"created_at": "2024-05-03T10:09:28Z",
"is_verified": null,
"public_repos": 13,
"account_age_days": 812
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.1.2",
"kind": "patch",
"published_at": "2026-07-24T18:09:52Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2026-07-24T17:43:51Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-07-22T17:24:41Z"
},
{
"tag": "v1.0.6",
"kind": "patch",
"published_at": "2026-07-22T17:22:57Z"
},
{
"tag": "v1.0.5",
"kind": "patch",
"published_at": "2026-07-21T08:43:54Z"
},
{
"tag": "v1.0.4",
"kind": "patch",
"published_at": "2026-07-20T06:06:14Z"
},
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2026-07-19T19:23:16Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2026-07-19T18:41:45Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2026-07-18T18:39:17Z"
}
],
"recent_commits": [
{
"oid": "b56d54f236df3293ff11f6714928dc328adb82d1",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.1.2",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-24T18:10:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0421a44d5459170af60bca372eec5156cd4ca62a",
"body": "bump common/defined/plugins(email,grpc,async,cron)/major 内部依赖\nv1.1.0 → v1.1.1,配合 FromEnv 时序修复 (7deb152) 发布。\n\n- common: defined v1.1.1\n- plugins/email: common+defined v1.1.1\n- plugins/grpc: common+defined v1.1.1\n- plugins/async: common+defined v1.1.1\n- plugins/cron: common+defined v1.1.1\n- major: common+defined+plugins/email v1.1.1",
"is_bot": false,
"headline": "chore(release): bump submodule dependencies to v1.1.1",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-24T18:08:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b63d1589cc4a77b721efcc347999c71ea0920906",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.1.1",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-24T17:44:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7deb152ff5b620763011691d7462a573f4366547",
"body": "原因: FromEnv 在函数体立即读取环境变量并捕获进闭包,但业务侧常在\nRegister 调用前构造 opts 切片,此时 configInit() 尚未执行 godotenv.Load(),\n读到 \"none\" → 返回 nil → DB/Cache 节点不注册 → MustGetDB panic。\n\n内容: 将 database.FromEnv 与 cache.FromEnv 的 env 读取动作搬进返回的\n闭包,延迟到 Apply(opts...) 阶段执行(此时 configInit 已加载 .env)。\n命中 none 时闭包内 return 不修改 Config,Enabled() 返回 false,\n语义等价于原 nil 但不会被 WithDatabase/WithCache 跳过。\n同步修正注释中\"返回 nil\"的不自洽表述,并更新 dispatch 测试断言新语义。\n\n影响: API 签名不变,业务侧 main.go 写法无需改动。",
"is_bot": false,
"headline": "fix(option): 修复 FromEnv 立即求值导致 .env 未加载",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-24T17:42:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab80413cb925dce2662716c040cdcff9421ee1e2",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.1.0",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-22T17:25:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "520677a716bf1c6742ed00f2ef9559b8f56d1111",
"body": "内容: 为 Key/Hash/Set/List 四种缓存接口的写方法新增 5 个函数式选项,\n覆盖 Redis 和 Memory 双后端\n- WithTTL: 覆盖默认过期时间\n- WithNX: 仅当键不存在时写入\n- WithXX: 仅当键已存在时写入\n- WithKeepTTL: 保留原有 TTL 不重设\n- WithNoSlide: 写入但不续期\n\nMemory 后端新增 Store.SetCond/UpdateKeepExpireAt 方法和\nUpdateNoChange 哨兵值,Redis 后端用 SetArgs 原生命令对接",
"is_bot": false,
"headline": "feat(cache): 添加写操作函数式选项(NX/XX/KeepTTL/NoSlide)",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-22T17:23:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db29505c2adb3a4b15bfa859495842733505e1dd",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.6",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-22T17:23:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edb174f0335e89e50c6f298a6d9dd8055186f2d2",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.5",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-21T08:44:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7616661e3455076c48c235830bb74e4cfb124395",
"body": "将 opts 从 Runner 参数迁移到 Register 参数,Runner 不再参与组件装配。\nDB/Cache/Redis 在 Register 阶段通过 Use 在 Exec 前装配,业务节点可在\nExec 时直接从 ctx 获取已初始化的组件实例。\n\n合并内容:\n- refactor: opts 上提 Register,Runner 瘦身,删除 initOption\n- docs: 同步 README / AGENTS 知识库 / godoc 措辞至新方案\n- test: 新增集成测试验证业务节点能从 ctx 拿到 DB/Cache\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: opts 上提 Register,统一业务节点与内置组件装配",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-21T08:40:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "27db54556b29129a74b30b62916f37f63471ea3c",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.4",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-20T06:06:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a1f2dc4df4a9887a23f52234b488780ecf1af3f",
"body": "内容: 在 database option 子包新增 Oracle/SQLServer 两种 GORM 驱动对接,对称复刻现有 MySQL/Postgres/SQLite 的两层策略函数模式。Oracle 使用 github.com/oracle-samples/gorm-oracle(godror logfmt DSN),SQL Server 使用 gorm.io/driver/sqlserver(URL DSN)。同步新增 DATABASE_SERVICE_NAME/DATABASE_LIB_DIR 环境变量、FromEnv 驱动分发、openByDriver 建连分支、DSN 拼装测试。\n[…]\nse/cache 子包 package 名统一为 xOptDatabase/xOptCache,与 import 别名一致;桥接层 import 别名从 xOptionDB/xOptionCache 统一为 xOptDatabase/xOptCache;WithRoute 签名改为可变参数支持一次注册多个路由器;go.work 版本提升至 1.25.11 以满足 gorm-oracle 依赖要求。",
"is_bot": false,
"headline": "feat(option): 对接 Oracle 与 SQL Server 数据库后端",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-20T06:04:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5c4e226a8f5a24fa48b8a1100f9747e7aef0fcb9",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.3",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-19T19:23:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf606e746a26ca7ec9a61543575f2a4e16c54ebd",
"body": "RouteRegistrar 原签名 func(serve *gin.Engine) 不传 ctx,迫使业务侧\n自行从 *xReg.Reg 取 reg.Init.Ctx。但 context 的值语义让「构造时捕获\nctx」成为陷阱:UseAfterExec 装配 DB/缓存时会重新赋值 reg.Init.Ctx\n字段(context.WithValue 返回新接口值),而闭包内早已捕获的旧 ctx\n引用不会更新,导致 MustGetDB panic。\n\n改为 func(ctx context.Context, serve *gin.Engine),Runner 在\ninitOption 装配完 DB/缓存后调用 registrar 时直接传入 reg.Init.Ctx,\n业务侧不再需要自行取 ctx,从根上消除值语义陷阱。\n\nBREAKING CHANGE: RouteRegistrar 签名变更,WithRouteGroup 内部闭包\n同步调整。业务侧需把 func(serve) 改为 func(ctx, serve)。\n\n同步更新 README 示例与各层 AGENTS.md。",
"is_bot": false,
"headline": "fix(option)!: RouteRegistrar 签名加 ctx 参数",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-19T19:22:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adb2e4ee49ba5f095389b3a0916dd7fb98fa56ea",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.2",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-19T18:42:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "000206f7123d5366de75cb59f8b2a85e875697a7",
"body": "原因: 原 option 层 cache 配置内联于父包,与 database 子包设计不对称;\n 且缺少 AutoMigrate 表声明与 Prepare 数据初始化的声明式入口,\n 业务侧需手写迁移节点或借道 WithRoute 回调,属于反模式。\n内容: - 新建 major/option/cache/ 子包(cache.go+redis.go+memory.go),\n 与 major/option/database/ 对称,CacheConfig/CacheOption 类型落地\n - database 子包 MySQL/Postgres/S\n[…]\n- 新增 init_database_test.go 端到端验证迁移与种子数据\n影响: 下游业务侧需将 WithRedis/WithMemory 调用改为 WithCache(WithRedis(...))\n 两层形态,WithDatabaseFromEnv 改为 WithDatabase(FromEnv()),\n 属 v1.0.1→v1.0.2 breaking change",
"is_bot": false,
"headline": "refactor(option): 重构为 Database/Cache 双子包对称两层架构",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-19T18:41:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cf0f63290af295a2aaedac74c72f66d98302ab7a",
"body": null,
"is_bot": true,
"headline": "chore(release): bump submodule dependencies to v1.0.1",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-18T18:39:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ff39e5c27feae497a4543281b6cdfa7bd08ebc7",
"body": null,
"is_bot": false,
"headline": "ci: 修正 release 工作流中模块校验命令为 go list -m",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-18T18:38:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3993d382e2cbab66b5dc63bdcd8da52688c3bac8",
"body": null,
"is_bot": false,
"headline": "docs: 同步最新架构变更到各模块 AGENTS.md",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-18T18:34:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "877c643ff6a37fac732c020e2c2f865c2cfa6f96",
"body": null,
"is_bot": false,
"headline": "build: 重构发布流程为统一版本号并更新依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-18T18:23:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "156bccfd51351cd600343bfe1e048f1d0cf9651c",
"body": null,
"is_bot": false,
"headline": "refactor(cache): 重构缓存模块为 driver/memory/redis 分层结构",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-18T17:44:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5830f9f24f1f192bdf0805cb5aa7811b3a14d557",
"body": "- 将 Runner 单函数拆分为 mainRunner 结构体及生命周期阶段方法\n- 新增 option 包实现函数式选项模式,支持声明式配置缓存和数据库\n- 新增缓存系统,支持 Redis 和 Memory 两种后端\n- 新增 UseAfterExec 支持运行时节点注册\n- 重构数据库初始化节点,支持 MySQL/Postgres/SQLite 多驱动\n- 新增 AllowOptionRequest 替代 AllowOption",
"is_bot": false,
"headline": "feat(major): 重构 Runner 并引入 Option 模式配置系统",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-18T17:02:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dabf9d57b800b1fba0005944d45d1e9049894f0d",
"body": null,
"is_bot": false,
"headline": "fix(模型): 开放 BaseEntity 的 CreatedAt 字段 JSON 序列化",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-16T05:00:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7db100d1d04979a603b270db898d0b6b2553c5c0",
"body": null,
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go 依赖版本至 v1.0.0-202607011542",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-01T07:44:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9a9fc447e165c1976ee19060772a9ac4dc3a16d",
"body": "原因: Task 14 误将完整版本号写入 version 文件,导致 build_tag 拼接出错误 tag 格式\n内容: common/version 和 major/version 从 v1-202607011508 改回 0.0\n影响: 重新执行 make release 可生成正确的 tag 格式",
"is_bot": false,
"headline": "fix(common,major): 修正 version 文件格式为子版本号",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-01T07:39:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "531fa54a91c51aec6e12ce53c4471a9a9f274ea6",
"body": "原因: common 层作为通用基础层,不应直接依赖具体 Web 框架(gin)、ORM(gorm)\n和 Redis 客户端,违反分层架构原则,导致 common 被下游使用时被迫引入全部框架依赖\n\n内容:\n- 将 common/utility/context 下的 database/nosql/email/snowflake/custom 工具\n 迁移至 major/utility/context,由 major 层注入 ContextExtractor 解耦\n- 将 common/utility/package/binding 迁移至 major/utility,common 层仅保留\n\n[…]\n-redis/email 依赖,仅保留 validator/uuid/crypto\n- major/register 在 engineInit 中注入 GinValidateProvider 和 GinContextExtractor\n- 更新 common/major 版本号至 v1-202607011508\n\n影响: common 层实现框架无关,下游可按需引入 major 获取 gin 集成",
"is_bot": false,
"headline": "refactor(common): 剥离 common 层对 gin/gorm/redis 的直接依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-01T07:32:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ceb014904652a85f23bf11123b4fb4bacb94d3f8",
"body": "内容: 新增根目录及 common/major/plugins 等子模块的 AGENTS.md\n知识库文档,覆盖目录结构、代码地图、模块架构与约定;\nCLAUDE.md 作为引用入口指向 AGENTS.md\n影响: 为 AI 辅助开发提供项目上下文导航",
"is_bot": false,
"headline": "docs: 添加 AGENTS.md 项目知识库文档体系",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-01T05:14:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa657c117838d92f768ca3dcaa983da23c4b4ea4",
"body": null,
"is_bot": false,
"headline": "chore: 移除 .DS_Store 系统文件",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-07-01T05:14:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "558496c83dc8e0b0c2de2761f5fa2beaa5caca85",
"body": "- 同步更新 common、major、plugins/email、plugins/async、plugins/grpc、plugins/cron 模块依赖版本\n- 统一内部分支模块的 bamboo-base-go/common 和 defined 版本号,提高一致性和维护性",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go 依赖版本至 v1.0.0-202605310541",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-30T21:42:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91adc2522fc3c1e47fd8c23aba13628d9d9d3118",
"body": "更新内容:\n- golang.org/x/arch: v0.26.0 => v0.27.0\n- golang.org/x/crypto: v0.50.0 => v0.52.0\n- golang.org/x/net: v0.53.0 => v0.55.0\n- golang.org/x/sys: v0.43.0 => v0.45.0\n- golang.org/x/text: v0.36.0 => v0.37.0\n- github.com/go-playground/validator/v10: v10.30.2 => v10.30.3\n- github.com/quic-go/quic-go: v0.59.0 => v0.59.1\n- github.com/redis/go-redis/v9: v9.19.0 => v9.20.0\n- google.golang.org/grpc: v1.80.0 => v1.81.1\n- google.golang.org/genproto/googleapis/rpc: 更新至最新版本",
"is_bot": false,
"headline": "build(deps): 更新所有 Go 模块依赖至最新版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-30T21:40:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35ef120bf0aa1332febdd08dbafcc929e2f7c3d8",
"body": "移除 CLAUDE.md 并更新 .gitignore\n\n破坏性变更: 使用 GormLoggerConfig{} 的下游项目默认将不再看到普通 SQL 日志。\n默认 LogLevel 从 LevelInfo 更改为 LevelWarn。\n显式设置 LogLevel: LevelInfo 可恢复之前的行为。\n\n- 将 NewSlogLogger 默认 LogLevel 从 LevelInfo 更改为 LevelWarn\n- 使用显式 switch 映射替换 LogMode 直接类型转换\n (Silent->LevelSilent, Error->LevelError, Warn->LevelWarn, Info->LevelInfo)\n- LogMode 中的未知级别回退到 LevelWarn\n- 更新 TestNewSlogLogger_DefaultConfig 断言普通 SQL 无输出\n- 添加 TestSlogLogger_LogMode_Mapping 覆盖 5 种 LogMode 场景",
"is_bot": false,
"headline": "fix(log): 修改 GORM 日志默认级别为 Warn 并添加显式 LogMode 映射",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-30T21:40:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d6b5664721626ee14de5ef41df495ece2ce1bd2",
"body": "- 同步更新 common、major、plugins/email、plugins/async、plugins/grpc、plugins/cron 模块依赖版本\n- 确保所有模块使用一致的内部依赖版本,提升维护性和一致性",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go 依赖版本至 v1.0.0-202605032001",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-03T12:13:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d62f6719d1183822b2597337e929d3af2d4e1fb6",
"body": "原因: Render 方法硬编码 \"template/\" 前缀构造模板名,但 ParseFS/ParseGlob\n注册的模板名不含此前缀;同时三个内容模板共用 {{define \"content\"}} 导致\n只有 welcome.html 的内容块存活,无法按名称渲染指定模板\n\n内容: 改用 Clone + AddParseTree 动态组合模板,将目标内容注入 \"content\"\n槽位后执行 base 布局;三个模板文件改为唯一 define 名;重写测试并新增\n验证码/重置密码/外部模板的渲染测试用例",
"is_bot": false,
"headline": "fix(email): 修复 TemplateManager.Render 模板名查找与注册名不匹配问题",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-03T12:01:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d49284221cb9b097905f000fb6a773d66e9b84c",
"body": null,
"is_bot": false,
"headline": "feat(plugins/email): 添加邮件发送插件模块",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-05-03T02:29:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf3d04bcc9075d78dd78666be38bbb4e02618716",
"body": null,
"is_bot": false,
"headline": "feat(async): 支持 RequestKey 传递以实现链路追踪",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T22:52:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f9809d6871278b854a1ff13b42b8a914341349a",
"body": "移除 gin.Context 空值冗余检查,Go 类型断言的 ok 模式已保证非空。\n同步更新所有模块内部依赖版本号。",
"is_bot": false,
"headline": "refactor(common/log): 移除冗余空值检查并更新依赖版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T22:34:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68495a0d075e2f7477d778b5f3e995384eda4a42",
"body": "添加 Option 模式支持异步任务可配置化,并增强类型安全性:\n- 新增 WithName、WithDebug、WithLogger 选项配置\n- 拒绝传入 *gin.Context,强制使用标准 context.Context\n- 重构日志器解析逻辑,支持自定义日志器和命名任务\n- 将 Cancel 和 Wait 函数迁移至 task.go\n- 新增 6 个测试用例覆盖新功能和边界情况",
"is_bot": false,
"headline": "feat(async): 添加 Option 配置模式并增强安全性",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T22:34:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46165d33da3a77cf9b7d67f42cc169f56eded5cb",
"body": "- 修复 Makefile 中版本号提取逻辑,使用 $(notdir) 准确提取版本号\n- 统一所有 go.mod 中的内部依赖版本号为标准语义化版本格式\n- 移除 common/v1.0.0-xxx 的伪版本格式,改为 v1.0.0-xxx 标准格式\n\n影响模块: common, major, plugins/async, plugins/cron, plugins/grpc",
"is_bot": false,
"headline": "build(依赖): 统一内部依赖版本号格式",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T22:09:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fcefb88ee0dbe78ba71d11190afb3c0f3c95684",
"body": "为防止潜在的 nil 指针异常,在类型断言成功后增加 ginCtx != nil 的\n显式检查,提升代码健壮性。",
"is_bot": false,
"headline": "refactor(common/log): 添加 gin.Context 空值检查",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T22:09:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "560c94310933d3088cbdfabf0a6c624f0219712c",
"body": null,
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go 内部依赖版本至 v1.0.0-202604262346",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T15:49:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbbe5088cb8b65cd40ea97d11165e33c8527741d",
"body": null,
"is_bot": false,
"headline": "feat(插件): 添加 async 异步任务插件",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T15:40:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6f279439cf2ab795992e6dcb13c0569d655561d",
"body": "- 添加 plugins/async 到构建和发布流程\n- defined 模块引入 gin 依赖以支持 async 插件\n- 升级 gin 到 v1.12.0,golang.org/x/net 到 v0.51.0\n- 更新文档说明中间件执行顺序和请求绑定新用法\n- 同步 common 和 defined 模块依赖版本至下游",
"is_bot": false,
"headline": "feat(插件): 集成 async 插件并更新依赖版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-26T15:37:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6f273a70c30c39f88ef89bc1a3fea9143921a47",
"body": null,
"is_bot": false,
"headline": "feat(validator): 添加雪花算法验证",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-04-01T07:38:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffdc52aec0d50b6226a1eb882942535f93122221",
"body": null,
"is_bot": false,
"headline": "build(依赖): 同步 bamboo-base-go 依赖至 v1.0.0-202603141642",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-14T08:44:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0fde7533433d8fbda2e3f57e583a937a722d239e",
"body": "- 修改 ContextNodeList 方法使用指针接收者\n- Exec() 方法现在返回 ContextNodeList 并添加 GetRegNodeList 函数\n- gRPC 拦截器添加 mainCtx 和 streamCtx 的 nil 检查\n- cron runner 添加 context 字段并改进日志上下文管理",
"is_bot": false,
"headline": "refactor(context): 改进上下文处理并添加空值检查",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-14T08:42:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6f710ce1dd24896227cc79f7417d3d0f1a8fee2e",
"body": "内容:\n- 重构 `release-all` 目标,按依赖链顺序发布模块 (defined → common → major → plugins/cron → plugins/grpc)\n- 新增 `update_dep` 函数,发布后自动更新下游模块的 go.mod 依赖版本\n- 改进帮助信息,显示依赖关系说明\n\n影响:\n- 避免因发布顺序不当导致的依赖版本不一致问题\n- 确保下游模块始终引用最新发布的上游版本",
"is_bot": false,
"headline": "feat(发布): 实现按依赖顺序发布并自动更新下游依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-08T08:02:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "940007d896719f763f04c9ca15f64b12fac53580",
"body": "内容:\n- 将 `github.com/bamboo-services/bamboo-base-go/common` 依赖版本从 `v1.0.0-202603081511` 更新为 `v1.0.0-202603081522`\n- 同步更新 `plugins/grpc`、`plugins/cron` 及 `major` 模块的 go.mod 与 go.sum\n\n影响:\n- 确保所有模块依赖版本一致,减少潜在兼容性问题\n- 下游项目需执行 go mod tidy 拉取最新依赖",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go/common 版本至 v1.0.0-202603081522",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-08T07:23:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f7f9a83acaae73f857fdfdfd66da28709e4eed1",
"body": "内容:\n- 新增 `Function()` 函数,用于快速创建 `pack.Function` 实例\n- 保持与 `Valid()` 函数一致的设计风格\n\n影响:\n- 简化了 `pack.Function` 对象的初始化调用方式",
"is_bot": false,
"headline": "feat(common/utility): 添加 Function 实例化辅助函数",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-08T07:22:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb9ae69e43797aaefc5c88baa55a2e2cd645f312",
"body": "内容:\n- 更新 bamboo-base-go/common 至 v1.0.0-202603081511\n- 更新 bamboo-base-go/defined 至 v1.0.0-202602241921\n- 更新 gin-gonic/gin 至 v1.12.0\n- 更新 google.golang.org/grpc 至 v1.79.2\n- 更新 golang.org/x/net 至 v0.51.0\n- 更新 google.golang.org/genproto/googleapis/rpc\n- 新增间接依赖 go.mongodb.org/mongo-driver/v2 v2.5.0\n- 同步更新 plugins/grpc、plugins/cron 及 major 模块的 go.mod 与 go.sum\n\n影响:\n- 确保所有模块依赖版本一致,兼容最新上游变更\n- 下游项目需执行 go mod tidy 拉取最新依赖",
"is_bot": false,
"headline": "build(依赖): 更新核心依赖版本并同步 go.mod 文件",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-08T07:14:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5074843686a9e2bb2813ffae800ab056e4f4dcc",
"body": "内容:\n- 移除原有的 `util_test.go` 测试文件。\n- 新增 `binding_test.go`,覆盖 `Binding` 结构体的 `Data`、`Query`、`URI`、`Header` 方法测试。\n- 新增 `encryption_test.go`,验证 `SHA256` 和 `MD5` 哈希算法的正确性与一致性。\n- 新增 `function_test.go`,测试 `GetFunctionName` 和 `GetMethodName` 功能。\n- 新增 `generate_test.go`,覆盖随机字符串生成相关方法的测试。\n- 新增 `parse_test.go`,验证 `Parse` 类型转换方法的正确性及边界条件处理。\n\n影响:\n- 提升了工具模块的测试覆盖率,确保各功能点稳定性。\n- 测试文件与源码文件一一对应,提升了代码结构的清晰度与可维护性。",
"is_bot": false,
"headline": "test(common/utility): 重构测试文件结构并完善单元测试覆盖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-03-08T07:11:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a73e8b5d27b9f180502d53fb79a31d3e529f2ed",
"body": "内容:\n- 将核心模块中的部分功能迁移至 `common` 子模块,如 `log`、`error`。\n- 添加 `common/utility/package/validate.go` 文件,采用面向对象设计重构验证工具。\n - 提供 `pack.Valid` 类型作为验证工具类,并将所有验证函数重构为该类型的方法。\n - 重命名方法以提升语义简洁性(例如 `IsValidPhone` -> `IsPhone`,`IsValidIDCard` -> `IsIDCard`)。\n- 修改 README 和 Makefile,更新模块依赖描述及文档演示代码。\n\n影响:\n- 优化了模块分层结构,提升代码复用性和一致性。\n- 下游项目需同步调整对验证相关函数的调用方式,改为通过 `pack.Valid` 实例调用方法(如 `pack.Valid().IsPhone`)。\n- 更新后的组织结构提供了更高的可扩展性和维护性。",
"is_bot": false,
"headline": "refactor(common): 重构模块分层及验证工具代码组织",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T12:06:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ebfe4a46334baa5aca1c3e01b173a0b4fa2ae23e",
"body": "内容:\n- 将 `github.com/bamboo-services/bamboo-base-go/common` 依赖版本从 `v1.0.0-202602241920` 更新为 `v1.0.0-202602241923`。\n- 同步更新 `plugins/grpc/go.mod`、`major/go.mod` 和 `plugins/cron/go.mod` 文件。\n\n影响:\n- 确保所有模块依赖版本一致,减少潜在兼容性问题。\n- 下游项目需拉取最新依赖,保证运行环境与版本统一。",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go/common 版本至 v1.0.0-202602241923",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:24:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f1be9f66a63336bec338ab824e4c3f775f9a680",
"body": "内容:\n- 将 `package common` 重命名为 `package xBase`。\n- 调整代码及相关依赖的路径命名,保持与现有命名规则一致。\n\n影响:\n- 提升代码模块命名统一性及可维护性。\n- 下游依赖需同步更新包的引用路径以确保兼容性。",
"is_bot": false,
"headline": "refactor(common): 重命名包路径为 xBase 以统一命名风格",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:23:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "120dfaa8749474073c7416d29c009e576b73ee56",
"body": "内容:\n- 将 `github.com/bamboo-services/bamboo-base-go/common` 依赖版本从 `v1.0.0-202602241915` 更新为 `v1.0.0-202602241920`。\n- 同步更新 `plugins/grpc/go.mod`、`major/go.mod` 和 `plugins/cron/go.mod` 文件。\n\n影响:\n- 确保所有模块依赖版本一致,降低潜在的不兼容风险。\n- 下游项目需拉取最新依赖以确保运行环境的一致性与兼容性。",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go/common 依赖版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:21:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab9df5a4796d523b727faf56ceaff689efabde8c",
"body": "内容:\n- 将 `Binding.Data` 字段重命名为 `Binding.GetData`,强调字段语义与用途。\n- 确保与相关模块的命名规则一致以提升代码可读性和维护性。\n\n影响:\n- 下游项目需调整对 `Binding.Data` 引用的代码,适配重命名后的字段。",
"is_bot": false,
"headline": "refactor(utility): 重命名 Binding 结构体字段以提升语义清晰度",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:19:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c0fd3ab7a93bd36af03ea44b9d5604df3390ddc",
"body": "内容:\n- 将 `github.com/bamboo-services/bamboo-base-go/common` 依赖从 `v1.0.0-202602241855` 更新为 `v1.0.0-202602241915`。\n- 同步调整 `plugins/grpc/go.mod`、`major/go.mod` 和 `plugins/cron/go.mod` 文件。\n\n影响:\n- 确保依赖版本一致,避免潜在的不兼容问题。\n- 下游项目需重新拉取最新依赖以确保运行环境一致。",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go/common 依赖版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:16:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8afaf45559f329290bc7f005ae5fc46e5fc1bdbe",
"body": "内容:\n- 将 `Binding.Data` 字段重命名为 `Binding.GetData`,明确字段语义。\n- 将方法 `BindData`、`BindQuery`、`BindURI` 和 `BindHeader` 分别重命名为 `Data`、`Query`、`URI` 和 `Header`,简化调用方式。\n- 调整注释及文档说明以匹配新的方法和字段命名规则。\n- 更新 `utility.go` 中的示例代码,适配调整后的方法调用方式。\n- 重命名 `package pack` 为 `package xUtil` 以统一命名风格。\n\n影响:\n- 下游项目需调整对 `Binding` 相关字段和方法的调用,确保与新命名规则兼容。\n- 提升代码可读性和一致性,增强工具模块的易用性。",
"is_bot": false,
"headline": "refactor(utility): 重构 Binding 结构体及方法命名以提升一致性",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T11:15:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d402be1c83fec3e6fd41bee7c589312d94f3627",
"body": "内容:\n- 将 `github.com/bamboo-services/bamboo-base-go/common` 更新至 `v1.0.0-202602241855`。\n- 将 `google.golang.org/genproto/googleapis/rpc` 更新至 `v0.0.0-20260223185530-2f722ef697dc`。\n- 调整所有相关的 `go.mod` 和 `go.sum` 文件以匹配更新后的依赖版本。\n\n影响:\n- 确保依赖版本与最新功能和修复兼容。\n- 下游项目需确保本地依赖缓存已刷新以避免版本不一致问题。",
"is_bot": false,
"headline": "build(依赖): 更新 bamboo-base-go 和 genproto 依赖版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:59:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "820f73f2f81e38db7435444a0d751a692b7d2c4e",
"body": "内容:\n- 将 `parse` 类型重命名为 `Parse`,规范结构体命名风格。\n- 转换所有方法为大写接收者,调整为 `Parse` 类型方法以提升语言一致性。\n- 在 `utility.go` 中新增全局 `Parse` 方法,以便于初始化值解析工具实例。\n- 简化解析逻辑并优化代码可读性。\n\n影响:\n- 项目中需更新对 `parse` 方法调用的用法以适配新的命名规则。\n- 增强模块方法一致性,提升维护性与扩展性。",
"is_bot": false,
"headline": "refactor(utility): 重构 Parse 模块并统一结构体命名与方法签名",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:54:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11812e525635e284ff236543ed1a24625667a6b0",
"body": "内容:\n- 将 `major` 模块下的核心库迁移至 `common` 子模块,包括 `log`、`error`、`snowflake`、`utility/context` 等。\n- 更新项目中所有相关文件的导入路径为 `common` 子模块路径。\n- 调整 `go.mod` 和 `go.sum` 文件,移除冗余依赖并添加必要的新依赖。\n- 修改 Makefile,适配新增的模块命名空间。\n- 删除已废弃模块 `utility` 中的冗余文件。\n\n影响:\n- 优化了代码结构,提升了模块化管理能力。\n- 下游项目需同步修改依赖路径,使用新的 common 子模块路径以保持兼容性。",
"is_bot": false,
"headline": "refactor: 将核心模块迁移至 common 子模块并更新引用路径",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:30:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f58a2cea6f7063681178b0e9e61d2697a852d21",
"body": "内容:\n- 在多个文件中添加对 `github.com/go-playground/validator/v10` 的依赖声明。\n- 更新验证器相关模块,包括 `messages.go`、`translator.go`、`custom.go` 等。\n- 调整单元测试文件以支持新引入的验证库,涵盖 `enum_string_test.go`、`enum_int_test.go` 和 `enum_float_test.go`。\n\n影响:\n- 提升了验证功能的扩展性和兼容性。\n- 下游项目需要确保 `validator/v10` 库已正确安装以支持相关功能。",
"is_bot": false,
"headline": "feat(validator): 引入 validator/v10 库以扩展验证功能",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:27:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb9fd6a40e31800854a015ad06dadd2f1d984955",
"body": "内容:\n- 将 `major` 子目录下的核心模块迁移至 `common` 子目录,包括 `snowflake`、`validator`、`error`、`utility/context` 等模块。\n- 调整所有文件的导入路径,确保符合新模块组织结构,如 `major/error` 替换为 `common/error`。\n- 更新 `go.mod` 文件路径为 `github.com/bamboo-services/bamboo-base-go/common`,并增加必要的依赖声明。\n- 删除冗余依赖和更新部分方法的返回类型,如 `*xError.Error` 改为 `*error2.Error`,以匹配新模块路径。\n\n影响:\n- 优化了模块化组织,提升代码结构清晰度和维护性。\n- 下游项目需同步修改依赖路径以保持兼容性。",
"is_bot": false,
"headline": "refactor: 重构项目模块路径并统一迁移至 common 子模块",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:14:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a50178730da1b25114c7e1626c1f70eaf9e8961e",
"body": "内容:\n- 删除对 `xUtil.Parse().Bool()` 的依赖,替换为内部实现的 `parseBool(value)` 方法。\n- 实现 `parseBool` 函数以支持多种类型和字符串格式的布尔值解析。\n- 删除 `bamboo-base-go/utility` 模块相关依赖并调整 `go.mod` 和 `go.sum` 文件。\n\n影响:\n- 提高了环境变量布尔值解析的灵活性和适配性,减少外部依赖更便于维护。\n- 下游模块无需再引入 `bamboo-base-go/utility` 模块。",
"is_bot": false,
"headline": "refactor(env): 替换布尔值解析逻辑并删除外部依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:12:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ba229542a0c33f1095f5cbd627555f28dba8bcd",
"body": "内容:\n- 将 `log` 相关文件从 `major` 迁移至 `common` 子模块。\n- 新增 `common/go.mod` 文件,设置模块路径为 `github.com/bamboo-services/bamboo-base-go/common`。\n- 更新 `go` 版本为 1.25.0。\n\n影响:\n- 提升项目结构组织,支持更细粒度的模块化管理。\n- 受影响的下游项目需更新 `log` 模块的导入路径为 `common/log`。",
"is_bot": false,
"headline": "refactor(log): 重构 log 模块并迁移至 common 子模块",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T10:00:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0b131fe97f413abfd3d3b6b45baddbab2fbaa2b",
"body": "内容:\n- 移除 `utility` 模块,包括 `go.mod` 和 `go.sum` 文件。\n- 将 `utility` 下的文件迁移至 `major/utility` 目录。\n- 调整相关文件的导入路径以匹配新结构。\n\n影响:\n- 项目结构优化,所有涉及 `utility` 模块的下游项目需更新导入路径为 `major/utility`。\n- 提升模块化管理便捷性。",
"is_bot": false,
"headline": "refactor(utility): 删除 utility 模块并迁移至 major 子模块",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T09:51:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ddc6e9991ca31f59c01bbb5686ac8d97241c250",
"body": "内容:\n- 新增 LICENSE 文件,采用 Apache License 2.0 作为开源协议。\n- 将 Go 版本要求升级至 1.25.0。\n- 升级主要依赖:\n - Gin 至 v1.11.0\n - Redis 至 v9.18.0\n - GORM 至 v1.31.1\n - Protobuf 至 v1.36.11\n- 更新 plugins 模块及 go.sum 文件确保依赖完整性。\n\n影响:\n- 提高项目开源规范化和合规性。\n- 提升安全性、兼容性及获取新特性。",
"is_bot": false,
"headline": "feat(项目): 添加 Apache 2.0 开源许可证并升级主要依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T09:41:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c5304bda0d598b00f8c9682e858fd1f0db0d81a",
"body": "内容:\n- 为 `Security`、`Generate`、`Password`、`Timer`、`Str`、`Encryption` 等工具模块添加结构体封装,规范 API 调用方式。\n- 重命名和统一方法名称,如 `GenerateSecurityKey` 改为 `GenerateKey`,`NowUnix` 改为 `NowUnixMilli`,`IsPasswordValid` 改为 `IsValid` 等。\n- 提供链式调用支持,提高代码可读性与一致性。\n\n影响:\n- 项目中需更新工具类方法的调用方式。\n- 提高工具模块的扩展性与维护性。",
"is_bot": false,
"headline": "refactor(utility): 重构工具模块,统一结构体设计与方法命名",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T09:04:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fae7da50a82884b1613bd0f7f69f2ecf60e50ba4",
"body": "内容:\n- 将核心模块从 `major` 子目录迁移至更精确的命名空间 `defined` 和 `utility` 。\n- 调整所有导入路径以匹配模块的新结构组织。\n- 重新命名为清晰的包结构,如 `ctxutil` 拆分至独立 `context` 和 `package` 模块。\n- 更新 go.sum 文件以确保依赖完整性。\n\n影响:\n- 优化了项目的模块化结构,提升代码可读性和维护性。\n- 下游项目需同步更新依赖路径以进行兼容性适配。",
"is_bot": false,
"headline": "refactor: 重构项目结构并重命名模块路径",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T07:45:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fc223b6f51529b8b9b5a0554a69e0441ee8d4ec",
"body": "内容:\n- 重构项目目录,将所有核心模块迁移至 `major` 子目录。\n- 更新 `go.mod` 文件模块路径为 `github.com/bamboo-services/bamboo-base-go/major`。\n- 修改所有文件的导入路径,统一添加 `/major` 前缀。\n- 优化部分引入顺序,确保依赖规范性。\n\n影响:\n- 使项目遵循主版本更新的语义路径规则,以便于版本管理和回溯兼容。\n- 所有下游项目需更新依赖路径为 `/major`。",
"is_bot": false,
"headline": "refactor: 迁移及重构项目结构,更新导入路径为 major 版本",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-24T07:18:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ba628d69849407d24d4287b06fc3b7e910ddca4",
"body": null,
"is_bot": false,
"headline": "chore: 更新插件依赖版本为 v1.0.0-202602231507",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-23T07:07:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ef734e8b8b71e56099fe78ae266efec091de87f",
"body": "- 删除根目录 `go.work` 和 `go.work.sum` 文件,禁用 Go workspace 模式\n- 更新 `.gitignore` 忽略 go.work 相关文件,避免本地开发配置提交\n- 重构 `Makefile` release 流程,新增 `update-plugins` 目标自动更新插件依赖版本\n- 为 `plugins/cron` 添加独立 `go.sum` 文件,确保依赖完整性",
"is_bot": false,
"headline": "chore: 移除 go.work 工作区配置并优化发布流程",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-23T07:07:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2be0583e64a40321f642f2206a07e40487a720c1",
"body": "- 将 `cron` 和 `grpc` 目录移动至 `plugins/` 下\n- 新增 `go.work` 启用 Go workspace 模式\n- 为 `plugins/cron` 和 `plugins/grpc` 创建独立 go.mod\n- 更新导入路径,添加 `plugins` 前缀\n- 将 gRPC 相关依赖从根模块移至 `plugins/grpc`",
"is_bot": false,
"headline": "refactor: 将 cron 和 grpc 模块迁移至 plugins 子模块",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-23T05:56:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "886cea0693a8e83529b036b37581ff314a8b214f",
"body": "- 将 `test` 目录下的测试文件按功能迁移至 `validator`、`log`、`snowflake`、`utility`、`env` 模块\n- 更新测试文件包名为模块内部包名(如 `xVaild`, `xLog`, `xSnowflake`, `xUtil`, `xEnv`)\n- 移除对外部模块路径 `github.com/bamboo-services/bamboo-base-go/*` 的别名导入\n- 调整测试代码直接引用模块内部类型和函数",
"is_bot": false,
"headline": "test: 将单元测试迁移至对应模块目录并移除外部导入",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-23T04:27:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "898b78b491b26d8f7e5ed97d25019eb699031786",
"body": "- 添加按日期切割日志功能,避免日志文件堆积\n- 实现启动状态检查,自动处理大小超限或日期变更情况\n- 优化归档流程,支持将旧日志打包为 tar.gz 并清理原始文件\n- 为定时任务日志添加独立命名支持\n- 集成 cron 和 Job 逻辑,增强日志管理功能",
"is_bot": false,
"headline": "feat(logger): 支持跨天日志切割与旧日志归档",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-22T18:53:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "806afdb01ba83dbbc331c647d420da5ff03ca851",
"body": "内容:\n- 将 gRPC 元数据键命名风格从下划线 (`_`) 改为连字符 (`-`),以符合 HTTP/2 规范。\n- 升级 Go 版本要求从 1.24.6 至 1.25.0。\n- 升级 Gin 至 v1.11.0、Redis 至 v9.18.0、GORM 至 v1.31.1 及 protobuf 至 v1.36.11。\n\n影响: 提升 HTTP/2 兼容性并获取依赖的安全更新与新特性。",
"is_bot": false,
"headline": "refactor(常量): 规范化元数据键命名格式并升级主要依赖",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-22T17:15:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4607c35b1d12953e0da17ab2669b7666c1b8dfad",
"body": "内容:\n- 新增 `MetadataRequestUUID` 常量,定义请求唯一标识符的元数据键。\n- 重构 `utility/grpc.go`,添加 `Grpc()` 入口结构体并改进 `ExtractMetadata` 方法。\n- 重构 `Trace` 拦截器,使用 `ExtractMetadata` 替代 `resolveRequestUUID` 函数提取 UUID。\n- 移除冗余的 `resolveRequestUUID` 函数,统一元数据提取逻辑。\n\n影响: 增强了 gRPC 元数据提取的一致性和可维护性。",
"is_bot": false,
"headline": "refactor(grpc): 重构 Trace 拦截器并优化请求 UUID 提取逻辑",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-21T11:40:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0dd27bded4c2fe4bdbe939358dcd2dec80028370",
"body": "内容:\n- 重命名 `grpc/metadata` 为 `grpc/constant`,统一常量包命名。\n- 规范化 Metadata 常量命名,添加 `Metadata` 前缀。\n- 新增 `Trailer` 类型及 `TrailerRequestUUID` 常量,独立请求追踪标识。\n- 更新 `Trace` 拦截器,使用 gRPC 常量替代 HTTP Header 常量。\n- 修正 `ExtractMetadata` 函数注释及错误信息,准确描述 Trailer 类型。\n\n影响: 明确区分 gRPC Metadata 与 Trailer 的语义边界,解耦对 HTTP 模块的依赖。",
"is_bot": false,
"headline": "refactor(grpc): 重构元数据常量并新增 Trailer 支持",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-21T11:12:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ce3d1cbe7d5786b2180d910b38e9c1ad790ac77",
"body": "内容:\n- 新增 `grpc/middleware` 包,提供 `UseUnary`/`UseStream` 中间件注册及洋葱模型执行链。\n- 新增 `grpc/interceptor/unary` 包,实现 `InitContext` 和 `Middleware` 一元拦截器。\n- 新增 `grpc/interceptor/stream` 包,实现 `InitContext` 和 `Middleware` 流式拦截器及 `wrappedServerStream` 上下文包装。\n- 移除原 `grpc/interceptor` 中的 `InitContext`、`Recover`、`ResponseBuilder`、`Trace` 及相关测试文件。\n- 支持通过 `grpc.ServiceDesc` 精确绑定中间件到指定服务,实现更细粒度的请求处理控制。\n\n影响: 为 gRPC 服务提供更灵活的中间件注册与分发能力,同时保持与现有拦截器链的兼容性。",
"is_bot": false,
"headline": "refactor(grpc): 拆分一元与流式拦截器并实现服务级中间件分发机制",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-21T10:41:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67bce0905e267bac0cb74c9aa0a85eee01be4ffb",
"body": "内容:\n- 移除 `grpc/error` 和 `grpc/result` 中自定义错误结构及相关依赖。\n- 新增 `ResponseBuilder` 拦截器,统一处理响应构建、元数据注入及错误到 gRPC status 的转换。\n- 新增 `grpc/command.go`,补充通用的 gRPC 状态码映射逻辑。\n- 重构 `SuccessWith` 支持泛型,并通过反射自动注入 `BaseResponse`。\n- 简化 `InitContext` 拦截器,移除错误处理逻辑并调整至 `ResponseBuilder` 中。\n- 新增 `buf` 配置文件以管理 Protobuf 依赖。\n- 调整 `base.proto` 定义,移除 `Error` 字段并优化 `BaseResponse` 结构。",
"is_bot": false,
"headline": "refactor(grpc): 重构响应构建与错误处理机制",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-20T09:55:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55b4c17008ac4179508a96820fd17d454ad00705",
"body": "内容:\n- 移除 `Trace` 和 `Recover` 拦截器函数中的 `mainCtx` 参数。\n- 更新 `runner` 中的拦截器初始化调用,不再传入 `context`。\n- 同步更新相关单元测试。\n\n影响: 简化拦截器创建逻辑,消除未使用的上下文依赖。",
"is_bot": false,
"headline": "refactor(gRPC): 移除拦截器初始化中的上下文参数",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-19T15:15:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d722c1b3101ab20dc701bd3d74eaaa71ff61038a",
"body": "内容:\n- 精简项目简介,突出对 gRPC 的支持及节点化注册系统。\n- 更新特性列表,详细说明 `xMain.Runner`、gRPC 拦截器链及请求绑定工具。\n- 新增 HTTP + gRPC 一体化启动示例代码。\n- 补充请求绑定、分页模型及 Proto 代码生成的使用说明。\n- 完善环境变量配置表与项目依赖列表。",
"is_bot": false,
"headline": "docs: 重构 README 文档并补充 gRPC 与代码示例说明",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-19T12:23:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c72f54f7ae7b625c4ba95c45e1605cdcec848cb6",
"body": "内容:\n- 新增 `proto` 定义,实现统一的 `BaseResponse` 与 `GrpcError` 结构体。\n- 新增 `grpc/runner`,封装 gRPC 服务启动流程,支持优雅关闭、服务注册与拦截器链。\n- 新增 `grpc/interceptor`,集成链路追踪 (`Trace`) 与 Panic 捕获 (`Recover`) 机制。\n- 新增 `grpc/error`,定义业务错误转换逻辑并对接基础错误码。\n- 新增 `grpc/result`,封装成功与失败响应构建逻辑,支持泛型数据序列化为 Any 类型。\n- 新增 `grpc/interceptor` 单元测试,验证请求链路追踪头的传递行为。\n\n影响: 建立了标准化的 gRPC 微服务基础设施,实现了自动化的请求追踪、错误处理与响应封装。",
"is_bot": false,
"headline": "feat(grpc): 实现 gRPC 服务器核心组件",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-19T10:59:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ebfe302e5b62d103ea31eed28751e91190a5b6a",
"body": null,
"is_bot": false,
"headline": "feat(工具): 添加 URI 和 Header 请求参数绑定辅助函数",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-18T17:37:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a360a5f18c34fdeb5bf3ec02d48d494b7ce31930",
"body": null,
"is_bot": false,
"headline": "feat(工具): 添加查询参数绑定辅助函数",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-18T16:51:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fbe8e559cd83cd7c814396d15753f1a9beccb60",
"body": null,
"is_bot": false,
"headline": "fix(注册): 捕获逻辑节点执行时的错误并抛出异常",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-18T08:52:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e57ec836bb673d2e91f289d7c8cefad687fecb0e",
"body": "内容:\n- 新增 `models/page.go`,实现通用的分页请求、配置、响应结构体及参数规范化逻辑,支持泛型数据容器。\n- 新增 `main/runner.go`,封装 HTTP 服务器启动流程,支持信号监听、优雅关闭及后台协程管理。\n- 新增 `utility/binding.go`,提供泛型请求体数据绑定与校验工具。\n- 重构 `error` 与 `validator` 包,将上下文依赖从 `gin.Context` 迁移至标准 `context.Context`,实现框架解耦。\n\n影响: 建立了标准化的服务运行与分页处理机制,进一步降低了核心逻辑对 Web 框架的耦合度。",
"is_bot": false,
"headline": "feat(核心): 添加分页模型与 HTTP 运行时并解耦错误处理",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-17T05:36:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0199cf4ae10bdac1dc366c345178c7e900b362f6",
"body": "内容:\n- 增强 `log/command.go`,支持 `WithName` 追加多个命名空间,改进日志显示格式。\n- 修改 `log/handler.go`,使用颜色高亮显示额外命名空间,调整消息分隔符为 `>>`。\n- 重命名 `env/env.go` 中 `NoSqlDB` 为 `NoSqlDatabase`,统一环境变量命名风格。\n- 重构 `http/util.go`,默认令牌头从 `X-Access-Token` 迁移至标准 `Authorization`。\n- 移除 `http/header.go` 中已废弃的 `HeaderAccessToken` 常量。",
"is_bot": false,
"headline": "refactor(日志, 配置, HTTP): 优化日志命名格式并统一令牌与配置项命名",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-12T15:57:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4276ecbf38d649912b711ef65aed26c20caced31",
"body": "内容:\n- 新增 `utility/parse.go`,实现统一的泛型类型解析工具,支持整数、浮点、布尔及字符串的安全转换。\n- 扩展 `context/reg_node.go`,实现上下文节点的链式管理与有序存储。\n- 优化 `xCtxUtil`,新增泛型 `Get` 与 `MustGet` 方法,实现从聚合节点或标准上下文中获取组件。\n- 增强 `register/node`,支持组件初始化日志与 Gin 请求上下文自动注入。\n- 更新 `cache` 与 `http` 工具,统一使用标准 `context.Context` 以解耦框架依赖。\n\n影响: 提升数据解析的健壮性,增强上下文管理的扩展性与灵活性。",
"is_bot": false,
"headline": "feat(工具): 添加通用类型解析工具并增强上下文与注册系统",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-10T18:50:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d1f441888b99affb39f5875d8fb60e43b33b06c",
"body": "原因: 旧的初始化流程缺乏扩展性,业务逻辑与 Gin 框架强耦合。\n内容:\n- 新增 `node` 包实现节点化管理,支持依赖注入和顺序初始化。\n- 将所有工具函数 (`xCtxUtil`) 从 `gin.Context` 迁移至标准 `context.Context`,实现框架解耦。\n- 拆分注册逻辑,配置与日志初始化改为私有方法,雪花算法改为独立初始化节点。\n- 新增 `injectContext` 中间件,将初始化上下文自动注入 HTTP 请求。\n- 上下文访问新增 `Must` (panic) 和 `Error` (返回错误) 两种版本。\n影响: 业务逻辑不再依赖 Gin,支持灵活的自定义组件注册,系统架构更具扩展性。",
"is_bot": false,
"headline": "refactor(核心): 重构注册系统为节点化模式并解耦上下文",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-05T19:30:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f95e1eb683ae155369660b9db5fd0482378fa12",
"body": "内容:\n- 新增 `struct.go`,定义 `Cache` 结构体。\n- 封装 `redis.Client` 与预配置的 `TTL`,用于统一管理键值过期策略。\n- 将 `Cache` 接口重命名为 `KeyCache`,避免与结构体命名冲突。",
"is_bot": false,
"headline": "feat(cache): 封装 Redis 客户端与 TTL 配置",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-05T08:14:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "def0aec9630b4589f949cb363cded4e33d8d0777",
"body": "原因: 原有 `HashCache` 定义模糊,需明确区分基础键值对与复杂数据结构操作,并统一接口命名。\n\n内容:\n- 新增 `Cache` 接口,专门用于管理基于字符串的简单键值对数据。\n- 重构 `HashCache` 接口,明确其为二维键值对操作,新增 `GetAll`、`SetAll`、`Remove` 等方法。\n- 优化 `SetCache` 接口,新增 `IsMember`、`Count` 方法,并将删除方法重命名为 `Delete`。\n- 优化 `ListCache` 接口,拆分添加操作为 `Prepend` 和 `Append`,新增 `Index`、`Len`、`Pop`、`PopLast` 方法,并统一删除方法名为 `Delete`。\n\n影响: 接口职责更加清晰,方法命名更加规范,提升了缓存层的易用性和可维护性。",
"is_bot": false,
"headline": "refactor(cache): 重构缓存接口,区分基础与结构化数据操作",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-05T08:02:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2af4c58784f0dc883e3a6f81fff1b042fb1d31c",
"body": "原因: 规范缓存操作并统一数据库时间字段类型。\n内容:\n- 新增 `cache/interface.go`,定义 `HashCache`、`SetCache`、`ListCache` 三个泛型接口,规范缓存操作行为。\n- 优化 `BaseEntity` 和 `BaseEntityWithSoftDelete` 的时间字段 GORM 标签。\n- 将 `CreatedAt` 和 `UpdatedAt` 字段类型显式指定为 `timestamptz` (带时区的时间戳),并调整标签顺序。\n\n影响: 建立了缓存层的标准抽象,增强了数据库时间类型的兼容性与时区处理能力。",
"is_bot": false,
"headline": "feat(models): 定义缓存基础接口及优化实体时间字段类型",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-05T07:32:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7bcd622fe38888479271b3de2ed4a810d803a932",
"body": "原因: 添加 README.md 并更新 CLAUDE.md,补充详细的项目介绍、快速开始指南和模块说明,以便开发者快速上手和了解项目架构。\n\n内容:\n- 新增 README.md,包含项目简介、特性列表、安装步骤、配置说明及项目结构概览。\n- 更新 CLAUDE.md,细化核心组件介绍,补充环境变量管理、上下文管理、路由处理、HTTP 常量等模块说明。\n- 在文档中统一包别名规范,增强代码可读性和一致性。\n\n影响: 提升项目的可维护性和开发体验,使项目文档更加完善和易读。",
"is_bot": false,
"headline": "docs: 完善项目文档与结构说明",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-02-02T06:54:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1ea19186fae0ca406af5c2c14ab28d06eea4fab",
"body": "原因: 修正之前设置的未来时间基准,确保当前系统 ID 计算的准确性。\n内容:\n- 将 `epoch` 常量从 2026-01-01 回滚至 2023-07-25。\n- 同步更新相关代码注释。\n\n影响: 确保雪花 ID 生成的时间戳基于正确的纪元时间。",
"is_bot": false,
"headline": "fix(snowflake): 修正自定义纪元时间至 2023 年",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-21T16:35:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0aa7b530b71eb8360b9270935ed95c606abca826",
"body": "原因: 调整算法起始时间以适应新的规划周期。\n内容:\n- 将 epoch 常量从 2024-01-01 更新至 2026-01-01。\n- 更新相关注释说明。\n\n影响: 确保 ID 生成时间戳符合新的时间基准,延长可用时间范围。",
"is_bot": false,
"headline": "chore(snowflake): 调整自定义纪元时间至 2026 年",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-21T05:52:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f51c5a55bd66a7799bf4f45c39e9c31dec9ac775",
"body": "原因: 提供标准化的加密工具函数,改进中间件的错误处理逻辑以适应更多场景。\n内容:\n- 在 `utility/encryption.go` 中添加 MD5 和 SHA-256 哈希工具函数。\n - 支持字符串和字节切片的哈希计算。\n- 更新 `utility/security.go`,改进安全密钥生成及校验逻辑。\n - 新增 `GenerateLongSecurityKey` 方法生成 128 位密钥。\n - 更新 `VerifySecurityKey`,支持验证 64 位和 32 位密钥格式。\n- 删除 `utility/string.go` 中重复的 MD5 哈希逻辑,整合至新模块 `encryption.go`。\n- 优化 `middleware/response.go` 中未处理错误响应的逻辑。\n - 增加对部分 HTTP 状态码 (301, 302) 的特殊处理,仅在必要时调用 `ctx.Abort`。\n\n影响: 增强加密工具的复用性和标准化,简化中间件错误处理逻辑,提高可维护性。",
"is_bot": false,
"headline": "feat(utility, middleware): 添加加密工具及优化中间件错误处理逻辑",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-10T05:05:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e462e8c5483bb742d4878cd67ba30f7b8394a326",
"body": "原因: 更好地支持命名空间,提升上下文管理的规范性和一致性。\n内容:\n- 修改请求唯一 ID 头设置逻辑,调整为使用 `xHttp.HeaderRequestUUID`。\n- 保持请求上下文中 `RequestID` 和 `开始时间` 的记录逻辑不变。\n\n影响: 增强代码可读性,避免硬编码命名冲突问题并提升维护性。",
"is_bot": false,
"headline": "feat(helper): 优化上下文管理逻辑,调整请求 ID 头设置方式",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-04T14:16:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e9d76a8ef4f90169ea4d00527496d7aa57dc7d6",
"body": "原因: 分离验证器逻辑以提升可维护性,增强辅助工具和上下文管理的一致性。\n内容:\n- 重构验证器模块,将通用验证逻辑分解为独立文件。\n - 添加整数、字符串、浮点数枚举验证器,支持自定义类型枚举验证。\n - 新增 URL、UUID、字母数字及正则验证器,简化验证使用及扩展。\n- 优化请求体缓存逻辑:\n - 非调试模式下通过 `shouldCacheBody` 判断并支持请求体的缓存。\n - `http_logger` 补充缓存辅助方法,供验证器错误提取使用。\n- 引入辅助工具 `security.go`,支持安全密钥生成与校验。\n- 修改 `panic_recovery` 和 `result`,整合上下文及错误信息处理逻辑,优化响应结构字段名一致性。\n\n影响: 提升验证模块的扩展和可维护性能力,优化 HTTP 请求处理的一致性,并增强安全及错误处理支持。",
"is_bot": false,
"headline": "feat(validator, helper, utility): 重构验证逻辑并优化辅助工具",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-04T06:56:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d91a0f690fb4fc999bde807da33ba71d1daf786b",
"body": "原因: 提高实体模型字段规范性、增强雪花 ID 处理灵活性,并改进日志记录的一致性和可读性。\n\n内容:\n- 为 `BaseEntity` 和 `BaseEntityWithSoftDelete` 添加 JSON 标签,隐私字段设为隐藏以增强 API 输出的安全性。\n- 重构 `SnowflakeID` 的方法签名,使用值接收者代替指针,提升编码一致性并适配更多场景。\n- 新增 `MarshalBinary` 和 `UnmarshalBinary` 方法,支持雪花 ID 的二进制序列化与反序列化。\n- 优化 `GetEnvDuration` 方法,完善时间单位处理,支持返回标准化的 `time.Duration`。\n- 调整错误日志等级,将部分 `Error` 改为 `Warn`,优化上下文日志内容提取逻辑。\n- 增强日志处理,更新多处日志注释,补充跨模块异常处理说明。\n\n影响: 提升实体模型和雪花 ID 应用的规范性,增强日志记录的灵活性与一致性,同时完善上下文和模块间的错误处理逻辑。",
"is_bot": false,
"headline": "feat(models, snowflake, log): 优化实体模型和雪花 ID 处理,完善日志记录逻辑",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-02T15:27:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a89d8502c732a04c1c5b76de8aa0995f234ed9b6",
"body": "原因: 增强工具函数的功能性并优化日志记录和环境变量解析逻辑。\n内容:\n- 在 `utility/generate.go` 增加随机字符串生成和 MD5 哈希生成工具函数。\n- 向 `env/utility.go` 添加 `GetEnvDuration` 方法,便捷地解析时间类型环境变量。\n- 更新日志模块,改进错误日志记录方式,替换 `slog` 为 `xLog`,提升日志结构化水平。\n- 优化中间件错误响应逻辑,确保错误日志清晰并统一调用 `ctx.Abort`。\n- 调整日志提取方法,将 `extractTrace` 重命名为 `extractContextUUID`,提升语义清晰度。\n影响: 提升工具函数的实用性,改善日志和环境变量管理一致性,增强中间件错误处理的易维护性。",
"is_bot": false,
"headline": "feat(log, utility, env): 添加实用工具函数及优化日志、环境变量处理",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-02T13:34:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e36990205327fcf49994cabd629db7e27bea77a",
"body": "原因: 提升验证器的用户体验,为错误信息提供更直观的中文翻译,同时优化日志记录的统一性和中间件的错误恢复逻辑。\n内容:\n- 新增 `translator.go`,支持 validator 的中文翻译功能,包含默认翻译和自定义规则翻译。\n- 添加 `TranslateError` 方法,简化验证错误的翻译处理流程。\n- 更新日志模块,替换 `slog` 调用为 `xLog`,改进 `panic_recovery.go` 的日志输出,增强错误恢复日志的清晰度。\n- 优化 `response.go` 的错误处理,集成翻译器以直接生成用户友好的错误消息。\n- 在 `register_gin.go` 中注册翻译器,确保验证器翻译功能的全局可用性。\n- 修改 `messages.go`,扩展错误消息模板以支持 `oneof` 等新规则。\n- 补充环境和依赖更新,升级 validator 和相关依赖版本以支持翻译功能。\n\n影响: 增强验证器的可用性和用户体验,改善系统日志的一致性,并优化错误处理的直观性。",
"is_bot": false,
"headline": "feat(validator, log, middleware): 添加中文翻译支持及优化日志与错误处理逻辑",
"author_name": "XiaoLFeng",
"author_login": "xiaolfeng",
"committed_at": "2026-01-02T10:04:12Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 9,
"commits_last_year": 123,
"latest_release_at": "2026-07-24T18:09:52Z",
"latest_release_tag": "v1.1.2",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 23,
"days_since_latest_release": 0,
"mean_days_between_releases": 0.7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/bamboo-services/bamboo-base-go",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/bamboo-services/bamboo-base-go",
"is_deprecated": false,
"latest_version": "v1.1.2",
"repository_url": "https://github.com/bamboo-services/bamboo-base-go",
"versions_count": 29,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T18:08:46Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "github.com/bamboo-services/bamboo-base-go/major",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/bamboo-services/bamboo-base-go/major",
"is_deprecated": false,
"latest_version": "v1.1.2",
"repository_url": "https://github.com/bamboo-services/bamboo-base-go",
"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-24T18:10:13Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "github.com/bamboo-services/bamboo-base-go/common",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/bamboo-services/bamboo-base-go/common",
"is_deprecated": false,
"latest_version": "v1.1.2",
"repository_url": "https://github.com/bamboo-services/bamboo-base-go",
"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-24T18:10:13Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
},
{
"name": "github.com/bamboo-services/bamboo-base-go/defined",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/bamboo-services/bamboo-base-go/defined",
"is_deprecated": false,
"latest_version": "v1.1.2",
"repository_url": "https://github.com/bamboo-services/bamboo-base-go",
"versions_count": 24,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T18:10:13Z",
"latest_version_yanked": null,
"days_since_latest_publish": 0
}
]
},
"popularity": {
"forks": 1,
"stars": 9,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2026-02-25",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_forks": 1
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [
"plugins/grpc/proto/base.proto"
],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"common/go.mod",
"defined/go.mod",
"go.mod",
"major/go.mod",
"plugins/async/go.mod",
"plugins/cron/go.mod",
"plugins/email/go.mod",
"plugins/grpc/go.mod"
],
"largest_source_bytes": 17243,
"source_files_sampled": 172,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"common/AGENTS.md",
"major/AGENTS.md",
"major/cache/AGENTS.md",
"major/option/AGENTS.md",
"major/register/AGENTS.md",
"major/register/init/AGENTS.md",
"plugins/AGENTS.md",
"plugins/grpc/AGENTS.md"
],
"agent_instruction_max_bytes": 19187
},
"dependencies": {
"manifests": [
"common/go.mod",
"defined/go.mod",
"go.mod",
"major/go.mod"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "v0.54.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5932"
],
"fixed_version": null,
"advisory_count": 1,
"oldest_advisory_days": 16
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"unknown": 1
},
"advisory_count": 1,
"affected_count": 1,
"assessed_count": 75,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/bamboo-services/bamboo-base-go/defined",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.2"
},
{
"name": "github.com/go-playground/locales",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v0.14.1"
},
{
"name": "github.com/go-playground/universal-translator",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v0.18.1"
},
{
"name": "github.com/go-playground/validator/v10",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v10.30.3"
},
{
"name": "github.com/google/uuid",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "golang.org/x/crypto",
"manifest": "common/go.mod",
"ecosystem": "go",
"version_constraint": "v0.54.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "defined/go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/bamboo-services/bamboo-base-go/common",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.2"
},
{
"name": "github.com/bamboo-services/bamboo-base-go/defined",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.2"
},
{
"name": "github.com/bamboo-services/bamboo-base-go/plugins/email",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.2"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/go-playground/validator/v10",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v10.30.3"
},
{
"name": "github.com/google/uuid",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/joho/godotenv",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.1"
},
{
"name": "github.com/libtnb/sqlite",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.0"
},
{
"name": "github.com/oracle-samples/gorm-oracle",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.3"
},
{
"name": "github.com/redis/go-redis/v9",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v9.21.0"
},
{
"name": "gorm.io/driver/mysql",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "gorm.io/driver/postgres",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "gorm.io/driver/sqlserver",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.3"
},
{
"name": "gorm.io/gorm",
"manifest": "major/go.mod",
"ecosystem": "go",
"version_constraint": "v1.31.2"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/bamboo-services/bamboo-base-go/common",
"direct": true,
"version": "v1.1.2",
"ecosystem": "go"
},
{
"name": "github.com/bamboo-services/bamboo-base-go/defined",
"direct": true,
"version": "v1.1.2",
"ecosystem": "go"
},
{
"name": "github.com/bamboo-services/bamboo-base-go/plugins/email",
"direct": true,
"version": "v1.1.2",
"ecosystem": "go"
},
{
"name": "github.com/gin-gonic/gin",
"direct": true,
"version": "v1.12.0",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/locales",
"direct": true,
"version": "v0.14.1",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/universal-translator",
"direct": true,
"version": "v0.18.1",
"ecosystem": "go"
},
{
"name": "github.com/go-playground/validator/v10",
"direct": true,
"version": "v10.30.3",
"ecosystem": "go"
},
{
"name": "github.com/google/uuid",
"direct": true,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/joho/godotenv",
"direct": true,
"version": "v1.5.1",
"ecosystem": "go"
},
{
"name": "github.com/libtnb/sqlite",
"direct": true,
"version": "v1.2.0",
"ecosystem": "go"
},
{
"name": "github.com/oracle-samples/gorm-oracle",
"direct": true,
"version": "v1.1.3",
"ecosystem": "go"
},
{
"name": "github.com/redis/go-redis/v9",
"direct": true,
"version": "v9.21.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "v0.54.0",
"ecosystem": "go"
},
{
"name": "gorm.io/driver/mysql",
"direct": true,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "gorm.io/driver/postgres",
"direct": true,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "gorm.io/driver/sqlserver",
"direct": true,
"version": "v1.6.3",
"ecosystem": "go"
},
{
"name": "gorm.io/gorm",
"direct": true,
"version": "v1.31.2",
"ecosystem": "go"
},
{
"name": "filippo.io/edwards25519",
"direct": false,
"version": "v1.2.0",
"ecosystem": "go"
},
{
"name": "github.com/bytedance/gopkg",
"direct": false,
"version": "v0.1.4",
"ecosystem": "go"
},
{
"name": "github.com/bytedance/sonic",
"direct": false,
"version": "v1.15.2",
"ecosystem": "go"
},
{
"name": "github.com/bytedance/sonic/loader",
"direct": false,
"version": "v0.5.1",
"ecosystem": "go"
},
{
"name": "github.com/cespare/xxhash/v2",
"direct": false,
"version": "v2.3.0",
"ecosystem": "go"
},
{
"name": "github.com/cloudwego/base64x",
"direct": false,
"version": "v0.1.7",
"ecosystem": "go"
},
{
"name": "github.com/dustin/go-humanize",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/gabriel-vasile/mimetype",
"direct": false,
"version": "v1.4.13",
"ecosystem": "go"
},
{
"name": "github.com/gin-contrib/sse",
"direct": false,
"version": "v1.1.1",
"ecosystem": "go"
},
{
"name": "github.com/go-logfmt/logfmt",
"direct": false,
"version": "v0.6.1",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/logr",
"direct": false,
"version": "v1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/go-sql-driver/mysql",
"direct": false,
"version": "v1.10.0",
"ecosystem": "go"
},
{
"name": "github.com/goccy/go-json",
"direct": false,
"version": "v0.10.6",
"ecosystem": "go"
},
{
"name": "github.com/goccy/go-yaml",
"direct": false,
"version": "v1.19.2",
"ecosystem": "go"
},
{
"name": "github.com/godror/godror",
"direct": false,
"version": "v0.51.0",
"ecosystem": "go"
},
{
"name": "github.com/godror/knownpb",
"direct": false,
"version": "v0.3.0",
"ecosystem": "go"
},
{
"name": "github.com/golang-sql/civil",
"direct": false,
"version": "v0.0.0-20220223132316-b832511892a9",
"ecosystem": "go"
},
{
"name": "github.com/golang-sql/sqlexp",
"direct": false,
"version": "v0.1.0",
"ecosystem": "go"
},
{
"name": "github.com/jackc/pgpassfile",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/jackc/pgservicefile",
"direct": false,
"version": "v0.0.0-20240606120523-5a60cdf6a761",
"ecosystem": "go"
},
{
"name": "github.com/jackc/pgx/v5",
"direct": false,
"version": "v5.10.0",
"ecosystem": "go"
},
{
"name": "github.com/jackc/puddle/v2",
"direct": false,
"version": "v2.2.2",
"ecosystem": "go"
},
{
"name": "github.com/jinzhu/inflection",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/jinzhu/now",
"direct": false,
"version": "v1.1.5",
"ecosystem": "go"
},
{
"name": "github.com/json-iterator/go",
"direct": false,
"version": "v1.1.12",
"ecosystem": "go"
},
{
"name": "github.com/klauspost/cpuid/v2",
"direct": false,
"version": "v2.4.0",
"ecosystem": "go"
},
{
"name": "github.com/leodido/go-urn",
"direct": false,
"version": "v1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-isatty",
"direct": false,
"version": "v0.0.23",
"ecosystem": "go"
},
{
"name": "github.com/microsoft/go-mssqldb",
"direct": false,
"version": "v1.8.2",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/concurrent",
"direct": false,
"version": "v0.0.0-20180306012644-bacd9c7ef1dd",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/reflect2",
"direct": false,
"version": "v1.0.2",
"ecosystem": "go"
},
{
"name": "github.com/ncruces/go-strftime",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/pelletier/go-toml/v2",
"direct": false,
"version": "v2.4.3",
"ecosystem": "go"
},
{
"name": "github.com/quic-go/qpack",
"direct": false,
"version": "v0.6.0",
"ecosystem": "go"
},
{
"name": "github.com/quic-go/quic-go",
"direct": false,
"version": "v0.60.0",
"ecosystem": "go"
},
{
"name": "github.com/remyoudompheng/bigfft",
"direct": false,
"version": "v0.0.0-20230129092748-24d4a6f8daec",
"ecosystem": "go"
},
{
"name": "github.com/robfig/cron/v3",
"direct": false,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "github.com/stretchr/testify",
"direct": false,
"version": "v1.11.1",
"ecosystem": "go"
},
{
"name": "github.com/twitchyliquid64/golang-asm",
"direct": false,
"version": "v0.15.1",
"ecosystem": "go"
},
{
"name": "github.com/ugorji/go/codec",
"direct": false,
"version": "v1.3.1",
"ecosystem": "go"
},
{
"name": "github.com/victoriametrics/easyproto",
"direct": false,
"version": "v1.1.3",
"ecosystem": "go"
},
{
"name": "github.com/wneessen/go-mail",
"direct": false,
"version": "v0.8.1",
"ecosystem": "go"
},
{
"name": "go.mongodb.org/mongo-driver/v2",
"direct": false,
"version": "v2.8.0",
"ecosystem": "go"
},
{
"name": "go.uber.org/atomic",
"direct": false,
"version": "v1.11.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/arch",
"direct": false,
"version": "v0.29.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/exp",
"direct": false,
"version": "v0.0.0-20260112195511-716be5621a96",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.57.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sync",
"direct": false,
"version": "v0.22.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.47.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "v0.40.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/rpc",
"direct": false,
"version": "v0.0.0-20260715232425-e75dac1f907d",
"ecosystem": "go"
},
{
"name": "google.golang.org/grpc",
"direct": false,
"version": "v1.82.1",
"ecosystem": "go"
},
{
"name": "google.golang.org/protobuf",
"direct": false,
"version": "v1.36.11",
"ecosystem": "go"
},
{
"name": "gorm.io/datatypes",
"direct": false,
"version": "v1.2.7",
"ecosystem": "go"
},
{
"name": "modernc.org/libc",
"direct": false,
"version": "v1.74.2",
"ecosystem": "go"
},
{
"name": "modernc.org/mathutil",
"direct": false,
"version": "v1.7.1",
"ecosystem": "go"
},
{
"name": "modernc.org/memory",
"direct": false,
"version": "v1.11.0",
"ecosystem": "go"
},
{
"name": "modernc.org/sqlite",
"direct": false,
"version": "v1.54.0",
"ecosystem": "go"
}
],
"collected": true,
"truncated": false,
"total_count": 75,
"direct_count": 17,
"indirect_count": 58
}
},
"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": 1,
"top_contributors": [
{
"type": "User",
"login": "xiaolfeng",
"commits": 118,
"avatar_url": "https://avatars.githubusercontent.com/u/49605873?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"release.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": 10,
"reason": "project has 11 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 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": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "b56d54f236df3293ff11f6714928dc328adb82d1",
"ran_at": "2026-07-24T20:44:53Z",
"aggregate_score": 4.1,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-24T18:10:54Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/bamboo-services/bamboo-base-go",
"host": "github.com",
"name": "bamboo-base-go",
"owner": "bamboo-services"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 51,
"vitality": 88,
"community": 31,
"governance": 38,
"engineering": 62
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 88,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 80,
"inputs": {
"commits_last_year": 123,
"human_commit_share": 0.91,
"days_since_last_push": 0,
"active_weeks_last_year": 23
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "23/52 weeks with commits",
"points": 15.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 23
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "123 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 123
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 9,
"latest_release_tag": "v1.1.2",
"releases_from_tags": false,
"days_since_latest_release": 0,
"mean_days_between_releases": 0.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "9 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 9
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 31,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"forks": 1,
"stars": 9,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "9 stars",
"points": 14.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 9
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 1
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"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": 38,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 11 contributing companies or organizations",
"points": 10,
"status": "met",
"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": null,
"notes": [],
"value": 45,
"inputs": {
"followers": 1,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "bamboo-services",
"public_repos": 13,
"account_age_days": 812
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1 followers of bamboo-services",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "bamboo-services"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "13 public repos, account ~2 yr old",
"points": 12.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 13
}
},
{
"code": "account_age_years",
"params": {
"years": 2
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/bamboo-services/bamboo-base-go",
"github.com/bamboo-services/bamboo-base-go/major",
"github.com/bamboo-services/bamboo-base-go/common",
"github.com/bamboo-services/bamboo-base-go/defined"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 0
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "4 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 4,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 0 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 0
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "32 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 32
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 62,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"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": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "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": 65,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://doc.x-lf.com/docs/bamboo-base-go",
"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": "https://doc.x-lf.com/docs/bamboo-base-go",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": 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": "moderate",
"name": "Security",
"value": 51,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 41,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 4.1
},
"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 11 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "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": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 75 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 75
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 89,
"inputs": {
"source": "osv",
"advisories": 1,
"affected_packages": 1,
"assessed_packages": 75,
"unassessed_packages": 0,
"affected_by_severity": "unknown 1",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: golang.org/x/crypto v0.54.0 (unknown)",
"points": 26.6,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "golang.org/x/crypto v0.54.0 (unknown)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"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": 75,
"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": 10
},
"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": "good",
"name": "AI Readiness",
"value": 72,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"common/AGENTS.md",
"major/AGENTS.md",
"major/cache/AGENTS.md",
"major/option/AGENTS.md",
"major/register/AGENTS.md",
"major/register/init/AGENTS.md",
"plugins/AGENTS.md",
"plugins/grpc/AGENTS.md"
],
"agent_instruction_max_bytes": 19187
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md, common/AGENTS.md, major/AGENTS.md, major/cache/AGENTS.md, major/option/AGENTS.md, major/register/AGENTS.md, major/register/init/AGENTS.md, plugins/AGENTS.md, plugins/grpc/AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md, common/AGENTS.md, major/AGENTS.md, major/cache/AGENTS.md, major/option/AGENTS.md, major/register/AGENTS.md, major/register/init/AGENTS.md, plugins/AGENTS.md, plugins/grpc/AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "91 of 91 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 91,
"sampled": 91
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.01,
"toolchain_manifests": [
"common/go.mod",
"defined/go.mod",
"go.mod",
"major/go.mod",
"plugins/async/go.mod",
"plugins/cron/go.mod",
"plugins/email/go.mod",
"plugins/grpc/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"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": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "1 of the last 100 commits agent-authored or agent-credited",
"points": 2,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 1,
"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": "Go",
"largest_source_bytes": 17243,
"source_files_sampled": 172,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/172 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 172,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [],
"has_mcp_signal": false,
"api_schema_files": [
"plugins/grpc/proto/base.proto"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "plugins/grpc/proto/base.proto",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "plugins/grpc/proto/base.proto"
}
}
],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-24T20:44:58.892768Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/bamboo-services/bamboo-base-go.svg",
"full_name": "bamboo-services/bamboo-base-go",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}