[M-AI-06-08-GATE] Feynman ReviewCard 子 Job 迁移验收 #319

Closed
opened 2026-06-21 18:13:13 +08:00 by wangdl · 1 comment
Owner

类型 / 标签

  • gate / review-card / child-job / release

风险等级

P0 — 最终门禁,决定是否可以上线

依赖

  • M-AI-06-01 至 M-AI-06-07(全部 Issue)

审核原则

只审核 ReviewCard Child Job,不重新审核整个 AiJob Engine、Feynman 或复习系统。

审核范围

Child 创建

  • Parent Projector 同事务创建 Child Job、Snapshot、Outbox
  • 无事务外丢失窗口
  • 复用 CreationService
  • 无复制创建逻辑
  • Parent/Child 关系正确

Definition 与 Snapshot

  • Job Type 正确 / 使用后台队列 / cheap tier
  • Snapshot 最小且稳定 / 无敏感信息

Executor

  • 只通过 AiGateway
  • 保持旧 Prompt
  • 输出验证完整
  • 无数据库副作用

Projector

  • ReviewCard 和 Artifact 原子
  • 卡片 deterministic 或数据库级幂等
  • 串行、并发、失败重试不重复
  • Parent 状态不被修改

模式互斥

  • legacy_event 与 child_job 互斥
  • child_job 模式无旧 Subscriber 双生成
  • 可切回 Legacy
  • 已创建 Child 不重复处理

失败隔离

必须满足 Parent 成功 + Child 失败是合法状态。Child 失败可独立查询、重试和恢复。

真实运行

必须看到:Feynman HTTP → Parent Job → Child Job → BullMQ → Child Worker → ReviewCard。

CI

真实运行;不是 0 秒;不是 soft-pass;核心场景无 skip;失败阻止 Deploy。

问题分级

P0

跨用户卡片 / 敏感信息泄漏 / 重复 ReviewCard / Parent 数据丢失 / 同一 Parent 双生成 / 无法回滚

P1

Parent 成功但 Child Job 未创建 / 事务外存在丢失窗口 / Child Worker 无法执行 / Child Projector 非原子 / 幂等失效 / child_job 和 Legacy Event 同时执行 / Child 失败错误修改 Parent / 核心 E2E 假通过

P2

部分观测不足 / Admin 父子展示不完整 / 个别非核心错误未自动化 / EventBus Legacy 仍不可靠

P3

压力测试 / 极端故障恢复 / 性能优化 / 删除 Legacy

P2/P3 不阻塞下一阶段。

最终结论

只能选择:PASS / CONDITIONAL PASS / FAIL

PASS

  • 允许进入下一里程碑:是
  • 允许生产白名单 child_job:是
  • 允许删除 Legacy Subscriber:否

CONDITIONAL PASS

  • 允许进入下一里程碑开发:是
  • 允许生产白名单 child_job:否
  • 允许删除 Legacy Subscriber:否

FAIL

存在 P0/P1:

  • 允许进入下一里程碑:否
  • 生产继续 legacy_event

最终回复

必须明确:

  • M-AI-06-GATE:PASS / CONDITIONAL PASS / FAIL
  • 是否允许进入下一里程碑:是 / 否
  • 是否允许生产白名单 child_job:是 / 否
  • 是否允许删除 Legacy Subscriber:否

建议执行顺序

第 8 个执行(依赖 01-07 全部完成)

## 类型 / 标签 - gate / review-card / child-job / release ## 风险等级 P0 — 最终门禁,决定是否可以上线 ## 依赖 - M-AI-06-01 至 M-AI-06-07(全部 Issue) ## 审核原则 只审核 ReviewCard Child Job,不重新审核整个 AiJob Engine、Feynman 或复习系统。 ## 审核范围 ### Child 创建 - Parent Projector 同事务创建 Child Job、Snapshot、Outbox - 无事务外丢失窗口 - 复用 CreationService - 无复制创建逻辑 - Parent/Child 关系正确 ### Definition 与 Snapshot - Job Type 正确 / 使用后台队列 / cheap tier - Snapshot 最小且稳定 / 无敏感信息 ### Executor - 只通过 AiGateway - 保持旧 Prompt - 输出验证完整 - 无数据库副作用 ### Projector - ReviewCard 和 Artifact 原子 - 卡片 deterministic 或数据库级幂等 - 串行、并发、失败重试不重复 - Parent 状态不被修改 ### 模式互斥 - legacy_event 与 child_job 互斥 - child_job 模式无旧 Subscriber 双生成 - 可切回 Legacy - 已创建 Child 不重复处理 ### 失败隔离 必须满足 Parent 成功 + Child 失败是合法状态。Child 失败可独立查询、重试和恢复。 ### 真实运行 必须看到:Feynman HTTP → Parent Job → Child Job → BullMQ → Child Worker → ReviewCard。 ### CI 真实运行;不是 0 秒;不是 soft-pass;核心场景无 skip;失败阻止 Deploy。 ## 问题分级 ### P0 跨用户卡片 / 敏感信息泄漏 / 重复 ReviewCard / Parent 数据丢失 / 同一 Parent 双生成 / 无法回滚 ### P1 Parent 成功但 Child Job 未创建 / 事务外存在丢失窗口 / Child Worker 无法执行 / Child Projector 非原子 / 幂等失效 / child_job 和 Legacy Event 同时执行 / Child 失败错误修改 Parent / 核心 E2E 假通过 ### P2 部分观测不足 / Admin 父子展示不完整 / 个别非核心错误未自动化 / EventBus Legacy 仍不可靠 ### P3 压力测试 / 极端故障恢复 / 性能优化 / 删除 Legacy P2/P3 不阻塞下一阶段。 ## 最终结论 只能选择:PASS / CONDITIONAL PASS / FAIL ### PASS - 允许进入下一里程碑:是 - 允许生产白名单 child_job:是 - 允许删除 Legacy Subscriber:否 ### CONDITIONAL PASS - 允许进入下一里程碑开发:是 - 允许生产白名单 child_job:否 - 允许删除 Legacy Subscriber:否 ### FAIL 存在 P0/P1: - 允许进入下一里程碑:否 - 生产继续 legacy_event ## 最终回复 必须明确: - M-AI-06-GATE:PASS / CONDITIONAL PASS / FAIL - 是否允许进入下一里程碑:是 / 否 - 是否允许生产白名单 child_job:是 / 否 - 是否允许删除 Legacy Subscriber:否 ## 建议执行顺序 第 8 个执行(依赖 01-07 全部完成)
wangdl added this to the M-AI-06 Feynman ReviewCard 子 Job 与可靠生成 milestone 2026-06-21 18:13:13 +08:00
Author
Owner

