修复M002 V3字段矩阵迁移问题

This commit is contained in:
andy
2026-07-12 01:27:42 +08:00
parent ab303eea39
commit db95aece20
10 changed files with 330 additions and 19 deletions

View File

@@ -281,6 +281,7 @@ V2 一条 `ai_task_results[]` item 对应一行。M002 V3 后,`message_events[
- 第一版任务卡字段配置写在代码中,但通过 `TaskCardFieldDefinitionProvider` 之类的接口提供,避免 Controller / Service 直接依赖硬编码数组。
- 后续如果改为数据库配置,只替换 Provider 实现,不改任务核心流程。
- 字段契约从 `code-v1` 迁移到 `20260711-p0` 时,不能盲目改写已经存在用户草稿或确认结果的历史任务卡。当前 V18 仅更新 `draft_payload_json IS NULL``confirmed_payload_json IS NULL` 的旧任务卡;已存在 payload 的历史数据继续保留原 `field_contract_version`,待重新保存、最终确认或后续专项 backfill 时再迁移。
## 10. 审计表

View File

@@ -285,6 +285,7 @@ Agent payload 不可变。本系统在同一张卡上维护复核状态:
- `missing_fields[]` 必须是 RFC 6901 JSON Pointer。
- 入站阶段 `missing_fields[]` 不完整或不是 RFC 6901 Pointer 时,按 `adapter_contract_error` fail closed不创建业务任务。
- 解阻接口提交的 Pointer 必须能映射到该业务卡当前可展示且可编辑字段,否则返回 `TASK_REVIEW_POINTER_INVALID`
- 解阻接口 `field_overrides[]` 支持提交 `field_pointer``field_path``field_pointer` 使用 RFC 6901 JSON Pointer`field_path` 支持 P0 主矩阵路径和旧扁平路径。两者同时提交时必须指向同一个字段,否则按非法字段处理。
- 同一次解阻请求中 `field_overrides[]` 不允许重复指向同一 `field_pointer` 或同一矩阵 `field_path`,否则返回 `TASK_REVIEW_POINTER_DUPLICATE`
- 订单归属确认可作为复核解阻的一部分保存;当前第一版只允许确认当前任务所属订单,不开放普通任务随意切换订单能力。
- 全部缺失字段、订单归属、目录值和依赖校验通过后,才进入 Preflight / READY。
@@ -297,7 +298,7 @@ Agent payload 不可变。本系统在同一张卡上维护复核状态:
| 房型原文 | `extracted_fields.room_items.0.room_type_raw` | `/extracted_fields/room_items/0/room_type_raw` | `extracted_fields.room_type` |
| PMS 房型代码 | `extracted_fields.room_items.0.pms_room_type_code` | `/extracted_fields/room_items/0/pms_room_type_code` | `extracted_fields.pms_room_type_code` |
入站 `ai_payload_json` 保留 SuperAgent 原始结构,不回写用户修正。任务详情 `fields[]``field_path``field_pointer` 以 P0 主结构为准,`legacy_field_path` 仅用于前端过渡展示。草稿保存、最终确认和同卡复核解阻可继续提交旧扁平 key后端会归一化到 P0 主 `field_path`;响应中的 `field_values` 使用主路径,`legacy_field_values` 提供旧扁平回显兼容,`effective_payload` 提供嵌套结构供后续 OPERA 参数组装使用。当前第一版只支持 `room_items[0]`,非 0 下标或不存在路径按 `TASK_REVIEW_POINTER_INVALID` / 字段校验错误处理,不自动映射。
入站 `ai_payload_json` 保留 SuperAgent 原始结构,不回写用户修正。V3 `message_events[]` 归一化为任务卡时,会把 `relevant_message_excerpt` 同步到任务 item 根路径,便于旧字段矩阵读取证据字段。任务详情 `fields[]``field_path``field_pointer` 以 P0 主结构为准,`legacy_field_path` 仅用于前端过渡展示。草稿保存、最终确认`field_values` 可继续提交旧扁平 key同卡复核解阻可提交 `field_pointer``field_path`,其中 `field_path` 可为 P0 主路径或旧扁平路径。后端会归一化到 P0 主 `field_path`;响应中的 `field_values` 使用主路径,`legacy_field_values` 提供旧扁平回显兼容,`effective_payload` 提供嵌套结构供后续 OPERA 参数组装使用。当前第一版只支持 `room_items[0]`,非 0 下标或不存在路径按 `TASK_REVIEW_POINTER_INVALID` / 字段校验错误处理,不自动映射。
### 9.3 后端第一版接口
@@ -315,6 +316,7 @@ Content-Type: application/json
"field_overrides": [
{
"field_pointer": "/extracted_fields/room_items/0/pms_room_type_code",
"field_path": "extracted_fields.room_items.0.pms_room_type_code",
"value": "RM3"
}
]
@@ -328,6 +330,7 @@ Content-Type: application/json
- `review_resolution.field_overrides[]` 同时返回 `field_pointer`、矩阵主 `field_path``legacy_field_path` 和人工值。
- `review_resolution.resolved_at` 使用带 `Z` 的 UTC 时间点。
- `confirmed_payload.field_values` 使用 P0 主 `field_path` 保存,`legacy_field_values` 仅用于旧扁平字段过渡回显;`effective_payload` 是嵌套结构,不等同真实 OPERA 参数。
- 通用最终确认不会放宽历史 V2 只读必填证据字段;仅对 V3 message_event 缺省的旧根 `visible_reason` 做窄口兼容,防止旧结构普通任务缺少证据仍进入 READY。
- 自动生成第一版固定两条 OPERA 模拟操作。
- 写入 `MANUAL_REVIEW_RESOLVE` 审计。
- type-known manual review 不允许走通用 `POST /api/reservation/tasks/{taskId}/confirm`,否则会返回 `TASK_REVIEW_RESOLUTION_REQUIRED`
@@ -404,8 +407,10 @@ V3 P0 不做以下事项:
- 业务任务详情按同一 AI 批次透出 `adapter_contract_errors[]``unhandled_intents[]` 只读展示块。
- type-known manual review 创建在原业务任务卡上,任务详情返回 `review_status``review_resolution``manual_review`
- `POST /api/reservation/tasks/{taskId}/manual-review-resolutions` 支持字段修正、当前订单归属确认、JSON Pointer 到可编辑字段校验、READY 流转、confirmed payload 写入、两条 OPERA 模拟操作创建和审计记录。
- `POST /api/reservation/tasks/{taskId}/manual-review-resolutions``field_overrides[]` 已支持 `field_pointer``field_path` 两种定位方式;`field_path` 可为 P0 主路径或旧扁平路径,成功后响应归一化到 P0 主 `field_path`
- `source_message.source_message_id` 缺失时按 V3 typed `infrastructure_input_error` 结构响应。
- 0711 P0 fixtures 已纳入后端回归测试参考,并补齐 S10/S99 严格契约、P0 type-known manual review 解阻、candidate_gate reference 和当前扁平字段矩阵兼容。
- `field_contract_version` 历史迁移已收紧V18 只把没有 `draft_payload_json` 且没有 `confirmed_payload_json``code-v1` 任务卡标记为 `20260711-p0`;已经存在用户草稿或确认 payload 的历史任务卡保留旧版本,等待重新保存、确认或后续专项 backfill。
- 订单 / 任务列表、任务详情、草稿保存、最终确认、OPERA 模拟骨架和审计列表。
- SuperAgent 查询上下文接口 1、2以及邮件会话相关查询。