摘要
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 落地后纯配置回填,框架零改动。
rg -in "ai_review|aiReview|review_record" backend/admin 0 命中——面向 AI 产出物的通用把关框架从零新建关键概念
MedusaError(UNEXPECTED_STATE)——唯一复用母版为 channel-qualification 六态状态机(qualification-state-machine.ts:29-39 REVIEW_TRANSITIONS + :41-53 校验器)。draft→confirmed——对外生效点(译文批次上架/撮合推荐分发/数字员工应答放行/成交确认)只认 status === "confirmed"。语义窄于状态迁移表(门禁只管「生效与否」,迁移表管「过程合法性」),各 artifact_type 可覆盖状态集但生效语义不随覆盖改变。ai-review-record/):artifact_type 开放枚举首批三值 translation_batch / matching_recommendation / digital_employee_reply;(artifact_type, artifact_id) 唯一——一产出物一审核行,生命周期行内演进。ai_patrol_task(scope/sample_rule/frequency——节奏 DEC-5 占位)+ ai_patrol_record(result: pass|fail|pending);记录四要素(谁在何时按何规则检了何物、结论与发现问题)齐备即视为完整。方案设计
设计归属总览与红线声明
| 块 | 归属 | 内容 |
|---|---|---|
| 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——补偿范式,勿混入把关框架) | 边界③ |
- 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 / REJECTED | reviewed_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-38 | status 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 产出物类比:审核轴+生效轴) |
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 为唯一复用母版泛化。三个参数(消费方各自传入,工具不强绑定任何状态集):
| 参数 | 类型 | 说明 | 母版对应 |
|---|---|---|---|
transitions | Record<S, S[]> | 允许迁移表(forward-only 白名单,反向跳转/自环非法) | REVIEW_TRANSITIONS(:29-39) |
from / to | S | 当前态/目标态 | 校验器入参(:41-44) |
metaKey | string(默认 last_transition) | 轨迹 metadata key | metadata.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 落库)
工具级共享——共享「迁移表工具」(表驱动 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 | 撤销下线 |
A-3 通用审核实体 ai_review_record(新本地模块 ai-review-record/,字段级):
| 字段 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|
id | text | PK,prefix airev | — |
artifact_type | text | not null,枚举开放:translation_batch / matching_recommendation / digital_employee_reply(首批三值;新 AI 能力经迁移扩展枚举——开放设计,不锁死) | 产出物类型 |
artifact_id | text | not null | 指向消费方产出物行 id(弱关联,同 translation_job 范式) |
status | text | not null,默认集 draft/submitted/reviewing/confirmed/rejected/withdrawn default draft | 默认集;artifact 可定制 |
reviewed_by | text | nullable | reviewed_by=req.auth_context.actor_id 落库范式(review-channel-qualification.ts:43-46 + route :25) |
reviewed_at | timestamptz | nullable | — |
rejection_reason | text | nullable | 终态必填守卫(对齐母版 TERMINAL_REASON_STATES 范式,review-channel-qualification.ts:19) |
last_transition | jsonb | nullable | {from, to, reason, actor_id, at} 最新轨迹(完整历史轨迹归 NFR-3.9-03 审计衔接) |
metadata | jsonb | nullable | artifact 定制扩展(如 sampled 抽样标记) |
created_at / updated_at / deleted_at | timestamptz | 标准三件套 | medusa 约定 |
约束与索引:UNIQUE(artifact_type, artifact_id)(一产出物一审核行,生命周期行内演进);INDEX(status)、INDEX(artifact_type, status)、INDEX(reviewed_by)。
块 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:消费方显式声明 + 三条边界(禁止两套状态机)
| # | 消费方 | 声明 |
|---|---|---|
| 1 | AI-3.5-04-dual-track-review.md(P2 双轨复核) | 译文批次生命周期(含抽样/比对/双轨流程)引用本框架参数化设计——artifact_type=translation_batch,交叉引用不重复设计状态机本体;其比对界面/机构对接属其自身范围 |
| 2 | AI-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) |
- 共享迁移表工具,不强共用同一套状态集(工具级 vs 状态集级——决策二选定工具级;各消费方 artifact 状态集参数化定义);
- 把关框架核心是 draft→confirmed「未确认不生效」门禁,语义窄于状态迁移表(门禁管生效、迁移表管过程,两层不混同);
- 入驻审核的 compensation 回滚(reject-seller.ts:64-66,91-93)属 Saga 补偿范式,勿并入本框架(资金/资格类回滚语义与 AI 产出物把关语义不同源;本框架补偿=快照回写仅保障 step 原子性)。
AI 能力接入点(把关层,非 AI 接入层)
本条不调用 LLM、不建 provider 通路、不设计 prompt。三段义务表述:
- 与 translation client 通路的关系 = 旁路(把关层与通路层正交):AI 输出(如译文批次)由 AI-3.5-02 通路(
backend/src/modules/translation/client.ts)产出后,经本框架门禁(confirmed)方对外生效;本框架不触碰通路代码。关系声明:并行——通路层管「产出」,把关层管「生效」,两层经 (artifact_type, artifact_id) 弱关联衔接; - NFR-3.8-01 强制范式声明:「未配置/故障即跳过不阻断主业务」——本框架关闭时(flag off)AI 产出物回现状直发路径(过渡态),主业务零阻断;框架开启时门禁拦截的是「AI 产出物的对外生效」而非「主业务链路」,两者显式区分。跳过路径测试点:flag off 时产出物直发+主链路成功;
- 降级路径:①框架故障(工具抛错异常态)→ 消费方 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 式业务回滚——边界③)。
API 契约(admin scope)——路由挂载 backend/src/api/admin/ai-review-records/(Zod 校验中间件 + req.auth_context.actor_id 落库范式);权限域=平台运营(admin scope,vendor/store 无路由——审核为平台侧职责):
| # | 路由 | 方法 | 请求 | 响应 | 错误码 |
|---|---|---|---|---|---|
| 1 | /admin/ai-review-records | GET | query:status?、artifact_type?、limit/offset(分页,默认 20/0) | { ai_review_records: AiReviewRecordDTO[], count, offset, limit } | — |
| 2 | /admin/ai-review-records/:id | GET | path:id(prefix airev) | { ai_review_record: AiReviewRecordDTO }(含 last_transition 轨迹) | ERR_AI_REVIEW_RECORD_NOT_FOUND |
| 3 | /admin/ai-review-records/:id/decision | POST | body:{ 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-tasks | GET | query:scope?、limit/offset | { ai_patrol_tasks: AiPatrolTaskDTO[], count, offset, limit } | — |
| 5 | /admin/ai-patrol-records | GET | query: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-artifactWorkflow(路由层仅做 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 模块 migration | CREATE TABLE ai_review_record(全列+唯一约束+索引) | 新表,无存量 |
ai-review-record 巡检 migration | CREATE 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 关闭后参数回填配置生效,框架零改动 | 挂钩表 / 前置决策 |
| A4 | forward-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-1 | assertForwardOnlyTransition:合法/反向/自环/未知态四分支;buildLastTransitionMeta 字段形态断言(对齐 {from,to,reason,actor_id,at}) |
| 新增单测(实体+工作流) | A-3 | review-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 立项后) |
风险与开放问题
已识别风险
前提与假设
- 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 子任务 DAG | Inferred(依源表格与文字绘制的可视化视图) |
源文档所有锚点在执行 run(run-f8e0c4ddb903)以 rg/sed 逐条复核;上游 findings 卡内锚点与复核实际行号/路径漂移处(qualification-state-machine.ts 路径与行号)已按「来源锚点(复核:实际行号/路径)」双写标注,实质锚点全部验证成立;负证据(ai_review|aiReview|review_record 0 命中)经复核成立。内部流程标识(任务批次号、执行 run 标识、findings 条目引用)属过程元数据,不影响任何契约性内容(实体字段表、API 契约、Workflow step 链、错误码、验收标准均完整保留)。