杭州明婳科技
|
5dbbce34f5
|
docs: 同步 GUIDE/README 至 v1.4.0
补 v1.4.0 发布时漏更的文档(代码与契约已改,文档未跟上):
- GUIDE 13 定时任务:新增 WithCronTask App 集成模式 + pre-Init cron.AddTask 迁移警示。
- GUIDE 14 链路追踪:新增 WithTrace 生命周期集成 + OTel 进程全局多 App 注意。
- GUIDE 8.4 限流:新增 app.RateLimitRegistry() 多 App 计数隔离 + WithRedisClient。
- GUIDE 5.1 缓存 / 10.3 存储:注明 App 自动初始化(per-App redis 注入 / Close 收口)。
- README:新增 v1.4.0 更新日志条目;cron/缓存/限流段补 v1.4.0 说明。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.4.0
|
2026-07-13 16:35:47 +08:00 |
|
杭州明婳科技
|
96ce883d41
|
feat: cron/storage/cache/ratelimit 实例化 + trace 纳入 App 生命周期 (v1.4.0)
完成 instance+facade 一致性收尾,闭合三个原始问题:
- cron/storage/cache/ratelimit 实例化(App 持 per-App 实例 + SwapDefault* 提升全局默认
+ 包级 facade 代理,照 database.Manager/jwt.Manager 模式),消除单进程多 App 互相污染。
- trace 纳入 App 生命周期(WithTrace + doInit trace.Init + doShutdown trace.Close +
config.TraceConfig + 自动装 Middleware)。不做实例隔离(OTel 进程全局)。
- 删除 WithoutWire 空函数技术债。
附带修复:
- cache/ratelimit redis 注入(jwt 模型:注入优先、database.GetRedis() 兜底)。
- commitReplacedResources 不再关闭 previousDB/previousRedis/loggerSnapshot
(多 App 下 previous 可能是另一 App 的活跃资源,关闭致 redis: client is closed)。
- app.RateLimitRegistry() + App-bound 限流中间件(多 App per-App 计数隔离)。
- StorageManager.Close() 闭合 Init/Close 对称性(io.Closer 断言,预留扩展点),
closeResources 与 rollbackReplacedResources 对称收口。
新增公开 API:WithTrace / WithCronTask;app.Scheduler()/Cache()/RedisClient()/
RateLimitRegistry();cron/storage/cache/middleware 各 SwapDefault*;config.TraceConfig;
middleware.RateLimitRegistry + App-bound 方法;middleware.WithRedisClient;
storage.StorageManager.Close。
Breaking:删 WithoutWire;cron.AddTask pre-Init 注册失效(改用 WithCronTask);
middleware.StopRateLimiters 语义收窄;commitReplacedResources 不再关 previous;
cache.NewRedisCacheWithRedis / CacheManager.InitWithRedis 等签名变更。
详见 CHANGELOG [1.4.0] 升级说明。
验证:go build + go vet + go test -race ./... 全绿(-buildvcs=false)。
独立对抗性复审无 CRITICAL/HIGH。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-13 16:25:37 +08:00 |
|
杭州明婳科技
|
399950a9f6
|
chore(release): v1.3.0
版本内容:
- 同义可失败 API 收敛(cache/jwt/storage/ratelimit breaking change)
- 注释/文档一致性修复(A/B/C 三档 23 项)
- 前序评审收口(M13 cron / M1 App 生命周期 / M3 logger / config 模块 / database H-db-1)
按仓库 1.x 惯例(1.1.0/1.1.1/1.2.0 均含 Breaking 未升 MAJOR),本次升 MINOR 至 1.3.0。
项目处于初级阶段,无下游用户,breaking change 在 CHANGELOG 显式声明。
验证:go build / go vet / go test -race -count=1 ./... 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.3.0
|
2026-07-12 22:40:33 +08:00 |
|
杭州明婳科技
|
df78706dbb
|
fix(jwt): 修正合并后 BlacklistFailOpen 注释与新默认语义的矛盾
合并 docs 分支(B4 给 BlacklistFailOpen/Closed 加注释,基于当时 ParseToken 默认 fail-open)
与 refactor 分支(ParseToken 默认改为 fail-closed)后,BlacklistFailOpen 注释仍写
"(默认;兼容未启用 Redis 的存量部署)",与 ParseToken 新默认 BlacklistFailClosed 矛盾。
修正:BlacklistFailOpen 标注为"非默认",BlacklistFailClosed 标注为"默认(ParseToken 即用此策略)"。
git 自动合并因两分支改在文件不同区域未报冲突,但语义冲突;经全文件核查仅此一处。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 22:26:57 +08:00 |
|
杭州明婳科技
|
905cf7db4f
|
Merge branch 'refactor/consolidate-failable-apis'
|
2026-07-12 22:23:41 +08:00 |
|
杭州明婳科技
|
9e11f8f007
|
refactor: 同义可失败 API 收敛(cache/jwt/storage/ratelimit breaking change)
按"同一能力只保留一个主入口、框架不替上层吞错、安全路径默认 fail-closed"原则,
收敛历史双轨 API。自定义 CacheService/Storage 实现需同步更新签名(编译失败即迁移信号)。
cache:
- CacheService.Get/Exists 改为 (bool, error):命中 (true,nil)、未命中 (false,nil)、
Redis 未就绪/命令错误/反序列化失败返回 (false,err)
- 删除 cache.GetE/cache.ExistsE/CacheGetter/CacheExistChecker/redisCache.GetE/redisCache.ExistsE
(不保留 deprecated wrapper)
- 新增包级 cache.Get/cache.Exists(带 error);GetWithPrefix 改为 (bool,error)
jwt:
- TokenBlacklist.IsBlacklisted 改为 (bool, error),删除 IsBlacklistedE
- IsTokenRevoked 改为 (bool, error)
- ParseToken 默认从 fail-open 改为 fail-closed:黑名单后端不可检查时返回
ErrBlacklistUnavailable 拒绝该 Token(无 Redis 部署不再支持可靠撤销)
- 删除 ParseTokenFailClosed(主 API 已 fail-closed)
- 保留 ParseTokenWithBlacklistPolicy + BlacklistPolicy/BlacklistFailOpen/BlacklistFailClosed
供显式 fail-open(仅无 Redis 或低安全场景)
storage:
- Storage.Exists 改为 (bool, error):存在 (true,nil)、不存在 (false,nil)、
未初始化/路径非法/穿越/后端错误返回 (false,err)
- LocalStorage.Exists 区分 os.IsNotExist 与其他 Stat 错误
- OSSStorage.Exists 区分 OSS 404/NoSuchKey 与鉴权/网络错误
- 包级 storage.Exists 同步签名,未初始化返回 ErrStorageNotInitialized
- 新增 ErrReadTooLarge:Local/OSSStorage.Get 读取超 maxReadBytes 上限原误用
ErrInvalidPath(语义不贴切),改为 ErrReadTooLarge
ratelimit:
- NewRedisRateLimiter 加 opts ...RedisRateLimiterOption,新增 WithFailClosed(bool)
替代原 NewRedisRateLimiterFailClosed
- RedisRateLimit/CustomRedisRateLimit/RedisRateLimitWithIdentifier 同步加 opts 参数
- 删除 NewRedisRateLimiterFailClosed/RedisRateLimitFailClosed/CustomRedisRateLimitFailClosed
- UploadRedisRateLimit 由 fail-open 改为 fail-closed(资源敏感操作,Redis 故障时拒绝)
测试与文档:
- cache_m10_internal_test.go 重写 4 个 M10 测试为 Get/Exists 契约测试,新增 mock 编译覆盖
- jwt_test.go 改 4 处;jwt_c9c_internal_test.go 改 IsTokenRevoked 2-value
- examples/full/main_test.go 加 miniredis 注入(ParseToken fail-closed 后认证需 Redis)
- middleware_test.go 改 5 处 FailClosed 调用为 WithFailClosed(true);auth_test.go 加 Redis
- storage 测试改 6 处 Exists/Get 断言为新签名/错误类型
- README/GUIDE 同步示例为新签名;CHANGELOG 新增 Breaking 升级说明与迁移示例
验证:go build / go vet / go test -race -count=1 ./... 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 22:22:10 +08:00 |
|
杭州明婳科技
|
ffcb1a77b9
|
docs: 注释/文档一致性审查修复(A/B/C 三档共 23 项)
对 60 个非测试源文件做文档/注释/代码一致性审查,修复 23 项。全部为注释/文档
改动 + 1 处死代码删除,无运行逻辑变更,无 breaking change。
A 档·实质错误(10 项,会误导下游):
- app.go: closeResources 三连契约注释统一修正--failAfterInit 走
rollbackReplacedResources 不走 closeResources,closeResources 仅供 doShutdown 复用
- database/manager.go: RandomPicker 注释从过时的 rand.Intn/issue 54899 改为 crypto/rand
- model/base.go: datetime(0) 与“亚秒精度”矛盾,改为 datetime(6)
- cache/keybuilder.go: 三处示例下划线分隔符改为冒号(与默认分隔符 : 一致)
- repository/repository.go: Delete 接口注释从绝对“软删除”改为条件性;
UpdateFields 示例移除把字段名当 WHERE 条件的误用写法
- middleware/csrf.go: CSRFToken 注释从“用于 API 模式”改为 Cookie/双重提交模式说明
- examples/full/main.go: POST /users 补上“需 Authorization”标注;删除 _ = app 死代码
- utils/random.go: RandInt/RandInt64 补 min==max 边界说明(对齐 RandIntSecure 写法)
B 档·导出符号注释缺失/不完整(6 项):
- ws/ws.go: 5 个 Type* 常量、4 个 Err* 变量补注释
- console/console.go: 5 个 Level 常量补注释
- jwt/jwt.go: 2 个 Blacklist 常量补注释
- router/router.go: 包级 GroupWithMiddlewareGroup 补注释
- middleware/ratelimit.go: NewRateLimiter 补 panic 条件与 Stop 生命周期说明
C 档·描述不完整(7 项):
- utils/strings.go Substr、convert.go CalcPageCount/CalcOffset、datetime.go
StartOfMonth/EndOfMonth、file.go CopyFile、validator.go IsChinese、crypto.go HashFile
补全边界/默认行为/返回值语义
- response/error.go: WithDetail 补 nil 接收者行为说明
验证:go build / go vet / go test -race 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-12 18:47:12 +08:00 |
|
杭州明婳科技
|
6730f12cd6
|
test(database): H-db-1 补齐行为闭环 + 修复 gorm.Open automatic ping
上一提交(72ea01d)修了 4 条 pingWithTimeout 路径,但行为验证有缺口:
启动 ping 路径仅代码审查、Redis HealthCheck 仅推断、无 App 级端到端。
补齐过程发现并修复了 H-db-1 的真正根因之一:
gorm.Open 的 automatic ping(gorm.go:204,!DisableAutomaticPing 且 ConnPool
为 *sql.DB 时调 pinger.Ping() 无超时)在 pingWithTimeout 之前就无限阻塞。
挂起 DB 下 initDB 的 gorm.Open 永久 hang,根本到不了 pingWithTimeout。
修复:initDB/InitDBWithReplicas 的 gormConfig 加 DisableAutomaticPing: true,
框架用 pingWithTimeout(3s)自管启动 ping。
行为闭环测试(3 缺口补齐):
- manager_hdb1_internal_test.go:新增 TestInitDBBoundsHungDB_Hdb1 /
TestInitDBWithReplicasBoundsHungDB_Hdb1(hungDialector 注入挂起 *sql.DB,
回归启动 master/replica ping 路径有界)。原 3 用例保留。
- redis_hdb1_internal_test.go:startHungRedisListener(accept 不响应模拟挂起
Redis)+ TestRedisHealthCheckBoundsHungRedis_Hdb1,行为验证 HealthCheck
受 client ReadTimeout 3s 约束(不再是推断)。提取 newRedisClient helper
供 Init 与测试共用。
- app_hdb1_test.go:TestAppInitHungDBBounded_Hdb1 App 级端到端--App.Init
挂起 DB 有界失败(~30s 5 次重试,非无限 hang)+ Shutdown 正常退出。
验证:database -race -short green(24.7s,6 个 H-db-1 用例)、root 包 App
-race green(33.5s,含端到端)、build/vet 干净。CHANGELOG 更新。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-10 00:52:17 +08:00 |
|
杭州明婳科技
|
5eb3879a85
|
fix(database): H-db-1 ping 路径统一经 pingWithTimeout 3s 约束(M11 完整覆盖)
module 04 database 评审发现 H-db-1(HIGH):M11 的 pingWithTimeout 只加到包级
HealthCheck(),未覆盖 4 条 ping 路径:
- (*Manager).HealthCheck(被后台探活 probeOnce master + /health 端点共用)
- probeOnce 从库 ping
- InitDB 启动 master ping
- InitDBWithReplicas 启动 replica ping
挂起 DB(连接活但不响应,区别于宕机的 connection-refused 快速失败)下,这些
路径的 sqlDB.PingContext(ctx) 用 rootCtx/Background(无 deadline)无限阻塞,
致:探活 goroutine 阻塞至 shutdown、#21 自愈冻结(replicaHealthy 停留旧值、
Replica() 可能路由到已死从库)、IsHealthy() 缓存失真、App.Init 启动卡死。
修复:4 路径统一改用 pingWithTimeout(sqlDB, ctx),受 healthCheckTimeout(3s)
约束(context.WithTimeout 尊重 ctx 自带更短 deadline)。/health 端点随之收紧
到 3s(更快失败,非回归);InitDB 5 次重试给足 15s+ 余量无误判。
回归测试 manager_hdb1_internal_test.go:注册 hungDriver(Conn.Ping 阻塞到 ctx
取消模拟挂起 DB),验证 pingWithTimeout / m.HealthCheck / probeOnce replica 三
路径在 Background ctx 下 ~3s 返回(修复前无限 hang)。go test -race ./database/
绿(含 3 条 ~3s 挂起用例)。
对抗复核(diff scan):4 路径均 pingWithTimeout,defer cancel 无 ctx 泄漏,
无新缺陷。CHANGELOG 记录。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-09 19:14:04 +08:00 |
|
杭州明婳科技
|
08ed43385d
|
fix(config): 模块 01 评审修复 + 对抗复核
config 模块(glm_check_report_module_01_config.md)11 项 finding 修复:
- H-config-1: Set(cfg) 用 mapstructure 重建 m.v,消除 Get/GetString/viper 视图分裂(C1)
- M-config-1: 热重载回调独立 recover,panic 不杀 watcher、不阻断后续回调(C9)
- M-config-2: DB SSL/TLS -- Postgres SSLMode(默认 prefer)+ MySQL TLS/TLSRootCA;
database.ensureMySQLTLSRegistered 注册私有 CA 命名配置,fail-fast 不回退明文。
O-1 文档准确性修正:同名注册会覆盖 master,改为 per-host 不同名 + 自建 replica DSN 指引
- M-config-3: App.Shutdown closeResources 停 configManager watcher(C7)
- M-config-4: Clone 切片/map 字段反射守卫测试
- M-config-5: WithConfig/WithConfigPath 全局可见性文档强化
- L-config-2: watchLoop 增 ctx 逃生通道,StopWatcher cancel+Close 双重退出
- L-config-3/4/5/6: Validate 连接池交叉校验、哨兵 errors.New、去冗余 TrimSpace、nil receiver 防御
含契约级回归测试(同源一致性/生命周期闭环/扩展点防御),-race/vet/build 全绿。
附 module 01 评审报告 + 全局结构图 + 扫描收敛协议。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-09 12:54:52 +08:00 |
|
杭州明婳科技
|
21021d4001
|
fix: 收口剩余语义契约问题
|
2026-07-08 23:52:23 +08:00 |
|
杭州明婳科技
|
2529b0a074
|
fix database lifecycle cancellation
|
2026-07-08 21:25:18 +08:00 |
|
杭州明婳科技
|
ca822dcadd
|
fix config driver fail closed
|
2026-07-08 21:02:21 +08:00 |
|
杭州明婳科技
|
c64a992008
|
fix middleware auth and log skip boundaries
|
2026-07-08 20:34:35 +08:00 |
|
杭州明婳科技
|
18eb62e2f0
|
fix app shutdown config and guide gaps
|
2026-07-08 20:22:30 +08:00 |
|
杭州明婳科技
|
74b65216b6
|
fix docs rate limit handler examples
|
2026-07-08 19:57:39 +08:00 |
|
杭州明婳科技
|
4ccbbfbf1b
|
fix full example login password flow
|
2026-07-08 19:36:43 +08:00 |
|
杭州明婳科技
|
89721132a1
|
fix database default manager resource leaks
|
2026-07-08 19:11:37 +08:00 |
|
杭州明婳科技
|
1ea3d8751f
|
fix cache lock context propagation
|
2026-07-08 19:02:01 +08:00 |
|
杭州明婳科技
|
27c14499c2
|
fix database nil boundary handling
|
2026-07-08 18:48:41 +08:00 |
|
杭州明婳科技
|
d73a46447c
|
fix config watcher lifecycle and snapshots
|
2026-07-08 18:38:01 +08:00 |
|
杭州明婳科技
|
0610a159f0
|
fix test helpers and make validation
|
2026-07-08 18:21:32 +08:00 |
|
杭州明婳科技
|
667f0793fc
|
docs use Chinese comments and errors
|
2026-07-08 18:04:33 +08:00 |
|
杭州明婳科技
|
7ca1d81f88
|
fix utils resource boundaries
|
2026-07-08 15:40:01 +08:00 |
|
杭州明婳科技
|
8ccfb162b8
|
fix cache error semantics
|
2026-07-08 15:02:52 +08:00 |
|
杭州明婳科技
|
9b9c5df676
|
fix storage safety edge cases
|
2026-07-08 12:21:13 +08:00 |
|
杭州明婳科技
|
fed3e37348
|
fix router registration safeguards
|
2026-07-08 12:05:26 +08:00 |
|
杭州明婳科技
|
8770e9344a
|
fix remaining framework contract gaps
|
2026-07-08 11:17:54 +08:00 |
|
杭州明婳科技
|
232b16d65d
|
fix trace and websocket lifecycle gaps
|
2026-07-08 11:16:09 +08:00 |
|
杭州明婳科技
|
56352fdd81
|
fix: harden framework lifecycle and middleware safety
|
2026-07-07 00:19:19 +08:00 |
|
杭州明婳科技
|
2d3dde99c2
|
fix: harden jwt locks sse and storage safety
|
2026-07-07 00:13:56 +08:00 |
|
杭州明婳科技
|
86e126c42b
|
release: v1.2.0 版本号提升 + 脚手架对齐 + 文档核验
- 版本号 1.1.1 → 1.2.0:app.go Version 常量;脚手架 GoMod 模板经 xlgo.Version 自动跟随;GUIDE 文档版本同步
- CHANGELOG/README 新增 v1.2.0 破坏性版本条目(包级全局 atomic.Pointer 治理、jwt.DefaultJWT 删除、FindWhereOrdered 签名变更、response 去 omitempty、cache.ErrRedisNotReady、config.Clone 深拷贝等)
- 脚手架对齐:RepositoryMake 模板 FindByName 改用 FindOne(走 readConn 读写分离,避免 M-35 GetDB 不路由 footgun)
- 文档核验修复(README/GUIDE 逐行对照源码 6595e94):
- README DB 示例 users := ...Find(&users) 自引用声明编译错误
- GUIDE xlgo.StartServer(engine,8080) 不存在 → engine.Run(":8080")
- GUIDE app.token_expire 死键(v1.1.0 已移除 AppConfig.TokenExpire)
- GUIDE jwt.expire: 86400 类型错(time.Duration 需字符串 "24h")
- GUIDE storage.Init(&cfg.Storage) 吞错误 → 显式 err 处理
- GUIDE 登录示例 token,_:=jwt.GenerateToken 吞错误 + time.Duration(cfg.JWT.Expire)*time.Second 双重转换
- GUIDE 验证规则表补 phone_strict / username
- .gitignore 忽略 8 个评审报告文件(仅本地保留,不入库;已从未推送提交中 filter-branch 清除)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.2.0
|
2026-07-04 11:46:59 +08:00 |
|
杭州明婳科技
|
6595e94677
|
fix: 多模型评审终审收口 — P0安全 + 主线A并发治理 + 文档对齐
经 deepseek/GLM/Claude 三轮对抗性评审 + 交叉核验 + 终审(见
last_report.md、cross_review_assessment.md),逐条回读源码核实并修复。
go build / vet / test -race ./... 全绿。
安全(P0):
- JWT alg confusion:WithValidMethods 固定 HMAC + keyfunc 方法断言
- JWT 空密钥 / 不支持算法 fail-closed(ErrEmptySecret / ErrUnsupportedAlgorithm)
- 上传大小实测封顶(enforceUploadSize),不信任客户端 file.Size
- HTTP headers/cookies map 竞态(写锁+快照)+ SSRF 防护(opt-in dialer.Control)
并发/资源(主线A 闭合):
- 包级可变全局一律 atomic.Pointer:DefaultRedis / DefaultStorage /
DefaultManager / Validator / DefaultCache 等,消除裸指针数据竞争
- trace.Close 去 sync.Once(防 exporter 泄漏);app OnReady 失败走 Shutdown
- ws.Hub.Stop stopOnce 防 double-close;cron 接入 App 生命周期(WithCron)
- ratelimit failClosed atomic.Bool;Recover Written() 守卫
- cron checkAndRun 锁内收集锁外 spawn(wg.Add 在锁内防 Stop 竞态)
终审剩余项收口(H-A~M-H + L 系列):
- 副本连接池 MaxOpenConns/2 截断修复(replicaMaxOpenConns)
- JWT 黑名单 1s 超时 + 显式错误;ratelimit GetRedis 取一次复用
- GetPage 深分页上限;HashFile 流式;ReadFile 去 TOCTOU
- config Clone() 深拷贝;cache 锁操作返 ErrRedisNotReady
- compress 解压残留清理;正则预编译;EqualsIgnoreCase→EqualFold
- 删 redisLimiters 死代码;CLI 输入校验 + 回滚
文档:
- README/GUIDE/CHANGELOG 对齐当前 API(含破坏性变更迁移说明)
- docs/README 索引修正;config 注释修正(RS256 已不支持)
破坏性变更详见 CHANGELOG.md [Unreleased]。项目处于研发初期、无下游用户。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-03 23:16:03 +08:00 |
|
杭州明婳科技
|
a74ea0c2f4
|
deepseek修改版
|
2026-07-03 00:00:11 +08:00 |
|
杭州明婳科技
|
0f13292a46
|
GLM 5.2修改版
|
2026-07-02 18:26:27 +08:00 |
|
杭州明婳科技
|
75756dd5fb
|
release: v1.1.1 补丁发布
- ServerConfig.Host 绑定地址字段
- 面向用户文案统一中文
- 修正 README 过时/错误描述(含会致启动失败的配置示例)+ 重写首段介绍
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.1.1
|
2026-06-23 23:19:26 +08:00 |
|
杭州明婳科技
|
8421e06fa8
|
docs: README 修正过时描述 + 重写首段介绍
修正 v1.1.0 后的过时/错误描述:
- 删除目录结构里已移除的 wire/ 段
- 快速开始配置示例:jwt.secret 补足 32 字节(否则被 Validate 拦截),
expire 由 86400(秒,int) 改 "24h"(time.Duration),补 refresh_expire/issuer/algorithm
- server 段补 host/timeout/response_mode 字段
- v1.0.2 更新日志标注 WithWire 已于 v1.1.0 移除
- 目录结构补 v1.1.0 新文件:metrics/timeout/metrics route/validate/mode
- 框架特性段重写为三组(架构可注入/生产就绪/基础功能),补全 v1.1.0 能力
- 响应格式段补 Mode 开关(ModeBusiness/ModeREST)与 Custom API
重写首段介绍(原描述过于普通化、无辨识度):
- 加 tagline 点明核心差异:组件全部 Manager 化,简单调用与注入实例兼得
- 新增"为什么是 xlgo"段:对比一般 Gin 脚手架的包级单例痛点 + 对照代码
- 5 条差异化卖点(可注入/生产就绪内置/零 Fatal/默认轻量/可插拔方言)
- 30 秒上手极简可跑示例
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 23:13:11 +08:00 |
|
杭州明婳科技
|
18e4f7e891
|
fix: ServerConfig 加 Host 字段 + 面向用户文案统一中文
- ServerConfig 新增 Host 字段:空=监听所有接口(兼容),设值=绑定指定地址
(127.0.0.1 仅本机 / 内网IP 绑定指定网卡),避免生产暴露 0.0.0.0
- app.go 启动地址改 host:port,日志区分"所有接口"/指定地址
- 面向用户/调用的文案统一中文:
- middleware/recover.go: "Panic recovered"→"panic 已恢复","Panic: %v"→"服务器内部错误: %v"
- middleware/logger.go: 5 处日志消息改中文
- middleware/metrics.go: 3 个 Prometheus Help 改中文
- app.go/database/manager.go/logger.go: 英文 error 改中文
- 保留英文:JSON 协议字段名、Prometheus metric Name、MySQL 错误串匹配、技术专有名词
- CLI 模板与 example 配置加 host 注释
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 23:12:40 +08:00 |
|
杭州明婳科技
|
0c9f256dfc
|
feat(v1.1.0): HA & Manager 化
对应体检报告 #10-#24,一次性完成 v1.1.0 全部 13 项:
- #10 storage/cache/redis/jwt/logger 五组件 Manager 化(XxxManager + DefaultXxx + SetDefaultXxxManager,包级 facade 保留兼容)
- #11 删除 wire 包 + 清理 StartServerWithPort/GracefulShutdown 双轨
- #12 Lifecycle Hooks(OnInit/OnStart/OnReady/OnStop)
- #13 Server 参数配置化(timeout/TLS/unix_socket/response_mode)
- #14 JWTConfig.Expire 改 time.Duration + 删 AppConfig.TokenExpire
- #15 response Mode 开关(ModeBusiness/ModeREST)
- #16 Config.Validate 启动期校验
- #17 livez/readyz 探针路由
- #18 Prometheus metrics 中间件 + /metrics
- #19 请求级 Timeout 中间件
- #21 主库探活 + replica 健康剔除
- #22 App.Go + in-flight goroutine 管理
- #24 RequestID 默认装入 + #23 核对
Breaking:删 wire、删 TokenExpire、JWTConfig.Expire 类型变更、删双轨函数。
详见 CHANGELOG 升级说明。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.1.0
|
2026-06-23 10:41:05 +08:00 |
|
杭州明婳科技
|
cd3d629282
|
release: v1.0.4 DX & Docs release
v1.0.4 定位为 DX & Docs release,开发体验与文档改进,无破坏性 API 变更。
对应体检报告 #25/#27/#28/#29/#30(代码改动已在 deb3cc7 提交)。
本 release commit:
- app.go const Version bump 1.0.3 → 1.0.4
- CHANGELOG 新增 [1.0.4] 章节(Added/Changed + 升级说明)
- CHANGELOG 底部链接补 [1.0.4],修正 [1.0.2] 指向(无 v1.0.2 tag,改 compare 链接)
- README 更新日志补 v1.0.4 (2026-06-22) 摘要
v1.0.4 内容:
- #28 CLI 多模板(minimal/api/fullstack)
- #29 examples/ 目录(minimal + full 可运行示例)
- #25 模块路径文档改进(保留 -core,明确 module path vs package name)
- #27 Without* Option 定位文档化
- #30 文档结构(规划文档归档 docs/plans/)
build/vet/test 全绿,xlgo version → v1.0.4。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.4
|
2026-06-22 23:28:46 +08:00 |
|
杭州明婳科技
|
deb3cc71bf
|
feat(v1.0.4): DX & Docs 改进
按报告 v1.0.4 路线图完成 5 项开发体验与文档改进:
#25 模块路径文档改进:
- 保留 -core 后缀(xlgo 是多产品系列:xlgo-core/xlgo-orm/xlgo-ai)
- README 快速开始补完整 import 示例 + 新增「模块路径与包名」小节
- CLAUDE.md Import Path Note 措辞明确化
#27 Without* Option 定位文档化:
- 调研确认 Without* 有真实用例(测试覆盖 + NewFullStack 后排除单项)
- 不删不标 Deprecated,在 app.go 注释 + README 说明其定位
#28 CLI 多模板:
- xlgo new --template minimal/api/fullstack
- minimal 轻量HTTP无依赖,api 标准业务分层(默认),fullstack 全组件
- 三模板实测生成正确
#29 examples/ 目录:
- examples/minimal(50行可跑,无外部依赖)
- examples/full(mysql+redis+jwt+user CRUD)
- examples/README.md
#30 文档结构:
- Version_*.md + report.md 移到 docs/plans/(v2.0-review.md)
- 新增 docs/README.md 索引
- CHANGELOG/GUIDE 留根目录(按惯例)
- .gitignore 整理
build/vet/test + examples 编译全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-22 23:21:59 +08:00 |
|
杭州明婳科技
|
dcfd24b624
|
release: v1.0.3 bug fix release
v1.0.3 定位为 bug fix release,收口 v1.0.2 引入的破坏性清理并修复
4 个轻量 bug + 依赖复查 + 版本号治理 + 文档对齐。同时包含此前未提交
的 v1.0.2 全部工作。
v1.0.3 变更:
Fixed:
- generateJTI 忽略 rand.Read 错误(jwt)— 改为 (string, error) 并传播
- QueryBuilder.Page Count 受残留 Limit 截断(repository)— countDB 加 Limit(-1).Offset(-1)
- OSS/本地存储文件名冲突(storage)— 新增 uniqueFilename 加 8 字节随机后缀
- 数据库重试策略对不可恢复错误无效(database)— 新增 isTransientDBError
Dependencies:
- go mod tidy 补全 postgres 方言传递依赖;安全补丁升级
x/crypto v0.49→v0.53、golang-jwt/jwt/v5 v5.2.1→v5.3.1、gorilla/websocket v1.5.1→v1.5.3
Removed:
- Breaking: 清理 v1.0.2 兼容别名(InitMySQL* / driverName)
- 死代码 database.DBResolver
- 代码中 292 行"评分/理由"自夸注释(#26,23 个文件)
Changed:
- Breaking: 错误码体系重构 CodeSuccess 1→0、CodeFail 0→1,删除 CodeInvalidParams,加编译期防撞码
- database/mysql.go → manager.go;Logger 拆分三独立 core 修复 Tee 重复写入
- 版本号常量化:app.go 新增 const Version 作为唯一来源,CLI/脚手架模板引用之,不再散落字面量
Security:
- CORS 中间件按 W3C 规范修复 Allow-Credentials / Vary: Origin / 非白名单不回显
Added:
- console 包显式 level 控制(SetLevel/WithLevel/LevelSilent,atomic.Int32 并发安全)
- 新增测试 jwt/repository/storage/database/router/middleware/app
- 文档:新增 CHANGELOG.md、Version_v1.0.2_report.md;更新 README/GUIDE 顶部更新日志
- 文档对齐:删除对不存在的 config.DefaultManager() getter 的描述(保持 API 与文档一致)
详见 CHANGELOG.md 与 README.md 更新日志。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.3
|
2026-06-22 21:40:10 +08:00 |
|
Ethan xlp
|
2cc8c70960
|
chore: change license to MIT
|
2026-04-30 23:40:59 +08:00 |
|
杭州明婳科技
|
2dfcbbbb22
|
init
v1.0.1
|
2026-04-30 23:26:14 +08:00 |
|