AI-3.9-04 人工审核机制 · 实现策略 TDD

覆盖 AI 产出物的把关状态机参数化框架 ——「五类场景人工确认流程上线且"未确认不生效"可验证;巡检记录完整;大额阈值决策落地(DEC-3)」:大额交易 / 非标合作协议 / 法律文书 / 财税决策 / 医疗相关推荐五类场景挂钩 + 面向公众输出巡检

类型: TDD · 实现策略 深度分级: full(把关框架可字段级设计;五类场景的具体参数值标注 DEC-3 前置) PRD 版本: V1.4(2026-10-22) 优先级: Should · P1(部分实现——人工审核本体成熟,缺面向 AI 产出物的通用把关框架)· 波次 p1 先行 文档版本: v1.0(2026-10-26) 生成日期: 2026-10-26 来源: docs/reports/ai-module-prd/tdd/AI-3.9-04-human-review-framework.md

摘要

NFR-3.9-04(溯源 AI-3.9-04,Should · P1)要求建立「AI 输出 → 人工确认 → 生效」的通用把关框架,覆盖五类场景:大额交易(阈值由管理层决策,DEC-3)、非标合作协议、法律文书、财税决策、医疗相关推荐——上述场景中 AI 输出仅作参考,须经人工确认(明确确认主体、确认时点、确认留痕)后方生效;面向公众的 AI 话术、展示、推荐逻辑人工审核并定期巡检。PRD 验收要点原文:「五类场景人工确认流程上线且"未确认不生效"可验证;巡检记录完整;大额阈值决策落地(DEC-3)」。

现状判定部分实现(与 PRD 附录 A 一致):①审核底座已建成——业务资格/订单审批/协议审核均有完整人工闭环与留痕(四套状态机);②AI 产出物把关未建——ai_review 全库检索 0 命中,把关框架尚未延伸至 AI 产出域。本 TDD 全部设计作用于②,不改动①的既有审核流。核心交付:以 channel-qualification 六态 forward-only 状态机为唯一复用母版,泛化为「迁移表工具级共享」的参数化把关框架(ai_review_record 实体 + draft→confirmed「未确认不生效」门禁 + last_transition 轨迹),框架与参数值解耦(RK-05)——大额阈值等参数由 DEC-3 落地后纯配置回填,框架零改动。

验收要点
3 条
五类场景人工确认流程上线且「未确认不生效」可验证 / 巡检记录完整 / 大额阈值决策落地(DEC-3)
子任务
5 项 · 6.5d
F-1 共享把关工具(1d) / F-2 实体+migration(1d) / F-3 工作流+门禁契约(1.5d) / F-4 admin 工作台(2d) / F-5 巡检实体+执行壳(1d)
前置 blocker
2 个(均不阻框架)
D-dec3(大额阈值与非标清单——仅阻参数值回填)· DEC-5(巡检节奏等数值——仅阻数值定档);框架全量立即开工
负证据(本 run 复核)
0 命中
rg -in "ai_review|aiReview|review_record" backend/admin 0 命中——面向 AI 产出物的通用把关框架从零新建

关键概念

PRD 双层口径(不得混同)
①审核底座已建成——业务资格/订单审批/协议审核均有完整人工闭环与留痕(四套状态机);②AI 产出物把关未建——AI 服务未接入,无面向 AI 输出的通用把关框架。本 TDD 全部设计作用于②,不改动①。
forward-only 白名单
状态迁移只允许沿白名单表正向推进,反向跳转/自环抛 MedusaError(UNEXPECTED_STATE)——唯一复用母版为 channel-qualification 六态状态机(qualification-state-machine.ts:29-39 REVIEW_TRANSITIONS + :41-53 校验器)。
「未确认不生效」门禁
框架统一语义,全消费方硬约束:draft→confirmed——对外生效点(译文批次上架/撮合推荐分发/数字员工应答放行/成交确认)只认 status === "confirmed"。语义窄于状态迁移表(门禁只管「生效与否」,迁移表管「过程合法性」),各 artifact_type 可覆盖状态集但生效语义不随覆盖改变。
工具级共享(PILOT-DECISIONS 决策二)
共享「迁移表工具」(表驱动 forward-only 校验器范式+last_transition 轨迹),状态集各自参数化定义;同一套状态集不强制共用(候选甲状态集级共享已否决——两能力状态语义真实不同,强共用互相牵制);Saga 补偿范式不并入。
ai_review_record
通用审核实体(新本地模块 ai-review-record/):artifact_type 开放枚举首批三值 translation_batch / matching_recommendation / digital_employee_reply;(artifact_type, artifact_id) 唯一——一产出物一审核行,生命周期行内演进。
五类场景挂钩
总纲 3.9② 枚举:大额交易/非标合作协议/法律文书/财税决策/医疗相关推荐——逐场景定义触发源/AI 输出类型/确认主体/确认时点/留痕字段;阈值/清单/资质参数一律 D-dec3/法务占位(框架设计与参数值解耦,RK-05)。
巡检机制(ai_patrol)
面向公众 AI 话术/展示/推荐逻辑的定期巡检:ai_patrol_task(scope/sample_rule/frequency——节奏 DEC-5 占位)+ ai_patrol_record(result: pass|fail|pending);记录四要素(谁在何时按何规则检了何物、结论与发现问题)齐备即视为完整。
fail-closed(把关层故障语义)
框架故障(工具抛错异常态)→ 消费方 step 捕获后拒绝生效(把关层故障不得放行未审产出)+ 告警日志——本框架保护的是合规底线,不适用 fail-open;与 NFR-3.8-01「跳过不阻断」的适用边界显式区分。
ai_review_gate.enabled
框架总闸 feature flag(medusa-config featureFlags 区):关闭=AI 产出物回现状直发路径——显式声明的过渡态(合规要求不因 flag 关闭而消失,恢复开启即重新门禁);消费方独立 flag 语义由其自身 TDD 定义。

