feat: release v0.28 generic Go project scaffolding and lifecycle entry

This commit is contained in:
2026-09-29 23:58:20 +08:00
parent f8e0dcc5a6
commit 0b6c0043b6
42 changed files with 2134 additions and 117 deletions

View File

@@ -0,0 +1,35 @@
# v0.28 通用工程验收
本轮新增 `project new/generate/check`,默认生成普通 Go 程序,不包含 API、网络监听、外部服务初始化或业务任务。项目维护配置、svc 和 Run;模板维护入口、加载与生命周期装配。
## 发布前回归
2026-09-29,macOS arm64,Go 1.27.1 / Go 1.22.12:
- `GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -race -count=1 ./...`:56 个测试包通过,含现有 API 生成消费者与新通用工程消费者。
- `GOTOOLCHAIN=go1.22.12 GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -count=1 ./...`:56 个测试包通过。
- `go vet ./...`、`go build ./...`、`git diff --check`:通过。
- 最终补充真实进程异常退出断言后,新生成器再次通过 race 集成回归与 Go 1.22 集成回归。
- `examples/program` 在临时副本中使用显式本地替换,完成 tidy、race、配置检查、实际一次性运行、生成漂移检查;仓库示例不含本地 replace。
## 验证边界
生成保护覆盖:手写文件逐字节保留、修改生成文件报冲突、缺失生成文件补回、缺失手写文件显式报错、只读 check/预览、模板升级漂移、工程与模块身份、最低依赖版本、路径/符号链接和锁保护、写入冲突后的事务回滚。
实际生成的消费者保留全部入口/加载/装配代码,只修改项目所有文件,覆盖:
- 一次性正常完成,主流程 defer 结束后反序关闭资源。
- Init 返回错误或 panic,Run 返回错误、panic、Goexit,以及组件报告致命故障。
- 初始化到一半失败后停止并等待已经启动的工作。
- 停止接收后等待处理与确认完成,期间 WorkContext 仍可用。
- 排空超时后请求取消,宽限期内完成则可清理;仍未结束则保留共享资源和日志。
- 主运行入口、后台工作、失败初始化后的工作不响应取消,均不会提前关闭资源。
- 显式环境引用、固定值不被隐式覆盖、非法配置阻止初始化,check-config 不打开日志文件。
- 真实构建的进程:SIGINT/SIGTERM 正常退出码 0;Run 错误/panic、主流程不响应停止导致超时,退出码 1。
- 默认进程通过本机 lsof 检查,无 TCP/UDP 端口;生成目录和源码无 API/Handler/Swagger/数据库/队列启动。
文件替换只对单文件原子,普通失败会回滚,整个工程不具备崩溃事务性。未登记的 goroutine、不遵守完成契约的项目组件、SIGKILL 和进程崩溃无法由模板保证收尾。新模板不改变既有调度器或队列的重试/投递语义。
## 远程发布验收
发布后运行 `scripts/verifyProgramRelease.py` 与原有 `scripts/verifyManagedRelease.py`,使用空模块缓存安装固定远程 CLI,禁止本地 replace。结果在完成后补入本文件及 JSON 报告。