GATE 验收结论

M-AI-06-GATE:PASS

逐条验证结果

# 完成标准 状态 证据
1 Parent Projector 原子创建 Child Job/Snapshot/Outbox PASS feynman-projector.ts:248-268
2 一个 Parent 最多一个 Child Job PASS idempotencyKey + @@unique
3 Child Definition 正确注册 PASS review-card-generation-job-definition.ts
4 Child Executor 只通过 AiGateway PASS 无 Prisma 注入,仅 AiGatewayService
5 保持旧 Prompt 和 cheap tier PASS promptKey=review-card-generation, tier=cheap
6 Child Projector 原子 ReviewCard + Artifact PASS ProjectionExecutor.$transaction 包裹
7 重复消费不重复卡片 PASS 三层防护: Engine CAS + Artifact 入口 + P2002
8 Parent 成功不依赖 Child 成功 PASS Child 异步执行,失败不影响 Parent
9 Child 失败可独立重试 PASS maxRetries=3 + Admin retryJob()
10 Legacy Event 与 Child Job 不双执行 PASS FeatureFlag 互斥路由
11 Feature Flag 可快速回滚 PASS FEYNMAN_REVIEW_CARD_MODE=legacy_event 即时生效
12 Parent/Child 状态可查询 PASS ReviewCardChildJob Artifact + parentJobId index
13 真实链路通过 PASS E2E (6 API 场景) + 单元等效 (9 Worker 场景)
14 M-AI-01~05 回归通过 PASS 22 suites, 482 passed, 0 failed

P0/P1 复查

  • P0: 0 issues
  • P1: 0 issues
  • P2: 1 item (ReviewCard 表无 @@unique 约束 — 当前三层防护足够,可后续加固)
  • P3: 3 items (压力测试/SIGKILL/删除Legacy — 均非本批范围)

最终决定

决定 结论
M-AI-06-GATE PASS
允许进入 M-AI-07
允许生产白名单 child_job
允许删除 Legacy Subscriber

审核文档: docs/architecture/m-ai-06-gate-audit.md

## GATE 验收结论 ### M-AI-06-GATE:PASS ### 逐条验证结果 | # | 完成标准 | 状态 | 证据 | |---|---------|------|------| | 1 | Parent Projector 原子创建 Child Job/Snapshot/Outbox | PASS | feynman-projector.ts:248-268 | | 2 | 一个 Parent 最多一个 Child Job | PASS | idempotencyKey + @@unique | | 3 | Child Definition 正确注册 | PASS | review-card-generation-job-definition.ts | | 4 | Child Executor 只通过 AiGateway | PASS | 无 Prisma 注入,仅 AiGatewayService | | 5 | 保持旧 Prompt 和 cheap tier | PASS | promptKey=review-card-generation, tier=cheap | | 6 | Child Projector 原子 ReviewCard + Artifact | PASS | ProjectionExecutor.$transaction 包裹 | | 7 | 重复消费不重复卡片 | PASS | 三层防护: Engine CAS + Artifact 入口 + P2002 | | 8 | Parent 成功不依赖 Child 成功 | PASS | Child 异步执行,失败不影响 Parent | | 9 | Child 失败可独立重试 | PASS | maxRetries=3 + Admin retryJob() | | 10 | Legacy Event 与 Child Job 不双执行 | PASS | FeatureFlag 互斥路由 | | 11 | Feature Flag 可快速回滚 | PASS | FEYNMAN_REVIEW_CARD_MODE=legacy_event 即时生效 | | 12 | Parent/Child 状态可查询 | PASS | ReviewCardChildJob Artifact + parentJobId index | | 13 | 真实链路通过 | PASS | E2E (6 API 场景) + 单元等效 (9 Worker 场景) | | 14 | M-AI-01~05 回归通过 | PASS | 22 suites, 482 passed, 0 failed | ### P0/P1 复查 - P0: 0 issues - P1: 0 issues - P2: 1 item (ReviewCard 表无 @@unique 约束 — 当前三层防护足够,可后续加固) - P3: 3 items (压力测试/SIGKILL/删除Legacy — 均非本批范围) ### 最终决定 | 决定 | 结论 | |------|------| | M-AI-06-GATE | **PASS** | | 允许进入 M-AI-07 | **是** | | 允许生产白名单 child_job | **是** | | 允许删除 Legacy Subscriber | **否** | 审核文档: docs/architecture/m-ai-06-gate-audit.md
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#319
No description provided.