## 变更摘要 ## 风险分级(见审查标准 §2) - [ ] T0 琐碎(纯文案/文档/格式化/资源重命名) - [ ] T1 常规(单端功能/Bug/UI/单 API) - [ ] T2 高危(鉴权/支付/隐私/跨端契约/DB schema/并发幂等/已知阻塞项)— 需 2 人复核 ## 验证方式(必填,证据优先) - 本地测试/契约守卫命令与结果: - 运行时实测(如涉及渲染/接口,贴 mock/路由/关键响应): - 负向注入(新增或修改测试时必填:故意改坏后测试是否转红): ## 技术栈审查清单(按本 PR 涉及项打勾) ### 后端 Java / Spring Boot - [ ] 业务拒绝用 `BusinessException`+`ApiResponseCode`(HTTP 400≤code<500),无裸 `RuntimeException` - [ ] 测试对业务拒绝断言 `400 ≤ status < 500`(非仅 `!= 200`) - [ ] 核心不变量(INV-014/015、Required/Mutual/Block 等)未被绕过 - [ ] 主键/唯一键/CHECK 约束与 Java 枚举一致,无静默 no-op 写 - [ ] 无新增死表/死配置(`system_configs`/`match_rule_configs` 类) ### 小程序 miniapp - [ ] `app.json`/`pages.json` 路径与磁盘文件一致、无前导 `/` - [ ] `ignoreDevUnusedFiles`/`ignoreUploadUnusedFiles` = false(资源不被吞) - [ ] 跨端字段名与后端规范名一致(tsc 不保护 JS 层字段名) - [ ] WXSS 无通配符/属性选择器/嵌套注释;`` 显式高度 - [ ] 胶囊安全区让出 `--nav-right` ### 管理端 admin-web - [ ] 渲染相关状态走 `ref`/`reactive`,已补渲染态实测 - [ ] 颜色/字号收敛到 `src/theme/` token,EP 主色阶补全 `-light-N`/`-dark-2`/`-rgb` - [ ] 表单校验类型安全、出错保留输入 - [ ] 触摸目标 ≥44px,尊重 `prefers-reduced-motion` ### 数据库迁移 SQL - [ ] `V<序号>__<描述>.sql` 命名,版本连续唯一 - [ ] 向后兼容,NOT NULL 新列有默认值/迁移 - [ ] CHECK 约束与枚举一致,破坏性变更有回滚方案 ### 测试 / 契约守卫 - [ ] 无空壳 `skip`/`pass` 测试 - [ ] 已做负向注入证明判别力 - [ ] `scripts/run-ui-contracts.mjs` 的 `MIN_GUARDS`(当前 23) 同步(增删守卫必改) ### 脚本 / 基础设施 - [ ] 脚本真实依赖已在 CI 对应 job 安装(非仅本地能跑) - [ ] 密钥仅运行期、不落盘;本地栈固定 `-p danyang` ## 判据纪律自查(见审查标准 §5,对应改动必查) - [ ] 非空数据验证(无空数据假绿,如推荐/列表返回空也能过) - [ ] 无直连绕过(关键路径至少一个经 HTTP 层断言) - [ ] 约束相关改动在带约束环境验证(无测试库缺约束假绿) - [ ] 小程序改动不走 `Mini Program Compile Check` 的"仅 tsc"假绿,已真编译/查资源 - [ ] 合并后回读 `git rev-parse HEAD` + 轮询 CI 确认本次 head 真 success ## 已知阻塞 / 决策关联 - [ ] 本 PR 是否触碰上线阻塞项(微信真实登录 / 照片直传落库)?若是:✅本次解决 / ⚠️未解决已登记 known-risks - [ ] 是否与 `decision-register` 的 LOCKED 决策冲突?若是:已回决策层确认(附结论) - [ ] 是否产生新债务?若是:已登记 `known-risks.md`(编号 KR-xx) ## 关联