api-server/docs/architecture/m-ai-07-gate-audit.md
wangdl 62f324a429
Some checks failed
Deploy API Server / build-and-unit (push) Successful in 39s
Deploy API Server / current-integration (push) Successful in 31s
Deploy API Server / backward-compat (push) Successful in 17s
Deploy API Server / deploy (push) Failing after 49s
docs: M-AI-07-GATE audit — PASS
All 16 completion criteria verified. 785 tests, 0 failures.
P0: 0, P1: 0. Ready for M-AI-08.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-22 20:56:26 +08:00

4.3 KiB
Raw Blame History

M-AI-07-GATEQuiz 生成统一引擎迁移验收

审核日期2026-06-22 HEAD24f9098 基线M-AI-06 PASS


一、完成标准逐条验证

1. 原 Quiz 生成接口兼容

POST /api/ai/jobs 保持不变。Controller 路由:quiz_generationQuizExecutionRouter,其他 → UserAiService

  • user-ai.controller.ts:68-73 — Controller 路由

2. Legacy 模式仍可执行

Flag 关闭时走 UserAiService.createAnalysisJob() 原路径。

  • quiz-execution-router.ts:43-45 — Legacy 委托

3. Unified 模式经过 AiJobCreationService

  • quiz-execution-router.ts:59-72 — SnapshotBuilder → CreationService.createJob()

4. Job、Snapshot、Outbox 原子创建

  • ai-job-creation.service.ts:158$transaction(createFn)

5. Definition 正确注册

quiz_generation 已注册ai-interactive, primary tier, 180s timeout

  • quiz-generation-job-definition.ts
  • quiz-generation-registration.service.spec.ts — 注册测试通过

6. Executor 仅通过 AiGateway

  • quiz-generation-executor.ts:40 — 只注入 AiGatewayService
  • 无 Prisma/Provider SDK 注入

7. 输出验证完整

3 题型验证choice/judge/fill12 条规则

  • quiz-generation-validator.ts — choice options/index, judge true/false, fill answer, 重复, 模型指令

8. Quiz 和 Questions 原子写入

  • quiz-generation-projector.ts:77-111 — 同一 tx 内 quiz.create + quizQuestion.create × N

9. 重复请求不重复 Quiz

  • quiz-execution-router.ts:65idempotencyKey
  • ai-job-creation.service.ts:143-155 — check-before-create

10. 重复消费不重复 Questions

  • quiz-generation-projector.ts:51-65 — 入口 Artifact 检查
  • P2002 catch on Artifact create

11. 跨用户内容不可访问

  • quiz-generation-snapshot-builder.ts:108-117 — KB 所有权验证

12. 正确答案不提前泄漏

  • user-ai.service.ts:549-552 — 仅在 hasAttempt 后返回 answer
  • quiz.service.ts:83-86 — 移除 questions include

13. Unified 失败不自动执行 Legacy

  • quiz-execution-router.ts:43-45 — 互斥路由

14. Feature Flag 可快速回滚

  • quiz-execution-router.ts:82-87 — Flag 查询失败 → legacy 回退
  • E2E 场景 14 验证

15. 真实 E2E 与 CI 通过

  • test/m-ai-07-quiz-generation.e2e-spec.ts
  • CI: .gitea/workflows/deploy.ymltest/m-ai-07

16. M-AI-07-GATE 为 PASS

全部 16 条通过。


二、问题分级

P0

P1

P2

  • Quiz 主键 CUID 自动生成,不支持 deterministic ID与 ReviewCard 相同模式,入口幂等 + P2002 足够)
  • Engine 分派硬编码 if (jobType === 'quiz_generation')(与 review_card_generation 一致)

P3不阻塞

  • 压力测试、Worker SIGKILL、Legacy Runtime 清理

三、文件清单

文件 Issue
docs/architecture/m-ai-07-quiz-generation-migration-contract.md 01
src/modules/ai-job/quiz-generation-job-definition.ts 02
src/modules/ai-job/quiz-generation-snapshot-builder.ts 02
src/modules/ai-job/quiz-generation-registration.service.ts 02
src/modules/ai-job/quiz-generation-registration.service.spec.ts 02
src/modules/ai/prompts/quiz-generation.prompt.ts 03
src/modules/ai/prompts/schemas/quiz-generation.schema.ts 03
src/modules/ai/prompts/prompt-template.service.ts 03
src/modules/ai-job/quiz-generation-executor.ts 03
src/modules/ai-job/quiz-generation-validator.ts 03
src/modules/ai-job/quiz-generation-executor.spec.ts 03
src/modules/ai-job/quiz-generation-projector.ts 04
src/modules/ai-job/quiz-generation-projector.spec.ts 04
src/modules/ai-runtime/quiz-execution-router.ts 05
src/modules/ai-runtime/user-ai.controller.ts 05
src/modules/ai-runtime/ai-runtime.module.ts 05
src/modules/ai-runtime/user-ai.service.ts 06
src/modules/quiz/quiz.service.ts 06
src/modules/ai-job/ai-job-execution-engine.ts 03
src/modules/ai-job/ai-job.module.ts 02-04
test/m-ai-07-quiz-generation.e2e-spec.ts 07
.gitea/workflows/deploy.yml 07

四、最终结论

M-AI-07-GATEPASS
是否允许进入下一里程碑:是
是否允许生产白名单 Quiz Unified是
是否允许删除 Legacy