供应商订单安全对账 QA 最终复审报告

report
2026年7月20日2 min read273 words

Updated 2026年7月20日

供应商订单安全对账 QA 最终复审报告

复审日期:2026-07-20
复审范围:实现规格、候选人任务、编排文档、当前后端/前端实现、测试和根目录交付文档。
结论:通过。代码、前端原型和交付文档门禁均已复验。

最终结论

原 P0(未批准 Spring MVC/API 扩张)和原 P1(MANUAL_REVIEW 遇到畸形外部事件非 NOOP)均已修复并复验通过:

项目 结果 证据
纯决策边界 / 原 P0 通过 backend 生产源码仅有领域模型和 BookingReconciliationService;无 Applicationapi/web/ 包。pom.xml 仅声明 Java 17、JUnit 5 和编译/Surefire 插件。源代码扫描未发现 Spring、Servlet、Controller、Instant.now()Clock.system...
人工审核粘性 / 原 P1 通过 两个入口均在外部事件字段校验前对 MANUAL_REVIEW 返回 NOOP / MANUAL_REVIEW_REQUIREDstate06ManualReviewIgnoresMalformedExternalEvents 覆盖非空但 eventId、引用、时间、匹配和错误码均畸形的 create/query 事件。
后端门禁 通过 mvn -f backend/pom.xml clean test:57 tests,0 failures,0 errors,0 skipped。
前端门禁 通过 cd frontend; npm run build:TypeScript 检查和 Vite 构建成功。
FE-05 通过 前端只导入本地 reconciliationCases;未发现 URL、fetch、XHR、鉴权头、轮询或写操作。

CreateAttemptResult.outcome=null 仍按 VALID-03 是调用契约错误并抛出 IllegalArgumentException;这不是外部畸形事件的自动处理路径,符合规格的异常分类。

规格矩阵

矩阵 结论 复验证据
SAFE-01 至 SAFE-07 通过 不确定建单立即查询,白名单拒绝是唯一可重建路径,冲突/多匹配/耗尽均不回填且禁止重建;服务只使用传入 now,决定记录保持稳定原因码和非空消息。
CREATE-01 至 CREATE-07 通过 BookingReconciliationServiceTest 覆盖成功、缺字段、标识冲突、白名单/非白名单拒绝、拒绝携带证据和三种不确定结果。
QUERY-01 至 QUERY-11 通过 BookingReconciliationQueryTest 覆盖多匹配优先、匹配加错误、确认/待定/终态结果、次数边界、空匹配/查询错误以及确认号冲突。
STATE-01 至 STATE-08 通过 终态测试覆盖重复确认、旧事件、冲突优先、人工审核粘性、最终失败后的 create/query 订单证据和确定性。
VALID-01 至 VALID-07 通过 校验测试覆盖构造配置、入口与订单契约错误,及事件/匹配字段缺失、引用不匹配和缺少供应商状态时的人工审核。
前端 FE-01 至 FE-04 通过 类型与 Java 枚举一致;四个本地用例齐全,仅白名单拒绝为 safeToCreateAgain=true;页面只读,空/错误状态和原生 details 语义均存在。

交付文档复验

主理人已按下列要求更新根目录文档,并在最终门禁中验证其不再描述不存在的接口或旧测试结果:

文件 已完成修正
README.md 已删除 Spring Boot/MVC、HTTP 端点、spring-boot:run、Controller/Clock/traceId 描述;测试数已更新为 57,并说明本轮只有纯决策服务和本地前端原型。
DECISIONS.md 已删除“MVC 与可观测性”及 Controller、TraceIdFilter、MDC、HTTP 审计表述;保留实际生产化缺口。
AI_USAGE.md 已删除 MVC/MockMvc/traceId 相关的未执行记录,更新实际 Maven 测试数为 57,并只陈述实际使用的工具与检查。

主理人最终执行:

$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
mvn -f backend/pom.xml clean test
cd frontend; npm run build
rg -n "Spring Boot|Spring MVC|Controller|TraceId|MockMvc|HTTP 接口|spring-boot|59 tests|Clock" README.md DECISIONS.md AI_USAGE.md

结果:前两项成功,最后一项无匹配;rg 返回退出码 1,属于通过结果。

残余风险

  • 该题目按规格保持纯决策,不含订单持久化、供应商调用、消息去重、调度、鉴权或并发控制;这些是明确的生产化后续工作,不是本轮缺陷。
  • 前端仅为本地只读展示。真实 API、鉴权、分页和错误协议尚未获批,FE-05 必须继续阻塞。