方案设计

设计归属总览与红线声明

块归属内容
A. channel-qualification 六态 forward-only 参数化框架本卡 owns(AI 产出物通用把关的唯一状态机设计归属)共享迁移表工具(工具级共享)+ draft→confirmed「未确认不生效」门禁 + last_transition 轨迹 + ai_review_record 实体
B. 五类场景与 AI 输出挂钩关系本卡 owns(结构字段级)逐场景挂钩表;参数值 D-dec3 占位(框架与参数值解耦,RK-05)
C. 消费方引用契约本卡定契约,消费方引用AI-3.5-04、AI-3.6-03、同波 AI-3.3-05——禁止两套状态机
D. 入驻审核 Saga compensation 回滚不并入(reject-seller.ts:64-66,91-93——补偿范式,勿混入把关框架)边界③
设计红线(AGENTS.md §0.1)
  • Workflow 承载业务逻辑:review 状态变更全部走 Workflow step,门禁守卫在 step 内实现;
  • 不修改上游源码:@medusajs/*/@mercurjs/* 不触碰,四套既有审核流零改动;
  • 后端是单一数据源:把关状态/留痕以后端 ai_review_record 为准,前端仅消费;
  • 参数化 SQL:查询经模块 service,动态条件参数化绑定。

既有四套审核状态机盘点(逐套 file:line+状态枚举+留痕字段)

#套来源锚点(复核:实际行号)状态枚举留痕字段复用判定
1入驻审核 3 态seller-profile/models/seller-profile.ts:18-21(复核:状态枚举常量 :8-9、approval_status :19-21;区间口径 :16-37 覆盖 reviewed_at/reviewed_by/rejection_reason :22-25)PENDING / APPROVED / REJECTEDreviewed_at / reviewed_by / rejection_reason(:23-25)落库字段范式参考;其 reject 的 compensation 回滚(reject-seller.ts:64-66,91-93)属 Saga 补偿范式,勿并入本框架(边界③)
2渠道资格 6 态qualification-state-machine.ts:26-40(复核:实际路径 backend/src/workflows/channel-qualification/policies/qualification-state-machine.ts;forward-only 白名单表 REVIEW_TRANSITIONS 实际 :29-39、校验器 :41-53)pending → reviewing → approved / rejected;approved → revoked / expired;rejected/revoked/expired → pending(共 6 态,forward-only)metadata.last_transition 轨迹(:24 注释)+ reviewed_by / reviewed_at / rejection_reason(review-channel-qualification.ts:43-46;来源 admin route [id]/review/route.ts:25 reviewed_by: req.auth_context.actor_id)✅ 唯一复用母版(本卡 owns 的参数化底座)
3购物车审批 3 态approval/models/approval.ts:8-14(复核:model.define :4,cart_id :10 / type :11 / status :12 / created_by :13 / handled_by :14)ApprovalStatusType(pending/approved/rejected)created_by / handled_by(双人留痕)「发起人≠处理人」双人留痕范式参考
4协议+线下签署cooperation-agreement/models/cooperation-agreement.ts:14-38status 3 态 pending/approved/rejected(:5-9、:30)+ signing_status 4 态 not_signed/offline_pending/offline_signed/terminated(:21-23;类型定义 types/channel-refactor/joint-agreement.ts:9-14)reviewed_at / reviewed_by / rejection_reason(:32-34)+ signed_at(:25)「审批轴+签署轴」双状态轴范式参考(AI 产出物类比:审核轴+生效轴)
补充先例(本 run 新发现)

backend/src/workflows/affiliate/utils/status-transition-factory.ts:82 createStatusTransitionStep<S extends string>——仓内第二个工具级参数化先例(注释 :10 ARCH-004):config 六要素(stepName/entityLabel/errorCode/listMethod/updateMethod/isLegal 谓词 :48-67)+ metadata.last_transition 审计 meta 形态 {from, to, reason, actor_id, at}(:28-34)+ forward-only 补偿「logs and rethrows, NEVER writes a status back」(:23-25)。佐证「纯表驱动白名单校验器,参数化代价低」的判断在仓内已有两次落地;本框架取「policy 级校验器+step 内落库」组合(母版一形态),affiliate 的 step 级工厂作为实现期参考范式。

admin 审核工作台范式(复用为 AI 产出物复审界面骨架):sellers/common/components/seller-qualification-review-actions.tsx:31-115(approve/reject 双 Drawer 动作区:channelMode 预选 :34-36、rejectionReason 状态 :37、hooks :38-41、非 PENDING 不渲染 :43-46);seller-list/seller-status-cards.tsx(状态卡片徽标按状态着色);h2b-buyers/[id]/page.tsx:85-86(STATUS_BADGE_COLOR[qualification.status] 模式);approvals/approval-list + approval-detail(审批列表+详情路由范式);cooperation-agreements/page.tsx:9-65(按状态筛选的列表页范式)。

块 A:forward-only 参数化把关框架(字段级,本卡核心)

A-1 共享把关工具(新建 backend/src/utils/ai-review-gate/ 或 policies 共享目录,纯函数)——以 qualification-state-machine.ts:26-40 为唯一复用母版泛化。三个参数(消费方各自传入,工具不强绑定任何状态集):

参数类型说明母版对应
transitionsRecord<S, S[]>允许迁移表(forward-only 白名单,反向跳转/自环非法)REVIEW_TRANSITIONS(:29-39)
from / toS当前态/目标态校验器入参(:41-44)
metaKeystring(默认 last_transition)轨迹 metadata keymetadata.last_transition(:24)
assertForwardOnlyTransition({ transitions, from, to })
  → 非法迁移抛 MedusaError(UNEXPECTED_STATE, "Illegal ai review status transition: {from} -> {to}")
  (母版 :41-53 逐行为范式)

buildLastTransitionMeta({ from, to, reason, actor_id, at })
  → { [metaKey]: { from, to, reason, actor_id, at } }
  (形态对齐 affiliate StatusTransitionAuditMeta :28-34;写入由消费方 workflow step 落库)
共享粒度定调(消费 PILOT-DECISIONS.md 决策二原文结论,不翻案)

工具级共享——共享「迁移表工具」(表驱动 forward-only 校验器范式+last_transition 轨迹),状态集各自参数化定义;同一套状态集不强制共用;Saga 补偿范式不并入。对偶术语:状态集级共享(候选甲,已否决——两能力状态语义真实不同,强共用互相牵制)。

A-2 AI 产出物默认生命周期(默认参数化示例,各消费方可覆盖)——「提交→复审→通过/驳回→撤销/重申」默认映射(ai_review_record.status 默认状态集):

状态允许迁移(默认白名单)语义
draft→ submitted / rejected(重申改后重提)产出未生效——不对外可见/不生效
submitted→ reviewing / draft(退回)已送审
reviewing→ confirmed / rejected复审中
confirmed→ withdrawn复审通过、对外生效
rejected→ draft驳回(rejection_reason 终态必填)
withdrawn→ draft撤销下线
stateDiagram-v2 state "draft(未生效,不对外可见)" as D state "submitted(已送审)" as S state "reviewing(复审中)" as R state "confirmed(对外生效)" as C state "rejected(驳回,rejection_reason 必填)" as J state "withdrawn(撤销下线)" as W [*] --> D D --> S: 提交 D --> J: 驳回(重申改后重提) S --> R: 受理复审 S --> D: 退回修改 R --> C: 复审通过(生效点放行) R --> J: 驳回(rejection_reason 终态必填) C --> W: 撤销下线 J --> D: 修改后重申 W --> D: 重申 note right of C: 对外生效点只认 status=confirmed——draft→confirmed 门禁语义窄于状态迁移表(门禁管生效、迁移表管过程)
图1. ai_review_record 默认六态状态机(forward-only 白名单;draft→confirmed「未确认不生效」为全消费方硬约束。来源 §4.1 A-2)

A-3 通用审核实体 ai_review_record(新本地模块 ai-review-record/,字段级):

字段类型约束 / 默认说明
idtextPK,prefix airev—
artifact_typetextnot null,枚举开放:translation_batch / matching_recommendation / digital_employee_reply(首批三值;新 AI 能力经迁移扩展枚举——开放设计,不锁死)产出物类型
artifact_idtextnot null指向消费方产出物行 id(弱关联,同 translation_job 范式)
statustextnot null,默认集 draft/submitted/reviewing/confirmed/rejected/withdrawn default draft默认集;artifact 可定制
reviewed_bytextnullablereviewed_by=req.auth_context.actor_id 落库范式(review-channel-qualification.ts:43-46 + route :25)
reviewed_attimestamptznullable—
rejection_reasontextnullable终态必填守卫(对齐母版 TERMINAL_REASON_STATES 范式,review-channel-qualification.ts:19)
last_transitionjsonbnullable{from, to, reason, actor_id, at} 最新轨迹(完整历史轨迹归 NFR-3.9-03 审计衔接)
metadatajsonbnullableartifact 定制扩展(如 sampled 抽样标记)
created_at / updated_at / deleted_attimestamptz标准三件套medusa 约定

约束与索引:UNIQUE(artifact_type, artifact_id)(一产出物一审核行,生命周期行内演进);INDEX(status)、INDEX(artifact_type, status)、INDEX(reviewed_by)。

erDiagram AI_REVIEW_RECORD { text id PK "prefix airev" text artifact_type "translation_batch | matching_recommendation | digital_employee_reply(开放枚举)" text artifact_id "消费方产出物行 id(弱关联)" text status "默认六态,default draft" text reviewed_by "req.auth_context.actor_id 落库范式" timestamptz reviewed_at text rejection_reason "终态必填守卫" jsonb last_transition "from, to, reason, actor_id, at" jsonb metadata "artifact 定制扩展(如 sampled)" timestamptz created_at "标准三件套" timestamptz updated_at "标准三件套" timestamptz deleted_at "标准三件套" } AI_PATROL_TASK { text id PK "prefix aipat" text scope "ai 话术、展示、推荐逻辑范围" text artifact_type text sample_rule "抽样规则" text frequency "巡检节奏(DEC-5 占位)" text owner } AI_PATROL_RECORD { text id PK text task_id FK "所属巡检任务" text artifact_ref text result "pass | fail | pending" text findings text reviewer timestamptz reviewed_at timestamptz created_at } AI_PATROL_TASK ||--o{ AI_PATROL_RECORD : "巡检执行留痕"
图2. ai_review_record 与 ai_patrol_task / ai_patrol_record 实体关系(字段级;与上方字段表逐项对应。来源 §4.1 A-3/§4.2)

块 B:五类场景挂钩表 + 巡检机制(参数 D-dec3/DEC-5 占位)

#场景(总纲 3.9② 枚举)触发源AI 输出类型(artifact_type)确认主体确认时点留痕字段待定参数
1大额交易撮合推荐导向的交易(FR-3.3-05 合规挂钩原文)matching_recommendation(AI-3.3-05)买方企业确认人 + 平台运营复核分发前(「撮合推荐经人工确认后分发」验收要点原文)reviewed_by/at/rejection_reason + artifact 快照大额阈值 = D-dec3 占位(数值不臆造)
2非标合作协议合作协议/经销协议拟定中的 AI 辅助建议contract_draft_suggestion(开放枚举扩展位)协议双方当事人 + 平台运营协议签署前同上非标场景清单 = D-dec3 占位
3法律文书高风险场景译文(法务/合同/专利,AI-3.5-04 双轨)translation_batch专业复核人(机构合作,外部资源前置)对外生效前(「复核通过方对外生效」原文)同上机构资质=外部资源(X-review-agency,引用不展开)
4财税决策财税类 AI 建议/场景译文/数字员工应答translation_batch / digital_employee_reply财税负责人采纳/生效前同上—
5医疗相关推荐医疗类目推荐/健康功效表述(薬機法关联,FR-3.4-02 合规挂钩)matching_recommendation / translation_batch具备相应资质的复核人发布/生效前同上资质要件=法务确认(引用)

挂钩配置载体:artifact_type × 场景的映射配置(常量表起步,admin 可视化配置列演进项);每场景的阈值/清单/资质参数一律 D-dec3/法务占位——框架设计与参数值解耦(RK-05 mitigation 原文)。

巡检机制(面向公众 AI 话术/展示/推荐逻辑——总纲 3.9⑤):

  • ai_patrol_task:id(prefix aipat) / scope(ai 话术/展示/推荐逻辑范围)/ artifact_type / sample_rule(抽样规则)/ frequency(巡检节奏=基线立项定(DEC-5)占位)/ owner;
  • ai_patrol_record:id / task_id / artifact_ref / result(pass|fail|pending)/ findings / reviewer / reviewed_at / created_at;
  • 完整性口径:巡检记录含「谁在何时按何规则检了何物、结论与发现问题」四要素即视为完整(PRD 验收要点「巡检记录完整」的技术口径);数值(频次/抽样率/合格线)一律 DEC-5 占位。

块 C:消费方显式声明 + 三条边界(禁止两套状态机)

#消费方声明
1AI-3.5-04-dual-track-review.md(P2 双轨复核)译文批次生命周期(含抽样/比对/双轨流程)引用本框架参数化设计——artifact_type=translation_batch,交叉引用不重复设计状态机本体;其比对界面/机构对接属其自身范围
2AI-3.6-03-digital-employee.md(P2 数字员工)成交确认钩子消费本框架门禁(FR-3.6-03 合规挂钩③原文),artifact_type=digital_employee_reply;对话引擎/分身配置属其自身范围
3同波 AI-3.3-05 挂接点契约撮合推荐的把关状态机本体归本卡,AI-3.3-05 TDD 仅消费挂接点契约=①draft→confirmed「未确认不生效」门禁(分发前 status 必须 confirmed)+②留痕范式 reviewed_by/reviewed_at/rejection_reason(reviewed_by=req.auth_context.actor_id 落库范式)+③挂钩表场景 1 行(大额交易阈值 D-dec3)
三条边界(PILOT-DECISIONS.md 决策二 + wave_verdict 结论⑥ delegate 原文)
  1. 共享迁移表工具,不强共用同一套状态集(工具级 vs 状态集级——决策二选定工具级;各消费方 artifact 状态集参数化定义);
  2. 把关框架核心是 draft→confirmed「未确认不生效」门禁,语义窄于状态迁移表(门禁管生效、迁移表管过程,两层不混同);
  3. 入驻审核的 compensation 回滚(reject-seller.ts:64-66,91-93)属 Saga 补偿范式,勿并入本框架(资金/资格类回滚语义与 AI 产出物把关语义不同源;本框架补偿=快照回写仅保障 step 原子性)。

AI 能力接入点(把关层,非 AI 接入层)

本条不调用 LLM、不建 provider 通路、不设计 prompt。三段义务表述:

  1. 与 translation client 通路的关系 = 旁路(把关层与通路层正交):AI 输出(如译文批次)由 AI-3.5-02 通路(backend/src/modules/translation/client.ts)产出后,经本框架门禁(confirmed)方对外生效;本框架不触碰通路代码。关系声明:并行——通路层管「产出」,把关层管「生效」,两层经 (artifact_type, artifact_id) 弱关联衔接;
  2. NFR-3.8-01 强制范式声明:「未配置/故障即跳过不阻断主业务」——本框架关闭时(flag off)AI 产出物回现状直发路径(过渡态),主业务零阻断;框架开启时门禁拦截的是「AI 产出物的对外生效」而非「主业务链路」,两者显式区分。跳过路径测试点:flag off 时产出物直发+主链路成功;
  3. 降级路径:①框架故障(工具抛错异常态)→ 消费方 step 捕获后fail-closed 拒绝生效(把关层故障不得放行未审产出——本框架保护的是合规底线,不适用 fail-open)+ 告警日志;②框架关闭(flag)→ 直发过渡态(显式声明)。

合规挂钩

NFR/C挂钩点本卡动作
NFR-3.9-04(本条本体)「AI 输出 → 人工确认 → 生效」框架+五类场景挂钩+巡检全卡
NFR-3.9-03(审计与可追溯)review 记录入审计:status/reviewed_by/reviewed_at/rejection_reason/last_transition 全留痕实体字段天然承载;审计聚合查询归 AI-3.9-03 范围(交叉引用不重复设计)
NFR-3.9-01(关联)医疗相关推荐场景(挂钩表场景 5)与「要配慮個人情報」接触场景的前置人工把关轻关联:场景 5 行资质要件引用法务确认
总纲 3.9②(五类枚举)大额交易/非标合作协议/法律文书/财税决策/医疗相关推荐逐行挂钩挂钩表
总纲 3.9⑤(面向公众输出)AI 话术/展示/推荐逻辑人工审核+定期巡检巡检机制(节奏 DEC-5 占位)
C6(P2 前瞻,references_only)数字员工对话数据经把关的关联说明:AI-3.6-03 成交确认钩子消费本框架门禁;对话数据本身的 APPI 影响评估归 C6②(引用不展开)显式引用
外部决策点引用规范DEC-3(大额阈值与非标清单)、DEC-5(巡检节奏等数值)——本卡仅引用编号,不内联臆造数值全文执行

Workflow 与 API 契约

review 工作流(业务逻辑必须在 Workflow)——review-ai-artifact:steps 链 load-ai-review-record → assert-forward-only(A-1 工具,守卫在 step 内)→ update-ai-review-record(status+reviewed_by/reviewed_at/rejection_reason 终态必填+last_transition)→ emit ai-review.recorded;补偿=读旧值回写(快照式,非 reject-seller 式业务回滚——边界③)。

sequenceDiagram autonumber participant Ad as admin-panel 复审工作台 participant Api as POST /admin/ai-review-records/:id/decision participant Wf as review-ai-artifact Workflow participant G as assert-forward-only(A-1 工具守卫) participant Db as ai_review_record Ad->>Api: decision=confirm 或 reject(reject 必填 rejection_reason) Api->>Wf: 触发工作流(路由层仅 Zod 校验,不写库) Wf->>Db: load-ai-review-record Wf->>G: assertForwardOnlyTransition(transitions, from, to) alt 非法迁移(反向跳转/自环/confirmed 退回 draft) G-->>Api: MedusaError UNEXPECTED_STATE(ERR_AI_REVIEW_INVALID_TRANSITION 透传) else reject 缺 rejection_reason Api-->>Ad: ERR_AI_REVIEW_REJECTION_REASON_REQUIRED else 合法迁移 Wf->>Db: update-ai-review-record(status + reviewed_by/reviewed_at + last_transition) Wf->>Wf: emit ai-review.recorded Wf-->>Ad: 返回 AiReviewRecordDTO(终态含 reviewed_by/reviewed_at) end
图3. 人工确认决策链路(decision 路由必须经 review-ai-artifact Workflow;forward-only 守卫在 step 内,错误码透传。来源 §4.1/§4.6)
flowchart TB F1["F-1 共享把关工具(forward-only 校验器+meta 构造,1d)"] F2["F-2 ai_review_record 实体+migration(1d)"] F3["F-3 review-ai-artifact 工作流+门禁契约+负向测试(1.5d)"] F4["F-4 admin 复审工作台+巡检页+i18n(2d)"] F5["F-5 巡检实体+执行壳+记录页(1d)"] M["同波 AI-3.3-05 挂接点接线(撮合推荐场景行)"] P2["P2 立项后:AI-3.6-03 成交确认钩子(B 波)→ AI-3.5-04 译文批次生命周期(C 波)"] F1 --> F2 F1 --> F3 F2 --> F3 F2 --> F4 F2 --> F5 F3 --> M M --> P2
图4. 子任务 DAG 与消费方接线(F-2/F-3 依赖 F-1 范式定约,可并行开发;参数回填 D-dec3/DEC-5 决策落地即插即用、零框架改动。来源 §9)

API 契约(admin scope)——路由挂载 backend/src/api/admin/ai-review-records/(Zod 校验中间件 + req.auth_context.actor_id 落库范式);权限域=平台运营(admin scope,vendor/store 无路由——审核为平台侧职责):

#路由方法请求响应错误码
1/admin/ai-review-recordsGETquery:status?、artifact_type?、limit/offset(分页,默认 20/0){ ai_review_records: AiReviewRecordDTO[], count, offset, limit }—
2/admin/ai-review-records/:idGETpath:id(prefix airev){ ai_review_record: AiReviewRecordDTO }(含 last_transition 轨迹)ERR_AI_REVIEW_RECORD_NOT_FOUND
3/admin/ai-review-records/:id/decisionPOSTbody:{ decision: "confirm" | "reject", rejection_reason?: string }(reject 时必填){ ai_review_record: AiReviewRecordDTO }(终态后含 reviewed_by/reviewed_at)ERR_AI_REVIEW_RECORD_NOT_FOUND / ERR_AI_REVIEW_INVALID_TRANSITION(forward-only 守卫透传)/ ERR_AI_REVIEW_REJECTION_REASON_REQUIRED
4/admin/ai-patrol-tasksGETquery:scope?、limit/offset{ ai_patrol_tasks: AiPatrolTaskDTO[], count, offset, limit }—
5/admin/ai-patrol-recordsGETquery:task_id?、result?(pass|fail|pending)、limit/offset{ ai_patrol_records: AiPatrolRecordDTO[], count, offset, limit }—

AiReviewRecordDTO(与实体字段一一对齐,deleted_at 不外露):id / artifact_type / artifact_id / status / reviewed_by? / reviewed_at? / rejection_reason? / last_transition? / metadata? / created_at / updated_at。

  • decision 路由必须经 review-ai-artifact Workflow(路由层仅做 Zod 校验 + workflow 调用,不写库);ERR_AI_REVIEW_INVALID_TRANSITION 由 A-1 守卫 step 抛出透传(如 confirmed→draft 回退、非终态缺 reason);
  • 巡检任务创建/编辑为演进项(首期常量表配置),路由 4/5 先交付只读查询面;
  • 消费方影响:AI-3.5-04 / AI-3.6-03 消费的是服务级契约(「未 confirmed 不生效」门禁+留痕范式),不消费本节 admin 路由。
Workflow状态steps 链补偿事件
review-ai-artifact新增load-ai-review-record → assert-forward-only(守卫在 step 内)→ update-ai-review-record(终态必填 rejection_reason)→ emit快照回写(非 Saga 业务回滚,边界③)ai-review.recorded
run-ai-patrol新增(巡检执行壳,随首个巡检场景实装)list-due-tasks → sample-artifacts → create-ai-patrol-record记录行不回滚(append-only)ai-patrol.recorded
对象变更内容
ai_review_record(新表/新模块)新建10 字段全列 + 1 唯一约束 + 3 索引
ai_patrol_task / ai_patrol_record(新表/同模块)新建见巡检机制(字段级)
四套既有审核状态机无改动PRD 双层口径①:底座已建成不动(seller-profile/approval/cooperation-agreement/channel-qualification 全部维持现状)
消费方产出物表无 schema 改动经 (artifact_type, artifact_id) 弱关联;消费方生效点加 status 检查(代码级,非 schema 级)

迁移与回滚

migration内容兼容性
ai-review-record 模块 migrationCREATE TABLE ai_review_record(全列+唯一约束+索引)新表,无存量
ai-review-record 巡检 migrationCREATE TABLE ai_patrol_task / ai_patrol_record新表,无存量

seed 兼容(pnpm db:reset / db:reset:demo 不破坏):两表均空表参与 reset(seed 不注入审核记录——审核记录是运行时事实非配置);四套既有审核流零改动故 reset 行为不变。

变更回滚路径
框架整体feature flag ai_review_gate.enabled(medusa-config featureFlags 区,沿用 translation: true 同位范式,medusa-config.ts:54-56):关 flag → AI 产出物回现状直发路径(未审产物直接生效——显式声明这是过渡态:C2/DEC 前置的合规要求不因 flag 关闭而消失,恢复开启即重新门禁)
消费方挂接各消费方独立 flag 语义由其自身 TDD 定义(AI-3.3-05/AI-3.5-04/AI-3.6-03),本框架 flag 为总闸
数据回滚ai_review_record 为 append/状态演进表,回滚=保留记录+关 flag(历史留痕不删——NFR-3.9-03 审计完整性优先)
门禁误拦截状态可人工推进(admin 工作台 confirmed 操作即放行);工具正误判经单测矩阵回归

上线顺序建议:F-1→F-2→F-3(框架内串行)∥ F-4/F-5 → 同波 AI-3.3-05 接线 → flag 开启(先观察单 artifact 类型灰度)→ P2 消费方接入。全卡不改动四套既有审核流与任何上游包。

前端改动面与 i18n

前端触点(逐端)

端改动依据
admin-panel新增 AI 产出物复审工作台(待审列表+Drawer approve/reject 动作区——直接套用 seller-qualification-review-actions.tsx:31-115 骨架:rejectionReason 状态/useReject 范式)+ 状态徽标(套 h2b-buyers/[id]/page.tsx:85-86 STATUS_BADGE_COLOR 模式)+ 巡检记录页(列表范式套 cooperation-agreements/page.tsx:9-65)工作台范式表
vendor-panel / influencer / referrer panel无改动AI 产出物审核为平台侧职责(确认主体挂 admin/企业确认人;企业确认人侧交互随 AI-3.3-05 落地定义,本卡不越界)
storefront ×3无改动门禁在后端生效点;未 confirmed 产物本就不对外(负向语义,无前端分支)

i18n 三语言 key 规划(en / zhCN / ja,仅 admin-panel)

改动面仅 admin-panel(AI 复审工作台+巡检页):admin-panel/src/i18n/translations/en.json、zhCN.json、ja.json 同步新增,命名空间 aiReview.*。三前台/vendor i18n 无新增 key(无 UI 改动)。

新增 key用途
aiReview.status.draft / .submitted / .reviewing / .confirmed / .rejected / .withdrawn六态徽标文案(默认集)
aiReview.artifactType.translationBatch / .matchingRecommendation / .digitalEmployeeReply产出物类型列
aiReview.action.approve / .reject / .confirmReasonRequired复审动作(rejection_reason 终态必填的前端校验文案)
aiReview.gate.notEffectiveHint「未确认不生效」提示(非 confirmed 产物置灰说明)
aiReview.patrol.taskList / .frequency / .lastResult巡检页列头

验收与测试

验收标准(PRD 要点原文 + 技术口径)

#验收标准映射
A1五类场景人工确认流程上线且"未确认不生效"可验证(PRD 原文)——框架+挂钩配置上线;负向测试证明非 confirmed 产物不生效把关框架 / 挂钩表
A2巡检记录完整(PRD 原文)——巡检记录四要素(何人/何时/何规则/何物+结论)齐备;节奏数值基线立项定(DEC-5)巡检机制
A3大额阈值决策落地(DEC-3)(PRD 原文)——D-dec3 关闭后参数回填配置生效,框架零改动挂钩表 / 前置决策
A4forward-only 白名单测试:全默认集 6×6 迁移矩阵中合法迁移通过、全部反向跳转与自环拒绝(MedusaError(UNEXPECTED_STATE),母版 :47-52 行为等价)共享把关工具
A5终态留痕测试:rejected/withdrawn 必填 rejection_reason(缺失拒绝);reviewed_by=actor_id、reviewed_at 自动落库实体设计
A6五类场景挂钩配置测试:参数占位态(D-dec3 未回填)下挂钩配置可加载、场景行映射正确;回填后热生效挂钩表
A7交叉引用一致性:AI-3.5-04/AI-3.6-03 TDD 引用本框架的 artifact_type/status 语义与本卡字段级定义一致(评审时人工核对项)消费方声明

测试策略(分层)与 L0 门禁

L0 门禁:本文档十要素章节齐备、关键 code anchor 字符串可 rg 命中;实现期复跑既有回归(四套状态机既有单测:qualification-state-machine.unit.spec.ts、qualification-flow-policy.unit.spec.ts、transition-settlement-statement-status.unit.spec.ts、transition-commission-line-status.unit.spec.ts)。

层范围明细
新增单测(工具)A-1assertForwardOnlyTransition:合法/反向/自环/未知态四分支;buildLastTransitionMeta 字段形态断言(对齐 {from,to,reason,actor_id,at})
新增单测(实体+工作流)A-3review-ai-artifact step 链:正常 confirm/reject(reason 必填)/非法迁移拒绝/补偿快照回写
「未确认不生效」负向测试门禁本体draft/submitted/reviewing/rejected/withdrawn 五态产物在消费方生效点全部被拒(翻译批次不上架、撮合推荐不分发、数字员工应答不放行——三 artifact 各一例);confirmed 后放行(映射 A1)
巡检测试巡检机制巡检记录四要素完整性断言;due task 抽样执行
降级路径测试AI 能力接入点测试点:①flag off → 产出物直发+主链路成功(过渡态声明验证);②框架抛错 → fail-closed 拒绝生效+告警(不放行断言)
集成点跨模块AI-3.3-05 挂接点联调(撮合推荐 confirmed 后方可分发);AI-3.5-04 译文批次生命周期消费联调(P2 立项后)

风险与开放问题

已识别风险

blocker D-dec3 未决:大额阈值与非标场景清单缺失,五类场景参数无法回填
不决策的后果(PRD §2.5 DEC-3 原文):高风险 AI 场景缺统一兜底标准。缓解:框架与参数值解耦(RK-05)——状态机框架/挂钩结构/实体设计全量先行;参数回填=纯配置动作,决策落地即插即用;占位态下挂钩配置可加载(A6 测试点)。
高 flag 关闭过渡态的合规暴露窗口
框架关闭(flag off)时未审产物直接生效——过渡态下合规要求不消失。缓解:显式声明过渡态语义(非长期态);恢复开启即重新门禁;数据回滚保留历史留痕(审计完整性优先),关 flag 期间决策路径可追溯。
中 消费方状态集定制导致门禁语义漂移
各 artifact_type 可覆盖状态集与迁移表(如 translation_batch 增加抽样态),存在「对外生效=confirmed」语义被消费方误改的风险。缓解:三条边界显式落文——门禁语义窄于迁移表且不随覆盖改变;A7 交叉引用一致性核对项;工具级共享下「未 confirmed 不生效」为全消费方硬约束。
低 巡检节奏数值未定导致巡检空转
frequency/sample_rule 为 DEC-5 占位,数值未定档前巡检无法排期。缓解:巡检任务/记录实体结构与执行壳先行(字段占位);验收框架先立、数值后填(模板 §8 口径)。

前提与假设

假设
  • PRD V1.4 双层口径锁死:①审核底座已建成(四套状态机既有);②AI 产出物把关未建(ai_review 全库 0 命中,本 run 复核)——两态不得混同,本卡全部设计作用于②;
  • 锚点复核:qualification-state-machine.ts 实际路径 backend/src/workflows/channel-qualification/policies/(白名单表实际 :29-39、校验器 :41-53)与上游卡内锚点存在路径/行号漂移,均双写标注、实质成立;
  • 本 TDD 为设计文档,不改任何源代码/迁移/配置(执行契约约束)。

开放问题

  • DEC-3:大额交易人工确认阈值与非标合作场景清单的定义时点(PRD §2.5 原文——不决策的后果:高风险 AI 场景缺统一兜底标准)。
  • DEC-5:巡检节奏/抽样率/合格线等数值定档(立项时)。
  • X-review-agency:法律文书场景专业复核机构资质(外部资源,引用不展开)。
  • 挂钩配置可视化(admin 配置面)演进时点——首期常量表起步。

前置决策点

Blocker 二分表(禁止因阻塞点否定整条 TDD)

Blocker类型阻塞什么可并行做什么
blocker D-dec3(大额交易人工确认阈值与非标合作场景清单,PRD §2.5/§8.2-6) 管理层决策 仅阻塞五类场景参数值回填(挂钩表场景 1 阈值、场景 2 清单——占位+D-dec3 标注,RK-05『框架设计与参数值解耦』);不阻塞状态机框架+挂钩结构+实体设计(findings D-dec3 does_not_block 原文:「AI-3.9-04 把关框架状态机设计」) 块 A 框架全量(工具/实体/门禁/工作流)、块 B 挂钩表结构、巡检实体、admin 工作台全部立即开工;参数回填=纯配置动作,决策落地即插即用
blocker 基线立项定(DEC-5)(巡检节奏/抽样率等数值) 管理层决策(立项时) 仅阻塞巡检 frequency/sample_rule 的数值定档 巡检任务/记录实体结构与执行壳先行(字段占位);验收框架先立、数值后填(模板 §8 口径)

依赖与下游消费

  • 内部依赖:TASK-001(TDD-TEMPLATE 十要素骨架,已消费)+ PILOT-DECISIONS.md 决策二(共享粒度定调结论本体——其所有,本卡消费);
  • 下游消费(DEP-3.9-04)(findings blockers 原文:「审核把关框架延伸(AI-3.9-04 P1 先行)」阻塞「AI-3.5-04 复核工作流、AI-3.6-03 成交确认钩子」):AI-3.5-04-dual-track-review.md(C 波)、AI-3.6-03-digital-employee.md(B 波)、同波 AI-3.3-05(挂接点契约);
  • 外部资源:无硬外部依赖(机构资质等场景参数为法务/业务侧输入,占位不阻塞框架)。

待决问题清单

  • 前置决策 D-dec3:大额阈值数值与非标场景清单——决策落地后参数回填配置热生效(框架零改动)。
  • 前置决策 DEC-5:巡检 frequency/sample_rule 数值定档——实体占位先行。
  • 前置决策 flag 开启时点与灰度策略(先观察单 artifact 类型)。
  • 前置决策 挂钩配置可视化(admin 配置面)演进时点。

附录:溯源对照

本文档由 docs/reports/ai-module-prd/tdd/AI-3.9-04-human-review-framework.md(文档版本 v1.0,2026-10-26)转换生成。输出章节与源章节映射如下(Preserved = 保留原文内容;Summarized = 摘要化重组;Inferred = 转换侧推断标注):

本文档章节源章节处理方式
摘要元数据表 + 文首双层口径声明 + §1.1 PRD 溯源 + §1.3 现状三态判定Summarized
关键概念文首口径声明 + §1.2 关联映射 + §4.1/§4.2/§5 术语Summarized
方案设计 · 设计归属与红线声明§4.0(块 A~D 归属表 + AGENTS.md 红线)Preserved
方案设计 · 既有四套审核状态机盘点§2.1 盘点表 + §2.2 admin 工作台范式 + 补充先例(status-transition-factory)Preserved(锚点行号/状态枚举/留痕字段逐字保留)
方案设计 · forward-only 参数化把关框架§4.1 A-1/A-2/A-3(三参数表+工具函数签名+六态默认集+实体字段表)Preserved(字段级全量保留)
方案设计 · 五类场景挂钩表与巡检机制§4.2(挂钩表七列+巡检两实体+完整性口径)Preserved
方案设计 · 消费方声明与三条边界§4.3(三消费方声明+三条边界逐字)Preserved
方案设计 · AI 能力接入点§5(旁路关系+NFR-3.8-01 声明+fail-closed 降级)Preserved
方案设计 · 合规挂钩§6(七项挂钩表)Preserved
方案设计 · Workflow 与 API 契约§4.5 Workflow 汇总 + §4.6 API 契约(5 路由+错误码+DTO)+ §4.4 数据模型汇总Preserved(错误码/路由/DTO 字段逐字保留)
方案设计 · 迁移与回滚§10(migration/seed 兼容/回滚表/上线顺序)Preserved
前端改动面与 i18n§4.7 前端触点 + §4.8 i18n key 规划Preserved
验收与测试§8.1 验收标准 A1-A7 + §8.2 测试策略与 L0 门禁Preserved
风险与开放问题§3.2 缺口清单 + §7 blocker 表 + §5/§10 过渡态声明(风险分级为转换侧判定,与 blocker/DEC 标注对齐)Inferred
前置决策点§7 Blocker 二分表 + 内部依赖与下游消费 + §1.2 决策挂接Preserved
图1 / 图2 / 图3 / 图4§4.1 A-2 默认状态集 / §4.1 A-3+§4.2 实体 / §4.1+§4.6 决策链路 / §9 子任务 DAGInferred(依源表格与文字绘制的可视化视图)
溯源说明

源文档所有锚点在执行 run(run-f8e0c4ddb903)以 rg/sed 逐条复核;上游 findings 卡内锚点与复核实际行号/路径漂移处(qualification-state-machine.ts 路径与行号)已按「来源锚点(复核:实际行号/路径)」双写标注,实质锚点全部验证成立;负证据(ai_review|aiReview|review_record 0 命中)经复核成立。内部流程标识(任务批次号、执行 run 标识、findings 条目引用)属过程元数据,不影响任何契约性内容(实体字段表、API 契约、Workflow step 链、错误码、验收标准均完整保留)。