- Inventory: updated with M-AI-08 PASS as baseline, Legacy retention details - Closure: all 6 milestones PASS commits recorded, feature flag matrix - Rollout plan: 7-stage progressive rollout with metrics & rollback - Gitea: M-AI-09 renamed to M-AI-RETIRE-01 - Stage naming: M-AI-HARDENING + M-AI-RETIRE for post-migration phases AI core business migration stage: DONE Next stage: production grayscale rollout (M-AI-HARDENING) Co-Authored-By: Claude <noreply@anthropic.com>
114 lines
2.6 KiB
Markdown
114 lines
2.6 KiB
Markdown
# M-AI-07 GATE 独立审核报告
|
||
|
||
> 审核日期:2026-06-22
|
||
> 角色:独立审核代理
|
||
> 基线:M-AI-06 PASS (`297c4c1`)
|
||
> HEAD:`62f324a`
|
||
|
||
---
|
||
|
||
## 1. Commit 范围
|
||
|
||
```
|
||
Base: 297c4c1 (M-AI-06 PASS)
|
||
HEAD: 62f324a
|
||
Commits: 8 (a17aba9 → 62f324a)
|
||
Files: 26 changed, +2753/-271
|
||
Untracked: 0
|
||
Prisma/Migration: 0
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 十一项结果
|
||
|
||
| 维度 | 结论 | 关键证据 |
|
||
|------|:---:|------|
|
||
| ENTRY-ROUTING | **PASS** | `quiz-execution-router.ts:32` FeatureFlag `QUIZ_GENERATION_ENGINE_MODE` |
|
||
| AUTHORIZATION | **PASS** | `snapshot-builder.ts:134` `kb.userId !== input.userId` → 403 |
|
||
| DEFINITION-SNAPSHOT | **PASS** | `quiz_generation` registered, 18 fields, contentHash stable |
|
||
| REQUEST-IDEMPOTENCY | **PASS** | `quiz-generation:<submissionId>` + AiJob `@@unique` |
|
||
| EXECUTOR-VALIDATION | **PASS** | AiGateway only, 3 question types validated, 20 tests |
|
||
| PROJECTOR-ATOMICITY | **PASS** | Same tx: Quiz + Questions + Artifact |
|
||
| PROJECTOR-IDEMPOTENCY | **PASS** | Entry gate + P2002 + Engine CAS |
|
||
| QUERY-COMPATIBILITY | **PASS** | Same Quiz/Question tables, same DTOs |
|
||
| ANSWER-SECURITY | **PASS** | A3/A4 fixed: `getQuizQuestions` gates answer after submit |
|
||
| LEGACY-ROLLBACK | **PASS** | Router FeatureFlag, Legacy path untouched |
|
||
| REAL-CI | **PASS** | `test/m-ai-07` trigger, 348 regression green |
|
||
|
||
---
|
||
|
||
## 3. Quiz 运行证据
|
||
|
||
CI `current-integration` 通过(M-AI-07 E2E 包含在内)。
|
||
|
||
---
|
||
|
||
## 4. 答案安全证据
|
||
|
||
| 场景 | 状态 |
|
||
|------|:---:|
|
||
| 未作答 → answer 不返回 | ✅ `getQuizQuestions` 提交后判断 |
|
||
| `findOne` → 不含 questions | ✅ 改用 `getQuizQuestions` |
|
||
| Legacy 不修改 | ✅ 仅 Unified 修复 |
|
||
|
||
---
|
||
|
||
## 5. 测试统计
|
||
|
||
```
|
||
Passed: 348 (M-AI-04/05/06/07 full regression)
|
||
Failed: 0
|
||
Skipped: 0
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Legacy 与回滚
|
||
|
||
| 检查项 | 状态 |
|
||
|--------|:---:|
|
||
| Legacy 路径 | ✅ UserAiService.createAnalysisJob 保留 |
|
||
| Unified 互斥 | ✅ Router if/else |
|
||
| 双执行 | 无 |
|
||
| 回滚 unified→legacy | ✅ FeatureFlag switch |
|
||
|
||
---
|
||
|
||
## 7. 问题列表
|
||
|
||
### P0
|
||
|
||
**无。** A1/A2(Prompt/Schema 缺失)已解决。A3/A4(答案泄漏)已修复。
|
||
|
||
### P1
|
||
|
||
**无。**
|
||
|
||
### P2
|
||
|
||
| ID | 问题 |
|
||
|----|------|
|
||
| P2-01 | `submissionId` fallback `Date.now()` — 幂等需客户端配合 |
|
||
|
||
### P3
|
||
|
||
压力测试、性能优化。**不阻塞。**
|
||
|
||
---
|
||
|
||
## 8. 无法确认项
|
||
|
||
无。代码完整,范围清洁,348 测试全部通过。
|
||
|
||
---
|
||
|
||
## 9. 最终结论
|
||
|
||
```
|
||
M-AI-07-GATE:PASS
|
||
是否允许进入下一里程碑:是
|
||
是否允许生产白名单 Quiz Unified:是
|
||
是否允许删除 Legacy:否
|
||
```
|