---
schema: "hl-changelog/v2"
ticket: "5725"
title: "confirm 确认执行两路径一致解除「通知结果确认中」拦截（含原子引擎整组路径）"
consumer: "admin"
author: "wx(GIT)"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成：PR #5726 已合并 dev-v3 并部署 TEST（hl-fleet-service 双实例）。confirm 单段与整组（需求级原子引擎）两路径一致解除 AMBIGUOUS 605042 拦截；实证 26-5484（修复前 605042）与回归 26-8917 均 confirm 200 assigned。接口响应结构不变，无前端消费变化。"
updated_at: "2026-08-08"
base: "dev-v3"
generated: "2026-08-08T21:45:00+08:00"
---

# confirm 确认执行两路径一致解除「通知结果确认中」拦截（含原子引擎整组路径）

> 后端完成：PR [#5726](https://git.1814.love:8443/wx/HL/pulls/5726) 已合并 dev-v3 并部署 TEST，网关全链路验证通过。

## 关联 / 联系人

### 链接

- **Issue**: [#5725](https://git.1814.love:8443/wx/HL/issues/5725)
- **PR**: [#5726](https://git.1814.love:8443/wx/HL/pulls/5726)
- **Merge commit**: [483cfd1ba](https://git.1814.love:8443/wx/HL/commit/483cfd1ba)

### 联系人

- **后端负责人**: @wx

## 背景

#5716 修复时只移除了单段 confirm **legacy 路径**（无派车方案代际）的「通知结果确认中」校验；**有代际的确认走需求级原子引擎路径**（`confirmSingletonThroughRequirementEngine` → `confirmRequirement`），其中 `isRequiredHoldingGroup` 分支残留同类校验，AMBIGUOUS 仍 605042。

实证对照（TEST）：26-5484（单代 finalized=1 → 原子路径）confirm 被 605042 拦；26-8917（成功时刻为旧行 finalized=0/orphaned 代际 → legacy 路径）放行——同一 AMBIGUOUS 状态结果不一致的根因。

## 变更内容

`POST /admin/fleet/assignments/{assignmentId}/confirm`（单段确认执行）与需求级整组确认（内部共用原子引擎 `confirmRequirement`）在 HOLD 通知结果仍确认中（AMBIGUOUS，短信已发未回执）时，**一律不再返回 605042**，确认执行正常推进 assigned——与 #5701/#5716 已解除的单段 legacy 路径口径一致。

## 行为变化

| 场景 | 变更前 | 变更后 |
|------|--------|--------|
| HOLD 通知结果确认中（AMBIGUOUS）+ 司机已登记确认 + 单段 legacy 路径 | 200（#5716 已解除） | 200 |
| HOLD 通知结果确认中（AMBIGUOUS）+ 司机已登记确认 + **有代际（原子引擎/整组）路径** | **605042** | **200 推进 assigned** |

### 保留不变的保护

- 司机确认登记缺失（未确认/无有效来源）：仍拦截（`DRIVER_CONFIRMATION_REQUIRED`）。
- NOTIFICATION 来源（司机回复系统通知）仍需通知 SENT 事实；AMBIGUOUS 下 NOTIFICATION 来源返回 400 提示人工联系来源（#5701 口径，`assertAtomicReplySourceIdentity`）。
- 其余 605042 保护点（expand 换版 / cancel / change / undo / 拒接 / 恢复通知等**通知代际推进与身份失效**场景）保留原拦截。

## 验证证据

- **网关实证（TEST，VEHICLE_MANAGER）**：
  - 26-5484（订单 2086077200523558914，AID 2086077201060397057）：holding + AMBIGUOUS（通知日志 delivery_status=dispatching）+ 司机已确认（21:20:15）+ 有代际 finalized=1 → `confirm`（sendItinerarySms=false）→ **200 confirmed=true status=assigned**（修复前 605042）
  - 回归 26-8917（AID 2086050105051250690）：同 AMBIGUOUS + 有代际 → confirm **200 confirmed=true status=assigned**
  - 实证后通知日志恢复原状（canceled），两单保持 assigned 正常业务流转
- **测试**：新增 `confirmRequirement_holdNotificationAmbiguous_proceedsToAssigned`；AssignmentServiceTest 404/404 全绿；fleet verify 仅基线 ReleaseEOccupancyMysql8033RecoveryTest 失败（与本案无关）

## 前端交接

无接口契约变化（响应结构、字段、错误码集合均不变，仅 605042 出现场景收敛到既有口径）。

## 前端实证确认（2026-08-08 mmg，hl-admin）

确认 not_required 属实，零代码改动：

1. **全 `src/` 零 605042 引用**：grep 无任何 605042 特判/重试引导；confirm 业务错误统一走 `request.js` 弹后端 message，后端不再返回即前端不再展示。
2. **confirm 两路径前端入口均无 605042 处理**：单段 `useAssignFlow.js:1095 confirmAssignment` 与整组/原子引擎路径 `useAssignFlow.js:1088 confirmRequirementAssignments` 都无错误码特判，后端解除拦截后天然受益。
3. **AMBIGUOUS 前端展示与 confirm 拦截无关**：仅 `HoldNotificationStatus.vue:178/231`（发送结果标签 + canRetry fail-closed 守卫）与 `OrderDrawer.vue:708`（状态标签）消费 AMBIGUOUS，属通知发送结果展示，本变更（confirm 执行拦截）不触碰，行为不变。
4. 与 #5701（登记确认解除 605042）/#5716（confirm 单段 legacy 路径解除）同系列收尾：本条把原子引擎整组路径对齐到同一口径，前端无对应差异逻辑。
