审核操作统一发送 {comment, reasonCodes[]}(数组),但 ReviewController 的 approve / need-evidence / approve-local-eligibility / reject-local-eligibility / evidences/{id}/access 将 @RequestBody 声明为 Map<String,String>,数组值无法反序列 化成 String,Jackson 抛 HttpMessageNotReadableException,经 GlobalExceptionHandler 映射为 400「请求体格式错误」。 - 5 处 @RequestBody Map<String,String> 改为 Map<String,Object>,comment/purpose 读取加 (String) 强转(与原本正确的 needEdit/reject 一致)。 - 新增回归守卫 ReviewControllerRequestBodyContractTest(standalone MockMvc + GlobalExceptionHandler + 自定义 @AuthenticationPrincipal 解析器),注入前端真实 载荷 {comment, reasonCodes:[]} 断言 200;直接 new 控制器测不到 HTTP/绑定层缺陷。 - 接入后端契约门禁 scripts/run-backend-contracts.mjs(CURATED 13 -> 14)。 - 负向注入已自证判别力:临时改回 Map<String,String> 精确判红 400,恢复后 5/5 绿。
与 scripts/run-ui-contracts.mjs 同级:固化一组关键后端回归/契约测试 (含 v1.1.0 修复的 3 个回归测试 + JwtAuthFilter Cookie 兜底 + 核心不变量), 先校验测试源文件存在性下限(防改名/删除后门禁假绿),再用 mvn test -Dtest 真跑并解析 surefire 汇总。在 backend job 的 mvn verify 之后执行,复用已 编译产物与依赖缓存,开销极小。同步更新 CODE_REVIEW_STANDARDS.md 门禁说明。