2bf6701def
执行机制四道闸 → 闸4(CI 硬闸) + 评审兜底落地: - ci/scan-portable-sql.sh:扫 server Go 运行时查询禁用 MySQL 专属构造 (UTC_TIMESTAMP/UTC_DATE/NOW()/FIELD(/ON DUPLICATE KEY/IFNULL), 豁免方言层 dialect*.go / _test.go / 注释行;当前 152 文件 0 违规 - ci.yml:新增 portable-sql-scan job;push 触发路径补 server/** - .gitea/PULL_REQUEST_TEMPLATE.md:可测试性五支柱 + 测试 + 红线自检清单 - 守支柱 3(纯逻辑/IO 分离·双库可移植),见 docs/dev-conventions.html Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.4 KiB
1.4 KiB
改动说明
可测试性五支柱自检
- 支柱 1 · 接缝即接口:新增的外部依赖(原生隧道 / HTTP / 子进程 / 存储 / 时钟 / 随机)藏在接口之后、可注入,未在业务层直接
new或调静态单例 - 支柱 2 · 契约单源:跨边界数据(stats 字段 / HTTP JSON / proto / 设计 token)改动有单一来源,两端从它生成或校验(未两端各写)
- 支柱 3 · 纯逻辑/IO 分离:计算/状态机是纯函数;Go SQL 走
dialect.*、时间 Go 端算(可移植 SQL 扫描通过) - 支柱 4 · 错误是值:错误带类型/码、可断言;无空
catch/ 只打日志不返回 - 支柱 5 · 可观测:新增关键状态/事件有可程序读取的出口(stream / 结构化日志 / 接口)
测试
- 新增/改动逻辑有对应测试(L1 单元 / L2 集成·交互;数值型补 L1,真链路补 L4)
- 本地通过:
flutter analyze && flutter test(客户端) /go test ./...(服务端) - 涉及 UI:golden 基线已按需更新(
flutter test --update-goldens)
红线
- 产品文案无红线词,用「加速 / 隐私保护 / 无日志」口径(脱敏扫描通过)